"use client" import { useLayoutEffect } from "react" import { Dialog, DialogTrigger, Modal, ModalOverlay, } from "react-aria-components" import { useWatch } from "react-hook-form" import { useIntl } from "react-intl" import useSetOverflowVisibleOnRA from "@scandic-hotels/common/hooks/useSetOverflowVisibleOnRA" import { Button } from "@scandic-hotels/design-system/Button" import Checkbox from "@scandic-hotels/design-system/Form/Checkbox" import { SelectPaymentMethod } from "@scandic-hotels/design-system/Form/SelectPaymentMethod" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { Typography } from "@scandic-hotels/design-system/Typography" import { trackUpdatePaymentMethod } from "@scandic-hotels/tracking/payment" import styles from "./guarantee.module.css" import type { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod" import type { CreditCard } from "@scandic-hotels/trpc/types/user" interface GuaranteeProps { savedCreditCards: CreditCard[] | null } export default function Guarantee({ savedCreditCards }: GuaranteeProps) { const intl = useIntl() const guarantee = useWatch({ name: "guarantee" }) return (
{intl.formatMessage({ id: "enterDetails.confirmBooking.guaranteeLabel", defaultMessage: "I may arrive later than 18:00 and want to guarantee my booking.", })} {({ close }) => (

{intl.formatMessage({ id: "enterDetails.confirmBooking.guaranteeInfoModalTitle", defaultMessage: "Guarantee for late arrival", })}

{intl.formatMessage({ id: "enterDetails.confirmBooking.guaranteeInfoModalDescription", defaultMessage: "When guaranteeing your booking with a credit card, we will hold the booking until 07:00 the day after check-in.", })}

{intl.formatMessage({ id: "enterDetails.confirmBooking.guaranteeInfoModalNoShowInfo", defaultMessage: "In case of a no-show, your credit card will be charged for the first night.", })}

)}
{guarantee && ( ({ ...card, cardType: card.cardType as PaymentMethodEnum, }))} onChange={(method) => { trackUpdatePaymentMethod({ method }) }} formName={"paymentMethod"} /> )}
) } function RestoreOverflow() { const setOverflowVisible = useSetOverflowVisibleOnRA() useLayoutEffect(() => { setOverflowVisible(true) }, [setOverflowVisible]) return null }