import React, { useEffect, useState } from 'react'; import { X } from 'lucide-react'; import { useCookieConsent } from '../contexts/CookieConsentContext'; import { useClickOutside } from '../hooks/useClickOutside'; const CookiePreferencesModal: React.FC = () => { const { consent, updateConsent } = useCookieConsent(); const [isOpen, setIsOpen] = useState(false); const [analyticsChecked, setAnalyticsChecked] = useState(false); const [marketingChecked, setMarketingChecked] = useState(false); const [preferencesChecked, setPreferencesChecked] = useState(false); const modalRef = React.useRef(null); useClickOutside(modalRef, () => { if (isOpen) { setIsOpen(false); } }); useEffect(() => { if (consent) { setAnalyticsChecked(consent.categories.analytics); setMarketingChecked(consent.categories.marketing); setPreferencesChecked(consent.categories.preferences); } }, [consent]); useEffect(() => { const handleOpenPreferences = () => { setIsOpen(true); }; window.addEventListener('open-cookie-preferences', handleOpenPreferences); return () => { window.removeEventListener('open-cookie-preferences', handleOpenPreferences); }; }, []); useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [isOpen]); if (!isOpen) { return null; } const handleAcceptAll = async () => { await updateConsent({ analytics: true, marketing: true, preferences: true, }); setIsOpen(false); }; const handleRejectNonEssential = async () => { await updateConsent({ analytics: false, marketing: false, preferences: false, }); setIsOpen(false); }; const handleSaveSelection = async () => { await updateConsent({ analytics: analyticsChecked, marketing: marketingChecked, preferences: preferencesChecked, }); setIsOpen(false); }; return (
{/* Backdrop */}
setIsOpen(false)} aria-hidden="true" /> {/* Modal */}
{/* Close button */}
{/* Header */}
Privacy Suite

Cookie Preferences

Manage your cookie preferences. You can enable or disable different types of cookies below.

{/* Cookie Categories */}

Strictly necessary

Essential for security, authentication, and core booking flows. These are always enabled.

setAnalyticsChecked(e.target.checked)} />
setMarketingChecked(e.target.checked)} />
setPreferencesChecked(e.target.checked)} />
{/* Action Buttons */}
); }; export default CookiePreferencesModal;