diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx
index fd9db4d6c..5682773c3 100644
--- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx
+++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx
@@ -1,22 +1,16 @@
import { notFound } from "next/navigation"
+import { Suspense } from "react"
import { dt } from "@/lib/dt"
-import {
- getHotelData,
- getLocations,
- getProfileSafely,
-} from "@/lib/trpc/memoizedRequests"
-import { serverClient } from "@/lib/trpc/server"
+import { getHotelData, getLocations } from "@/lib/trpc/memoizedRequests"
+import LoadingSpinner from "@/components/Current/LoadingSpinner"
import HotelInfoCard from "@/components/HotelReservation/SelectRate/HotelInfoCard"
-import Rooms from "@/components/HotelReservation/SelectRate/Rooms"
-import {
- generateChildrenString,
- getHotelReservationQueryParams,
-} from "@/components/HotelReservation/SelectRate/RoomSelection/utils"
+import { RoomsContainer } from "@/components/HotelReservation/SelectRate/Rooms/RoomsContainer"
+import { getHotelReservationQueryParams } from "@/components/HotelReservation/SelectRate/RoomSelection/utils"
import { setLang } from "@/i18n/serverContext"
+import { safeTry } from "@/utils/safeTry"
-import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import type { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate"
import type { LangParams, PageArgs } from "@/types/params"
@@ -45,71 +39,48 @@ export default async function SelectRatePage({
return notFound()
}
- const validFromDate =
+ const fromDate =
searchParams.fromDate &&
dt(searchParams.fromDate).isAfter(dt().subtract(1, "day"))
- ? searchParams.fromDate
- : dt().utc().format("YYYY-MM-DD")
- const validToDate =
- searchParams.toDate && dt(searchParams.toDate).isAfter(validFromDate)
- ? searchParams.toDate
- : dt().utc().add(1, "day").format("YYYY-MM-DD")
+ ? dt(searchParams.fromDate)
+ : dt().utc()
+ const toDate =
+ searchParams.toDate && dt(searchParams.toDate).isAfter(fromDate)
+ ? dt(searchParams.toDate)
+ : dt().utc().add(1, "day")
+
const adults = selectRoomParamsObject.room[0].adults || 1 // TODO: Handle multiple rooms
- const childrenCount = selectRoomParamsObject.room[0].child?.length
- const children = selectRoomParamsObject.room[0].child
- ? generateChildrenString(selectRoomParamsObject.room[0].child)
- : undefined // TODO: Handle multiple rooms
+ const children = selectRoomParamsObject.room[0].child // TODO: Handle multiple rooms
- const [hotelData, roomsAvailability, packages, user] = await Promise.all([
- getHotelData({ hotelId: searchParams.hotel, language: params.lang }),
- serverClient().hotel.availability.rooms({
- hotelId: parseInt(searchParams.hotel, 10),
- roomStayStartDate: validFromDate,
- roomStayEndDate: validToDate,
- adults,
- children,
- }),
- serverClient().hotel.packages.get({
- hotelId: searchParams.hotel,
- startDate: searchParams.fromDate,
- endDate: searchParams.toDate,
- adults,
- children: childrenCount,
- packageCodes: [
- RoomPackageCodeEnum.ACCESSIBILITY_ROOM,
- RoomPackageCodeEnum.PET_ROOM,
- RoomPackageCodeEnum.ALLERGY_ROOM,
- ],
- }),
- getProfileSafely(),
- ])
-
- if (!roomsAvailability) {
- return "No rooms found" // TODO: Add a proper error message
- }
-
- if (!hotelData) {
- return "No hotel data found" // TODO: Add a proper error message
- }
-
- const roomCategories = hotelData?.included
-
- const noRoomsAvailable = roomsAvailability.roomConfigurations.reduce(
- (acc, room) => {
- return acc && room.status === "NotAvailable"
- },
- true
+ const [hotelData, hotelDataError] = await safeTry(
+ getHotelData({ hotelId: searchParams.hotel, language: params.lang })
)
+ if (!hotelData && !hotelDataError) {
+ return notFound()
+ }
+
+ const hotelId = +searchParams.hotel
return (
<>
-
-
+ }>
+
+
>
)
}
diff --git a/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx b/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx
index 946b82ad2..92eebc27d 100644
--- a/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx
+++ b/components/HotelReservation/SelectRate/HotelInfoCard/index.tsx
@@ -1,7 +1,8 @@
-"use client"
-import { useEffect } from "react"
+import { Suspense, useEffect } from "react"
import { useIntl } from "react-intl"
+import { Lang } from "@/constants/languages"
+import { getHotelData } from "@/lib/trpc/memoizedRequests"
import useRoomAvailableStore from "@/stores/roomAvailability"
import { mapFacilityToIcon } from "@/components/ContentType/HotelPage/data"
@@ -11,38 +12,54 @@ import Divider from "@/components/TempDesignSystem/Divider"
import Body from "@/components/TempDesignSystem/Text/Body"
import Caption from "@/components/TempDesignSystem/Text/Caption"
import Title from "@/components/TempDesignSystem/Text/Title"
+import { getIntl } from "@/i18n"
import ReadMore from "../../ReadMore"
import TripAdvisorChip from "../../TripAdvisorChip"
+import { NoRoomsAlert } from "./NoRoomsAlert"
import styles from "./hotelInfoCard.module.css"
-import type { HotelInfoCardProps } from "@/types/components/hotelReservation/selectRate/hotelInfoCardProps"
-import { AlertTypeEnum } from "@/types/enums/alert"
+import { Child } from "@/types/components/hotelReservation/selectRate/selectRate"
+
+type Props = {
+ hotelId: number
+ lang: Lang
+ fromDate: Date
+ toDate: Date
+ adultCount: number
+ childArray: Child[]
+}
+
+export default async function HotelInfoCard({
+ hotelId,
+ lang,
+ ...props
+}: Props) {
+ const hotelData = await getHotelData({
+ hotelId: hotelId.toString(),
+ language: lang,
+ })
-export default function HotelInfoCard({
- hotelData,
- noAvailability = false,
-}: HotelInfoCardProps) {
const hotelAttributes = hotelData?.data.attributes
- const intl = useIntl()
+ const intl = await getIntl()
- const noRoomsAvailable = useRoomAvailableStore(
- (state) => state.noRoomsAvailable
- )
- const setNoRoomsAvailable = useRoomAvailableStore(
- (state) => state.setNoRoomsAvailable
- )
+ // const noRoomsAvailable = useRoomAvailableStore(
+ // (state) => state.noRoomsAvailable
+ // )
+ // const setNoRoomsAvailable = useRoomAvailableStore(
+ // (state) => state.setNoRoomsAvailable
+ // )
const sortedFacilities = hotelAttributes?.detailedFacilities
.sort((a, b) => b.sortOrder - a.sortOrder)
.slice(0, 5)
- useEffect(() => {
- if (noAvailability) {
- setNoRoomsAvailable()
- }
- }, [noAvailability, setNoRoomsAvailable])
+ // useEffect(() => {
+ // if (noAvailability) {
+ // setNoRoomsAvailable()
+ // }
+ // }, [noAvailability, setNoRoomsAvailable])
return (
@@ -117,16 +134,10 @@ export default function HotelInfoCard({
)
})}
- {noRoomsAvailable ? (
-
- ) : null}
+
+
+
+
)
}