"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 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, memberPrice }: DetailsProps) { const intl = useIntl() const [isMemberPriceModalOpen, setIsMemberPriceModalOpen] = useState(false) const initialData = useEnterDetailsStore((state) => state.guest) const updateDetails = useEnterDetailsStore( (state) => state.actions.updateDetails ) 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) && memberPrice) { setIsMemberPriceModalOpen(true) } updateDetails(values) }, [updateDetails, setIsMemberPriceModalOpen, memberPrice] ) return (
{user ? null : ( )}
{intl.formatMessage({ id: "Guest information" })} {user ? null : (
)}
) }