"use client" import { useEffect, useRef, useState } from "react" import { useIntl } from "react-intl" import { useRatesStore } from "@/stores/select-rate" import Button from "@/components/TempDesignSystem/Button" import Caption from "@/components/TempDesignSystem/Text/Caption" import Subtitle from "@/components/TempDesignSystem/Text/Subtitle" import { formatPrice } from "@/utils/numberFormatting" import { isBookingCodeRate } from "./isBookingCodeRate" import { mapRate } from "./mapRate" import Summary from "./Summary" import styles from "./mobileSummary.module.css" import type { MobileSummaryProps } from "@/types/components/hotelReservation/selectRate/rateSummary" import type { RoomsAvailability } from "@/types/trpc/routers/hotel/roomAvailability" export default function MobileSummary({ isAllRoomsSelected, isUserLoggedIn, totalPriceToShow, }: MobileSummaryProps) { const intl = useIntl() const scrollY = useRef(0) const [isSummaryOpen, setIsSummaryOpen] = useState(false) const { booking, bookingRooms, roomsAvailability, rateSummary, vat } = useRatesStore((state) => ({ booking: state.booking, bookingRooms: state.booking.rooms, roomsAvailability: state.roomsAvailability, rateSummary: state.rateSummary, vat: state.vat, })) function toggleSummaryOpen() { setIsSummaryOpen(!isSummaryOpen) } useEffect(() => { if (isSummaryOpen) { scrollY.current = window.scrollY document.body.style.position = "fixed" document.body.style.top = `-${scrollY.current}px` document.body.style.width = "100%" } else { document.body.style.position = "" document.body.style.top = "" document.body.style.width = "" window.scrollTo({ top: scrollY.current, left: 0, behavior: "instant", }) } return () => { document.body.style.position = "" document.body.style.top = "" } }, [isSummaryOpen]) const roomRateDefinitions = roomsAvailability?.find( (ra): ra is RoomsAvailability => "rateDefinitions" in ra ) if (!roomRateDefinitions) { return null } const rooms = rateSummary.map((room, index) => mapRate(room, index, bookingRooms) ) const containsBookingCodeRate = rateSummary.find((r) => isBookingCodeRate(r.product) ) const showDiscounted = containsBookingCodeRate || isUserLoggedIn return (
) }