diff --git a/components/HotelReservation/SelectRate/HotelInfoCard/NoRoomsAlert.tsx b/components/HotelReservation/SelectRate/HotelInfoCard/NoRoomsAlert.tsx
index bfca1364f..51578df8b 100644
--- a/components/HotelReservation/SelectRate/HotelInfoCard/NoRoomsAlert.tsx
+++ b/components/HotelReservation/SelectRate/HotelInfoCard/NoRoomsAlert.tsx
@@ -40,14 +40,10 @@ export async function NoRoomsAlert({
})
)
- if (!availability) {
+ if (!availability || availabilityError) {
return null
}
- if (availabilityError) {
- // TODO: Handle error
- }
-
const noRoomsAvailable = availability.roomConfigurations.reduce(
(acc, room) => {
return acc && room.status === "NotAvailable"
diff --git a/components/HotelReservation/SelectRate/RoomSelection/FlexibilityOption/index.tsx b/components/HotelReservation/SelectRate/RoomSelection/FlexibilityOption/index.tsx
index 941d6257d..2194f8f35 100644
--- a/components/HotelReservation/SelectRate/RoomSelection/FlexibilityOption/index.tsx
+++ b/components/HotelReservation/SelectRate/RoomSelection/FlexibilityOption/index.tsx
@@ -54,7 +54,13 @@ export default function FlexibilityOption({
member: memberPrice,
features: petRoomPackage ? features : [],
}
- handleSelectRate(rate)
+
+ console.log("Rate", rate)
+
+ handleSelectRate({
+ publicRateCode: publicPrice.rateCode,
+ roomTypeCode: roomTypeCode,
+ })
}
return (
diff --git a/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx b/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx
index fb713fddb..0f20cd65b 100644
--- a/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx
+++ b/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx
@@ -161,7 +161,7 @@ export default function RoomCard({
{roomConfiguration.roomType}
- {/* Out of scope for now
+ {/* Out of scope for now
{descriptions?.short}
*/}
diff --git a/components/HotelReservation/SelectRate/RoomSelection/index.tsx b/components/HotelReservation/SelectRate/RoomSelection/index.tsx
index b3624552f..f7c530521 100644
--- a/components/HotelReservation/SelectRate/RoomSelection/index.tsx
+++ b/components/HotelReservation/SelectRate/RoomSelection/index.tsx
@@ -16,7 +16,7 @@ export default function RoomSelection({
user,
packages,
selectedPackages,
- setRateSummary,
+ setRateCode,
rateSummary,
}: RoomSelectionProps) {
const router = useRouter()
@@ -70,7 +70,7 @@ export default function RoomSelection({
rateDefinitions={rateDefinitions}
roomConfiguration={roomConfiguration}
roomCategories={roomCategories}
- handleSelectRate={setRateSummary}
+ handleSelectRate={setRateCode}
selectedPackages={selectedPackages}
packages={packages}
/>
diff --git a/components/HotelReservation/SelectRate/Rooms/index.tsx b/components/HotelReservation/SelectRate/Rooms/index.tsx
index 78528db3e..7a661e385 100644
--- a/components/HotelReservation/SelectRate/Rooms/index.tsx
+++ b/components/HotelReservation/SelectRate/Rooms/index.tsx
@@ -1,6 +1,6 @@
"use client"
-import { useCallback, useMemo, useState } from "react"
+import { useCallback, useEffect, useMemo, useState } from "react"
import RoomFilter from "../RoomFilter"
import RoomSelection from "../RoomSelection"
@@ -14,10 +14,7 @@ import {
} from "@/types/components/hotelReservation/selectRate/roomFilter"
import type { SelectRateProps } from "@/types/components/hotelReservation/selectRate/roomSelection"
import type { Rate } from "@/types/components/hotelReservation/selectRate/selectRate"
-import type {
- RoomConfiguration,
- RoomsAvailability,
-} from "@/server/routers/hotels/output"
+import type { RoomConfiguration } from "@/server/routers/hotels/output"
export default function Rooms({
roomsAvailability,
@@ -27,7 +24,10 @@ export default function Rooms({
}: SelectRateProps) {
const visibleRooms: RoomConfiguration[] =
filterDuplicateRoomTypesByLowestPrice(roomsAvailability.roomConfigurations)
- const [rateSummary, setRateSummary] = useState(null)
+ // const [internalRateSummary, setRateSummary] = useState(null)
+ const [selectedRate, setSelectedRate] = useState<
+ { publicRateCode: string; roomTypeCode: string } | undefined
+ >(undefined)
const [selectedPackages, setSelectedPackages] = useState(
[]
)
@@ -39,81 +39,9 @@ export default function Rooms({
) as RoomPackageCodeEnum[]
setSelectedPackages(filteredPackages)
-
- // if (filteredPackages.length === 0) {
- // setRooms({
- // ...roomsAvailability,
- // roomConfigurations: visibleRooms,
- // })
-
- // if (!!rateSummary) {
- // setRateSummary({
- // ...rateSummary,
- // features: [],
- // })
- // }
-
- // if (noRoomsAvailable) {
- // setRoomsAvailable()
- // }
-
- // return
- // }
-
- // const filteredRooms = visibleRooms.filter((room) =>
- // filteredPackages.every((filteredPackage) =>
- // room.features.some((feature) => feature.code === filteredPackage)
- // )
- // )
- // let notAvailableRooms = visibleRooms.filter((room) =>
- // filteredPackages.every(
- // (filteredPackage) =>
- // !room.features.some((feature) => feature.code === filteredPackage)
- // )
- // )
- // // Clone nested object to keep original object intact and not messup the room data
- // notAvailableRooms = JSON.parse(JSON.stringify(notAvailableRooms))
- // notAvailableRooms.forEach((room) => {
- // room.status = "NotAvailable"
- // })
- // setRooms({
- // ...roomsAvailability,
- // roomConfigurations: [...filteredRooms, ...notAvailableRooms],
- // })
-
- // if (filteredRooms.length == 0) {
- // setNoRoomsAvailable()
- // } else if (noRoomsAvailable) {
- // setRoomsAvailable()
- // }
-
- // const petRoomPackage =
- // (filteredPackages.includes(RoomPackageCodeEnum.PET_ROOM) &&
- // packages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)) ||
- // undefined
-
- // const features = filteredRooms.find((room) =>
- // room.features.some(
- // (feature) => feature.code === RoomPackageCodeEnum.PET_ROOM
- // )
- // )?.features
-
- // if (!!rateSummary) {
- // setRateSummary({
- // ...rateSummary,
- // features: petRoomPackage && features ? features : [],
- // })
- // }
+ // setRateSummary(null)
},
- [
- // roomsAvailability,
- // visibleRooms,
- // rateSummary,
- // packages,
- // noRoomsAvailable,
- // setNoRoomsAvailable,
- // setRoomsAvailable,
- ]
+ []
)
const filteredRooms = useMemo(() => {
@@ -150,7 +78,20 @@ export default function Rooms({
}
}, [roomsAvailability, visibleRooms, selectedPackages, filteredRooms])
- const rSummary: Rate | null = useMemo(() => {
+ const rateSummary: Rate | null = useMemo(() => {
+ const room = filteredRooms.find(
+ (room) => room.roomTypeCode === selectedRate?.roomTypeCode
+ )
+
+ if (!room) return null
+
+ const product = room.products.find(
+ (product) =>
+ product.productType.public.rateCode === selectedRate?.publicRateCode
+ )
+
+ if (!product) return null
+
const petRoomPackage =
(selectedPackages.includes(RoomPackageCodeEnum.PET_ROOM) &&
packages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)) ||
@@ -162,13 +103,24 @@ export default function Rooms({
)
)?.features
- if (!rateSummary) return null
-
- return {
- ...rateSummary,
+ const rateSummary: Rate = {
features: petRoomPackage && features ? features : [],
+ priceName: room.roomType,
+ public: product.productType.public,
+ member: product.productType.member,
+ roomType: room.roomType,
+ roomTypeCode: room.roomTypeCode,
}
- }, [filteredRooms, rateSummary, packages, selectedPackages])
+
+ return rateSummary
+ }, [filteredRooms, packages, selectedPackages, selectedRate])
+
+ useEffect(() => {
+ if (rateSummary) return
+ if (!selectedRate) return
+
+ setSelectedRate(undefined)
+ }, [rateSummary, selectedRate])
return (
@@ -183,8 +135,8 @@ export default function Rooms({
user={user}
packages={packages}
selectedPackages={selectedPackages}
- setRateSummary={setRateSummary}
- rateSummary={rSummary}
+ setRateCode={setSelectedRate}
+ rateSummary={rateSummary}
/>
)
diff --git a/types/components/hotelReservation/selectRate/flexibilityOption.ts b/types/components/hotelReservation/selectRate/flexibilityOption.ts
index 811afc139..5baef06a4 100644
--- a/types/components/hotelReservation/selectRate/flexibilityOption.ts
+++ b/types/components/hotelReservation/selectRate/flexibilityOption.ts
@@ -23,7 +23,10 @@ export type FlexibilityOptionProps = {
roomTypeCode: RoomConfiguration["roomTypeCode"]
features: RoomConfiguration["features"]
petRoomPackage: RoomPackage | undefined
- handleSelectRate: (rate: Rate) => void
+ handleSelectRate: (rateCode: {
+ publicRateCode: string
+ roomTypeCode: string
+ }) => void
}
export interface PriceListProps {
diff --git a/types/components/hotelReservation/selectRate/hotelInfoCardProps.ts b/types/components/hotelReservation/selectRate/hotelInfoCardProps.ts
deleted file mode 100644
index 088c54e51..000000000
--- a/types/components/hotelReservation/selectRate/hotelInfoCardProps.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { HotelData } from "@/types/hotel"
-
-export type HotelInfoCardProps = {
- hotelData: HotelData | null
- noAvailability: boolean
-}
diff --git a/types/components/hotelReservation/selectRate/roomCard.ts b/types/components/hotelReservation/selectRate/roomCard.ts
index aa0d647be..cc7836a62 100644
--- a/types/components/hotelReservation/selectRate/roomCard.ts
+++ b/types/components/hotelReservation/selectRate/roomCard.ts
@@ -19,7 +19,10 @@ export type RoomCardProps = {
roomCategories: RoomData[]
selectedPackages: RoomPackageCodes[]
packages: RoomPackageData | undefined
- handleSelectRate: (rate: Rate) => void
+ handleSelectRate: (rateCode: {
+ publicRateCode: string
+ roomTypeCode: string
+ }) => void
}
type RoomPackagePriceSchema = z.output
diff --git a/types/components/hotelReservation/selectRate/roomSelection.ts b/types/components/hotelReservation/selectRate/roomSelection.ts
index 163bfd6fa..bfb750490 100644
--- a/types/components/hotelReservation/selectRate/roomSelection.ts
+++ b/types/components/hotelReservation/selectRate/roomSelection.ts
@@ -10,7 +10,10 @@ export interface RoomSelectionProps {
user: SafeUser
packages: RoomPackageData | undefined
selectedPackages: RoomPackageCodes[]
- setRateSummary: (rateSummary: Rate) => void
+ setRateCode: (rateCode: {
+ publicRateCode: string
+ roomTypeCode: string
+ }) => void
rateSummary: Rate | null
}