"use client" import { useCallback, useEffect } from "react" import { useFormContext, useWatch } from "react-hook-form" import { useIntl } from "react-intl" import { env } from "@/env/client" import { CloseLargeIcon, PlusCircleIcon, PlusIcon } from "../Icons" import Button from "../TempDesignSystem/Button" import { Tooltip } from "../TempDesignSystem/Tooltip" import { GuestsRoom } from "./GuestsRoom" import styles from "./guests-rooms-picker.module.css" import type { BookingWidgetSchema } from "@/types/components/bookingWidget" import type { TGuestsRoom } from "@/types/components/bookingWidget/guestsRoomsPicker" const MAX_ROOMS = 4 interface GuestsRoomsPickerDialogProps { rooms: TGuestsRoom[] onClose: () => void isOverflowed?: boolean // ToDo Remove once Tooltip below is no longer required } export default function GuestsRoomsPickerDialog({ rooms, onClose, isOverflowed = false, }: GuestsRoomsPickerDialogProps) { const intl = useIntl() const { getFieldState, trigger, setValue } = useFormContext() const roomsValue = useWatch({ name: "rooms" }) const addRoomLabel = intl.formatMessage({ id: "Add Room" }) const doneLabel = intl.formatMessage({ id: "Done" }) const disabledBookingOptionsHeader = intl.formatMessage({ id: "Disabled booking options header", }) const disabledBookingOptionsText = intl.formatMessage({ id: "Disabled adding room", }) const handleClose = useCallback(async () => { const isValid = await trigger("rooms") if (isValid) onClose() }, [trigger, onClose]) const handleAddRoom = useCallback(() => { setValue("rooms", [...roomsValue, { adults: 1, child: [] }], { shouldValidate: true, }) }, [roomsValue, setValue]) const handleRemoveRoom = useCallback( (index: number) => { setValue( "rooms", roomsValue.filter((_, i) => i !== index), { shouldValidate: true } ) }, [roomsValue, setValue] ) // Validate rooms when they change useEffect(() => { const fieldState = getFieldState("rooms") if (fieldState.invalid) trigger("rooms") }, [roomsValue, getFieldState, trigger]) const isInvalid = getFieldState("rooms").invalid const canAddRooms = rooms.length < MAX_ROOMS return ( <>
{rooms.map((room, index) => ( ))} {env.NEXT_PUBLIC_HIDE_FOR_NEXT_RELEASE ? (
) : ( canAddRooms && (
) )}
) }