From 8aa615dfc78fb3baabab12e613e86571c0f53ed1 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Thu, 14 Nov 2024 10:53:16 +0100 Subject: [PATCH] feat(SW-892) Fixed bug with summary not adding pet charge on filter --- .../(standard)/select-rate/page.tsx | 2 +- .../RoomSelection/RoomCard/index.tsx | 2 +- .../SelectRate/RoomSelection/index.tsx | 4 +- .../SelectRate/Rooms/index.tsx | 37 +++++++++++++++++-- .../selectRate/roomSelection.ts | 10 +++++ 5 files changed, 47 insertions(+), 8 deletions(-) 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 816c937ae..dc5c7a6b5 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx @@ -18,7 +18,7 @@ import { setLang } from "@/i18n/serverContext" import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" import type { SelectRateSearchParams } from "@/types/components/hotelReservation/selectRate/selectRate" -import { LangParams, PageArgs } from "@/types/params" +import type { LangParams, PageArgs } from "@/types/params" export default async function SelectRatePage({ params, diff --git a/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx b/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx index 70f1c5aa6..4f3b398db 100644 --- a/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx +++ b/components/HotelReservation/SelectRate/RoomSelection/RoomCard/index.tsx @@ -66,7 +66,7 @@ export default function RoomCard({ (room) => room.name === roomConfiguration.roomType ) - const { roomSize, occupancy, descriptions, images } = selectedRoom || {} + const { roomSize, occupancy, images } = selectedRoom || {} const mainImage = images?.[0] const freeCancelation = intl.formatMessage({ id: "Free cancellation" }) diff --git a/components/HotelReservation/SelectRate/RoomSelection/index.tsx b/components/HotelReservation/SelectRate/RoomSelection/index.tsx index 89c4dc9a2..ceb86c5f3 100644 --- a/components/HotelReservation/SelectRate/RoomSelection/index.tsx +++ b/components/HotelReservation/SelectRate/RoomSelection/index.tsx @@ -17,9 +17,9 @@ export default function RoomSelection({ user, packages, selectedPackages, + setRateSummary, + rateSummary, }: RoomSelectionProps) { - const [rateSummary, setRateSummary] = useState(null) - const router = useRouter() const searchParams = useSearchParams() const isUserLoggedIn = !!user diff --git a/components/HotelReservation/SelectRate/Rooms/index.tsx b/components/HotelReservation/SelectRate/Rooms/index.tsx index 8e56555a2..abd5b2f86 100644 --- a/components/HotelReservation/SelectRate/Rooms/index.tsx +++ b/components/HotelReservation/SelectRate/Rooms/index.tsx @@ -12,7 +12,8 @@ import { RoomPackageCodeEnum, type RoomPackageCodes, } from "@/types/components/hotelReservation/selectRate/roomFilter" -import type { RoomSelectionProps } from "@/types/components/hotelReservation/selectRate/roomSelection" +import type { SelectRateProps } from "@/types/components/hotelReservation/selectRate/roomSelection" +import type { Rate } from "@/types/components/hotelReservation/selectRate/selectRate" import type { RoomConfiguration, RoomsAvailability, @@ -23,10 +24,10 @@ export default function Rooms({ roomCategories = [], user, packages, -}: Omit) { +}: SelectRateProps) { const visibleRooms: RoomConfiguration[] = filterDuplicateRoomTypesByLowestPrice(roomsAvailability.roomConfigurations) - + const [rateSummary, setRateSummary] = useState(null) const [rooms, setRooms] = useState({ ...roomsAvailability, roomConfigurations: visibleRooms, @@ -48,6 +49,14 @@ export default function Rooms({ ...roomsAvailability, roomConfigurations: visibleRooms, }) + + if (!!rateSummary) { + setRateSummary({ + ...rateSummary, + features: [], + }) + } + return } @@ -57,8 +66,26 @@ export default function Rooms({ ) ) setRooms({ ...roomsAvailability, roomConfigurations: filteredRooms }) + + 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 : [], + }) + } }, - [roomsAvailability, visibleRooms] + [roomsAvailability, visibleRooms, rateSummary, packages] ) return ( @@ -74,6 +101,8 @@ export default function Rooms({ user={user} packages={packages} selectedPackages={selectedPackages} + setRateSummary={setRateSummary} + rateSummary={rateSummary} /> ) diff --git a/types/components/hotelReservation/selectRate/roomSelection.ts b/types/components/hotelReservation/selectRate/roomSelection.ts index 3e3a6117e..63b17ed6f 100644 --- a/types/components/hotelReservation/selectRate/roomSelection.ts +++ b/types/components/hotelReservation/selectRate/roomSelection.ts @@ -2,6 +2,7 @@ import type { RoomData } from "@/types/hotel" import type { SafeUser } from "@/types/user" import type { RoomsAvailability } from "@/server/routers/hotels/output" import type { RoomPackageCodes, RoomPackageData } from "./roomFilter" +import type { Rate } from "./selectRate" export interface RoomSelectionProps { roomsAvailability: RoomsAvailability @@ -9,4 +10,13 @@ export interface RoomSelectionProps { user: SafeUser packages: RoomPackageData selectedPackages: RoomPackageCodes[] + setRateSummary: (rateSummary: Rate) => void + rateSummary: Rate | null +} + +export interface SelectRateProps { + roomsAvailability: RoomsAvailability + roomCategories: RoomData[] + user: SafeUser + packages: RoomPackageData }