import { redirect } from "next/navigation" import { selectRate } from "@/constants/routes/hotelReservation" import { getPackages, getProfileSafely, getSelectedRoomAvailability, } from "@/lib/trpc/memoizedRequests" import Summary from "@/components/HotelReservation/EnterDetails/Summary" import { SummaryBottomSheet } from "@/components/HotelReservation/EnterDetails/Summary/BottomSheet" import { generateChildrenString, getQueryParamsForEnterDetails, } from "@/components/HotelReservation/SelectRate/RoomSelection/utils" import styles from "./page.module.css" import { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate" import { LangParams, PageArgs, SearchParams } from "@/types/params" export default async function SummaryPage({ params, searchParams, }: PageArgs>) { const selectRoomParams = new URLSearchParams(searchParams) const { hotel, rooms, fromDate, toDate } = getQueryParamsForEnterDetails(selectRoomParams) const { adults, children, roomTypeCode, rateCode, packages: packageCodes, } = rooms[0] // TODO: Handle multiple rooms const availability = await getSelectedRoomAvailability({ hotelId: hotel, adults, children: children ? generateChildrenString(children) : undefined, roomStayStartDate: fromDate, roomStayEndDate: toDate, rateCode, roomTypeCode, packageCodes, }) const user = await getProfileSafely() const packages = packageCodes ? await getPackages({ hotelId: hotel, startDate: fromDate, endDate: toDate, adults, children: children?.length, packageCodes, }) : null if (!availability || !availability.selectedRoom) { console.error("No hotel or availability data", availability) // TODO: handle this case redirect(selectRate(params.lang)) } const prices = user && availability.memberRate ? { local: { price: availability.memberRate.localPrice.pricePerStay, currency: availability.memberRate.localPrice.currency, }, euro: availability.memberRate.requestedPrice ? { price: availability.memberRate.requestedPrice.pricePerStay, currency: availability.memberRate.requestedPrice.currency, } : undefined, } : { local: { price: availability.publicRate.localPrice.pricePerStay, currency: availability.publicRate.localPrice.currency, }, euro: availability.publicRate.requestedPrice ? { price: availability.publicRate.requestedPrice.pricePerStay, currency: availability.publicRate.requestedPrice.currency, } : undefined, } return ( <>
) }