"use client" import { AnimatePresence, motion } from "motion/react" import { useCallback, useEffect, useState } from "react" import { Dialog, Modal, ModalOverlay } from "react-aria-components" import { useIntl } from "react-intl" import { Button } from "@scandic-hotels/design-system/Button" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import ScandicLogoIcon from "@scandic-hotels/design-system/Icons/ScandicLogoIcon" import { Typography } from "@scandic-hotels/design-system/Typography" import { useUpdateProfilingConsent } from "@/hooks/useUpdateProfilingConsent" import { profilingConsentOpenEvent, readDismissed, setDismissed as persistDismissed, } from "@/utils/profilingConsent" import { trackConsentAction } from "@/utils/tracking/profilingConsent" import ProfilingConsentAccordion from "../Accordion" import { GetMainIconByCSIdentifier } from "../utils" import BenefitCards from "./BenefitCards" import styles from "./profilingConsentModal.module.css" import type { ProfilingConsentModal as ProfilingConsentModalType } from "@scandic-hotels/trpc/types/profilingConsent" type ProfilingConsentModalProps = { memberKey?: string content: ProfilingConsentModalType iconIdentifier: string readOnly?: boolean } const MotionModal = motion.create(Modal) export default function ProfilingConsentModal({ memberKey, content, iconIdentifier, readOnly = false, }: ProfilingConsentModalProps) { const intl = useIntl() const [open, setOpen] = useState(false) const { initiateUpdateConsent, isLoading, isSuccess } = useUpdateProfilingConsent() const [activeChoice, setActiveChoice] = useState(null) const handleClick = (consent: boolean) => { setActiveChoice(consent) initiateUpdateConsent(consent) } useEffect(() => { if (!memberKey) return setOpen(!readDismissed(memberKey)) }, [memberKey]) const onClose = useCallback(() => { if (memberKey) { persistDismissed(memberKey) } setOpen(false) }, [memberKey]) useEffect(() => { const handleOpen: EventListener = () => setOpen(true) window.addEventListener(profilingConsentOpenEvent, handleOpen) return () => { window.removeEventListener(profilingConsentOpenEvent, handleOpen) } }, []) useEffect(() => { if (isSuccess) onClose() }, [isSuccess, onClose]) if (!memberKey && !readOnly) return null return ( { if (!isOpen) { onClose() } }} isKeyboardDismissDisabled isDismissable={false} > {open && (

{content.header}

{content.sub_header}

{intl.formatMessage({ id: "profilingConsent.personalization&privacy", defaultMessage: "Personalization & privacy", })}

{intl.formatMessage({ id: "profilingConsent.byAcceptingThisIConsent", defaultMessage: "By accepting this I consent to Scandic using my information to give me even more personalized travel inspiration and offers from Scandic and trusted Scandic Friends partners. This means Scandic may use information about my interactions with Scandic Friends partners, and share details of my interactions with Scandic with those partners, to make the experience even more relevant to me.", })}

{!readOnly && ( )}
)}
) }