"use client" import { zodResolver } from "@hookform/resolvers/zod" import { useCallback, useState } from "react" import { FormProvider, useForm } from "react-hook-form" import { useIntl } from "react-intl" import { useEnterDetailsStore } from "@/stores/enter-details" import Button from "@/components/TempDesignSystem/Button" import CountrySelect from "@/components/TempDesignSystem/Form/Country" import Input from "@/components/TempDesignSystem/Form/Input" import Phone from "@/components/TempDesignSystem/Form/Phone" import Footnote from "@/components/TempDesignSystem/Text/Footnote" import { useRoomContext } from "@/contexts/Details/Room" import JoinScandicFriendsCard from "./JoinScandicFriendsCard" import MemberPriceModal from "./MemberPriceModal" import { guestDetailsSchema, signedInDetailsSchema } from "./schema" import Signup from "./Signup" import SpecialRequests from "./SpecialRequests" import styles from "./details.module.css" import type { DetailsProps, DetailsSchema, } from "@/types/components/hotelReservation/enterDetails/details" const formID = "enter-details" export default function Details({ user }: DetailsProps) { const intl = useIntl() const [isMemberPriceModalOpen, setIsMemberPriceModalOpen] = useState(false) const { activeRoom, canProceedToPayment, lastRoom } = useEnterDetailsStore( (state) => ({ activeRoom: state.activeRoom, canProceedToPayment: state.canProceedToPayment, lastRoom: state.lastRoom, }) ) const { actions: { updateDetails }, room, roomNr, } = useRoomContext() const initialData = room.guest const memberRate = room.roomRate.memberRate const isPaymentNext = activeRoom === lastRoom const methods = useForm({ criteriaMode: "all", mode: "all", resolver: zodResolver(user ? signedInDetailsSchema : guestDetailsSchema), reValidateMode: "onChange", values: { countryCode: user?.address?.countryCode ?? initialData.countryCode, dateOfBirth: initialData.dateOfBirth, email: user?.email ?? initialData.email, firstName: user?.firstName ?? initialData.firstName, join: initialData.join, lastName: user?.lastName ?? initialData.lastName, membershipNo: initialData.membershipNo, phoneNumber: user?.phoneNumber ?? initialData.phoneNumber, zipCode: initialData.zipCode, specialRequests: initialData.specialRequests, }, }) const onSubmit = useCallback( (values: DetailsSchema) => { if ((values.join || values.membershipNo) && memberRate && !user) { setIsMemberPriceModalOpen(true) } updateDetails(values) }, [updateDetails, setIsMemberPriceModalOpen, memberRate, user] ) return (
{user || !memberRate ? null : }
{intl.formatMessage({ id: "Guest information" })} {user ? null : (
)}
) }