From 68cd061c6df910abc09e8f96a29bc95164c34664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20J=C3=A4derberg?= Date: Wed, 13 Aug 2025 12:45:40 +0000 Subject: [PATCH] Merged in feature/select-rate-vertical-data-flow (pull request #2535) Feature/select rate vertical data flow * add fix from SW-2666 * use translations for room packages * move types to it's own file * Merge branch 'master' of bitbucket.org:scandic-swap/web into feature/select-rate-vertical-data-flow * merge * feature/select-rate: double rate for campaing rates * revert NODE_ENV check in Cookiebot script * revert testing values * fix(SW-3171): fix all filter selected in price details * fix(SW-3166): multiroom anchoring when changing filter * fix(SW-3172): check hotelType, show correct breakfast message * Merge branch 'feature/select-rate-vertical-data-flow' of bitbucket.org:scandic-swap/web into feature/select-rate-vertical-data-flow * fix: show special needs icons for subsequent roomTypes SW-3167 * fix: Display strike through text when logged in SW-3168 * fix: Reinstate the scrollToView behaviour when selecting a rate SW-3169 * merge * . * PR fixes * fix: don't return notFound() * . * always include defaults for room packages * merge * merge * merge * Remove floating h1 for new select-rate Approved-by: Anton Gunnarsson --- .vscode/settings.json | 3 +- .../(standard)/details/page.tsx | 4 +- .../(standard)/select-rate-old/loading.tsx | 16 + .../(standard)/select-rate-old/page.tsx | 43 ++ .../(standard)/select-rate/page.tsx | 33 +- apps/scandic-web/app/[lang]/(live)/layout.tsx | 45 +- .../app/[lang]/(no-layout)/layout.tsx | 22 +- .../app/[lang]/(partner)/layout.tsx | 21 +- .../scandic-web/app/[lang]/webview/layout.tsx | 13 +- .../DestinationPage/Map/DynamicMap/index.tsx | 2 +- .../ErrorBoundary/ErrorBoundary.tsx | 28 +- .../BookingConfirmation/index.tsx | 5 +- .../EnterDetails/Payment/PaymentClient.tsx | 5 +- .../EnterDetails/SelectedRoom/index.tsx | 2 +- .../EnterDetails/Summary/_summary._test.tsx | 218 ------- .../HotelReservation/MyStay/index.tsx | 4 +- .../SelectRate/HotelInfoCard/index.tsx | 10 +- .../RoomsList/RoomListItem/Rates/index.tsx | 1 + .../SelectRate2/AvailabilityError.tsx | 36 ++ .../hotelDescription.module.css | 75 +++ .../HotelInfoCard/HotelDescription/index.tsx | 93 +++ .../HotelInfoCard/hotelInfoCard.module.css | 150 +++++ .../SelectRate2/HotelInfoCard/index.tsx | 183 ++++++ .../RateSummary/DesktopSummary.tsx | 347 +++++++++++ .../MobileSummary/Content/index.tsx | 349 +++++++++++ .../Content/summaryContent.module.css | 59 ++ .../RateSummary/MobileSummary/Room/index.tsx | 279 +++++++++ .../MobileSummary/Room/room.module.css | 57 ++ .../RateSummary/MobileSummary/index.tsx | 154 +++++ .../RateSummary/MobileSummary/mapRate.ts | 115 ++++ .../RateSummary/MobileSummary/mapToPrice.ts | 65 ++ .../MobileSummary/mobileSummary.module.css | 108 ++++ .../MobileSummary/summary.module.css | 106 ++++ .../RateSummary/MobileSummary/utils.ts | 13 + .../RoomsContainer/RateSummary/index.tsx | 83 +++ .../RateSummary/rateSummary.module.css | 122 ++++ .../RoomsContainer/RateSummary/utils.ts | 265 ++++++++ .../SelectedRoomPanel/index.tsx | 195 ++++++ .../selectedRoomPanel.module.css | 53 ++ .../Rooms/MultiRoomWrapper/index.tsx | 137 +++++ .../multiRoomWrapper.module.css | 55 ++ .../Rooms/MultiRoomWrapper/variants.ts | 21 + .../NoAvailabilityAlert/alert.module.css | 5 + .../Rooms/NoAvailabilityAlert/index.tsx | 118 ++++ .../bookingCodeFilter.module.css | 124 ++++ .../RoomsHeader/BookingCodeFilter/index.tsx | 199 ++++++ .../RemoveBookingCodeButton.tsx | 34 ++ .../Form/Checkboxes/PetRoomMessage/index.tsx | 41 ++ .../PetRoomMessage/petRoom.module.css | 8 + .../Form/Checkboxes/checkbox.module.css | 76 +++ .../Form/Checkboxes/index.tsx | 101 ++++ .../RoomPackageFilter/Form/form.module.css | 30 + .../RoomPackageFilter/Form/formValues.ts | 5 + .../RoomPackageFilter/Form/index.tsx | 79 +++ .../RoomsHeader/RoomPackageFilter/Modal.tsx | 76 +++ .../RoomsHeader/RoomPackageFilter/Popover.tsx | 53 ++ .../RoomsHeader/RoomPackageFilter/index.tsx | 134 +++++ .../roomPackageFilter.module.css | 142 +++++ .../RoomPackageFilter/usePackageLabels.ts | 21 + .../RoomsHeader/RoomPackageFilter/utils.ts | 19 + .../Rooms/RoomsHeader/index.tsx | 84 +++ .../Rooms/RoomsHeader/roomsHeader.module.css | 21 + .../RoomListItem/Details/RoomSize.tsx | 56 ++ .../RoomListItem/Details/ToggleSidePeek.tsx | 42 ++ .../RoomListItem/Details/details.module.css | 18 + .../RoomsList/RoomListItem/Details/index.tsx | 56 ++ .../breakfastMessage.module.css | 15 + .../BreakfastMessage/getBreakfastMessage.ts | 31 + .../Rates/BreakfastMessage/index.tsx | 80 +++ .../RoomsList/RoomListItem/Rates/Campaign.tsx | 284 +++++++++ .../RoomsList/RoomListItem/Rates/Code.tsx | 390 ++++++++++++ .../RoomListItem/Rates/Redemptions.tsx | 130 ++++ .../RoomsList/RoomListItem/Rates/Regular.tsx | 257 ++++++++ .../RoomsList/RoomListItem/Rates/index.tsx | 67 +++ .../RoomListItem/Rates/isSelected.ts | 68 +++ .../RoomListItem/Rates/totalPricePerNight.ts | 27 + .../RoomListItem/RoomImage/image.module.css | 48 ++ .../RoomListItem/RoomImage/index.tsx | 88 +++ .../RoomListItem/RoomNotAvailable/index.tsx | 27 + .../RoomNotAvailable/notAvailable.module.css | 8 + .../Rooms/RoomsList/RoomListItem/index.tsx | 64 ++ .../RoomListItem/listItemVariants.ts | 12 + .../RoomListItem/roomListItem.module.css | 25 + .../Rooms/RoomsList/RoomsListSkeleton.tsx | 19 + .../Rooms/RoomsList/ScrollToList.tsx | 52 ++ .../RoomsContainer/Rooms/RoomsList/index.tsx | 41 ++ .../Rooms/RoomsList/rooms.module.css | 11 + .../RoomsList/roomsListSkeleton.module.css | 17 + .../RoomsContainer/Rooms/index.tsx | 39 ++ .../RoomsContainer/Rooms/rooms.module.css | 8 + .../RoomsContainerSkeleton.module.css | 23 + .../RoomsContainer/RoomsContainerSkeleton.tsx | 20 + .../RoomsContainer/index.module.css | 6 + .../SelectRate2/RoomsContainer/index.tsx | 80 +++ .../SelectRate2/Tracking/index.tsx | 59 ++ .../SelectRate2/Tracking/tracking.ts | 107 ++++ .../SelectRate2/getValidDates.test.ts | 54 ++ .../SelectRate2/getValidDates.ts | 55 ++ .../HotelReservation/SelectRate2/index.tsx | 54 ++ .../HotelReservation/utils/index.tsx | 24 +- .../contexts/SelectRate/DebugButton.tsx | 68 +++ .../contexts/SelectRate/SelectRateContext.tsx | 565 ++++++++++++++++++ .../contexts/SelectRate/clearRooms.ts | 31 + .../findUnavailableSelectedRooms.ts | 26 + .../SelectRate/getSelectedPackages.test.ts | 72 +++ .../SelectRate/getSelectedPackages.ts | 23 + .../contexts/SelectRate/getTotalPrice.test.ts | 30 + .../contexts/SelectRate/getTotalPrice.ts | 280 +++++++++ .../SelectRate/includeRoomInfo.test.ts | 106 ++++ .../contexts/SelectRate/includeRoomInfo.ts | 39 ++ .../SelectRate/isRateSelected.test.ts | 117 ++++ .../contexts/SelectRate/isRateSelected.ts | 41 ++ apps/scandic-web/contexts/SelectRate/types.ts | 132 ++++ apps/scandic-web/eslint.config.mjs | 12 +- apps/scandic-web/hooks/useBreakpoint.ts | 27 + apps/scandic-web/hooks/useIsUserLoggedIn.ts | 9 + apps/scandic-web/package.json | 1 + apps/scandic-web/providers/RatesProvider.tsx | 4 +- .../stores/enter-details/helpers.ts | 4 +- apps/scandic-web/types/Prettify.ts | 3 + .../hotelReservation/selectRate/roomFilter.ts | 3 +- packages/common/dt/dt.ts | 1 + packages/trpc/lib/routers/hotels/query.ts | 7 +- .../schemas/roomAvailability/configuration.ts | 2 + packages/trpc/lib/routers/hotels/utils.ts | 4 +- yarn.lock | 32 + 126 files changed, 8751 insertions(+), 315 deletions(-) create mode 100644 apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/loading.tsx create mode 100644 apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/page.tsx delete mode 100644 apps/scandic-web/components/HotelReservation/EnterDetails/Summary/_summary._test.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/AvailabilityError.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/HotelInfoCard/HotelDescription/hotelDescription.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/HotelInfoCard/HotelDescription/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/HotelInfoCard/hotelInfoCard.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/HotelInfoCard/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/DesktopSummary.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/Content/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/Content/summaryContent.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/Room/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/Room/room.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/mapRate.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/mapToPrice.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/mobileSummary.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/summary.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/MobileSummary/utils.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/rateSummary.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RateSummary/utils.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/MultiRoomWrapper/SelectedRoomPanel/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/MultiRoomWrapper/SelectedRoomPanel/selectedRoomPanel.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/MultiRoomWrapper/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/MultiRoomWrapper/multiRoomWrapper.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/MultiRoomWrapper/variants.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/NoAvailabilityAlert/alert.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/NoAvailabilityAlert/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/BookingCodeFilter/bookingCodeFilter.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/BookingCodeFilter/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RemoveBookingCodeButton/RemoveBookingCodeButton.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/Checkboxes/PetRoomMessage/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/Checkboxes/PetRoomMessage/petRoom.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/Checkboxes/checkbox.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/Checkboxes/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/form.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/formValues.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Form/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Modal.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/Popover.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/roomPackageFilter.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/usePackageLabels.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/RoomPackageFilter/utils.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsHeader/roomsHeader.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Details/RoomSize.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Details/ToggleSidePeek.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Details/details.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Details/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/BreakfastMessage/breakfastMessage.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/BreakfastMessage/getBreakfastMessage.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/BreakfastMessage/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Campaign.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Code.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Redemptions.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Regular.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/isSelected.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/totalPricePerNight.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/RoomImage/image.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/RoomImage/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/RoomNotAvailable/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/RoomNotAvailable/notAvailable.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/listItemVariants.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomListItem/roomListItem.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/RoomsListSkeleton.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/ScrollToList.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/rooms.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/RoomsList/roomsListSkeleton.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/Rooms/rooms.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RoomsContainerSkeleton.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/RoomsContainerSkeleton.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/index.module.css create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/RoomsContainer/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/Tracking/index.tsx create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/Tracking/tracking.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/getValidDates.test.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/getValidDates.ts create mode 100644 apps/scandic-web/components/HotelReservation/SelectRate2/index.tsx create mode 100644 apps/scandic-web/contexts/SelectRate/DebugButton.tsx create mode 100644 apps/scandic-web/contexts/SelectRate/SelectRateContext.tsx create mode 100644 apps/scandic-web/contexts/SelectRate/clearRooms.ts create mode 100644 apps/scandic-web/contexts/SelectRate/findUnavailableSelectedRooms.ts create mode 100644 apps/scandic-web/contexts/SelectRate/getSelectedPackages.test.ts create mode 100644 apps/scandic-web/contexts/SelectRate/getSelectedPackages.ts create mode 100644 apps/scandic-web/contexts/SelectRate/getTotalPrice.test.ts create mode 100644 apps/scandic-web/contexts/SelectRate/getTotalPrice.ts create mode 100644 apps/scandic-web/contexts/SelectRate/includeRoomInfo.test.ts create mode 100644 apps/scandic-web/contexts/SelectRate/includeRoomInfo.ts create mode 100644 apps/scandic-web/contexts/SelectRate/isRateSelected.test.ts create mode 100644 apps/scandic-web/contexts/SelectRate/isRateSelected.ts create mode 100644 apps/scandic-web/contexts/SelectRate/types.ts create mode 100644 apps/scandic-web/hooks/useBreakpoint.ts create mode 100644 apps/scandic-web/hooks/useIsUserLoggedIn.ts create mode 100644 apps/scandic-web/types/Prettify.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 25fa6215f..bb1ea9114 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.experimental.useTsgo": false } diff --git a/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/details/page.tsx b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/details/page.tsx index 5e518c44f..2e9a8f84f 100644 --- a/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/details/page.tsx +++ b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/details/page.tsx @@ -41,8 +41,8 @@ export default async function DetailsPage( if (!booking) return notFound() - if (selectRoomParams.has("modifyRateIndex")) { - selectRoomParams.delete("modifyRateIndex") + if (selectRoomParams.has("activeRoomIndex")) { + selectRoomParams.delete("activeRoomIndex") } if ( diff --git a/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/loading.tsx b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/loading.tsx new file mode 100644 index 000000000..8bb921599 --- /dev/null +++ b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/loading.tsx @@ -0,0 +1,16 @@ +import { HotelInfoCardSkeleton } from "@/components/HotelReservation/SelectRate/HotelInfoCard" +import { RoomsContainerSkeleton } from "@/components/HotelReservation/SelectRate/RoomsContainer/RoomsContainerSkeleton" + +// Select Rate loading doesn't need a layout and wrapper +// to force loading.tsx to show again since refetch of +// availability happens client-side and only the RoomCards +// display a loading state since we already have the hotel +// data +export default function LoadingSelectRate() { + return ( + <> + + + + ) +} diff --git a/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/page.tsx b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/page.tsx new file mode 100644 index 000000000..45d483e4b --- /dev/null +++ b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate-old/page.tsx @@ -0,0 +1,43 @@ +import { notFound } from "next/navigation" + +import { parseSelectRateSearchParams } from "@scandic-hotels/booking-flow/utils/url" +import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking" + +import { combineRegExps, rateTypeRegex } from "@/constants/booking" + +import SelectRate from "@/components/HotelReservation/SelectRate" + +import type { LangParams, NextSearchParams, PageArgs } from "@/types/params" + +const singleRoomRateTypes = combineRegExps( + [rateTypeRegex.ARB, rateTypeRegex.VOUCHER], + "i" +) + +export default async function SelectRatePage( + props: PageArgs +) { + const params = await props.params + const searchParams = await props.searchParams + const booking = parseSelectRateSearchParams(searchParams) + + if (!booking) return notFound() + + const isMultiRoom = booking.rooms.length > 1 + const isRedemption = booking.searchType === SEARCH_TYPE_REDEMPTION + const isArbOrVoucher = booking.bookingCode + ? singleRoomRateTypes.test(booking.bookingCode) + : false + + if ((isMultiRoom && isRedemption) || (isMultiRoom && isArbOrVoucher)) { + return notFound() + } + + // If someone tries to update the url with + // a bookingCode also, then we need to remove it + if (isRedemption && searchParams.bookingCode) { + delete searchParams.bookingCode + } + + return +} diff --git a/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx index 45d483e4b..c4be283b8 100644 --- a/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx +++ b/apps/scandic-web/app/[lang]/(live)/(public)/hotelreservation/(standard)/select-rate/page.tsx @@ -1,11 +1,14 @@ import { notFound } from "next/navigation" import { parseSelectRateSearchParams } from "@scandic-hotels/booking-flow/utils/url" +import { logger } from "@scandic-hotels/common/logger" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { combineRegExps, rateTypeRegex } from "@/constants/booking" +import { getHotel } from "@/lib/trpc/memoizedRequests" -import SelectRate from "@/components/HotelReservation/SelectRate" +import SelectRate from "@/components/HotelReservation/SelectRate2" +import { SelectRateProvider } from "@/contexts/SelectRate/SelectRateContext" import type { LangParams, NextSearchParams, PageArgs } from "@/types/params" @@ -21,7 +24,10 @@ export default async function SelectRatePage( const searchParams = await props.searchParams const booking = parseSelectRateSearchParams(searchParams) - if (!booking) return notFound() + if (!booking) { + logger.debug("Invalid search params", searchParams) + notFound() + } const isMultiRoom = booking.rooms.length > 1 const isRedemption = booking.searchType === SEARCH_TYPE_REDEMPTION @@ -30,7 +36,11 @@ export default async function SelectRatePage( : false if ((isMultiRoom && isRedemption) || (isMultiRoom && isArbOrVoucher)) { - return notFound() + logger.debug( + "Invalid search params, can't have multiroom and redemption/voucher", + { isMultiRoom, isRedemption, isArbOrVoucher } + ) + notFound() } // If someone tries to update the url with @@ -39,5 +49,20 @@ export default async function SelectRatePage( delete searchParams.bookingCode } - return + const hotelData = await getHotel({ + hotelId: booking.hotelId, + isCardOnlyPayment: false, + language: params.lang, + }) + + if (!hotelData) { + logger.debug("Unable to find hotel data") + notFound() + } + + return ( + + + + ) } diff --git a/apps/scandic-web/app/[lang]/(live)/layout.tsx b/apps/scandic-web/app/[lang]/(live)/layout.tsx index 737e8285b..25c9f7d42 100644 --- a/apps/scandic-web/app/[lang]/(live)/layout.tsx +++ b/apps/scandic-web/app/[lang]/(live)/layout.tsx @@ -6,6 +6,7 @@ import "@scandic-hotels/design-system/style.css" import { ReactQueryDevtools } from "@tanstack/react-query-devtools" import Script from "next/script" import { SessionProvider } from "next-auth/react" +import { NuqsAdapter } from "nuqs/adapters/next/app" import { BookingFlowTrackingProvider } from "@scandic-hotels/booking-flow/BookingFlowTrackingProvider" import { Lang } from "@scandic-hotels/common/constants/language" @@ -65,27 +66,29 @@ export default async function RootLayout( locale={params.lang} messages={messages} > - - - - - -
- {bookingwidget} - {children} -