@roomstay/frontend 2.6.77-0 → 2.6.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{451.bundle.js → 151.bundle.js} +1 -1
- package/dist/177.bundle.js +1 -0
- package/dist/279.bundle.js +1 -0
- package/dist/288.bundle.js +1 -0
- package/dist/370.bundle.js +1 -0
- package/dist/430.bundle.js +1 -0
- package/dist/439.bundle.js +1 -0
- package/dist/446.bundle.js +1 -0
- package/dist/449.bundle.js +1 -0
- package/dist/535.bundle.js +2 -0
- package/dist/{349.bundle.js.LICENSE.txt → 535.bundle.js.LICENSE.txt} +1 -1
- package/dist/537.bundle.js +1 -0
- package/dist/619.bundle.js +1 -0
- package/dist/625.bundle.js +1 -0
- package/dist/659.bundle.js +1 -0
- package/dist/686.bundle.js +1 -0
- package/dist/873.bundle.js +1 -0
- package/dist/972.bundle.js +1 -0
- package/dist/978.bundle.js +1 -0
- package/dist/984.bundle.js +1 -0
- package/dist/main.bundle.js +1 -1
- package/dist/src/animations/AutoAutoHeight.d.ts +1 -1
- package/dist/src/api/ReservationAPI.js +9 -12
- package/dist/src/api/ReservationAPI.js.map +1 -1
- package/dist/src/components/User/Forms/ForgotPasswordForm.d.ts +1 -2
- package/dist/src/components/User/Forms/SignUpForm.d.ts +1 -2
- package/dist/src/components/User/Forms/VerifyEmailForm.d.ts +1 -2
- package/dist/src/components/generic/AgedBetweenLabel/AgedBetweenLabel.d.ts +1 -2
- package/dist/src/components/generic/Alert.d.ts +2 -2
- package/dist/src/components/generic/BEButton.d.ts +1 -1
- package/dist/src/components/generic/BackButton.d.ts +1 -2
- package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +0 -1
- package/dist/src/components/generic/BookingWizard/BookingWizard.js +1 -7
- package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
- package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.d.ts +2 -2
- package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +3 -3
- package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.d.ts +1 -1
- package/dist/src/components/generic/Card/IconNavCard/IconNavCard.d.ts +2 -2
- package/dist/src/components/generic/Countdown.d.ts +1 -2
- package/dist/src/components/generic/Currency.d.ts +1 -2
- package/dist/src/components/generic/DateRangePicker/DateRangePicker.d.ts +1 -2
- package/dist/src/components/generic/DateRangePicker/DateRangePickerDay.d.ts +1 -2
- package/dist/src/components/generic/DateRangePicker/DateRangePickerDays.d.ts +1 -2
- package/dist/src/components/generic/DateRangePicker/DateRangePickerMonth.d.ts +1 -2
- package/dist/src/components/generic/Distance.d.ts +1 -2
- package/dist/src/components/generic/Headline.d.ts +1 -1
- package/dist/src/components/generic/HtmlContentViewer.d.ts +1 -2
- package/dist/src/components/generic/InputGroup/InputGroup.d.ts +2 -2
- package/dist/src/components/generic/LineBreak.d.ts +1 -2
- package/dist/src/components/generic/Notification.d.ts +1 -1
- package/dist/src/components/generic/NumberIncrement.d.ts +1 -2
- package/dist/src/components/generic/Overlay/Overlay.d.ts +2 -2
- package/dist/src/components/generic/PageTitle/index.d.ts +1 -2
- package/dist/src/components/generic/PaymentCard/PaymentCard.d.ts +1 -2
- package/dist/src/components/generic/Pill.d.ts +1 -1
- package/dist/src/components/generic/Placeholder.d.ts +1 -2
- package/dist/src/components/generic/PromoCodeInput.d.ts +1 -2
- package/dist/src/components/generic/RecentSearchesCard.d.ts +1 -2
- package/dist/src/components/generic/RoomstayMark.d.ts +1 -2
- package/dist/src/components/generic/Select/Select.d.ts +1 -1
- package/dist/src/components/generic/Slider/Slider.d.ts +1 -1
- package/dist/src/components/generic/Tabs/TabRouteContainer.d.ts +2 -2
- package/dist/src/components/generic/Tooltip/Tooltip.d.ts +2 -2
- package/dist/src/components/generic/badging/SSLSecureBadge.d.ts +1 -2
- package/dist/src/components/generic/buttons/NextStepButton.d.ts +1 -2
- package/dist/src/components/generic/date/DatePicker.d.ts +1 -2
- package/dist/src/components/generic/date/DatePickerDay.d.ts +1 -2
- package/dist/src/components/generic/date/DatePickerDays.d.ts +1 -2
- package/dist/src/components/generic/date/DatePickerMonth.d.ts +1 -2
- package/dist/src/components/generic/date/DatePickerWeek.d.ts +1 -2
- package/dist/src/components/generic/date/FloatingDatePicker.d.ts +1 -1
- package/dist/src/components/generic/date/WeekViewSkeleton.d.ts +1 -2
- package/dist/src/components/generic/loader/ImageLoader.d.ts +1 -1
- package/dist/src/components/generic/loader/LargeLoader.d.ts +1 -2
- package/dist/src/components/generic/loader/OverlayLoader.d.ts +1 -2
- package/dist/src/components/generic/loader/SmallSpinner.d.ts +1 -2
- package/dist/src/components/generic/map/HotelLocationMap.d.ts +1 -2
- package/dist/src/components/generic/modal/ConfirmationModal.d.ts +1 -2
- package/dist/src/components/generic/modal/ErrorModal.d.ts +1 -1
- package/dist/src/components/generic/modal/SigninModal/UnauthenticatedUserModal.d.ts +1 -2
- package/dist/src/components/generic/modal/SimpleModal.d.ts +1 -1
- package/dist/src/components/generic/modal/TabbedModal.d.ts +1 -1
- package/dist/src/components/generic/radio/RadioFields.d.ts +1 -2
- package/dist/src/components/graphics/TravelerNotfound.d.ts +1 -2
- package/dist/src/components/iconComponents/BookNowPayLaterIcon.d.ts +1 -2
- package/dist/src/components/members/InlineSignUpSection.d.ts +1 -2
- package/dist/src/components/members/SignInModal/ExternalMemberModal.d.ts +1 -2
- package/dist/src/components/members/SignInModal/InternalMemberSignInModal.d.ts +1 -2
- package/dist/src/components/members/SignInModal/MemberPortalSignInModal.d.ts +1 -2
- package/dist/src/components/members/SignInModal/MemberSignInModal.d.ts +1 -2
- package/dist/src/components/navigation/Header.d.ts +1 -2
- package/dist/src/components/navigation/StepSelector.d.ts +1 -2
- package/dist/src/components/navigation/StepSelectorModal.d.ts +1 -2
- package/dist/src/components/pages/Account/Card/MemberCardItem.d.ts +1 -2
- package/dist/src/components/pages/PageColorComponent.d.ts +1 -2
- package/dist/src/components/reservation/ReservationItem.d.ts +1 -2
- package/dist/src/components/steps/DaysSelectedInformer.d.ts +1 -2
- package/dist/src/components/steps/MinimumNightStayPill.d.ts +1 -2
- package/dist/src/components/steps/addons/AddonCard.d.ts +1 -2
- package/dist/src/components/steps/addons/AddonList.d.ts +1 -2
- package/dist/src/components/steps/addons/AddonsNotFoundBlock.d.ts +1 -2
- package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.d.ts +1 -2
- package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.d.ts +1 -2
- package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.d.ts +1 -2
- package/dist/src/components/steps/confirmation/AccountDetails.d.ts +1 -2
- package/dist/src/components/steps/confirmation/PaymentDetails/ExistingCardPicker.d.ts +1 -2
- package/dist/src/components/steps/confirmation/PaymentInformation.d.ts +1 -2
- package/dist/src/components/steps/confirmation/PlanpayLabel.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +10 -11
- package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationCheckoutDifferencesModal.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationCommentsComponent.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationForm.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js +4 -11
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
- package/dist/src/components/steps/confirmation/StepConfirmationFormProvider.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationLimitedOffer.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationPoliciesSection.d.ts +1 -2
- package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.d.ts +1 -2
- package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffers.d.ts +1 -2
- package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersColumn.d.ts +1 -2
- package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.d.ts +1 -2
- package/dist/src/components/steps/date/OccupancyWarningBlock.d.ts +1 -2
- package/dist/src/components/steps/date/PeoplePicker.d.ts +1 -2
- package/dist/src/components/steps/date/PeoplePickerRow.d.ts +1 -2
- package/dist/src/components/steps/date/StepDatePricePerRoom.d.ts +1 -2
- package/dist/src/components/steps/date/StepOneDateRange.d.ts +1 -2
- package/dist/src/components/steps/date/StepOneDateRangePicker.d.ts +1 -2
- package/dist/src/components/steps/date/StepOneDateRangePickerLegend.d.ts +1 -2
- package/dist/src/components/steps/date/StepOneNextStepButton.d.ts +1 -2
- package/dist/src/components/steps/date/StepOneStatusPeople.d.ts +1 -2
- package/dist/src/components/steps/hotel/HotelCard.d.ts +1 -2
- package/dist/src/components/steps/hotel/HotelCardList.d.ts +1 -2
- package/dist/src/components/steps/hotel/HotelCardModal.d.ts +1 -2
- package/dist/src/components/steps/hotel/HotelInfoPerksRow.d.ts +1 -2
- package/dist/src/components/steps/hotel/HotelSearchParameters.d.ts +1 -2
- package/dist/src/components/steps/hotel/NoHotelsAvailable.d.ts +1 -2
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +5 -0
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/ImageGallerySlider.d.ts +1 -2
- package/dist/src/components/steps/room/InactivityWindow.d.ts +1 -2
- package/dist/src/components/steps/room/LargeRoomCard.d.ts +1 -2
- package/dist/src/components/steps/room/NoRoomsFoundBlock.d.ts +1 -2
- package/dist/src/components/steps/room/RatesNotFoundBlock.d.ts +1 -2
- package/dist/src/components/steps/room/RoomList.d.ts +1 -2
- package/dist/src/components/steps/room/RoomModal.d.ts +1 -2
- package/dist/src/components/steps/room/RoomModalPerkRow.d.ts +1 -2
- package/dist/src/components/steps/room/StepRoomAlertBlocks.d.ts +1 -2
- package/dist/src/components/steps/room/StepRoomBestRateAlert.d.ts +1 -2
- package/dist/src/components/steps/room/StepRoomErrorForm.d.ts +1 -2
- package/dist/src/components/steps/room/StepRoomHotelDetails.d.ts +1 -2
- package/dist/src/components/steps/room/StepRoomSortBy.d.ts +1 -2
- package/dist/src/components/steps/room/StepRoomSummaryAndButton.d.ts +1 -2
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.d.ts +1 -2
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.d.ts +1 -2
- package/dist/src/components/steps/room/TripteaseLodgingSearchSchema.d.ts +1 -2
- package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.d.ts +1 -2
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummary.d.ts +1 -2
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.d.ts +1 -2
- package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.d.ts +1 -2
- package/dist/src/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker.d.ts +1 -2
- package/dist/src/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker.d.ts +1 -2
- package/dist/src/components/steps/room/roomBuilderProgress/NumberOfInfantsPicker.d.ts +1 -2
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgress.d.ts +1 -2
- package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/RoomDetails.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/RoomDetailsPerkBlock.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/RoomDetailsPriceBlock.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/BookNowButton.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/MembersOnlyRow.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.d.ts +2 -3
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +26 -15
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.d.ts +2 -3
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateListPromotion/RoomRateListPromotion.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.d.ts +1 -2
- package/dist/src/components/steps/room/roomDetails/unavailableRoom/UnavailableRoom.d.ts +1 -2
- package/dist/src/components/steps/room/roomFilter/AppliedFiltersBlock.d.ts +1 -2
- package/dist/src/components/steps/room/roomFilter/RoomFilterOverlay.d.ts +1 -2
- package/dist/src/components/steps/room/roomFilter/RoomFilterPriceSlider.d.ts +1 -2
- package/dist/src/components/steps/room/roomFilter/RoomFilterRateType.d.ts +1 -2
- package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.d.ts +1 -2
- package/dist/src/components/summary/BEMobileSummary.d.ts +1 -2
- package/dist/src/components/summary/BEMobileSummaryModal.d.ts +1 -2
- package/dist/src/components/summary/BESummary.d.ts +1 -2
- package/dist/src/components/summary/BESummaryAddonRow.d.ts +1 -2
- package/dist/src/components/summary/BESummaryPerkBlock.d.ts +1 -2
- package/dist/src/components/summary/BESummaryPrivacyPolicy.d.ts +1 -2
- package/dist/src/components/summary/BESummaryRoomRow.d.ts +1 -2
- package/dist/src/components/summary/BESummaryRoomRow.js +1 -1
- package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
- package/dist/src/components/summary/TransportDistanceFromHotelBlock.d.ts +1 -2
- package/dist/src/contexts/BasketContext/BasketContextWrapper.d.ts +1 -1
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js +11 -63
- package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.d.ts +1 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.d.ts +2 -2
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +0 -1
- package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationFormContext.d.ts +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +2 -3
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepErrorModal.d.ts +1 -2
- package/dist/src/contexts/ErrorContext.d.ts +1 -1
- package/dist/src/contexts/FullPageEngineContext/EngineBodyLayout.d.ts +1 -2
- package/dist/src/contexts/FullPageEngineContext/EnginePageLayout.d.ts +1 -2
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.d.ts +1 -2
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +2 -10
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/HotelOverridesContext.d.ts +1 -1
- package/dist/src/contexts/ModalContext.d.ts +1 -1
- package/dist/src/contexts/NotificationContext.d.ts +1 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +0 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.d.ts +1 -2
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +0 -1
- package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
- package/dist/src/engines/FullPageBookingEngine/FullPageBookingEngineElement.d.ts +1 -2
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.d.ts +2 -2
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +0 -3
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.d.ts +1 -2
- package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.d.ts +1 -2
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +0 -1
- package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
- package/dist/src/hooks/useNextStepAction.d.ts +1 -2
- package/dist/src/icons/Check.d.ts +1 -2
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +2 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Api/HotelDTO.d.ts +0 -1
- package/dist/src/models/Api/HotelDTO.js.map +1 -1
- package/dist/src/models/BasketRow.d.ts +1 -2
- package/dist/src/models/BasketRow.js +2 -32
- package/dist/src/models/BasketRow.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +0 -1
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/models/Room/RoomRate.d.ts +3 -0
- package/dist/src/models/Room/RoomRate.js +6 -1
- package/dist/src/models/Room/RoomRate.js.map +1 -1
- package/dist/src/models/RoomstaySession.d.ts +0 -1
- package/dist/src/models/RoomstaySession.js.map +1 -1
- package/dist/src/pages/account/AccountHome/AccountHomePage.d.ts +1 -2
- package/dist/src/pages/account/AccountOutlet.d.ts +1 -1
- package/dist/src/pages/account/AccountRouter.d.ts +1 -2
- package/dist/src/pages/account/ChangePassword/AccountChangePasswordPage.d.ts +1 -2
- package/dist/src/pages/account/Details/AccountDetailsCardsPage.d.ts +1 -2
- package/dist/src/pages/account/Details/AccountDetailsProfilePage.d.ts +1 -2
- package/dist/src/pages/account/Help/AccountHelpPage.d.ts +1 -2
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.d.ts +1 -2
- package/dist/src/pages/account/Reservations/AccountReservationsPage.d.ts +1 -2
- package/dist/src/pages/findReservation/FindReservation.d.ts +1 -2
- package/dist/src/pages/findReservation/FindReservationResults.d.ts +1 -2
- package/dist/src/pages/findReservation/ReservationRow.d.ts +1 -2
- package/dist/src/pages/findReservation/ReservationRowModal.d.ts +1 -2
- package/dist/src/pages/hotel/HotelInfo.d.ts +1 -2
- package/dist/src/pages/hotel/HotelInfoPlaceholder.d.ts +1 -2
- package/dist/src/pages/steps/StepAddon/StepAddon.d.ts +1 -2
- package/dist/src/pages/steps/StepAddon/StepAddonComponent.d.ts +1 -2
- package/dist/src/pages/steps/StepAddon/StepAddonLoader.d.ts +1 -2
- package/dist/src/pages/steps/StepConfirmation/StepConfirmationComponent.d.ts +1 -2
- package/dist/src/pages/steps/StepConfirmation/StepConfirmationLoader.d.ts +1 -2
- package/dist/src/pages/steps/StepDate/StepDate.d.ts +1 -2
- package/dist/src/pages/steps/StepDate/StepDateComponent.d.ts +1 -2
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.d.ts +1 -2
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomLoader.d.ts +1 -2
- package/dist/src/pages/steps/StepGuide.d.ts +1 -1
- package/dist/src/pages/steps/StepHotel/StepHotel.d.ts +1 -2
- package/dist/src/pages/steps/StepHotel/StepHotelComponent.d.ts +1 -2
- package/dist/src/pages/steps/StepHotel/StepHotelLoader.d.ts +1 -2
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.d.ts +1 -2
- package/dist/src/pages/steps/StepRoom/StepRoomLoader.d.ts +1 -2
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.d.ts +1 -2
- package/dist/src/providers/DIProvider.d.ts +1 -2
- package/dist/src/providers/FeatureProvider.js +0 -2
- package/dist/src/providers/FeatureProvider.js.map +1 -1
- package/dist/src/providers/feature/Feature.d.ts +0 -2
- package/dist/src/providers/feature/Feature.js +0 -4
- package/dist/src/providers/feature/Feature.js.map +1 -1
- package/dist/src/providers/storage/SessionProvider.js +0 -2
- package/dist/src/providers/storage/SessionProvider.js.map +1 -1
- package/dist/src/routes/NaturallyProgressedStepRoute.d.ts +1 -2
- package/dist/src/stories/BookingWizard.stories.d.ts +1 -1
- package/dist/src/stories/ConfirmationModal.stories.d.ts +1 -2
- package/dist/src/stories/DateRangePicker.stories.d.ts +4 -5
- package/dist/src/stories/ErrorModal.stories.d.ts +1 -2
- package/dist/src/stories/EventCarousel.stories.d.ts +2 -2
- package/dist/src/stories/FloatingDateRangePicker.stories.d.ts +2 -2
- package/dist/src/stories/IconNavCard.stories.d.ts +2 -2
- package/dist/src/stories/NumberIncrement.stories.d.ts +1 -2
- package/dist/src/stories/PaymentCard.stories.d.ts +2 -3
- package/dist/src/stories/RadioButtonGroup.stories.d.ts +3 -3
- package/dist/src/stories/Select.stories.d.ts +3 -3
- package/dist/src/stories/SimpleModal.stories.d.ts +1 -2
- package/dist/src/stories/Slider.stories.d.ts +2 -3
- package/dist/src/stories/TabbedModal.stories.d.ts +1 -2
- package/dist/src/stories/Tabs.stories.d.ts +1 -1
- package/dist/src/translations/Translation.d.ts +1 -4
- package/dist/src/translations/Translation.js +1 -4
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +1 -4
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/TotalCalculator.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/tests/offline/entry/config/hotelSpecDefault.d.ts +1 -2
- package/dist/vendors.bundle.js +1 -1
- package/dist/vendors.bundle.js.LICENSE.txt +6 -6
- package/package.json +1 -1
- package/dist/153.bundle.js +0 -1
- package/dist/176.bundle.js +0 -1
- package/dist/273.bundle.js +0 -1
- package/dist/292.bundle.js +0 -1
- package/dist/316.bundle.js +0 -1
- package/dist/349.bundle.js +0 -2
- package/dist/352.bundle.js +0 -1
- package/dist/41.bundle.js +0 -1
- package/dist/479.bundle.js +0 -1
- package/dist/534.bundle.js +0 -1
- package/dist/557.bundle.js +0 -1
- package/dist/620.bundle.js +0 -1
- package/dist/696.bundle.js +0 -1
- package/dist/734.bundle.js +0 -1
- package/dist/83.bundle.js +0 -1
- package/dist/910.bundle.js +0 -1
- package/dist/922.bundle.js +0 -1
- package/dist/99.bundle.js +0 -1
- package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.d.ts +0 -7
- package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js +0 -54
- package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js.map +0 -1
- package/dist/src/providers/feature/ConfirmationImportantInformationFeature.d.ts +0 -10
- package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js +0 -13
- package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js.map +0 -1
|
@@ -244,8 +244,6 @@ function BasketContextWrapper(props) {
|
|
|
244
244
|
queryParameters[AppQueryParameters_1.EAppQueryParameters.Children] = row.getChildren().toString();
|
|
245
245
|
if (row.getAdults() !== undefined)
|
|
246
246
|
queryParameters[AppQueryParameters_1.EAppQueryParameters.Adults] = row.getAdults().toString();
|
|
247
|
-
if (row.getRoomCode() !== '')
|
|
248
|
-
queryParameters[AppQueryParameters_1.EAppQueryParameters.Room] = row.getRoomCode();
|
|
249
247
|
updateQueryParams(queryParameters);
|
|
250
248
|
};
|
|
251
249
|
const updateBasketRow = (row, updateGlobalDates = true) => {
|
|
@@ -282,16 +280,6 @@ function BasketContextWrapper(props) {
|
|
|
282
280
|
return (0, rxjs_1.timer)(scalingDuration);
|
|
283
281
|
}), (0, operators_1.finalize)(() => console.log('We are done!')));
|
|
284
282
|
};
|
|
285
|
-
const getTotalQuoteDepositFees = () => {
|
|
286
|
-
//Retrieves the total quote deposit's fees
|
|
287
|
-
const totalQuoteFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
|
|
288
|
-
return totalQuoteFees;
|
|
289
|
-
};
|
|
290
|
-
const getTotalQuoteFullPaymentFees = () => {
|
|
291
|
-
//Retrieves the total quote full payment's fees
|
|
292
|
-
const totalQuoteFullPaymentFees = returnAggregationAndTranslation((row) => row.quoteDetails ? row.quoteDetails.fullPaymentAmount - row.quoteDetails.totalRate : 0);
|
|
293
|
-
return totalQuoteFullPaymentFees;
|
|
294
|
-
};
|
|
295
283
|
const updateBasketFeeRows = () => {
|
|
296
284
|
var _a, _b;
|
|
297
285
|
const validBasketRows = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows.filter((row) => row.isValid());
|
|
@@ -421,8 +409,7 @@ function BasketContextWrapper(props) {
|
|
|
421
409
|
setBasketFeeRows(newFees);
|
|
422
410
|
};
|
|
423
411
|
const quoteQueryID = (0, react_1.useMemo)(() => {
|
|
424
|
-
|
|
425
|
-
if (!hotel || !requireQuote) {
|
|
412
|
+
if (!hotel || !(hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
|
|
426
413
|
return '';
|
|
427
414
|
}
|
|
428
415
|
return BookingAPI_1.default.Reservation.buildQuoteQueryID(currentBasketRows, isExternalMemberHotel ? memberNumber : undefined);
|
|
@@ -657,33 +644,13 @@ function BasketContextWrapper(props) {
|
|
|
657
644
|
getNumberOfRooms: (withTranslation = false) => {
|
|
658
645
|
return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation_1.Translation.Step.Date.Room : undefined);
|
|
659
646
|
},
|
|
660
|
-
/**
|
|
661
|
-
* Calculates the total booking price, including:
|
|
662
|
-
* - Nightly rates
|
|
663
|
-
* - Deposit fees
|
|
664
|
-
* - Add-ons
|
|
665
|
-
*
|
|
666
|
-
* @returns {number} The total booking price.
|
|
667
|
-
*/
|
|
668
647
|
getTotalPrice: () => {
|
|
669
|
-
let totalPrice = 0;
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
if (!(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge)) {
|
|
675
|
-
// **Previous logic**: totalPrice = total Base rate + Fees on Deposit amount
|
|
676
|
-
// const totalQuoteFees = getTotalQuoteDepositFees();
|
|
677
|
-
// totalPrice += totalQuoteFees;
|
|
678
|
-
// **Updated logic**: totalPrice = total Base rate + its fees
|
|
679
|
-
totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.fullPaymentAmount : 0); });
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
else {
|
|
683
|
-
// Otherwise, calculate the total price from valid rows
|
|
684
|
-
totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice() : 0); });
|
|
648
|
+
let totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice() : 0); });
|
|
649
|
+
// If the hotel requires a deposit, and enableCreditCardSurchase is false, we need to add the deposit fees to the total price.
|
|
650
|
+
if ((hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) && !(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge) && (hotel === null || hotel === void 0 ? void 0 : hotel.addDepositFeeToBookingTotal)) {
|
|
651
|
+
const depositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
|
|
652
|
+
totalPrice += depositFees;
|
|
685
653
|
}
|
|
686
|
-
// Add prices from any additional add-ons in the booking basket
|
|
687
654
|
basketAddonRows.forEach((row) => {
|
|
688
655
|
totalPrice += row.getTotalPrice();
|
|
689
656
|
});
|
|
@@ -693,11 +660,6 @@ function BasketContextWrapper(props) {
|
|
|
693
660
|
});
|
|
694
661
|
return totalPrice;
|
|
695
662
|
},
|
|
696
|
-
/**
|
|
697
|
-
* Returns the total quote deposit amount, excluding fees.
|
|
698
|
-
*
|
|
699
|
-
* @returns {number} The sum of the quote deposit.
|
|
700
|
-
*/
|
|
701
663
|
getTotalDeposit: () => {
|
|
702
664
|
const totalDeposit = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalDeposit : 0); });
|
|
703
665
|
return totalDeposit;
|
|
@@ -710,7 +672,7 @@ function BasketContextWrapper(props) {
|
|
|
710
672
|
let totalFees = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalFees() : 0); });
|
|
711
673
|
if (totalFees == 0 && (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
|
|
712
674
|
// Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.
|
|
713
|
-
totalFees =
|
|
675
|
+
totalFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
|
|
714
676
|
}
|
|
715
677
|
basketAddonRows.forEach((row) => {
|
|
716
678
|
totalFees += row.getTotalFees();
|
|
@@ -749,26 +711,12 @@ function BasketContextWrapper(props) {
|
|
|
749
711
|
const fees = (0, Fee_1.feeMapToArray)(feeMap);
|
|
750
712
|
return (0, Fee_1.sortFees)(fees, (hotel === null || hotel === void 0 ? void 0 : hotel.fees) || []);
|
|
751
713
|
},
|
|
752
|
-
/**
|
|
753
|
-
* Calculates the total amount to be paid immediately, including:
|
|
754
|
-
* - Required deposit
|
|
755
|
-
* - Deposit fees (if applicable)
|
|
756
|
-
* - Add-ons
|
|
757
|
-
*
|
|
758
|
-
* @returns {number} The total amount to pay now.
|
|
759
|
-
*/
|
|
760
714
|
getTotalPayNow: () => {
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
const totalDepositFees = getTotalQuoteDepositFees();
|
|
765
|
-
totalDeposit += totalDepositFees;
|
|
715
|
+
if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
|
|
716
|
+
const depositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
|
|
717
|
+
return workingContext.getTotalDeposit() + depositFees;
|
|
766
718
|
}
|
|
767
|
-
|
|
768
|
-
basketAddonRows.forEach((row) => {
|
|
769
|
-
totalDeposit += row.getTotalPrice();
|
|
770
|
-
});
|
|
771
|
-
return totalDeposit;
|
|
719
|
+
return workingContext.getTotalPrice();
|
|
772
720
|
},
|
|
773
721
|
/**
|
|
774
722
|
* Pops the provided row from the current basket array
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AuthenticationContextProvider,\n BasketContext,\n BasketContextType,\n BookingEngineContext,\n ErrorHandler,\n HotelOverridesContext,\n NotificationContext,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport {\n calculateFeeAmount,\n EAddonPricingType,\n EBookingFlow,\n EFeeType,\n getFilteredBookingAddonFees,\n getFilteredBookingFees,\n getFilteredBookingRateFees,\n IBookingQuoteResponse,\n IPencilReservationResponse,\n} from '@roomstay/core';\nimport { API_DATE_FORMAT } from 'api/BaseAPI';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport { useUpdateQueryParameters } from 'hooks/UpdateQueryParameters';\nimport { EAppQueryParameters } from 'models/AppQueryParameters';\nimport React, { useCallback, useContext, useEffect, useMemo, useReducer, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport { defer, Observable, throwError, timer } from 'rxjs';\nimport { finalize, mergeMap, retryWhen } from 'rxjs/operators';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text from '@/components/generic/Text';\nimport { MemberSignInModal } from '@/components/members/SignInModal/MemberSignInModal';\nimport { PromoCodeVerificationAlert } from '@/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport { Addon } from '@/models/Addon/Addon';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, sortFees } from '@/models/Fee';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport StepAddon from '@/pages/steps/StepAddon/StepAddon';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport { usePromotionContainer } from '@/providers/PromotionProvider';\nimport DataLayer from '@/util/DataLayer';\nimport { debounce } from '@/util/Debounce';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StepManager from '@/util/StepManager';\nimport StringHelper from '@/util/StringHelper';\n\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const updateQueryParams = useUpdateQueryParameters();\n const navigate = useNavigate();\n const historyConsistentPush = useHistoryConsistentPush();\n const { signedInUser, isExternalMemberHotel, memberNumber, memberOnlyModalPromotion } = useSignedInMember();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n\n const { showPromoCodeAlert } = useContext(HotelOverridesContext);\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n const [pencilId, setPencilId] = useState<string | undefined>(initialSession?.pencilId ?? undefined);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow | null>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n\n // This is where we store the fees that aren't included in the rates/addons.\n const [basketFeeRows, setBasketFeeRows] = useState<ItemisedFee[]>([]);\n\n const [isLoadingPriceQuote, setIsLoadingPriceQuote] = useState(false);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [isDatePickerOpen, setIsDatePickerOpen] = useState<boolean>(false);\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(initialSession?.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n const debounceUseEffect = useCallback(\n debounce(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n DataLayer.instance.sendDateSelection({\n startDate,\n endDate,\n adult: selectedBasketRow?.getAdults(),\n children: selectedBasketRow?.getChildren(),\n infant: selectedBasketRow?.getInfants(),\n });\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n //When trying to call row.discardGuestsState() in somewhere, we got conflicted here with BasketRow.setStartDate& BasketRow.setEndDate, it set back to previous startDate/endDate\n //Use debounceUseEffect to fix it\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, 500),\n [startDate, endDate]\n );\n\n useEffect(() => {\n debounceUseEffect();\n }, [debounceUseEffect]);\n\n useEffect(() => {\n if (signedInUser) {\n const promoCode = signedInUser.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n updateBasketRow(row);\n });\n }\n }\n }, [signedInUser]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n useEffect(() => {\n updateBasketFeeRows();\n }, [currentBasketRows, basketAddonRows]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow, skipUpdate = false) => {\n if (row && hotel?.memberOnlyPromoCode && signedInUser && !row.getPromoCode()) {\n row.setPromoCode(hotel.memberOnlyPromoCode);\n\n if (!skipUpdate) {\n workingContext.updateBasketRow(row);\n }\n }\n };\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (deletedBasketRow?: BasketRow): BasketRow | null => {\n if (!currentBasketRows.length) return null;\n // Filter out the excluded basket row if provided\n const filteredRows = deletedBasketRow ? currentBasketRows.filter((row) => row.getID() !== deletedBasketRow.getID()) : currentBasketRows;\n\n // Find the first row that does not have a rate assigned\n const availableRow = filteredRows.find((row) => !row.getRate());\n\n // Return a row without a rate if found\n // If no such row exists , return the last row in the list\n return availableRow ?? filteredRows[filteredRows.length - 1];\n };\n\n const updateQueryParameters = (row: BasketRow | null) => {\n if (!row) return;\n const queryParameters: Record<string, string> = {};\n if (row.getEndDate()) {\n let startDate = selectedBasketRow?.getStartDate();\n if (!startDate) {\n startDate = row.getStartDate();\n }\n queryParameters[EAppQueryParameters.Arrive] = startDate.format(API_DATE_FORMAT);\n queryParameters[EAppQueryParameters.Depart] = row.getEndDate().format(API_DATE_FORMAT);\n }\n if (row.getPromoCode()) queryParameters[EAppQueryParameters.PromoCode] = row.getPromoCode();\n if (row.getChildren() !== undefined) queryParameters[EAppQueryParameters.Children] = row.getChildren().toString();\n if (row.getAdults() !== undefined) queryParameters[EAppQueryParameters.Adults] = row.getAdults().toString();\n if (row.getRoomCode() !== '') queryParameters[EAppQueryParameters.Room] = row.getRoomCode();\n\n updateQueryParams(queryParameters);\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n updateQueryParameters(row);\n\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n // Here we check if there is no promocode on the row. If there isn't this function will check for existing member details\n // and automatically apply a member only promocode\n checkAndApplyMemberOnlyPromo(row, true);\n\n basketRowReducer({ method: 'Update', row });\n };\n\n const syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const genericRetryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 0,\n }: {\n maxRetryAttempts?: number;\n scalingDuration?: number;\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n if (retryAttempt > maxRetryAttempts) {\n return throwError(error);\n }\n console.log(`Attempt ${retryAttempt}: retrying in ${scalingDuration}ms`);\n return timer(scalingDuration);\n }),\n finalize(() => console.log('We are done!'))\n );\n };\n\n const getTotalQuoteDepositFees = (): number => {\n //Retrieves the total quote deposit's fees\n const totalQuoteFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return totalQuoteFees;\n };\n\n const getTotalQuoteFullPaymentFees = (): number => {\n //Retrieves the total quote full payment's fees\n const totalQuoteFullPaymentFees = returnAggregationAndTranslation((row) =>\n row.quoteDetails ? row.quoteDetails.fullPaymentAmount - row.quoteDetails.totalRate : 0\n ) as number;\n return totalQuoteFullPaymentFees;\n };\n\n const updateBasketFeeRows = () => {\n const validBasketRows = currentBasketRows?.filter((row) => row.isValid());\n\n if (!validBasketRows.length || !hotel?.fees) {\n setBasketFeeRows([]);\n return;\n }\n\n const hotelFees = hotel.fees ?? [];\n const newFees: ItemisedFee[] = [];\n\n /**\n * Booking Fees.\n * These fees aren't related to an addon or a room, they're just on the booking itself.\n */\n let totalBookingFees = 0;\n for (const fee of getFilteredBookingFees(hotelFees)) {\n const feeAmount = calculateFeeAmount(fee);\n\n newFees.push({ hotelFee: fee, amount: feeAmount });\n totalBookingFees += feeAmount;\n }\n\n // We need to add percentage fees on top of the Booking Fees, if the percentage fee is configured to include previous fees in calculation.\n if (totalBookingFees > 0) {\n let baseAmount = totalBookingFees;\n\n for (const fee of hotelFees.filter((fee) => fee.feeType === EFeeType.PercentageOfBooking && fee.includePreviousFeesInCalculation && !fee.extractFeeFromRates)) {\n const feeAmount = calculateFeeAmount(fee, {\n baseAmount,\n });\n\n console.log(`Booking Fees: Calculated ${fee.name} fee amount on ${baseAmount} = ${feeAmount}`);\n newFees.push({ hotelFee: fee, amount: feeAmount });\n baseAmount += feeAmount;\n }\n }\n\n /**\n * Booking Rate Fees.\n */\n for (const row of validBasketRows) {\n const initialCost = row.getTotalPrice(true) ?? 0;\n let totalFeesAdded = 0;\n let totalFeesIncludedInRates = 0;\n\n const rateFees = getFilteredBookingRateFees(hotelFees);\n\n // In order to calculate fees that were removed from the incoming rates using extractFeeFromRates option, we need\n // to know which fees were removed. When there's more than 1 percentage fee that's been removed, we can't\n // work backwards to figure out what the original price was without this.\n const removedPercentages = rateFees.filter((fee) => fee.extractFeeFromRates).map((fee) => fee.amount);\n\n for (const fee of rateFees) {\n if (fee.extractFeeFromRates || fee.includeInRates) {\n // For these fees, we need to add the amount to the the totalFeesIncludedInRates variable, so that we can\n // correctly calculate subsequent fees that are using the 'extractFeeFromRates' option.\n const baseAmount = fee.extractFeeFromRates ? initialCost : initialCost + totalFeesIncludedInRates;\n totalFeesIncludedInRates += calculateFeeAmount(fee, {\n baseAmount,\n numberOfNights: row.getNumberOfDays(),\n extractedFromRates: fee.extractFeeFromRates,\n removedPercentages,\n });\n }\n\n let feeCalculationBaseAmount: number;\n if (fee.extractFeeFromRates) {\n // If this fee is included in the rates, there's no additional fee to calculate.\n feeCalculationBaseAmount = fee.includeInRates ? 0 : initialCost;\n } else if (fee.includeInRates) {\n // These fees are already included in the rates, we only need to calculate \"fees on fees\" if applicable.\n if (!fee.includePreviousFeesInCalculation) {\n continue;\n }\n\n feeCalculationBaseAmount = totalFeesAdded;\n } else {\n // This fee either needs to include the full running total, or just the initial cost.\n feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? initialCost + totalFeesAdded + totalFeesIncludedInRates : initialCost;\n }\n\n const feeAmount = calculateFeeAmount(fee, {\n baseAmount: feeCalculationBaseAmount,\n numberOfNights: row.getNumberOfDays(),\n extractedFromRates: fee.extractFeeFromRates,\n removedPercentages,\n });\n\n newFees.push({ hotelFee: fee, amount: feeAmount });\n\n if (!fee.extractFeeFromRates) {\n totalFeesAdded += feeAmount;\n }\n }\n }\n\n /**\n * Booking Addon Fees.\n */\n const validBasketAddonRows = basketAddonRows.filter((row) => row.isValid());\n for (const row of validBasketAddonRows) {\n const initialCost = row.getTotalPrice() - row.getTotalFees();\n let totalFeesAdded = 0;\n let totalFeesIncludedInRates = 0;\n\n const addonFees = getFilteredBookingAddonFees(hotelFees).filter((fee) => fee.appliesToAddons);\n const removedPercentages = addonFees.filter((fee) => fee.extractFeeFromRates).map((fee) => fee.amount);\n\n const hasItemisedFees = row.getItemisedFees(hotelFees).length > 0;\n\n for (const fee of addonFees) {\n if ((fee.extractFeeFromRates || fee.includeInRates) && hasItemisedFees) {\n const baseAmount = fee.extractFeeFromRates ? initialCost : initialCost + totalFeesIncludedInRates;\n totalFeesIncludedInRates += calculateFeeAmount(fee, {\n baseAmount,\n numberOfNights: row.getNightModifier(),\n extractedFromRates: fee.extractFeeFromRates,\n removedPercentages,\n });\n }\n\n let feeCalculationBaseAmount: number;\n if (fee.extractFeeFromRates) {\n feeCalculationBaseAmount = fee.includeInRates && hasItemisedFees ? 0 : initialCost;\n } else if (fee.includeInRates && hasItemisedFees) {\n feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? totalFeesAdded : 0;\n } else {\n feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? initialCost + totalFeesAdded + totalFeesIncludedInRates : initialCost;\n }\n\n const feeAmount = calculateFeeAmount(fee, {\n baseAmount: feeCalculationBaseAmount,\n numberOfNights: row.getNightModifier(),\n extractedFromRates: fee.extractFeeFromRates && !fee.includeInRates,\n removedPercentages,\n });\n\n newFees.push({ hotelFee: fee, amount: feeAmount });\n\n if (!fee.extractFeeFromRates) {\n totalFeesAdded += feeAmount;\n }\n }\n }\n\n setBasketFeeRows(newFees);\n };\n\n const quoteQueryID: string = useMemo(() => {\n const requireQuote = hotel?.requireDeposit || hotel?.bookingFlow !== EBookingFlow.Default;\n\n if (!hotel || !requireQuote) {\n return '';\n }\n\n return API.Reservation.buildQuoteQueryID(currentBasketRows, isExternalMemberHotel ? memberNumber : undefined);\n }, [currentBasketRows, isExternalMemberHotel, memberNumber, hotel?.hotelID]);\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n basketFeeRows,\n updateBasketFeeRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\n isLoadingPriceQuote,\n\n loadedPromotion,\n quoteQueryID,\n pencilId,\n\n /**\n * Adds a new basket row and applies relevant updates:\n * - Synchronizes the selected date range.\n * - Applies any applicable member-only promotions.\n * - Ensures proper selection logic for the basket row.\n *\n * Selection logic:\n * - If the basket is empty, the newly added row is automatically selected.\n * - If a row is already selected:\n * - If the selected row has an assigned rate, update the selection to the new row.\n * - Otherwise, keep the current selection (allowing continued editing of the existing row).\n * - If no row is selected, set the new row as the selected row.\n *\n * @param {BasketRow} row - The basket row to add.\n */\n addBasketRow: (row: BasketRow) => {\n syncSelectedDateRange(row);\n checkAndApplyMemberOnlyPromo(row);\n\n // Determine if the basket is currently empty\n const isEmptyRows = !currentBasketRows.length;\n if (isEmptyRows) {\n // If empty, set the newly added row as the selected basket row\n setSelectedBasketRow(row);\n } else {\n if (selectedBasketRow) {\n // Determine if the currently selected row has an assigned rate\n const isSelectedRowAssignedRate = selectedBasketRow && selectedBasketRow.getRate();\n if (isSelectedRowAssignedRate) {\n // If the selected row has a rate, update the selection to the new row\n setSelectedBasketRow(row);\n }\n } else {\n // If no row is currently selected, set the new row as the selected basket row\n setSelectedBasketRow(row);\n }\n }\n basketRowReducer({ method: 'Add', row });\n },\n\n initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow | null = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n selectedBasketRow.setPreGuestsState();\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel?.hotelID as string);\n }\n\n basketRow.setAuxiliaryFilter(beContext.currentGroupedRoomFilters);\n beContext.setCurrentGroupedRoomFilters({});\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(\n rate,\n basketRow.getNumberOfDays(),\n startDate ?? basketRow.getStartDate(),\n endDate ?? basketRow.getEndDate(),\n basketRow.getPreUpsellRoomRate()\n );\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow();\n if (!nextAvailable?.getRate()) {\n // If the next available row does not have a rate assigned,\n // set it as the selected basket row to allow rate assignment.\n setSelectedBasketRow(nextAvailable);\n } else {\n // If all rows already have a rate assigned\n // Set the selected basket row to null, ensuring that no row is selected for editing.\n setSelectedBasketRow(null);\n\n // Determine whether the next step is an add-on selection step.\n const isNextStepAddon = StepManager.getNextStepUrl(getStepRoom()) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n historyConsistentPush(StepAddon.getStepUrl());\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(getStepRoom()));\n }\n }\n },\n\n quoteOrPencilReservation: (applyQuote) => {\n const maxRetryAttempts = 1;\n let callApi: (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string) => Promise<IBookingQuoteResponse | IPencilReservationResponse>;\n\n // To avoid multiple requests, pencil reservation step also generates a quote (if applicable)\n if (hotel?.bookingFlow === EBookingFlow.PreCheckoutPencil) {\n callApi = API.Reservation.pencilReservation;\n } else if (hotel?.requireDeposit) {\n callApi = API.Reservation.getPriceQuote;\n } else {\n return false;\n }\n\n setIsLoadingPriceQuote(true);\n\n // Clear currently assigned quote details\n // If we're fetching basket row information the currently held info should be disregarded.\n currentBasketRows.forEach((row) => {\n if (row.quoteDetails) {\n row.quoteDetails = undefined;\n updateBasketRow(row);\n }\n });\n\n const retryableGetQuote: () => Observable<IBookingQuoteResponse | IPencilReservationResponse> = () =>\n defer(() => callApi(hotel.hotelID, currentBasketRows, isExternalMemberHotel ? memberNumber : undefined, pencilId)).pipe(\n retryWhen(\n genericRetryStrategy({\n maxRetryAttempts: maxRetryAttempts,\n })\n )\n );\n\n retryableGetQuote().subscribe(\n (response) => {\n let pencilResponse: IPencilReservationResponse | null = null;\n let quoteResponse: IBookingQuoteResponse | undefined;\n\n if (hotel?.bookingFlow === EBookingFlow.PreCheckoutPencil) {\n // Pencil call also passes back the quote (if applicable)\n pencilResponse = response as IPencilReservationResponse;\n quoteResponse = pencilResponse.quote;\n\n // Store parent pencil ID to pass back to the server later\n setPencilId(pencilResponse.pencilId);\n beContext.sessionProvider?.updateSession({ pencilId: pencilResponse.pencilId });\n\n // Future improvement: Handle availability errors\n } else {\n quoteResponse = response as IBookingQuoteResponse;\n }\n\n if (!quoteResponse) {\n return;\n }\n\n if (!applyQuote()) {\n // User has left the Confirmation step before the quote was ready, we'll stop here instead of updating the basket.\n // If we don't stop here, the user will be redirected back to the Confirmation step.\n setIsLoadingPriceQuote(false);\n return;\n }\n\n for (const basketRow of currentBasketRows) {\n const quoteRow = quoteResponse?.rows?.find((row) => row.rowId === basketRow.getID());\n const pencilRow = pencilResponse?.rows?.find((row) => row.rowId === basketRow.getID());\n\n if (quoteRow) {\n basketRow.quoteDetails = quoteRow;\n }\n\n if (pencilRow) {\n basketRow.pencilId = pencilRow.pencilId;\n }\n\n updateBasketRow(basketRow);\n }\n },\n (error: any) => {\n console.log(error);\n console.log(`Error!: Retried ${maxRetryAttempts} times then quit!`);\n },\n () => {\n setIsLoadingPriceQuote(false);\n }\n );\n },\n\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfInfants: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getInfants(), withTranslation ? Translation.Step.Date.Infant : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n /**\n * Calculates the total booking price, including:\n * - Nightly rates\n * - Deposit fees\n * - Add-ons\n *\n * @returns {number} The total booking price.\n */\n getTotalPrice: (): number => {\n let totalPrice = 0;\n if (!!hotel?.requireDeposit) {\n // If deposit is required, get the total price from quote details\n totalPrice = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalRate as number) : 0)) as number;\n // Add deposit fees if credit card surcharge is disabled\n if (!hotel?.enableCreditCardSurcharge) {\n // **Previous logic**: totalPrice = total Base rate + Fees on Deposit amount\n // const totalQuoteFees = getTotalQuoteDepositFees();\n // totalPrice += totalQuoteFees;\n\n // **Updated logic**: totalPrice = total Base rate + its fees\n totalPrice = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.fullPaymentAmount as number) : 0)) as number;\n }\n } else {\n // Otherwise, calculate the total price from valid rows\n totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 0)) as number;\n }\n\n // Add prices from any additional add-ons in the booking basket\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n\n // Add fees that aren't included in the rates.\n basketFeeRows.forEach((row) => {\n totalPrice += row.amount;\n });\n\n return totalPrice;\n },\n\n /**\n * Returns the total quote deposit amount, excluding fees.\n *\n * @returns {number} The sum of the quote deposit.\n */\n getTotalDeposit: (): number => {\n const totalDeposit = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalDeposit as number) : 0)) as number;\n return totalDeposit;\n },\n\n getDepositFees: () => {\n const totalDepositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return totalDepositFees;\n },\n\n getTotalFees: () => {\n let totalFees = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalFees() as number) : 0)) as number;\n\n if (totalFees == 0 && hotel?.requireDeposit) {\n // Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.\n totalFees = getTotalQuoteFullPaymentFees();\n }\n\n basketAddonRows.forEach((row) => {\n totalFees += row.getTotalFees();\n });\n\n return totalFees;\n },\n\n /**\n * Aggregates all itemised fees from room rates, basket addons, and basket fees.\n * Returns a sorted list of aggregated fees, with percentage fees at the bottom.\n */\n getItemisedFees: () => {\n const feeMap = new Map<HotelFee, number>();\n\n // Aggregate fees from room rates\n currentBasketRows.forEach((row) => {\n if (row.isValid() && row.getRate() && hotel?.fees) {\n const roomFees = row.getRate()?.getItemisedFees(hotel.fees) ?? [];\n accumulateFees(feeMap, roomFees);\n }\n });\n\n // Aggregate fees from basket addon rows\n basketAddonRows.forEach((row) => {\n const addonFees = row.getItemisedFees(hotel?.fees ?? []);\n accumulateFees(feeMap, addonFees);\n });\n\n // Aggregate fees that aren't included in the rooms/addons\n basketFeeRows.forEach((basketFeeRow) => {\n accumulateFees(feeMap, [\n {\n hotelFee: basketFeeRow.hotelFee,\n amount: basketFeeRow.amount,\n },\n ]);\n });\n\n const fees = feeMapToArray(feeMap);\n return sortFees(fees, hotel?.fees || []);\n },\n\n /**\n * Calculates the total amount to be paid immediately, including:\n * - Required deposit\n * - Deposit fees (if applicable)\n * - Add-ons\n *\n * @returns {number} The total amount to pay now.\n */\n getTotalPayNow: (): number => {\n let totalDeposit = workingContext.getTotalDeposit();\n if (!!hotel?.requireDeposit && !hotel?.enableCreditCardSurcharge) {\n // Add deposit fees if credit card surcharge is disabled\n const totalDepositFees = getTotalQuoteDepositFees();\n totalDeposit += totalDepositFees;\n }\n // Add prices from any additional add-ons in the booking basket\n basketAddonRows.forEach((row) => {\n totalDeposit += row.getTotalPrice();\n });\n return totalDeposit;\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n const availableBasketRow = getNextAvailableBasketRow(row);\n if (availableBasketRow) {\n setStartDate(availableBasketRow.getStartDate());\n setEndDate(availableBasketRow.getEndDate());\n }\n setSelectedBasketRow(availableBasketRow);\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow());\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Selects the given basket row and updates all relevant inputs (e.g., start date and end date).\n * - If the provided row is valid, it updates the selected row and sets the corresponding dates.\n * - If the row is null or invalid, it attempts to select the next available basket row.\n *\n * @param {BasketRow | null} row - The basket row to be selected.\n * @returns {Promise<void>} A promise that resolves when the selection is complete.\n */\n selectBasketRow: async (row: BasketRow | null) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n // Update the selected basket row\n setSelectedBasketRow(row);\n } else {\n // If the row is invalid or null, select the next available basket row\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: async (data: ReservationsDTO, requestData: RoomstaySession['reservationRequest']) => {\n const updateObject: Partial<RoomstaySession> = { reservation: data };\n\n if (requestData) {\n updateObject.reservationRequest = requestData;\n }\n\n await beContext.sessionProvider?.updateSessionAsync(updateObject);\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: undefined,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n setBasketFeeRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n navigate(StepThanks.getStepUrl());\n },\n\n finish: () => {\n setReservationData(null);\n setHasCheckedOut(false);\n },\n\n /**\n * Set the selected basket row to null, ensuring that no row is selected for editing.\n */\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n // TODO: More hackyness to handle RMS Per Person Fee requirements\n if (addon.pricingType === EAddonPricingType.PER_ALL_PERSONS || addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT) {\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n /**\n * Attempts to select the next available basket row that does not have a rate assigned.\n * If such a row is found, it updates the selected basket row and returns it.\n * Otherwise, it does nothing.\n *\n * @returns {BasketRow | undefined} The selected basket row without a rate, or undefined if none is found.\n */\n attemptSelectUnfilledRow: (): BasketRow | undefined => {\n const row = getNextAvailableBasketRow();\n if (row && !row?.getRate()) {\n // Select the first available row without a rate and update the selected basket row\n setSelectedBasketRow(row);\n return row;\n }\n // No available unfilled row found, return undefined\n },\n // Callback triggered when the DatePicker open state changes.\n onDatePickerOpenChange: (isOpen: boolean) => {\n setIsDatePickerOpen(isOpen);\n },\n // Indicates whether the DatePicker is currently open.\n isDatePickerOpen: isDatePickerOpen,\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n <AuthenticationContextProvider>\n {props.children}\n <MemberSignInModal />\n {showPromoCodeAlert && <PromoCodeVerificationAlert selectedBasketRow={selectedBasketRow} />}\n </AuthenticationContextProvider>\n </BasketContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AuthenticationContextProvider,\n BasketContext,\n BasketContextType,\n BookingEngineContext,\n ErrorHandler,\n HotelOverridesContext,\n NotificationContext,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport {\n calculateFeeAmount,\n EAddonPricingType,\n EBookingFlow,\n EFeeType,\n getFilteredBookingAddonFees,\n getFilteredBookingFees,\n getFilteredBookingRateFees,\n IBookingQuoteResponse,\n IPencilReservationResponse,\n} from '@roomstay/core';\nimport { API_DATE_FORMAT } from 'api/BaseAPI';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport { useUpdateQueryParameters } from 'hooks/UpdateQueryParameters';\nimport { EAppQueryParameters } from 'models/AppQueryParameters';\nimport React, { useCallback, useContext, useEffect, useMemo, useReducer, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport { defer, Observable, throwError, timer } from 'rxjs';\nimport { finalize, mergeMap, retryWhen } from 'rxjs/operators';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text from '@/components/generic/Text';\nimport { MemberSignInModal } from '@/components/members/SignInModal/MemberSignInModal';\nimport { PromoCodeVerificationAlert } from '@/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport { Addon } from '@/models/Addon/Addon';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, sortFees } from '@/models/Fee';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport StepAddon from '@/pages/steps/StepAddon/StepAddon';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport { usePromotionContainer } from '@/providers/PromotionProvider';\nimport DataLayer from '@/util/DataLayer';\nimport { debounce } from '@/util/Debounce';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StepManager from '@/util/StepManager';\nimport StringHelper from '@/util/StringHelper';\n\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const updateQueryParams = useUpdateQueryParameters();\n const navigate = useNavigate();\n const historyConsistentPush = useHistoryConsistentPush();\n const { signedInUser, isExternalMemberHotel, memberNumber, memberOnlyModalPromotion } = useSignedInMember();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n\n const { showPromoCodeAlert } = useContext(HotelOverridesContext);\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n const [pencilId, setPencilId] = useState<string | undefined>(initialSession?.pencilId ?? undefined);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow | null>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n\n // This is where we store the fees that aren't included in the rates/addons.\n const [basketFeeRows, setBasketFeeRows] = useState<ItemisedFee[]>([]);\n\n const [isLoadingPriceQuote, setIsLoadingPriceQuote] = useState(false);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [isDatePickerOpen, setIsDatePickerOpen] = useState<boolean>(false);\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(initialSession?.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n const debounceUseEffect = useCallback(\n debounce(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n DataLayer.instance.sendDateSelection({\n startDate,\n endDate,\n adult: selectedBasketRow?.getAdults(),\n children: selectedBasketRow?.getChildren(),\n infant: selectedBasketRow?.getInfants(),\n });\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n //When trying to call row.discardGuestsState() in somewhere, we got conflicted here with BasketRow.setStartDate& BasketRow.setEndDate, it set back to previous startDate/endDate\n //Use debounceUseEffect to fix it\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, 500),\n [startDate, endDate]\n );\n\n useEffect(() => {\n debounceUseEffect();\n }, [debounceUseEffect]);\n\n useEffect(() => {\n if (signedInUser) {\n const promoCode = signedInUser.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n updateBasketRow(row);\n });\n }\n }\n }, [signedInUser]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n useEffect(() => {\n updateBasketFeeRows();\n }, [currentBasketRows, basketAddonRows]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow, skipUpdate = false) => {\n if (row && hotel?.memberOnlyPromoCode && signedInUser && !row.getPromoCode()) {\n row.setPromoCode(hotel.memberOnlyPromoCode);\n\n if (!skipUpdate) {\n workingContext.updateBasketRow(row);\n }\n }\n };\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (deletedBasketRow?: BasketRow): BasketRow | null => {\n if (!currentBasketRows.length) return null;\n // Filter out the excluded basket row if provided\n const filteredRows = deletedBasketRow ? currentBasketRows.filter((row) => row.getID() !== deletedBasketRow.getID()) : currentBasketRows;\n\n // Find the first row that does not have a rate assigned\n const availableRow = filteredRows.find((row) => !row.getRate());\n\n // Return a row without a rate if found\n // If no such row exists , return the last row in the list\n return availableRow ?? filteredRows[filteredRows.length - 1];\n };\n\n const updateQueryParameters = (row: BasketRow | null) => {\n if (!row) return;\n const queryParameters: Record<string, string> = {};\n if (row.getEndDate()) {\n let startDate = selectedBasketRow?.getStartDate();\n if (!startDate) {\n startDate = row.getStartDate();\n }\n queryParameters[EAppQueryParameters.Arrive] = startDate.format(API_DATE_FORMAT);\n queryParameters[EAppQueryParameters.Depart] = row.getEndDate().format(API_DATE_FORMAT);\n }\n if (row.getPromoCode()) queryParameters[EAppQueryParameters.PromoCode] = row.getPromoCode();\n if (row.getChildren() !== undefined) queryParameters[EAppQueryParameters.Children] = row.getChildren().toString();\n if (row.getAdults() !== undefined) queryParameters[EAppQueryParameters.Adults] = row.getAdults().toString();\n\n updateQueryParams(queryParameters);\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n updateQueryParameters(row);\n\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n // Here we check if there is no promocode on the row. If there isn't this function will check for existing member details\n // and automatically apply a member only promocode\n checkAndApplyMemberOnlyPromo(row, true);\n\n basketRowReducer({ method: 'Update', row });\n };\n\n const syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const genericRetryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 0,\n }: {\n maxRetryAttempts?: number;\n scalingDuration?: number;\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n if (retryAttempt > maxRetryAttempts) {\n return throwError(error);\n }\n console.log(`Attempt ${retryAttempt}: retrying in ${scalingDuration}ms`);\n return timer(scalingDuration);\n }),\n finalize(() => console.log('We are done!'))\n );\n };\n\n const updateBasketFeeRows = () => {\n const validBasketRows = currentBasketRows?.filter((row) => row.isValid());\n\n if (!validBasketRows.length || !hotel?.fees) {\n setBasketFeeRows([]);\n return;\n }\n\n const hotelFees = hotel.fees ?? [];\n const newFees: ItemisedFee[] = [];\n\n /**\n * Booking Fees.\n * These fees aren't related to an addon or a room, they're just on the booking itself.\n */\n let totalBookingFees = 0;\n for (const fee of getFilteredBookingFees(hotelFees)) {\n const feeAmount = calculateFeeAmount(fee);\n\n newFees.push({ hotelFee: fee, amount: feeAmount });\n totalBookingFees += feeAmount;\n }\n\n // We need to add percentage fees on top of the Booking Fees, if the percentage fee is configured to include previous fees in calculation.\n if (totalBookingFees > 0) {\n let baseAmount = totalBookingFees;\n\n for (const fee of hotelFees.filter((fee) => fee.feeType === EFeeType.PercentageOfBooking && fee.includePreviousFeesInCalculation && !fee.extractFeeFromRates)) {\n const feeAmount = calculateFeeAmount(fee, {\n baseAmount,\n });\n\n console.log(`Booking Fees: Calculated ${fee.name} fee amount on ${baseAmount} = ${feeAmount}`);\n newFees.push({ hotelFee: fee, amount: feeAmount });\n baseAmount += feeAmount;\n }\n }\n\n /**\n * Booking Rate Fees.\n */\n for (const row of validBasketRows) {\n const initialCost = row.getTotalPrice(true) ?? 0;\n let totalFeesAdded = 0;\n let totalFeesIncludedInRates = 0;\n\n const rateFees = getFilteredBookingRateFees(hotelFees);\n\n // In order to calculate fees that were removed from the incoming rates using extractFeeFromRates option, we need\n // to know which fees were removed. When there's more than 1 percentage fee that's been removed, we can't\n // work backwards to figure out what the original price was without this.\n const removedPercentages = rateFees.filter((fee) => fee.extractFeeFromRates).map((fee) => fee.amount);\n\n for (const fee of rateFees) {\n if (fee.extractFeeFromRates || fee.includeInRates) {\n // For these fees, we need to add the amount to the the totalFeesIncludedInRates variable, so that we can\n // correctly calculate subsequent fees that are using the 'extractFeeFromRates' option.\n const baseAmount = fee.extractFeeFromRates ? initialCost : initialCost + totalFeesIncludedInRates;\n totalFeesIncludedInRates += calculateFeeAmount(fee, {\n baseAmount,\n numberOfNights: row.getNumberOfDays(),\n extractedFromRates: fee.extractFeeFromRates,\n removedPercentages,\n });\n }\n\n let feeCalculationBaseAmount: number;\n if (fee.extractFeeFromRates) {\n // If this fee is included in the rates, there's no additional fee to calculate.\n feeCalculationBaseAmount = fee.includeInRates ? 0 : initialCost;\n } else if (fee.includeInRates) {\n // These fees are already included in the rates, we only need to calculate \"fees on fees\" if applicable.\n if (!fee.includePreviousFeesInCalculation) {\n continue;\n }\n\n feeCalculationBaseAmount = totalFeesAdded;\n } else {\n // This fee either needs to include the full running total, or just the initial cost.\n feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? initialCost + totalFeesAdded + totalFeesIncludedInRates : initialCost;\n }\n\n const feeAmount = calculateFeeAmount(fee, {\n baseAmount: feeCalculationBaseAmount,\n numberOfNights: row.getNumberOfDays(),\n extractedFromRates: fee.extractFeeFromRates,\n removedPercentages,\n });\n\n newFees.push({ hotelFee: fee, amount: feeAmount });\n\n if (!fee.extractFeeFromRates) {\n totalFeesAdded += feeAmount;\n }\n }\n }\n\n /**\n * Booking Addon Fees.\n */\n const validBasketAddonRows = basketAddonRows.filter((row) => row.isValid());\n for (const row of validBasketAddonRows) {\n const initialCost = row.getTotalPrice() - row.getTotalFees();\n let totalFeesAdded = 0;\n let totalFeesIncludedInRates = 0;\n\n const addonFees = getFilteredBookingAddonFees(hotelFees).filter((fee) => fee.appliesToAddons);\n const removedPercentages = addonFees.filter((fee) => fee.extractFeeFromRates).map((fee) => fee.amount);\n\n const hasItemisedFees = row.getItemisedFees(hotelFees).length > 0;\n\n for (const fee of addonFees) {\n if ((fee.extractFeeFromRates || fee.includeInRates) && hasItemisedFees) {\n const baseAmount = fee.extractFeeFromRates ? initialCost : initialCost + totalFeesIncludedInRates;\n totalFeesIncludedInRates += calculateFeeAmount(fee, {\n baseAmount,\n numberOfNights: row.getNightModifier(),\n extractedFromRates: fee.extractFeeFromRates,\n removedPercentages,\n });\n }\n\n let feeCalculationBaseAmount: number;\n if (fee.extractFeeFromRates) {\n feeCalculationBaseAmount = fee.includeInRates && hasItemisedFees ? 0 : initialCost;\n } else if (fee.includeInRates && hasItemisedFees) {\n feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? totalFeesAdded : 0;\n } else {\n feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? initialCost + totalFeesAdded + totalFeesIncludedInRates : initialCost;\n }\n\n const feeAmount = calculateFeeAmount(fee, {\n baseAmount: feeCalculationBaseAmount,\n numberOfNights: row.getNightModifier(),\n extractedFromRates: fee.extractFeeFromRates && !fee.includeInRates,\n removedPercentages,\n });\n\n newFees.push({ hotelFee: fee, amount: feeAmount });\n\n if (!fee.extractFeeFromRates) {\n totalFeesAdded += feeAmount;\n }\n }\n }\n\n setBasketFeeRows(newFees);\n };\n\n const quoteQueryID: string = useMemo(() => {\n if (!hotel || !hotel?.requireDeposit) {\n return '';\n }\n return API.Reservation.buildQuoteQueryID(currentBasketRows, isExternalMemberHotel ? memberNumber : undefined);\n }, [currentBasketRows, isExternalMemberHotel, memberNumber, hotel?.hotelID]);\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n basketFeeRows,\n updateBasketFeeRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\n isLoadingPriceQuote,\n\n loadedPromotion,\n quoteQueryID,\n pencilId,\n\n /**\n * Adds a new basket row and applies relevant updates:\n * - Synchronizes the selected date range.\n * - Applies any applicable member-only promotions.\n * - Ensures proper selection logic for the basket row.\n *\n * Selection logic:\n * - If the basket is empty, the newly added row is automatically selected.\n * - If a row is already selected:\n * - If the selected row has an assigned rate, update the selection to the new row.\n * - Otherwise, keep the current selection (allowing continued editing of the existing row).\n * - If no row is selected, set the new row as the selected row.\n *\n * @param {BasketRow} row - The basket row to add.\n */\n addBasketRow: (row: BasketRow) => {\n syncSelectedDateRange(row);\n checkAndApplyMemberOnlyPromo(row);\n\n // Determine if the basket is currently empty\n const isEmptyRows = !currentBasketRows.length;\n if (isEmptyRows) {\n // If empty, set the newly added row as the selected basket row\n setSelectedBasketRow(row);\n } else {\n if (selectedBasketRow) {\n // Determine if the currently selected row has an assigned rate\n const isSelectedRowAssignedRate = selectedBasketRow && selectedBasketRow.getRate();\n if (isSelectedRowAssignedRate) {\n // If the selected row has a rate, update the selection to the new row\n setSelectedBasketRow(row);\n }\n } else {\n // If no row is currently selected, set the new row as the selected basket row\n setSelectedBasketRow(row);\n }\n }\n basketRowReducer({ method: 'Add', row });\n },\n\n initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow | null = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n selectedBasketRow.setPreGuestsState();\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel?.hotelID as string);\n }\n\n basketRow.setAuxiliaryFilter(beContext.currentGroupedRoomFilters);\n beContext.setCurrentGroupedRoomFilters({});\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(\n rate,\n basketRow.getNumberOfDays(),\n startDate ?? basketRow.getStartDate(),\n endDate ?? basketRow.getEndDate(),\n basketRow.getPreUpsellRoomRate()\n );\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow();\n if (!nextAvailable?.getRate()) {\n // If the next available row does not have a rate assigned,\n // set it as the selected basket row to allow rate assignment.\n setSelectedBasketRow(nextAvailable);\n } else {\n // If all rows already have a rate assigned\n // Set the selected basket row to null, ensuring that no row is selected for editing.\n setSelectedBasketRow(null);\n\n // Determine whether the next step is an add-on selection step.\n const isNextStepAddon = StepManager.getNextStepUrl(getStepRoom()) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n historyConsistentPush(StepAddon.getStepUrl());\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(getStepRoom()));\n }\n }\n },\n\n quoteOrPencilReservation: (applyQuote) => {\n const maxRetryAttempts = 1;\n let callApi: (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string) => Promise<IBookingQuoteResponse | IPencilReservationResponse>;\n\n // To avoid multiple requests, pencil reservation step also generates a quote (if applicable)\n if (hotel?.bookingFlow === EBookingFlow.PreCheckoutPencil) {\n callApi = API.Reservation.pencilReservation;\n } else if (hotel?.requireDeposit) {\n callApi = API.Reservation.getPriceQuote;\n } else {\n return false;\n }\n\n setIsLoadingPriceQuote(true);\n\n // Clear currently assigned quote details\n // If we're fetching basket row information the currently held info should be disregarded.\n currentBasketRows.forEach((row) => {\n if (row.quoteDetails) {\n row.quoteDetails = undefined;\n updateBasketRow(row);\n }\n });\n\n const retryableGetQuote: () => Observable<IBookingQuoteResponse | IPencilReservationResponse> = () =>\n defer(() => callApi(hotel.hotelID, currentBasketRows, isExternalMemberHotel ? memberNumber : undefined, pencilId)).pipe(\n retryWhen(\n genericRetryStrategy({\n maxRetryAttempts: maxRetryAttempts,\n })\n )\n );\n\n retryableGetQuote().subscribe(\n (response) => {\n let pencilResponse: IPencilReservationResponse | null = null;\n let quoteResponse: IBookingQuoteResponse | undefined;\n\n if (hotel?.bookingFlow === EBookingFlow.PreCheckoutPencil) {\n // Pencil call also passes back the quote (if applicable)\n pencilResponse = response as IPencilReservationResponse;\n quoteResponse = pencilResponse.quote;\n\n // Store parent pencil ID to pass back to the server later\n setPencilId(pencilResponse.pencilId);\n beContext.sessionProvider?.updateSession({ pencilId: pencilResponse.pencilId });\n\n // Future improvement: Handle availability errors\n } else {\n quoteResponse = response as IBookingQuoteResponse;\n }\n\n if (!quoteResponse) {\n return;\n }\n\n if (!applyQuote()) {\n // User has left the Confirmation step before the quote was ready, we'll stop here instead of updating the basket.\n // If we don't stop here, the user will be redirected back to the Confirmation step.\n setIsLoadingPriceQuote(false);\n return;\n }\n\n for (const basketRow of currentBasketRows) {\n const quoteRow = quoteResponse?.rows?.find((row) => row.rowId === basketRow.getID());\n const pencilRow = pencilResponse?.rows?.find((row) => row.rowId === basketRow.getID());\n\n if (quoteRow) {\n basketRow.quoteDetails = quoteRow;\n }\n\n if (pencilRow) {\n basketRow.pencilId = pencilRow.pencilId;\n }\n\n updateBasketRow(basketRow);\n }\n },\n (error: any) => {\n console.log(error);\n console.log(`Error!: Retried ${maxRetryAttempts} times then quit!`);\n },\n () => {\n setIsLoadingPriceQuote(false);\n }\n );\n },\n\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfInfants: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getInfants(), withTranslation ? Translation.Step.Date.Infant : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 0)) as number;\n\n // If the hotel requires a deposit, and enableCreditCardSurchase is false, we need to add the deposit fees to the total price.\n if (hotel?.requireDeposit && !hotel?.enableCreditCardSurcharge && hotel?.addDepositFeeToBookingTotal) {\n const depositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n totalPrice += depositFees;\n }\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n\n // Add fees that aren't included in the rates.\n basketFeeRows.forEach((row) => {\n totalPrice += row.amount;\n });\n\n return totalPrice;\n },\n\n getTotalDeposit: () => {\n const totalDeposit = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalDeposit as number) : 0)) as number;\n return totalDeposit;\n },\n\n getDepositFees: () => {\n const totalDepositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return totalDepositFees;\n },\n\n getTotalFees: () => {\n let totalFees = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalFees() as number) : 0)) as number;\n\n if (totalFees == 0 && hotel?.requireDeposit) {\n // Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.\n totalFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n }\n\n basketAddonRows.forEach((row) => {\n totalFees += row.getTotalFees();\n });\n\n return totalFees;\n },\n\n /**\n * Aggregates all itemised fees from room rates, basket addons, and basket fees.\n * Returns a sorted list of aggregated fees, with percentage fees at the bottom.\n */\n getItemisedFees: () => {\n const feeMap = new Map<HotelFee, number>();\n\n // Aggregate fees from room rates\n currentBasketRows.forEach((row) => {\n if (row.isValid() && row.getRate() && hotel?.fees) {\n const roomFees = row.getRate()?.getItemisedFees(hotel.fees) ?? [];\n accumulateFees(feeMap, roomFees);\n }\n });\n\n // Aggregate fees from basket addon rows\n basketAddonRows.forEach((row) => {\n const addonFees = row.getItemisedFees(hotel?.fees ?? []);\n accumulateFees(feeMap, addonFees);\n });\n\n // Aggregate fees that aren't included in the rooms/addons\n basketFeeRows.forEach((basketFeeRow) => {\n accumulateFees(feeMap, [\n {\n hotelFee: basketFeeRow.hotelFee,\n amount: basketFeeRow.amount,\n },\n ]);\n });\n\n const fees = feeMapToArray(feeMap);\n return sortFees(fees, hotel?.fees || []);\n },\n\n getTotalPayNow: () => {\n if (hotel?.requireDeposit) {\n const depositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return workingContext.getTotalDeposit() + depositFees;\n }\n\n return workingContext.getTotalPrice();\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n const availableBasketRow = getNextAvailableBasketRow(row);\n if (availableBasketRow) {\n setStartDate(availableBasketRow.getStartDate());\n setEndDate(availableBasketRow.getEndDate());\n }\n setSelectedBasketRow(availableBasketRow);\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow());\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Selects the given basket row and updates all relevant inputs (e.g., start date and end date).\n * - If the provided row is valid, it updates the selected row and sets the corresponding dates.\n * - If the row is null or invalid, it attempts to select the next available basket row.\n *\n * @param {BasketRow | null} row - The basket row to be selected.\n * @returns {Promise<void>} A promise that resolves when the selection is complete.\n */\n selectBasketRow: async (row: BasketRow | null) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n // Update the selected basket row\n setSelectedBasketRow(row);\n } else {\n // If the row is invalid or null, select the next available basket row\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: async (data: ReservationsDTO, requestData: RoomstaySession['reservationRequest']) => {\n const updateObject: Partial<RoomstaySession> = { reservation: data };\n\n if (requestData) {\n updateObject.reservationRequest = requestData;\n }\n\n await beContext.sessionProvider?.updateSessionAsync(updateObject);\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: undefined,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n setBasketFeeRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n navigate(StepThanks.getStepUrl());\n },\n\n finish: () => {\n setReservationData(null);\n setHasCheckedOut(false);\n },\n\n /**\n * Set the selected basket row to null, ensuring that no row is selected for editing.\n */\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n // TODO: More hackyness to handle RMS Per Person Fee requirements\n if (addon.pricingType === EAddonPricingType.PER_ALL_PERSONS || addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT) {\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n /**\n * Attempts to select the next available basket row that does not have a rate assigned.\n * If such a row is found, it updates the selected basket row and returns it.\n * Otherwise, it does nothing.\n *\n * @returns {BasketRow | undefined} The selected basket row without a rate, or undefined if none is found.\n */\n attemptSelectUnfilledRow: (): BasketRow | undefined => {\n const row = getNextAvailableBasketRow();\n if (row && !row?.getRate()) {\n // Select the first available row without a rate and update the selected basket row\n setSelectedBasketRow(row);\n return row;\n }\n // No available unfilled row found, return undefined\n },\n // Callback triggered when the DatePicker open state changes.\n onDatePickerOpenChange: (isOpen: boolean) => {\n setIsDatePickerOpen(isOpen);\n },\n // Indicates whether the DatePicker is currently open.\n isDatePickerOpen: isDatePickerOpen,\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n <AuthenticationContextProvider>\n {props.children}\n <MemberSignInModal />\n {showPromoCodeAlert && <PromoCodeVerificationAlert selectedBasketRow={selectedBasketRow} />}\n </AuthenticationContextProvider>\n </BasketContext.Provider>\n );\n}\n"]}
|
|
@@ -4,4 +4,4 @@ export interface BookingEngineContextWrapperProps {
|
|
|
4
4
|
children: React.ReactNode;
|
|
5
5
|
engine: BaseEngine<BaseEngineConfig>;
|
|
6
6
|
}
|
|
7
|
-
export declare function BookingEngineContextWrapper({ engine, children }: BookingEngineContextWrapperProps):
|
|
7
|
+
export declare function BookingEngineContextWrapper({ engine, children }: BookingEngineContextWrapperProps): JSX.Element;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactChild } from 'react';
|
|
2
2
|
import type { ConfigCompany } from '../../models/Client/Hotel/Company';
|
|
3
3
|
interface CompanyContextWrapperProps {
|
|
4
4
|
children: ReactChild;
|
|
5
5
|
configCompany: ConfigCompany;
|
|
6
6
|
}
|
|
7
|
-
export declare const CompanyContextWrapper: ({ configCompany: company, children }: CompanyContextWrapperProps) =>
|
|
7
|
+
export declare const CompanyContextWrapper: ({ configCompany: company, children }: CompanyContextWrapperProps) => JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -282,7 +282,6 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
|
|
|
282
282
|
updatedHotel.memberOnlyRenderRateLast = details.memberOnlyRenderRateLast;
|
|
283
283
|
}
|
|
284
284
|
updatedHotel.captureChildAge = details.captureChildAge;
|
|
285
|
-
updatedHotel.languageContext = details.languageContext;
|
|
286
285
|
updatedHotel.fees = details.fees;
|
|
287
286
|
updatedHotel.addDepositFeeToBookingTotal = details.addDepositFeeToBookingTotal;
|
|
288
287
|
updatedHotel.company = details.company;
|