"use client" import { zodResolver } from "@hookform/resolvers/zod" import { FormProvider, useForm } from "react-hook-form" import { useIntl } from "react-intl" import Alert from "@/components/TempDesignSystem/Alert" import useLang from "@/hooks/useLang" import { ModalContent } from "../ManageStay/ModalContent" import { useMyStayRoomDetailsStore } from "../stores/myStayRoomDetailsStore" import useCancelStay from "./hooks/useCancelStay" import { CancelStayConfirmation } from "./Confirmation" import { FinalConfirmation } from "./FinalConfirmation" import { formatStayDetails, getDefaultRooms } from "./utils" import { type CancelStayProps, cancelStaySchema, type FormValues, } from "@/types/components/hotelReservation/myStay/cancelStay" import { AlertTypeEnum } from "@/types/enums/alert" const MODAL_STEPS = { INITIAL: 1, CONFIRMATION: 2, } export default function CancelStay({ booking, hotel, setBookingStatus, handleCloseModal, handleBackToManageStay, }: CancelStayProps) { const intl = useIntl() const lang = useLang() const { rooms: roomDetails } = useMyStayRoomDetailsStore() const { mainRoom } = booking const form = useForm({ resolver: zodResolver(cancelStaySchema), defaultValues: { rooms: getDefaultRooms(booking), }, }) const { currentStep, isLoading, handleCancelStay, handleCloseCancelStay, handleForward, } = useCancelStay({ booking, setBookingStatus, handleCloseModal, handleBackToManageStay, getFormValues: form.getValues, }) const stayDetails = formatStayDetails({ booking, lang, intl }) const isFirstStep = currentStep === MODAL_STEPS.INITIAL function getModalCopy() { if (isFirstStep) { return { title: intl.formatMessage({ id: "Cancel stay" }), primaryLabel: intl.formatMessage({ id: "Cancel stay" }), secondaryLabel: intl.formatMessage({ id: "Back" }), } } else { return { title: intl.formatMessage({ id: "Confirm cancellation" }), primaryLabel: intl.formatMessage({ id: "Confirm cancellation" }), secondaryLabel: intl.formatMessage({ id: "Don't cancel" }), } } } function getModalContent() { if (mainRoom && isFirstStep) return ( ) if (mainRoom && !isFirstStep) return if (!mainRoom && isFirstStep) return ( ) } const { rooms } = form.watch() const isFormValid = rooms?.some((room) => room.checked) return ( ) }