"use client" import { useSearchParams } from "next/navigation" import { useEffect, useRef } from "react" import { useIntl } from "react-intl" import { useRateSelectionStore } from "@/stores/rate-selection" import { CheckIcon, InfoCircleIcon } from "@/components/Icons" import Modal from "@/components/Modal" import Button from "@/components/TempDesignSystem/Button" import Label from "@/components/TempDesignSystem/Form/Label" import Body from "@/components/TempDesignSystem/Text/Body" import Caption from "@/components/TempDesignSystem/Text/Caption" import PriceTable from "./PriceList" import styles from "./flexibilityOption.module.css" import type { FlexibilityOptionProps } from "@/types/components/hotelReservation/selectRate/flexibilityOption" export default function FlexibilityOption({ product, name, paymentTerm, priceInformation, roomTypeCode, petRoomPackage, roomListIndex, }: FlexibilityOptionProps) { const intl = useIntl() const inputElementRef = useRef(null) const { selectRate, selectedRates } = useRateSelectionStore() const searchParams = useSearchParams() // When entering the page with a room and rate selection already in the URL we // want to preselect the selection. This happens e.g. when you do a selection, // go to the enter details page and then want to change the room. useEffect(() => { const ratecodeSearchParam = searchParams.get( `room[${roomListIndex}].ratecode` ) const roomtypeSearchParam = searchParams.get( `room[${roomListIndex}].roomtype` ) // If this is not the room and rate we want to preselect, abort if ( !product || ratecodeSearchParam !== product.productType.public.rateCode || roomtypeSearchParam !== roomTypeCode ) { return } // Check if there's already a selection for this room index const existingSelection = selectedRates[roomListIndex] if (existingSelection) return selectRate(roomListIndex, { publicRateCode: product.productType.public.rateCode, roomTypeCode: roomTypeCode, name: name, paymentTerm: paymentTerm, }) if (inputElementRef.current) { inputElementRef.current.checked = true } }, [ searchParams, roomListIndex, product, roomTypeCode, name, paymentTerm, selectedRates, selectRate, ]) if (!product) { return (
{name} ({paymentTerm})
) } const { public: publicPrice, member: memberPrice } = product.productType const onClick: React.MouseEventHandler = (e) => { if ( selectedRates[roomListIndex]?.publicRateCode === publicPrice.rateCode && selectedRates[roomListIndex]?.roomTypeCode === roomTypeCode ) { if (e.currentTarget?.checked) e.currentTarget.checked = false selectRate(roomListIndex, undefined) } else { selectRate(roomListIndex, { publicRateCode: publicPrice.rateCode, roomTypeCode: roomTypeCode, name: name, paymentTerm: paymentTerm, }) } } return ( ) }