"use client" import { zodResolver } from "@hookform/resolvers/zod" import { useCallback, useEffect } from "react" import { FormProvider, useForm } from "react-hook-form" import { useIntl } from "react-intl" import { useEnterDetailsStore } from "@/stores/enter-details" import SpecialRequests from "@/components/HotelReservation/EnterDetails/Details/SpecialRequests" 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 AutoFillDetector from "./AutoFillDetector" import JoinScandicFriendsCard from "./JoinScandicFriendsCard" import { guestDetailsSchema, signedInDetailsSchema } from "./schema" import Signup from "./Signup" 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 { addPreSubmitCallback } = useEnterDetailsStore((state) => ({ addPreSubmitCallback: state.actions.addPreSubmitCallback, })) const { actions: { updateDetails, setIncomplete }, room, roomNr, idx, } = useRoomContext() const initialData = room.guest const memberRate = "member" in room.roomRate ? room.roomRate.member : null const methods = useForm({ criteriaMode: "all", mode: "all", resolver: zodResolver(user ? signedInDetailsSchema : guestDetailsSchema), reValidateMode: "onChange", values: { countryCode: user?.address?.countryCode ?? initialData.countryCode, dateOfBirth: "dateOfBirth" in initialData ? initialData.dateOfBirth : undefined, 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: "zipCode" in initialData ? initialData.zipCode : undefined, specialRequest: { comment: room.specialRequest.comment, }, }, }) const { formState: { isValid }, handleSubmit, trigger, } = methods useEffect(() => { addPreSubmitCallback(`${idx}-details`, trigger) }, [addPreSubmitCallback, idx, trigger]) const onSubmit = useCallback( (values: DetailsSchema) => { updateDetails(values) }, [updateDetails] ) const updateDetailsStore = useCallback(() => { if (isValid) { handleSubmit(onSubmit)() } else { setIncomplete() } }, [handleSubmit, isValid, onSubmit, setIncomplete]) useEffect(updateDetailsStore, [methods.formState.isValid, updateDetailsStore]) return (
{user || !memberRate ? null : }
{intl.formatMessage({ defaultMessage: "Guest information", })} {user ? null : (
)}
) }