From 7a9bfd447b18983b5a272e25ca396e438589a287 Mon Sep 17 00:00:00 2001 From: Pontus Dreij Date: Fri, 24 Jan 2025 09:32:12 +0100 Subject: [PATCH] feat(SW-717) Fixed bug where available rooms didn't show if there where also unavaible dublicates. --- .../SelectRate/Rooms/utils.ts | 135 ++++++++++-------- 1 file changed, 75 insertions(+), 60 deletions(-) diff --git a/components/HotelReservation/SelectRate/Rooms/utils.ts b/components/HotelReservation/SelectRate/Rooms/utils.ts index 5a4c2f62f..030eba3fd 100644 --- a/components/HotelReservation/SelectRate/Rooms/utils.ts +++ b/components/HotelReservation/SelectRate/Rooms/utils.ts @@ -22,83 +22,98 @@ export function filterDuplicateRoomTypesByLowestPrice( const roomMap = new Map() roomConfigurations.forEach((room) => { - const { roomType, products } = room + const { roomType, products, status } = room if (!duplicateRoomTypes.has(roomType)) { roomMap.set(roomType, room) return } - products.forEach((product) => { - const { productType } = product - const publicProduct = productType.public || { - requestedPrice: null, - localPrice: null, - } - const memberProduct = productType.member || { - requestedPrice: null, - localPrice: null, - } + const previousRoom = roomMap.get(roomType) - const { - requestedPrice: publicRequestedPrice, - localPrice: publicLocalPrice, - } = publicProduct - const { - requestedPrice: memberRequestedPrice, - localPrice: memberLocalPrice, - } = memberProduct + // Prioritize 'Available' status + if (status === "Available" && previousRoom?.status === "NotAvailable") { + roomMap.set(roomType, room) + return + } - const previousLowest = roomMap.get(roomType) + if (status === "NotAvailable" && previousRoom?.status === "Available") { + return + } + if (previousRoom) { + products.forEach((product) => { + const { productType } = product + const publicProduct = productType.public || { + requestedPrice: null, + localPrice: null, + } + const memberProduct = productType.member || { + requestedPrice: null, + localPrice: null, + } - const currentRequestedPrice = Math.min( - Number(publicRequestedPrice?.pricePerNight) ?? Infinity, - Number(memberRequestedPrice?.pricePerNight) ?? Infinity - ) - const currentLocalPrice = Math.min( - Number(publicLocalPrice?.pricePerNight) ?? Infinity, - Number(memberLocalPrice?.pricePerNight) ?? Infinity - ) + const { + requestedPrice: publicRequestedPrice, + localPrice: publicLocalPrice, + } = publicProduct + const { + requestedPrice: memberRequestedPrice, + localPrice: memberLocalPrice, + } = memberProduct - if ( - !previousLowest || - currentRequestedPrice < - Math.min( - Number( - previousLowest.products[0].productType.public.requestedPrice - ?.pricePerNight - ) ?? Infinity, - Number( - previousLowest.products[0].productType.member?.requestedPrice - ?.pricePerNight - ) ?? Infinity - ) || - (currentRequestedPrice === - Math.min( - Number( - previousLowest.products[0].productType.public.requestedPrice - ?.pricePerNight - ) ?? Infinity, - Number( - previousLowest.products[0].productType.member?.requestedPrice - ?.pricePerNight - ) ?? Infinity - ) && - currentLocalPrice < + const previousLowest = roomMap.get(roomType) + + const currentRequestedPrice = Math.min( + Number(publicRequestedPrice?.pricePerNight) ?? Infinity, + Number(memberRequestedPrice?.pricePerNight) ?? Infinity + ) + const currentLocalPrice = Math.min( + Number(publicLocalPrice?.pricePerNight) ?? Infinity, + Number(memberLocalPrice?.pricePerNight) ?? Infinity + ) + + if ( + !previousLowest || + currentRequestedPrice < Math.min( Number( - previousLowest.products[0].productType.public.localPrice + previousLowest.products[0].productType.public.requestedPrice ?.pricePerNight ) ?? Infinity, Number( - previousLowest.products[0].productType.member?.localPrice + previousLowest.products[0].productType.member?.requestedPrice ?.pricePerNight ) ?? Infinity - )) - ) { - roomMap.set(roomType, room) - } - }) + ) || + (currentRequestedPrice === + Math.min( + Number( + previousLowest.products[0].productType.public.requestedPrice + ?.pricePerNight + ) ?? Infinity, + Number( + previousLowest.products[0].productType.member?.requestedPrice + ?.pricePerNight + ) ?? Infinity + ) && + currentLocalPrice < + Math.min( + Number( + previousLowest.products[0].productType.public.localPrice + ?.pricePerNight + ) ?? Infinity, + Number( + previousLowest.products[0].productType.member?.localPrice + ?.pricePerNight + ) ?? Infinity + )) + ) { + roomMap.set(roomType, room) + } + }) + } else { + roomMap.set(roomType, room) + } }) return Array.from(roomMap.values())