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..f8632f938 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx @@ -108,7 +108,7 @@ export default async function SelectRatePage({ roomsAvailability={roomsAvailability} roomCategories={roomCategories ?? []} user={user} - packages={packages ?? []} + availablePackages={packages ?? []} /> ) diff --git a/components/HotelReservation/SelectRate/RoomFilter/index.tsx b/components/HotelReservation/SelectRate/RoomFilter/index.tsx index a07e8353f..48c73cac2 100644 --- a/components/HotelReservation/SelectRate/RoomFilter/index.tsx +++ b/components/HotelReservation/SelectRate/RoomFilter/index.tsx @@ -99,11 +99,13 @@ export default function RoomFilter({
{filterOptions.map((option) => { - const { code, description } = option + const { code, description, itemCode } = option const isPetRoom = code === RoomPackageCodeEnum.PET_ROOM const isAllergyRoom = code === RoomPackageCodeEnum.ALLERGY_ROOM const isDisabled = - (isAllergyRoom && petFriendly) || (isPetRoom && allergyFriendly) + (isAllergyRoom && petFriendly) || + (isPetRoom && allergyFriendly) || + !itemCode const checkboxChip = ( ))} @@ -81,7 +81,7 @@ export default function RoomSelection({ )} diff --git a/components/HotelReservation/SelectRate/Rooms/index.tsx b/components/HotelReservation/SelectRate/Rooms/index.tsx index 626664988..2c3570a95 100644 --- a/components/HotelReservation/SelectRate/Rooms/index.tsx +++ b/components/HotelReservation/SelectRate/Rooms/index.tsx @@ -11,6 +11,7 @@ import { filterDuplicateRoomTypesByLowestPrice } from "./utils" import styles from "./rooms.module.css" import { + DefaultFilterOptions, RoomPackageCodeEnum, type RoomPackageCodes, } from "@/types/components/hotelReservation/selectRate/roomFilter" @@ -25,7 +26,7 @@ export default function Rooms({ roomsAvailability, roomCategories = [], user, - packages, + availablePackages, }: SelectRateProps) { const visibleRooms: RoomConfiguration[] = filterDuplicateRoomTypesByLowestPrice(roomsAvailability.roomConfigurations) @@ -47,6 +48,30 @@ export default function Rooms({ (state) => state.setRoomsAvailable ) + const defaultPackages: DefaultFilterOptions[] = [ + { + code: RoomPackageCodeEnum.ACCESSIBILITY_ROOM, + description: "Accessible Room", + itemCode: availablePackages.find( + (pkg) => pkg.code === RoomPackageCodeEnum.ACCESSIBILITY_ROOM + )?.itemCode, + }, + { + code: RoomPackageCodeEnum.ALLERGY_ROOM, + description: "Allergy Room", + itemCode: availablePackages.find( + (pkg) => pkg.code === RoomPackageCodeEnum.ALLERGY_ROOM + )?.itemCode, + }, + { + code: RoomPackageCodeEnum.PET_ROOM, + description: "Pet Room", + itemCode: availablePackages.find( + (pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM + )?.itemCode, + }, + ] + const handleFilter = useCallback( (filter: Record) => { const filteredPackages = Object.keys(filter).filter( @@ -80,20 +105,10 @@ export default function Rooms({ 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], + roomConfigurations: [...filteredRooms], }) if (filteredRooms.length == 0) { @@ -104,7 +119,9 @@ export default function Rooms({ const petRoomPackage = (filteredPackages.includes(RoomPackageCodeEnum.PET_ROOM) && - packages.find((pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM)) || + availablePackages.find( + (pkg) => pkg.code === RoomPackageCodeEnum.PET_ROOM + )) || undefined const features = filteredRooms.find((room) => @@ -124,7 +141,7 @@ export default function Rooms({ roomsAvailability, visibleRooms, rateSummary, - packages, + availablePackages, noRoomsAvailable, setNoRoomsAvailable, setRoomsAvailable, @@ -136,13 +153,13 @@ export default function Rooms({ data.data.attributes.packages) + .transform((data) => data.data?.attributes?.packages ?? []) diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 34a1b3722..eb31aacb6 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -939,12 +939,10 @@ export const hotelQueryRouter = router({ "api.hotels.packages error", JSON.stringify({ query: { hotelId, params } }) ) - throw serverErrorByStatus(apiResponse.status, apiResponse) } const apiJson = await apiResponse.json() const validatedPackagesData = getRoomPackagesSchema.safeParse(apiJson) - if (!validatedPackagesData.success) { getHotelFailCounter.add(1, { hotelId, diff --git a/types/components/hotelReservation/selectRate/roomFilter.ts b/types/components/hotelReservation/selectRate/roomFilter.ts index f895ed73a..2bdd501b1 100644 --- a/types/components/hotelReservation/selectRate/roomFilter.ts +++ b/types/components/hotelReservation/selectRate/roomFilter.ts @@ -1,19 +1,22 @@ import { z } from "zod" -import { - getRoomPackagesSchema, - packagesSchema, -} from "@/server/routers/hotels/output" +import { packagesSchema } from "@/server/routers/hotels/output" export enum RoomPackageCodeEnum { PET_ROOM = "PETR", ALLERGY_ROOM = "ALLG", ACCESSIBILITY_ROOM = "ACCE", } + +export interface DefaultFilterOptions { + code: RoomPackageCodeEnum + description: string + itemCode: string | undefined +} export interface RoomFilterProps { numberOfRooms: number onFilter: (filter: Record) => void - filterOptions: RoomPackageData + filterOptions: DefaultFilterOptions[] } export type RoomPackage = z.output diff --git a/types/components/hotelReservation/selectRate/roomSelection.ts b/types/components/hotelReservation/selectRate/roomSelection.ts index 163bfd6fa..cd1e48775 100644 --- a/types/components/hotelReservation/selectRate/roomSelection.ts +++ b/types/components/hotelReservation/selectRate/roomSelection.ts @@ -8,7 +8,7 @@ export interface RoomSelectionProps { roomsAvailability: RoomsAvailability roomCategories: RoomData[] user: SafeUser - packages: RoomPackageData | undefined + availablePackages: RoomPackageData | undefined selectedPackages: RoomPackageCodes[] setRateSummary: (rateSummary: Rate) => void rateSummary: Rate | null @@ -18,5 +18,5 @@ export interface SelectRateProps { roomsAvailability: RoomsAvailability roomCategories: RoomData[] user: SafeUser - packages: RoomPackageData + availablePackages: RoomPackageData }