"use client" import { useState } from "react" import { useIntl } from "react-intl" import { BookingStatusEnum } from "@/constants/booking" import { ChevronDownIcon } from "@/components/Icons" import Modal from "@/components/Modal" import Button from "@/components/TempDesignSystem/Button" import CancelStay from "../CancelStay" import GuaranteeLateArrival from "../GuaranteeLateArrival" import ActionPanel from "./ActionPanel" import type { Hotel } from "@/types/hotel" import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation" import type { CreditCard } from "@/types/user" type ActiveView = "actionPanel" | "cancelStay" | "guaranteeLateArrival" interface ManageStayProps { booking: BookingConfirmation["booking"] hotel: Hotel setBookingStatus: (status: BookingStatusEnum) => void bookingStatus: string | null savedCreditCards: CreditCard[] | null refId: string } export default function ManageStay({ booking, hotel, setBookingStatus, bookingStatus, savedCreditCards, refId, }: ManageStayProps) { const [isOpen, setIsOpen] = useState(false) const [activeView, setActiveView] = useState("actionPanel") const intl = useIntl() const showCancelStayButton = bookingStatus !== BookingStatusEnum.Cancelled && booking.isCancelable const showGuaranteeButton = bookingStatus !== BookingStatusEnum.Cancelled && !booking.guaranteeInfo function handleClose() { setIsOpen(false) setActiveView("actionPanel") } function handleBack() { setActiveView("actionPanel") } function renderContent() { switch (activeView) { case "cancelStay": return ( setBookingStatus(BookingStatusEnum.Cancelled) } handleCloseModal={handleClose} handleBackToManageStay={handleBack} /> ) case "guaranteeLateArrival": return ( ) default: return ( setActiveView("cancelStay")} onGuaranteeClick={() => setActiveView("guaranteeLateArrival")} showCancelStayButton={showCancelStayButton} showGuaranteeButton={showGuaranteeButton} /> ) } } return ( <> {renderContent()} ) }