@roomstay/frontend 2.6.97-1 → 2.6.98
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/177.bundle.js +1 -1
- package/dist/288.bundle.js +1 -1
- package/dist/328.bundle.js +1 -1
- package/dist/370.bundle.js +1 -1
- package/dist/434.bundle.js +1 -0
- package/dist/449.bundle.js +1 -1
- package/dist/537.bundle.js +1 -1
- package/dist/978.bundle.js +1 -1
- package/dist/main.bundle.js +1 -1
- package/dist/src/api/AvailabilityAPI.d.ts +5 -5
- package/dist/src/api/AvailabilityAPI.js +12 -12
- package/dist/src/api/AvailabilityAPI.js.map +1 -1
- package/dist/src/api/BaseAPI.d.ts +1 -2
- package/dist/src/api/BaseAPI.js.map +1 -1
- package/dist/src/api/HotelAPI.d.ts +1 -1
- package/dist/src/api/HotelAPI.js +18 -11
- package/dist/src/api/HotelAPI.js.map +1 -1
- package/dist/src/api/ReservationAPI.d.ts +2 -2
- package/dist/src/api/ReservationAPI.js +13 -3
- package/dist/src/api/ReservationAPI.js.map +1 -1
- package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js +6 -1
- package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js.map +1 -1
- package/dist/src/components/generic/TaxInclusionNotice/TaxInclusionNotice.d.ts +10 -0
- package/dist/src/components/generic/TaxInclusionNotice/TaxInclusionNotice.js +57 -0
- package/dist/src/components/generic/TaxInclusionNotice/TaxInclusionNotice.js.map +1 -0
- package/dist/src/components/generic/date/DatePicker.d.ts +5 -0
- package/dist/src/components/generic/date/DatePicker.js +10 -6
- package/dist/src/components/generic/date/DatePicker.js.map +1 -1
- package/dist/src/components/generic/date/DatePickerDay.js +2 -1
- package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
- package/dist/src/components/steps/addons/AddonCard.js +46 -7
- package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
- package/dist/src/components/steps/confirmation/GiftCardRedemption.d.ts +2 -0
- package/dist/src/components/steps/confirmation/GiftCardRedemption.js +46 -0
- package/dist/src/components/steps/confirmation/GiftCardRedemption.js.map +1 -0
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js +29 -11
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
- package/dist/src/components/steps/date/StepDatePricePerRoom.js +3 -1
- package/dist/src/components/steps/date/StepDatePricePerRoom.js.map +1 -1
- package/dist/src/components/steps/hotel/HotelCard.js +3 -1
- package/dist/src/components/steps/hotel/HotelCard.js.map +1 -1
- package/dist/src/components/steps/hotel/HotelCardModal.js +3 -1
- package/dist/src/components/steps/hotel/HotelCardModal.js.map +1 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js +2 -1
- package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
- package/dist/src/components/steps/room/LargeRoomCard.js +2 -6
- package/dist/src/components/steps/room/LargeRoomCard.js.map +1 -1
- package/dist/src/components/steps/room/RoomList.js +27 -6
- package/dist/src/components/steps/room/RoomList.js.map +1 -1
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js +1 -1
- package/dist/src/components/steps/room/RoomListCrossSellBlock.js.map +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +4 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetails.js +2 -6
- package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/RoomDetailsRetargeting.js +2 -6
- package/dist/src/components/steps/room/roomDetails/RoomDetailsRetargeting.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +2 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js +2 -6
- package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +27 -5
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +12 -7
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
- package/dist/src/components/summary/BEMobileSummaryModal.js +2 -1
- package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
- package/dist/src/components/summary/BESummary.js +3 -2
- package/dist/src/components/summary/BESummary.js.map +1 -1
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +37 -22
- package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
- package/dist/src/contexts/DatePickerContext.d.ts +1 -0
- package/dist/src/contexts/DatePickerContext.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextTypes.d.ts +8 -0
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextTypes.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +3 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/HotelOverridesContext.d.ts +1 -0
- package/dist/src/contexts/HotelOverridesContext.js +19 -0
- package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
- package/dist/src/hooks/useCalendarNightStay.d.ts +2 -2
- package/dist/src/hooks/useCalendarNightStay.js +4 -4
- package/dist/src/hooks/useCalendarNightStay.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Addon/Addon.d.ts +1 -0
- package/dist/src/models/Addon/Addon.js.map +1 -1
- package/dist/src/models/Confirmation.d.ts +4 -0
- package/dist/src/models/Confirmation.js.map +1 -1
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js +26 -3
- package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
- package/dist/src/pages/findReservation/FindReservationResults.js +2 -1
- package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
- package/dist/src/pages/findReservation/ReservationRow.js +11 -6
- package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js +8 -1
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js.map +1 -1
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.js +8 -0
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.js.map +1 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +2 -1
- package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +0 -4
- package/dist/src/translations/Translation.js +0 -4
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +0 -4
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +2 -2
- package/dist/src/util/Analytics/GoogleAnalytics4.js +2 -2
- package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/dist/vendors.bundle.js +1 -1
- package/package.json +3 -3
- package/dist/870.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,yDAAqD;AAMrD,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;AACjB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAED,MAAqB,cAAe,SAAQ,iBAAO;IAAnD;;QACY,uBAAkB,GAA2B,EAAE,CAAC;QAExD;;WAEG;QACI,sBAAiB,GAAG,CAAC,IAAiB,EAAE,YAAqB,EAAwB,EAAE;YAC1F,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAA+B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;;gBACrE,IAAI,CAAC;oBACD,GAAG,CAAC,IAAI,CAAC;wBACL,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE;wBAClB,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,IAAc;wBACtC,QAAQ,EAAE,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,IAAc;wBACvC,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE;wBAC7B,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE;wBACvB,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE;wBAC3B,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE;wBACzB,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;wBAChD,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;wBAC/C,YAAY;wBACZ,mBAAmB,EAAE,GAAG,CAAC,aAAa,EAAE;qBAC3C,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,wBAAwB;oBACxB,oGAAoG;gBACxG,CAAC;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC/B,CAAC,CAAC;QAEF;;WAEG;QACI,uBAAkB,GAAG,CAAC,IAAiB,EAAE,YAAqB,EAAE,QAAiB,EAA6B,EAAE;YACnH,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAChE,MAAM,aAAa,mCACZ,YAAY,KACf,QAAQ,EAAE,QAAQ,GACrB,CAAC;YAEF,aAAa,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;gBAElE,uCACO,UAAU,KACb,QAAQ,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,IAC/B;YACN,CAAC,CAAC,CAAC;YAEH,OAAO,aAAa,CAAC;QACzB,CAAC,CAAC;QAEF;;;WAGG;QACI,sBAAiB,GAAG,CAAC,IAAiB,EAAE,YAAqB,EAAU,EAAE;YAC5E,OAAO,IAAI;iBACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;gBACT,OAAO,OAAO,GAAG,CAAC,KAAK,EAAE;2BACd,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,IAAI;2BACnB,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,IAAI;4BAClB,GAAG,CAAC,YAAY,EAAE;6BACjB,GAAG,CAAC,SAAS,EAAE;+BACb,GAAG,CAAC,WAAW,EAAE;8BAClB,GAAG,CAAC,UAAU,EAAE;8BAChB,MAAA,GAAG,CAAC,YAAY,EAAE,0CAAE,MAAM,CAAC,YAAY,CAAC;+BACvC,MAAA,GAAG,CAAC,UAAU,EAAE,0CAAE,MAAM,CAAC,YAAY,CAAC;6BACxC,YAAY,EAAE,CAAC;YAChC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF;;WAEG;QACI,kBAAa,GAAG,CAAO,OAAe,EAAE,IAAiB,EAAE,YAAqB,EAAkC,EAAE;YACvH,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAW,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAChF,CAAC,CAAA,CAAC;QAEF;;WAEG;QACI,sBAAiB,GAAG,CAAO,OAAe,EAAE,IAAiB,EAAE,YAAqB,EAAE,QAAiB,EAAuC,EAAE;YACnJ,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAW,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjF,CAAC,CAAA,CAAC;QAEF;;;;;;;;;;;WAWG;QACI,YAAO,GAAG,sGAcW,EAAE,2IAb1B,UAAuB,EACvB,YAA2B,EAC3B,OAAwB,EACxB,SAA2B,EAC3B,QAAgB,EAChB,OAAe,EACf,SAAiB,EACjB,WAA+B,SAAS,EACxC,aAAiC,SAAS,EAC1C,YAAY,GAAG,KAAK,EACpB,aAAiC,SAAS,EAC1C,eAAmC,SAAS,EAC5C,WAAiC;YAEjC,MAAM,KAAK,GAAU,EAAE,CAAC;YAExB,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;;gBACvB,MAAM,IAAI,GAAG;oBACT,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,EAAE;oBAClC,QAAQ,EAAE,CAAA,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,IAAI,KAAI,EAAE;oBACnC,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE;oBAC7B,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE;oBACvB,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE;oBAC3B,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE;oBACzB,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;oBACpD,YAAY,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;oBAEnD,OAAO,EAAE,MAAA,GAAG,CAAC,YAAY,0CAAE,OAAO;oBAClC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE;oBAClB,YAAY;oBACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACzB,CAAC;gBAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;gBAE5D,MAAM,QAAQ,GAAQ;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,GAAG,CAAC,eAAe,EAAE;iBACnC,CAAC;gBACF,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,EAAE,CAAC;oBACtB,QAAQ,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC;gBACxD,CAAC;gBACD,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;oBACxB,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;gBAC/C,CAAC;gBAED,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;oBAClB,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC1C,CAAC;gBACD,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBACvB,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,CAAC;gBACD,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBACvB,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBAC/C,CAAC;gBAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACpB,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;gBAC7C,CAAC;gBAED,OAAO,QAAQ,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAQ,EAAE,CAAC;YAE1B,IAAI,YAAY,EAAE,CAAC;gBACf,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;YAClC,CAAC;YAED,OAAO,IAAI,CAAC,IAAI,CACZ,qBAAW,CAAC,YAAY,EACxB;gBACI,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,MAAM;gBAChB,cAAc,EAAE,UAAU;gBAC1B,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,SAAS;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBAC/B,UAAU,EAAE,UAAU;gBACtB,WAAW;aACd,EACD,OAAO,EACP,SAAS,CACZ,CAAC;QACN,CAAC,CAAA,CAAC;QAEK,WAAM,GAAG,CAAO,YAAsB,EAAE,WAAmB,EAAE,OAAe,EAAE,iBAA0B,EAAE,SAAkB,EAA4B,EAAE;YAC7J,OAAO,IAAI,CAAC,IAAI,CACZ,qBAAW,CAAC,YAAY,EACxB;gBACI,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,YAAY;gBAC5B,iBAAiB;gBACjB,SAAS;aACZ,EACD,OAAO,EACP,EAAE,EACF,QAAQ,CACX,CAAC;QACN,CAAC,CAAA,CAAC;QAEK,aAAQ,GAAG,CAAO,YAAsB,EAAE,WAAmB,EAAE,OAAe,EAAoB,EAAE;YACvG,MAAM,IAAI,CAAC,IAAI,CACX,qBAAW,CAAC,YAAY,EACxB;gBACI,WAAW,EAAE,WAAW;gBACxB,cAAc,EAAE,YAAY;aAC/B,EACD,OAAO,EACP,EAAE,EACF,UAAU,CACb,CAAC;YAEF,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA,CAAC;QAEK,sBAAiB,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,OAAe,EAAoB,EAAE,CACxF,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;;YAClC,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAW,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEzF,MAAA,MAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,0CAAE,YAAY,0CAAE,OAAO,CAAC,CAAC,WAA2B,EAAE,EAAE;oBAC/E,IAAI,WAAW,CAAC,iBAAiB,KAAK,EAAE,EAAE,CAAC;wBACvC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC;oBACrC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;QAEA,oBAAe,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,OAAe,EAA4B,EAAE,CAC9F,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YAClC;;IAER;YACQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAW,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAElF,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;gBAEvC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;QAEA,wBAAmB,GAAG,CAAO,OAAe,EAAE,aAAqB,EAAE,gBAAwB,EAAiE,EAAE;YACnK,OAAA,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;gBAClC,IAAI,CAAC;oBACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5B,qBAAW,CAAC,YAAY,EACxB;wBACI,aAAa;wBACb,gBAAgB;qBACnB,EACD,OAAO,EACP,EAAE,EACF,cAAc,CACjB,CAAC;oBAEF,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,MAAM,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC;YACL,CAAC,CAAA,CAAC,CAAA;UAAA,CAAC;IACX,CAAC;CAAA;AA5RD,iCA4RC","sourcesContent":["import {\n IBookingExtraFields,\n IBookingPayment,\n IBookingQuoteRequest,\n IBookingQuoteResponse,\n IPencilReservationRequest,\n IPencilReservationResponse,\n ReservationDTO,\n ReservationsDTO,\n} from '@roomstay/core';\n\nimport BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { IRoomstayMemberBooking } from '@/models/RoomstayMembers/IRoomstayMemberBooking';\nimport UserProfile from '@/models/UserProfile';\n\nexport enum EPaymentMethod {\n PLANPAY = 'Planpay',\n CARD = 'Card',\n}\n\nexport default class ReservationAPI extends BaseAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n /**\n * Populates a booking quote request.\n */\n public buildQuoteRequest = (rows: BasketRow[], memberNumber?: string): IBookingQuoteRequest => {\n const quoteRows = rows.reduce<IBookingQuoteRequest['rows']>((acc, row) => {\n try {\n acc.push({\n rowId: row.getID(),\n roomCode: row.getRoom().code as string,\n rateCode: row.getRate()?.code as string,\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkIn: row.getStartDate().format('YYYY-MM-DD'),\n checkOut: row.getEndDate().format('YYYY-MM-DD'),\n memberNumber,\n totalDisplayedPrice: row.getTotalPrice(),\n });\n } catch (ex) {\n // Skip row if it throws\n // Fixed: The checkout step will hang indefinitely if any basket row is missing a selected room rate\n }\n return acc;\n }, []);\n\n return { rows: quoteRows };\n };\n\n /**\n * Populates a pencil reservation request based on a quote request.\n */\n public buildPencilRequest = (rows: BasketRow[], memberNumber?: string, pencilId?: string): IPencilReservationRequest => {\n const quoteRequest = this.buildQuoteRequest(rows, memberNumber);\n const pencilRequest: IPencilReservationRequest = {\n ...quoteRequest,\n pencilId: pencilId,\n };\n\n pencilRequest.rows = quoteRequest.rows.map((requestRow) => {\n const basketRow = rows.find((r) => r.getID() == requestRow.rowId);\n\n return {\n ...requestRow,\n pencilId: basketRow?.pencilId,\n };\n });\n\n return pencilRequest;\n };\n\n /**\n * Generates a unique query ID string based on basket row data.\n * This ID is used to detect changes and re-fetch deposit quotes during checkout.\n */\n public buildQuoteQueryID = (rows: BasketRow[], memberNumber?: string): string => {\n return rows\n .map((row) => {\n return `row:${row.getID()},\n room:${row.getRoom()?.code},\n rate:${row.getRate()?.code},\n promo:${row.getPromoCode()},\n adults:${row.getAdults()},\n children:${row.getChildren()},\n infants:${row.getInfants()},\n checkIn:${row.getStartDate()?.format('YYYY-MM-DD')},\n checkOut:${row.getEndDate()?.format('YYYY-MM-DD')},\n member:${memberNumber}`;\n })\n .join('-');\n };\n\n /**\n * Returns a quote for the given\n */\n public getPriceQuote = async (hotelId: string, rows: BasketRow[], memberNumber?: string): Promise<IBookingQuoteResponse> => {\n const quoteBody = this.buildQuoteRequest(rows, memberNumber);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'quote');\n };\n\n /**\n * Pencils a reservation for the given rooms. Returns the timeout, and quote if applicable.\n */\n public pencilReservation = async (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string): Promise<IPencilReservationResponse> => {\n const quoteBody = this.buildPencilRequest(rows, memberNumber, pencilId);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'pencil');\n };\n\n /**\n *\n * @param basketRows\n * @param userProfiles\n * @param payment\n * @param addonRows\n * @param comments\n * @param hotelId\n * @param sessionId\n * @param specialReq\n * @returns\n */\n public bookNow = async (\n basketRows: BasketRow[],\n userProfiles: UserProfile[],\n payment: IBookingPayment,\n addonRows: BasketAddonRow[],\n comments: string,\n hotelId: string,\n sessionId: string,\n pencilId: string | undefined = undefined,\n specialReq: string | undefined = undefined,\n retryPayment = false,\n roomstayId: string | undefined = undefined,\n memberNumber: string | undefined = undefined,\n extraFields?: IBookingExtraFields\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n roomType: row.getRoom().code || '',\n ratePlan: row.getRate()?.code || '',\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkInDate: row.getStartDate().format('YYYY-MM-DD'),\n checkOutDate: row.getEndDate().format('YYYY-MM-DD'),\n\n quoteId: row.quoteDetails?.quoteId,\n rowId: row.getID(),\n memberNumber,\n pencilId: row.pencilId,\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n code: addon.code,\n startDate: row.getSelectedDate(),\n };\n if (addon?.ratePlanCode) {\n response.ratePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.startTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.children = row.getChildQuantity();\n }\n\n if (addon.pricingType) {\n response.pricingType = addon.pricingType;\n }\n\n return response;\n });\n\n const getParams: any = {};\n\n if (retryPayment) {\n getParams.retryPayment = true;\n }\n\n return this.post(\n APIEndpoint.Reservations,\n {\n rooms: rooms,\n services: addons,\n specialRequest: specialReq,\n comments: comments,\n profiles: userProfiles,\n payment: payment,\n sessionId: sessionId,\n pencilId: pencilId,\n sourceUrl: window.location.href,\n roomstayId: roomstayId,\n extraFields,\n },\n hotelId,\n getParams\n );\n };\n\n public commit = async (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string, paymentId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n paymentId,\n },\n hotelId,\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[], itineraryId: string, hotelId: string): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n },\n hotelId,\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string, hotelId: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, hotelId, { email }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email: string, hotelId: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email }, id, hotelId);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public linkBookingToMember = async (hotelId: string, reservationId: string, reservationEmail: string): Promise<{ message: string; booking: IRoomstayMemberBooking }> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.post(\n APIEndpoint.Reservations,\n {\n reservationId,\n reservationEmail,\n },\n hotelId,\n {},\n 'link-booking'\n );\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/api/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n IBookingExtraFields,\n IBookingPayment,\n IBookingQuoteRequest,\n IBookingQuoteResponse,\n IGiftCardPreauthorisationDTO,\n IPencilReservationRequest,\n IPencilReservationResponse,\n ReservationDTO,\n ReservationsDTO,\n} from '@roomstay/core';\n\nimport BaseAPI, { APIEndpoint, ApiGetParameters } from '@/api/BaseAPI';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { IRoomstayMemberBooking } from '@/models/RoomstayMembers/IRoomstayMemberBooking';\nimport UserProfile from '@/models/UserProfile';\n\nexport enum EPaymentMethod {\n PLANPAY = 'Planpay',\n CARD = 'Card',\n}\n\nexport default class ReservationAPI extends BaseAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n /**\n * Populates a booking quote request.\n */\n public buildQuoteRequest = (rows: BasketRow[], memberNumber?: string): IBookingQuoteRequest => {\n const quoteRows = rows.reduce<IBookingQuoteRequest['rows']>((acc, row) => {\n try {\n acc.push({\n rowId: row.getID(),\n roomCode: row.getRoom().code as string,\n rateCode: row.getRate()?.code as string,\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkIn: row.getStartDate().format('YYYY-MM-DD'),\n checkOut: row.getEndDate().format('YYYY-MM-DD'),\n memberNumber,\n totalDisplayedPrice: row.getTotalPrice(),\n });\n } catch (ex) {\n // Skip row if it throws\n // Fixed: The checkout step will hang indefinitely if any basket row is missing a selected room rate\n }\n return acc;\n }, []);\n\n return { rows: quoteRows };\n };\n\n /**\n * Populates a pencil reservation request based on a quote request.\n */\n public buildPencilRequest = (rows: BasketRow[], memberNumber?: string, pencilId?: string): IPencilReservationRequest => {\n const quoteRequest = this.buildQuoteRequest(rows, memberNumber);\n const pencilRequest: IPencilReservationRequest = {\n ...quoteRequest,\n pencilId: pencilId,\n };\n\n pencilRequest.rows = quoteRequest.rows.map((requestRow) => {\n const basketRow = rows.find((r) => r.getID() == requestRow.rowId);\n\n return {\n ...requestRow,\n pencilId: basketRow?.pencilId,\n };\n });\n\n return pencilRequest;\n };\n\n /**\n * Generates a unique query ID string based on basket row data.\n * This ID is used to detect changes and re-fetch deposit quotes during checkout.\n */\n public buildQuoteQueryID = (rows: BasketRow[], memberNumber?: string): string => {\n return rows\n .map((row) => {\n return `row:${row.getID()},\n room:${row.getRoom()?.code},\n rate:${row.getRate()?.code},\n promo:${row.getPromoCode()},\n adults:${row.getAdults()},\n children:${row.getChildren()},\n infants:${row.getInfants()},\n checkIn:${row.getStartDate()?.format('YYYY-MM-DD')},\n checkOut:${row.getEndDate()?.format('YYYY-MM-DD')},\n member:${memberNumber}`;\n })\n .join('-');\n };\n\n /**\n * Returns a quote for the given\n */\n public getPriceQuote = async (hotelId: string, rows: BasketRow[], memberNumber?: string): Promise<IBookingQuoteResponse> => {\n const quoteBody = this.buildQuoteRequest(rows, memberNumber);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'quote');\n };\n\n /**\n * Pencils a reservation for the given rooms. Returns the timeout, and quote if applicable.\n */\n public pencilReservation = async (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string): Promise<IPencilReservationResponse> => {\n const quoteBody = this.buildPencilRequest(rows, memberNumber, pencilId);\n return this.post(APIEndpoint.Reservations, quoteBody, hotelId, {}, 'pencil');\n };\n\n /**\n *\n * @param basketRows\n * @param userProfiles\n * @param payment\n * @param addonRows\n * @param comments\n * @param hotelId\n * @param sessionId\n * @param specialReq\n * @returns\n */\n public bookNow = async (\n basketRows: BasketRow[],\n userProfiles: UserProfile[],\n payment: IBookingPayment,\n addonRows: BasketAddonRow[],\n comments: string,\n hotelId: string,\n sessionId: string,\n pencilId: string | undefined = undefined,\n specialReq: string | undefined = undefined,\n retryPayment = false,\n roomstayId: string | undefined = undefined,\n memberNumber: string | undefined = undefined,\n giftCardPreauth: IGiftCardPreauthorisationDTO | undefined = undefined,\n extraFields?: IBookingExtraFields\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n roomType: row.getRoom().code || '',\n ratePlan: row.getRate()?.code || '',\n promoCode: row.getPromoCode(),\n adults: row.getAdults(),\n children: row.getChildren(),\n infants: row.getInfants(),\n checkInDate: row.getStartDate().format('YYYY-MM-DD'),\n checkOutDate: row.getEndDate().format('YYYY-MM-DD'),\n\n quoteId: row.quoteDetails?.quoteId,\n rowId: row.getID(),\n memberNumber,\n pencilId: row.pencilId,\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n code: addon.code,\n startDate: row.getSelectedDate(),\n };\n if (addon?.ratePlanCode) {\n response.ratePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.startTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.children = row.getChildQuantity();\n }\n\n if (addon.pricingType) {\n response.pricingType = addon.pricingType;\n }\n\n return response;\n });\n\n const getParams: ApiGetParameters = {};\n\n if (retryPayment) {\n getParams.retryPayment = true;\n }\n\n const requestBody: ApiGetParameters = {\n rooms: rooms,\n services: addons,\n specialRequest: specialReq,\n comments: comments,\n profiles: userProfiles,\n payment: payment,\n sessionId: sessionId,\n pencilId: pencilId,\n sourceUrl: window.location.href,\n roomstayId: roomstayId,\n extraFields,\n };\n\n // Add gift card preauth details if necessary\n if (giftCardPreauth) {\n requestBody.giftCard = {\n token: giftCardPreauth.token,\n code: giftCardPreauth.giftCard?.code || '',\n transactionId: giftCardPreauth.id,\n };\n }\n\n return this.post(APIEndpoint.Reservations, requestBody, hotelId, getParams);\n };\n\n public commit = async (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string, paymentId?: string): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n planpayCheckoutId,\n paymentId,\n },\n hotelId,\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[], itineraryId: string, hotelId: string): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n itineraryId: itineraryId,\n reservationIds: reservations,\n },\n hotelId,\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string, hotelId: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, hotelId, { email }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email: string, hotelId: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email }, id, hotelId);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public linkBookingToMember = async (hotelId: string, reservationId: string, reservationEmail: string): Promise<{ message: string; booking: IRoomstayMemberBooking }> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.post(\n APIEndpoint.Reservations,\n {\n reservationId,\n reservationEmail,\n },\n hotelId,\n {},\n 'link-booking'\n );\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
|
|
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const react_1 = __importDefault(require("react"));
|
|
40
|
+
const react_hook_form_1 = require("react-hook-form");
|
|
40
41
|
const react_i18next_1 = require("react-i18next");
|
|
41
42
|
const InlinePaymentCard_1 = __importDefault(require("./InlinePaymentCard"));
|
|
42
43
|
const Pill_1 = __importStar(require("../Pill"));
|
|
@@ -49,13 +50,17 @@ const Color_1 = require("../../../util/Color");
|
|
|
49
50
|
const TextAlignment_1 = require("../../../util/TextAlignment");
|
|
50
51
|
const InlinePaymentOption_module_scss_1 = __importDefault(require("./InlinePaymentOption.module.scss"));
|
|
51
52
|
const InlinePaymentOption = ({ card, active, overrideSubLabel }) => {
|
|
53
|
+
var _a;
|
|
52
54
|
const { t } = (0, react_i18next_1.useTranslation)();
|
|
53
55
|
const { roomstayMember } = (0, contexts_1.useMemberContext)();
|
|
54
56
|
const displayExpiry = (expiry) => {
|
|
55
57
|
return expiry.slice(0, 2) + ' / ' + expiry.slice(2);
|
|
56
58
|
};
|
|
57
59
|
const { getTotalPayNow } = (0, contexts_1.useBasket)();
|
|
58
|
-
const
|
|
60
|
+
const totalPayNowBeforeGiftCard = getTotalPayNow();
|
|
61
|
+
const formContext = (0, react_hook_form_1.useFormContext)();
|
|
62
|
+
const giftCardAmount = (_a = formContext === null || formContext === void 0 ? void 0 : formContext.watch('giftCardAmount')) !== null && _a !== void 0 ? _a : 0;
|
|
63
|
+
const totalPayNow = totalPayNowBeforeGiftCard !== null ? Math.max(0, totalPayNowBeforeGiftCard - giftCardAmount) : null;
|
|
59
64
|
const { symbol, prettyValue } = (0, Currency_1.default)({
|
|
60
65
|
children: totalPayNow,
|
|
61
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlinePaymentOption.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/InlinePaymentOption.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAkC;AAClC,iDAA+C;AAE/C,2GAAmF;AACnF,kEAA2D;AAC3D,kEAA2D;AAC3D,iIAAyG;AACzG,yCAAyD;AACzD,gEAA2C;
|
|
1
|
+
{"version":3,"file":"InlinePaymentOption.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/InlinePaymentOption.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport InlinePaymentCard from '@/components/generic/PaymentCard/InlinePaymentCard';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport AcceptablePaymentCard from '@/components/steps/confirmation/PaymentDetails/AcceptablePaymentCard';\nimport { useBasket, useMemberContext } from '@/contexts';\nimport useCurrency from '@/hooks/Currency';\nimport { VGSCardName } from '@/models/Api/HotelDTO';\nimport { ConfirmationFormValues } from '@/models/Confirmation';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './InlinePaymentOption.module.scss';\n\ninterface InlinePaymentOptionProps {\n card?: IRoomstayMemberCards;\n active?: boolean;\n\n overrideSubLabel?: string;\n}\n\nconst InlinePaymentOption: FC<InlinePaymentOptionProps> = ({ card, active, overrideSubLabel }) => {\n const { t } = useTranslation();\n const { roomstayMember } = useMemberContext();\n const displayExpiry = (expiry: string) => {\n return expiry.slice(0, 2) + ' / ' + expiry.slice(2);\n };\n const { getTotalPayNow } = useBasket();\n const totalPayNowBeforeGiftCard = getTotalPayNow();\n\n const formContext = useFormContext<ConfirmationFormValues>();\n const giftCardAmount = formContext?.watch('giftCardAmount') ?? 0;\n const totalPayNow = totalPayNowBeforeGiftCard !== null ? Math.max(0, totalPayNowBeforeGiftCard - giftCardAmount) : null;\n\n const { symbol, prettyValue } = useCurrency({\n children: totalPayNow,\n });\n\n const subLabel = overrideSubLabel ? overrideSubLabel : card ? `Expires ${displayExpiry(card.expiry)}` : t(Translation.Step.Confirmation.CardSubLabel);\n\n return (\n <div className=\"u-flex u-flex-justify-between w-100 u-flex-align-center\">\n <div className={styles.root}>\n {card ? (\n <div className=\"flex-shrink-0\">\n <InlinePaymentCard vgsCardName={card.type as VGSCardName} large />\n </div>\n ) : null}\n <div>\n <Text align={TextAlign.Left} type={TextType.Small} color={Color.Navy}>\n {card ? `**** **** **** ${card.cardNumber.slice(-4)}` : t(Translation.Step.Confirmation.CardLabel)}\n </Text>\n\n <Text className=\"u-marg-top--lighter\" align={TextAlign.Left} type={TextType.Caption} color={Color.DarkGrey}>\n {subLabel}\n </Text>\n </div>\n {!card && (\n <div>\n <AcceptablePaymentCard\n style={{\n width: 24,\n height: 16,\n borderRadius: 1.5,\n border: '0.5px solid #DFE1E5',\n }}\n isCurrent={() => true}\n />\n </div>\n )}\n {roomstayMember?.defaultCard && card && card.cardId === roomstayMember.defaultCard && (\n <Pill size=\"small\" type={PillType.Primary}>\n DEFAULT CARD\n </Pill>\n )}\n </div>\n {totalPayNow !== null && (\n <Text bold className=\"u-flex\" color={Color.Navy} type={TextType.Small}>\n {symbol}\n {prettyValue}\n </Text>\n )}\n </div>\n );\n};\n\nexport default InlinePaymentOption;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Room } from '../../../models/Room/Room';
|
|
2
|
+
import { RoomRate } from '../../../models/Room/RoomRate';
|
|
3
|
+
type TaxInclusionMessageProps = {
|
|
4
|
+
hasTax: boolean;
|
|
5
|
+
} | {
|
|
6
|
+
rate?: RoomRate | null;
|
|
7
|
+
room?: Room;
|
|
8
|
+
};
|
|
9
|
+
export declare const TaxInclusionNotice: (props: TaxInclusionMessageProps) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TaxInclusionNotice = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const react_i18next_1 = require("react-i18next");
|
|
39
|
+
const Translation_1 = require("translations/Translation");
|
|
40
|
+
const RoomRate_1 = require("../../../models/Room/RoomRate");
|
|
41
|
+
const getPriceInclusionStatus = (rate, room) => {
|
|
42
|
+
var _a, _b, _c, _d;
|
|
43
|
+
return (_d = (_b = (_a = rate === null || rate === void 0 ? void 0 : rate.getPriceType) === null || _a === void 0 ? void 0 : _a.call(rate)) !== null && _b !== void 0 ? _b : (_c = room === null || room === void 0 ? void 0 : room.getLowestPriceType) === null || _c === void 0 ? void 0 : _c.call(room)) !== null && _d !== void 0 ? _d : RoomRate_1.RoomRatePriceInclusion.IncludingFeesAndTaxes;
|
|
44
|
+
};
|
|
45
|
+
const useTaxMessage = (hasTax) => {
|
|
46
|
+
const { t } = (0, react_i18next_1.useTranslation)();
|
|
47
|
+
return (0, react_1.useMemo)(() => {
|
|
48
|
+
return hasTax ? t(Translation_1.Translation.Step.Room.RoomInfo.IncludesTaxes) : t(Translation_1.Translation.Step.Room.ExcludingTaxes);
|
|
49
|
+
}, [hasTax, t]);
|
|
50
|
+
};
|
|
51
|
+
const TaxInclusionNotice = (props) => {
|
|
52
|
+
const hasTax = 'hasTax' in props ? props.hasTax : getPriceInclusionStatus(props.rate, props.room) === RoomRate_1.RoomRatePriceInclusion.IncludingFeesAndTaxes;
|
|
53
|
+
const message = useTaxMessage(hasTax);
|
|
54
|
+
return react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: message } });
|
|
55
|
+
};
|
|
56
|
+
exports.TaxInclusionNotice = TaxInclusionNotice;
|
|
57
|
+
//# sourceMappingURL=TaxInclusionNotice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaxInclusionNotice.js","sourceRoot":"/","sources":["src/components/generic/TaxInclusionNotice/TaxInclusionNotice.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAuC;AACvC,iDAA+C;AAC/C,0DAAuD;AAGvD,qDAA0E;AAI1E,MAAM,uBAAuB,GAAG,CAAC,IAAsB,EAAE,IAAW,EAA0B,EAAE;;IAC5F,OAAO,MAAA,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,oDAAI,mCAAI,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,oDAAI,mCAAI,iCAAsB,CAAC,qBAAqB,CAAC;AAClH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAgB,EAAU,EAAE;IAC/C,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE;QAChB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9G,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,KAA+B,EAAe,EAAE;IAC/E,MAAM,MAAM,GAAG,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,iCAAsB,CAAC,qBAAqB,CAAC;IAEnJ,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEtC,OAAO,wCAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAI,CAAC;AAClE,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B","sourcesContent":["import React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate, RoomRatePriceInclusion } from '@/models/Room/RoomRate';\n\ntype TaxInclusionMessageProps = { hasTax: boolean } | { rate?: RoomRate | null; room?: Room };\n\nconst getPriceInclusionStatus = (rate?: RoomRate | null, room?: Room): RoomRatePriceInclusion => {\n return rate?.getPriceType?.() ?? room?.getLowestPriceType?.() ?? RoomRatePriceInclusion.IncludingFeesAndTaxes;\n};\n\nconst useTaxMessage = (hasTax?: boolean): string => {\n const { t } = useTranslation();\n\n return useMemo(() => {\n return hasTax ? t(Translation.Step.Room.RoomInfo.IncludesTaxes) : t(Translation.Step.Room.ExcludingTaxes);\n }, [hasTax, t]);\n};\n\nexport const TaxInclusionNotice = (props: TaxInclusionMessageProps): JSX.Element => {\n const hasTax = 'hasTax' in props ? props.hasTax : getPriceInclusionStatus(props.rate, props.room) === RoomRatePriceInclusion.IncludingFeesAndTaxes;\n\n const message = useTaxMessage(hasTax);\n\n return <span dangerouslySetInnerHTML={{ __html: message }} />;\n};\n"]}
|
|
@@ -24,5 +24,10 @@ export interface DatePickerProps {
|
|
|
24
24
|
* If undefined, falls back to the room code from the selected basket row.
|
|
25
25
|
*/
|
|
26
26
|
roomCode?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Filters availability/calendar results by the provided rate code.
|
|
29
|
+
* If undefined, no rate code filter will be applied.
|
|
30
|
+
*/
|
|
31
|
+
rateCode?: string;
|
|
27
32
|
}
|
|
28
33
|
export default function DatePicker(props: DatePickerProps): React.JSX.Element;
|
|
@@ -117,20 +117,23 @@ function DatePicker(props) {
|
|
|
117
117
|
var _a, _b;
|
|
118
118
|
return (_b = (_a = props === null || props === void 0 ? void 0 : props.roomCode) !== null && _a !== void 0 ? _a : selectedBasketRow === null || selectedBasketRow === void 0 ? void 0 : selectedBasketRow.getRoomCode()) !== null && _b !== void 0 ? _b : '';
|
|
119
119
|
}, [props === null || props === void 0 ? void 0 : props.roomCode, selectedBasketRow]);
|
|
120
|
+
const rateCode = (0, react_1.useMemo)(() => {
|
|
121
|
+
return props.rateCode || '';
|
|
122
|
+
}, [props.rateCode]);
|
|
120
123
|
const onClickDate = (newDate) => __awaiter(this, void 0, void 0, function* () {
|
|
121
124
|
let newPickingState = null;
|
|
122
125
|
const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;
|
|
123
126
|
const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;
|
|
124
127
|
const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;
|
|
125
128
|
const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';
|
|
126
|
-
const newDatePrice = yield BookingAPI_1.default.Availability.getCheapestPriceForDay(newDate, adults, children, infants, promoCode, roomCode, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber, false);
|
|
129
|
+
const newDatePrice = yield BookingAPI_1.default.Availability.getCheapestPriceForDay(newDate, adults, children, infants, promoCode, roomCode, rateCode, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber, false);
|
|
127
130
|
switch (pickingState) {
|
|
128
131
|
default:
|
|
129
132
|
case DateRangePickingState.StartDate:
|
|
130
133
|
if ((newDatePrice === null || newDatePrice === void 0 ? void 0 : newDatePrice.price) || !hotel) {
|
|
131
134
|
newPickingState = DateRangePickingState.EndDate;
|
|
132
135
|
setSelectedStartDate(newDate);
|
|
133
|
-
const result = yield getArrivalNightStay(newDate, roomCode);
|
|
136
|
+
const result = yield getArrivalNightStay(newDate, roomCode, rateCode);
|
|
134
137
|
setArrivalNightStay(result);
|
|
135
138
|
setSelectedEndDate(null);
|
|
136
139
|
}
|
|
@@ -143,7 +146,7 @@ function DatePicker(props) {
|
|
|
143
146
|
newPickingState = DateRangePickingState.EndDate;
|
|
144
147
|
}
|
|
145
148
|
else {
|
|
146
|
-
const result = yield getLastValidDay(selectedStartDate, newDate, roomCode);
|
|
149
|
+
const result = yield getLastValidDay(selectedStartDate, newDate, roomCode, rateCode);
|
|
147
150
|
setNightStayValidation(result.nightStayValidation);
|
|
148
151
|
if (!result.isValidNightStay)
|
|
149
152
|
break;
|
|
@@ -164,7 +167,7 @@ function DatePicker(props) {
|
|
|
164
167
|
});
|
|
165
168
|
const onHoveredOverDay = (day) => {
|
|
166
169
|
if (selectedStartDate && !selectedEndDate) {
|
|
167
|
-
getLastValidDay(selectedStartDate, day, roomCode).then((result) => {
|
|
170
|
+
getLastValidDay(selectedStartDate, day, roomCode, rateCode).then((result) => {
|
|
168
171
|
setNightStayValidation(result.nightStayValidation);
|
|
169
172
|
setHoveringOverDate(result.lastValidDay);
|
|
170
173
|
});
|
|
@@ -253,6 +256,7 @@ function DatePicker(props) {
|
|
|
253
256
|
nightStayValidation,
|
|
254
257
|
nightStayRequirements,
|
|
255
258
|
roomCode: roomCode,
|
|
259
|
+
rateCode: rateCode,
|
|
256
260
|
};
|
|
257
261
|
const printMonths = (0, react_1.useMemo)(() => (react_1.default.createElement(react_1.default.Fragment, null, calendarStyle === 'Month' ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
258
262
|
react_1.default.createElement(DatePickerMonth_1.default, { small: props.small, showingMonth: currentMonth, readOnly: props.readOnly }),
|
|
@@ -282,14 +286,14 @@ function DatePicker(props) {
|
|
|
282
286
|
};
|
|
283
287
|
(0, react_1.useEffect)(() => {
|
|
284
288
|
if (props.selectedStartDate && props.selectedEndDate && !nightStayValidation.init) {
|
|
285
|
-
getLastValidDay(props.selectedStartDate, props.selectedEndDate, roomCode).then((result) => {
|
|
289
|
+
getLastValidDay(props.selectedStartDate, props.selectedEndDate, roomCode, rateCode).then((result) => {
|
|
286
290
|
setNightStayValidation(result.nightStayValidation);
|
|
287
291
|
});
|
|
288
292
|
}
|
|
289
293
|
}, [props.selectedStartDate, props.selectedEndDate]);
|
|
290
294
|
(0, react_1.useEffect)(() => {
|
|
291
295
|
if (props.selectedStartDate) {
|
|
292
|
-
getArrivalNightStay(props.selectedStartDate, roomCode).then((result) => {
|
|
296
|
+
getArrivalNightStay(props.selectedStartDate, roomCode, rateCode).then((result) => {
|
|
293
297
|
setArrivalNightStay(result);
|
|
294
298
|
});
|
|
295
299
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext, IDatePickerContext } from '@frontend/contexts';\nimport { IArrivalNightStay, INightStayValidation, useCalendarNightStay, useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { lazy, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport DatePickerMonth from '@/components/generic/date/DatePickerMonth';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport DaysSelectedInformer from '@/components/steps/DaysSelectedInformer';\nimport MinimumNightStayPill from '@/components/steps/MinimumNightStayPill';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nimport WeekViewSkeleton from './WeekViewSkeleton';\n\nconst DatePickerWeek = lazy(() => import('@/components/generic/date/DatePickerWeek'));\n\nexport interface DatePickerProps {\n showMonthOnLoad?: dayjs.Dayjs;\n\n selectedStartDate?: dayjs.Dayjs;\n selectedEndDate?: dayjs.Dayjs;\n\n canSelect?: boolean;\n // Includes default navigation arrows\n showArrows?: boolean;\n // Displays two side by side\n showMultipleMonths?: boolean;\n\n // Used for tight spaces\n small?: boolean;\n\n // is there support for start / end dates\n supportsMultiSelecting?: boolean;\n\n // Do or don't show mininmum night stay block\n showMinNightStay?: boolean;\n\n supportsWeek?: boolean;\n\n onDateClicked?: (date: dayjs.Dayjs) => void;\n onStartDateChanged?: (date: dayjs.Dayjs) => void;\n\n // onEndDateChanged is called with a null date when the start date changes\n onEndDateChanged?: (date: dayjs.Dayjs | null, selectionState?: { validationMinNightStay: number | null; validationMaxNightStay: number | null }) => void;\n\n readOnly?: boolean; //Set to true to disable all event listeners\n className?: string;\n\n /**\n * Filters availability/calendar results by the provided room code.\n * If undefined, falls back to the room code from the selected basket row.\n */\n roomCode?: string;\n}\n\ninterface DatePickerDayObject {\n value: string;\n dateObj: dayjs.Dayjs | null;\n price?: string;\n hovered: boolean;\n}\n\nenum DateRangePickingState {\n StartDate = 1,\n EndDate = 2,\n}\n\n// FIXME: there is a fragile race condition where if when the start date is selected it makes an API call the picker state won't be updated\nexport default function DatePicker(props: DatePickerProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n const { t } = useTranslation();\n\n const getInitialMonth = () => props.showMonthOnLoad ?? props.selectedStartDate ?? dayjs();\n const [currentMonth, setCurrentMonth] = useState(getInitialMonth());\n\n const [selectedStartDate, setSelectedStartDate] = useState(props.selectedStartDate ?? null);\n const [selectedEndDate, setSelectedEndDate] = useState(props.selectedEndDate ?? null);\n\n useEffect(() => {\n // Sync selectedStartDate when props.selectedStartDate changes\n setSelectedStartDate(props.selectedStartDate ?? null);\n // Optionally update the calendar's current month based on the new start date, allows the calendar to jump to a different month if `props.selectedStartDate` belongs to another month (currently disabled).\n // setCurrentMonth(getInitialMonth());\n }, [props.selectedStartDate]);\n\n useEffect(() => {\n // Sync selectedEndDate when props.selectedEndDate changes\n setSelectedEndDate(props.selectedEndDate ?? null);\n }, [props.selectedEndDate]);\n\n const [hoveringOverDate, setHoveringOverDate] = useState<Dayjs | null>(null);\n\n const [pickingState, setPickingState] = useState(DateRangePickingState.StartDate);\n const [calendarStyle, setCalendarStyle] = useState<'Month' | 'Week'>(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n useEffect(() => {\n setCalendarStyle(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n }, [hotel?.defaultDatepickerType]);\n\n const [months, setMonths] = useState(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);\n const [maxPrice, setMaxPrice] = useState(0);\n\n const basketContext = useContext(BasketContext);\n const { getLastValidDay, getArrivalNightStay } = useCalendarNightStay({ basketContext });\n const [nightStayValidation, setNightStayValidation] = useState<INightStayValidation>({\n init: false,\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n validationMinNightStay: null,\n validationMaxNightStay: null,\n });\n const [arrivalNightStay, setArrivalNightStay] = useState<IArrivalNightStay>({\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n });\n\n const { selectedBasketRow } = basketContext;\n const roomCode: string = useMemo(() => {\n return props?.roomCode ?? selectedBasketRow?.getRoomCode() ?? '';\n }, [props?.roomCode, selectedBasketRow]);\n\n const onClickDate = async (newDate: dayjs.Dayjs) => {\n let newPickingState: DateRangePickingState | null = null;\n\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const newDatePrice = await API.Availability.getCheapestPriceForDay(newDate, adults, children, infants, promoCode, roomCode, hotel?.hotelID as string, memberNumber, false);\n\n switch (pickingState) {\n default:\n case DateRangePickingState.StartDate:\n if (newDatePrice?.price || !hotel) {\n newPickingState = DateRangePickingState.EndDate;\n\n setSelectedStartDate(newDate);\n const result = await getArrivalNightStay(newDate, roomCode);\n setArrivalNightStay(result);\n setSelectedEndDate(null);\n }\n\n break;\n case DateRangePickingState.EndDate:\n if (!newDate) break;\n\n if (newDate.isBefore(selectedStartDate)) {\n setSelectedStartDate(newDate);\n newPickingState = DateRangePickingState.EndDate;\n } else {\n const result = await getLastValidDay(selectedStartDate as Dayjs, newDate, roomCode);\n setNightStayValidation(result.nightStayValidation);\n if (!result.isValidNightStay) break;\n\n newPickingState = DateRangePickingState.StartDate;\n setHoveringOverDate(null);\n\n if (newDate.isSame(selectedStartDate)) {\n setSelectedEndDate(result.lastValidDay.add(1, 'day'));\n } else {\n setSelectedEndDate(result.lastValidDay);\n }\n }\n\n break;\n }\n\n if (props.supportsMultiSelecting) {\n setPickingState(newPickingState as DateRangePickingState);\n }\n };\n\n const onHoveredOverDay = (day: dayjs.Dayjs) => {\n if (selectedStartDate && !selectedEndDate) {\n getLastValidDay(selectedStartDate, day, roomCode).then((result) => {\n setNightStayValidation(result.nightStayValidation);\n setHoveringOverDate(result.lastValidDay);\n });\n }\n };\n\n const firstUpdate = useRef<HTMLDivElement | null>(null);\n\n // TODO: Perhaps refactor this later to not depend on non-state items\n useEffect(() => {\n if (DatePickerTypeFeature?.isActive() && props.supportsWeek) {\n setCalendarStyle('Week');\n }\n }, [DatePickerTypeFeature?.isActive()]);\n\n useEffect(() => {\n if (props.showMonthOnLoad) {\n setCurrentMonth(props.showMonthOnLoad);\n }\n }, [props.showMonthOnLoad]);\n\n useEffect(() => {\n if (props.showMultipleMonths) {\n setMonths([currentMonth, currentMonth.add(1, 'month')]);\n }\n }, [currentMonth, props.showMultipleMonths]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onStartDateChanged) {\n props.onStartDateChanged(selectedStartDate as Dayjs);\n }\n }, [selectedStartDate]);\n\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onEndDateChanged) {\n props.onEndDateChanged(selectedEndDate, {\n validationMinNightStay: nightStayValidation.validationMinNightStay,\n validationMaxNightStay: nightStayValidation.validationMaxNightStay,\n });\n }\n }, [selectedEndDate]);\n\n const nightStayRequirements: string[] = useMemo(() => {\n const check: {\n MinNightStayRequired: boolean;\n MaxNightStayRequired: boolean;\n } = {\n MinNightStayRequired: false,\n MaxNightStayRequired: false,\n };\n const options = {\n minNightStay: arrivalNightStay.arrivalMinNightStay,\n maxNightStay: arrivalNightStay.arrivalMaxNightStay,\n };\n if (selectedStartDate) {\n if ((arrivalNightStay?.arrivalMinNightStay && !selectedEndDate) || (nightStayValidation?.validationMinNightStay && selectedEndDate)) {\n check.MinNightStayRequired = true;\n }\n if ((arrivalNightStay?.arrivalMaxNightStay && !selectedEndDate) || (nightStayValidation?.validationMaxNightStay && selectedEndDate)) {\n check.MaxNightStayRequired = true;\n }\n }\n if (check.MinNightStayRequired && check.MaxNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.BothMinMaxNightStayRequired, options)];\n }\n if (check.MinNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.MinNightStayRequired, options)];\n }\n if (check.MaxNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.MaxNightStayRequired, options)];\n }\n return [];\n }, [selectedStartDate, selectedEndDate, arrivalNightStay, nightStayValidation]);\n\n const context: IDatePickerContext = {\n today: dayjs(),\n todayInUnix: dayjs().unix(),\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n\n hoveredMonth: hoveringOverDate,\n maxPrice,\n\n onHoverOver: onHoveredOverDay,\n currentMonth,\n\n onDayClicked: (date: dayjs.Dayjs) => {\n onClickDate(date);\n },\n setMaxPrice,\n arrivalNightStay,\n nightStayValidation,\n nightStayRequirements,\n\n roomCode: roomCode,\n };\n\n const printMonths = useMemo(\n () => (\n <>\n {calendarStyle === 'Month' ? (\n <>\n <DatePickerMonth small={props.small} showingMonth={currentMonth} readOnly={props.readOnly} />\n {props.showMultipleMonths && <DatePickerMonth showingMonth={currentMonth.add(1, 'month')} readOnly={props.readOnly} />}\n </>\n ) : (\n <>\n <React.Suspense fallback={<WeekViewSkeleton />}>\n <DatePickerWeek />\n </React.Suspense>\n </>\n )}\n </>\n ),\n [currentMonth, props.showMultipleMonths, calendarStyle, props.readOnly, roomCode]\n );\n\n const calendarClassNames = classNames(\n 'diji-calendar',\n {\n '--single': !props.showMultipleMonths,\n '--small': props.small,\n '--week': calendarStyle === 'Week',\n },\n props?.className\n );\n const previousMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Previous Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n };\n const nextMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Next Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.add(1, 'month'));\n };\n const setCalendarStyleAsMonth = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Month');\n };\n const setCalendarStyleAsWeek = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Week', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Week');\n };\n\n useEffect(() => {\n if (props.selectedStartDate && props.selectedEndDate && !nightStayValidation.init) {\n getLastValidDay(props.selectedStartDate, props.selectedEndDate, roomCode).then((result) => {\n setNightStayValidation(result.nightStayValidation);\n });\n }\n }, [props.selectedStartDate, props.selectedEndDate]);\n\n useEffect(() => {\n if (props.selectedStartDate) {\n getArrivalNightStay(props.selectedStartDate, roomCode).then((result) => {\n setArrivalNightStay(result);\n });\n }\n }, [props.selectedStartDate]);\n\n return (\n <DatePickerContext.Provider value={context}>\n <div ref={firstUpdate} className={calendarClassNames}>\n {calendarStyle === 'Month' && (\n <div className=\"diji-calendar-navigation\">\n <Icon icon={IconType.ArrowLeft2} onClick={previousMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n <Icon icon={IconType.ArrowRight2} onClick={nextMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n </div>\n )}\n {props.supportsWeek && (\n <div className=\"diji-calendar-picker-type\">\n <Icon\n name=\"Calendar_MothViewButton\"\n icon={IconType.ViewMonth}\n size=\"32px\"\n color={calendarStyle === 'Month' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsMonth}\n />\n <Icon\n name=\"Calendar_WeekViewButton\"\n icon={IconType.ViewWeek}\n size=\"32px\"\n color={calendarStyle === 'Week' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsWeek}\n />\n </div>\n )}\n {printMonths}\n {props.showMinNightStay && props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center\">\n <DaysSelectedInformer />\n <MinimumNightStayPill />\n </div>\n )}\n </div>\n\n {props.showMinNightStay && !props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top\">\n <DaysSelectedInformer />\n <MinimumNightStayPill />\n </div>\n )}\n </DatePickerContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/DatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, DatePickerContext, IDatePickerContext } from '@frontend/contexts';\nimport { IArrivalNightStay, INightStayValidation, useCalendarNightStay, useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { lazy, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport DatePickerMonth from '@/components/generic/date/DatePickerMonth';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport DaysSelectedInformer from '@/components/steps/DaysSelectedInformer';\nimport MinimumNightStayPill from '@/components/steps/MinimumNightStayPill';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nimport WeekViewSkeleton from './WeekViewSkeleton';\n\nconst DatePickerWeek = lazy(() => import('@/components/generic/date/DatePickerWeek'));\n\nexport interface DatePickerProps {\n showMonthOnLoad?: dayjs.Dayjs;\n\n selectedStartDate?: dayjs.Dayjs;\n selectedEndDate?: dayjs.Dayjs;\n\n canSelect?: boolean;\n // Includes default navigation arrows\n showArrows?: boolean;\n // Displays two side by side\n showMultipleMonths?: boolean;\n\n // Used for tight spaces\n small?: boolean;\n\n // is there support for start / end dates\n supportsMultiSelecting?: boolean;\n\n // Do or don't show mininmum night stay block\n showMinNightStay?: boolean;\n\n supportsWeek?: boolean;\n\n onDateClicked?: (date: dayjs.Dayjs) => void;\n onStartDateChanged?: (date: dayjs.Dayjs) => void;\n\n // onEndDateChanged is called with a null date when the start date changes\n onEndDateChanged?: (date: dayjs.Dayjs | null, selectionState?: { validationMinNightStay: number | null; validationMaxNightStay: number | null }) => void;\n\n readOnly?: boolean; //Set to true to disable all event listeners\n className?: string;\n\n /**\n * Filters availability/calendar results by the provided room code.\n * If undefined, falls back to the room code from the selected basket row.\n */\n roomCode?: string;\n /**\n * Filters availability/calendar results by the provided rate code.\n * If undefined, no rate code filter will be applied.\n */\n rateCode?: string;\n}\n\ninterface DatePickerDayObject {\n value: string;\n dateObj: dayjs.Dayjs | null;\n price?: string;\n hovered: boolean;\n}\n\nenum DateRangePickingState {\n StartDate = 1,\n EndDate = 2,\n}\n\n// FIXME: there is a fragile race condition where if when the start date is selected it makes an API call the picker state won't be updated\nexport default function DatePicker(props: DatePickerProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n const { t } = useTranslation();\n\n const getInitialMonth = () => props.showMonthOnLoad ?? props.selectedStartDate ?? dayjs();\n const [currentMonth, setCurrentMonth] = useState(getInitialMonth());\n\n const [selectedStartDate, setSelectedStartDate] = useState(props.selectedStartDate ?? null);\n const [selectedEndDate, setSelectedEndDate] = useState(props.selectedEndDate ?? null);\n\n useEffect(() => {\n // Sync selectedStartDate when props.selectedStartDate changes\n setSelectedStartDate(props.selectedStartDate ?? null);\n // Optionally update the calendar's current month based on the new start date, allows the calendar to jump to a different month if `props.selectedStartDate` belongs to another month (currently disabled).\n // setCurrentMonth(getInitialMonth());\n }, [props.selectedStartDate]);\n\n useEffect(() => {\n // Sync selectedEndDate when props.selectedEndDate changes\n setSelectedEndDate(props.selectedEndDate ?? null);\n }, [props.selectedEndDate]);\n\n const [hoveringOverDate, setHoveringOverDate] = useState<Dayjs | null>(null);\n\n const [pickingState, setPickingState] = useState(DateRangePickingState.StartDate);\n const [calendarStyle, setCalendarStyle] = useState<'Month' | 'Week'>(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n useEffect(() => {\n setCalendarStyle(hotel?.defaultDatepickerType ? hotel?.defaultDatepickerType : 'Month');\n }, [hotel?.defaultDatepickerType]);\n\n const [months, setMonths] = useState(props.showMultipleMonths ? [currentMonth, currentMonth.add(1, 'month')] : [currentMonth]);\n const [maxPrice, setMaxPrice] = useState(0);\n\n const basketContext = useContext(BasketContext);\n const { getLastValidDay, getArrivalNightStay } = useCalendarNightStay({ basketContext });\n const [nightStayValidation, setNightStayValidation] = useState<INightStayValidation>({\n init: false,\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n validationMinNightStay: null,\n validationMaxNightStay: null,\n });\n const [arrivalNightStay, setArrivalNightStay] = useState<IArrivalNightStay>({\n arrivalMinNightStay: null,\n arrivalMaxNightStay: null,\n });\n\n const { selectedBasketRow } = basketContext;\n const roomCode: string = useMemo(() => {\n return props?.roomCode ?? selectedBasketRow?.getRoomCode() ?? '';\n }, [props?.roomCode, selectedBasketRow]);\n const rateCode = useMemo(() => {\n return props.rateCode || '';\n }, [props.rateCode]);\n\n const onClickDate = async (newDate: dayjs.Dayjs) => {\n let newPickingState: DateRangePickingState | null = null;\n\n const adults = selectedBasketRow ? selectedBasketRow.getAdults() : 0;\n const children = selectedBasketRow ? selectedBasketRow.getChildren() : 0;\n const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;\n const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';\n\n const newDatePrice = await API.Availability.getCheapestPriceForDay(\n newDate,\n adults,\n children,\n infants,\n promoCode,\n roomCode,\n rateCode,\n hotel?.hotelID as string,\n memberNumber,\n false\n );\n\n switch (pickingState) {\n default:\n case DateRangePickingState.StartDate:\n if (newDatePrice?.price || !hotel) {\n newPickingState = DateRangePickingState.EndDate;\n\n setSelectedStartDate(newDate);\n const result = await getArrivalNightStay(newDate, roomCode, rateCode);\n setArrivalNightStay(result);\n setSelectedEndDate(null);\n }\n\n break;\n case DateRangePickingState.EndDate:\n if (!newDate) break;\n\n if (newDate.isBefore(selectedStartDate)) {\n setSelectedStartDate(newDate);\n newPickingState = DateRangePickingState.EndDate;\n } else {\n const result = await getLastValidDay(selectedStartDate as Dayjs, newDate, roomCode, rateCode);\n setNightStayValidation(result.nightStayValidation);\n if (!result.isValidNightStay) break;\n\n newPickingState = DateRangePickingState.StartDate;\n setHoveringOverDate(null);\n\n if (newDate.isSame(selectedStartDate)) {\n setSelectedEndDate(result.lastValidDay.add(1, 'day'));\n } else {\n setSelectedEndDate(result.lastValidDay);\n }\n }\n\n break;\n }\n\n if (props.supportsMultiSelecting) {\n setPickingState(newPickingState as DateRangePickingState);\n }\n };\n\n const onHoveredOverDay = (day: dayjs.Dayjs) => {\n if (selectedStartDate && !selectedEndDate) {\n getLastValidDay(selectedStartDate, day, roomCode, rateCode).then((result) => {\n setNightStayValidation(result.nightStayValidation);\n setHoveringOverDate(result.lastValidDay);\n });\n }\n };\n\n const firstUpdate = useRef<HTMLDivElement | null>(null);\n\n // TODO: Perhaps refactor this later to not depend on non-state items\n useEffect(() => {\n if (DatePickerTypeFeature?.isActive() && props.supportsWeek) {\n setCalendarStyle('Week');\n }\n }, [DatePickerTypeFeature?.isActive()]);\n\n useEffect(() => {\n if (props.showMonthOnLoad) {\n setCurrentMonth(props.showMonthOnLoad);\n }\n }, [props.showMonthOnLoad]);\n\n useEffect(() => {\n if (props.showMultipleMonths) {\n setMonths([currentMonth, currentMonth.add(1, 'month')]);\n }\n }, [currentMonth, props.showMultipleMonths]);\n\n useEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onStartDateChanged) {\n props.onStartDateChanged(selectedStartDate as Dayjs);\n }\n }, [selectedStartDate]);\n\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = null;\n return;\n }\n\n if (props.onEndDateChanged) {\n props.onEndDateChanged(selectedEndDate, {\n validationMinNightStay: nightStayValidation.validationMinNightStay,\n validationMaxNightStay: nightStayValidation.validationMaxNightStay,\n });\n }\n }, [selectedEndDate]);\n\n const nightStayRequirements: string[] = useMemo(() => {\n const check: {\n MinNightStayRequired: boolean;\n MaxNightStayRequired: boolean;\n } = {\n MinNightStayRequired: false,\n MaxNightStayRequired: false,\n };\n const options = {\n minNightStay: arrivalNightStay.arrivalMinNightStay,\n maxNightStay: arrivalNightStay.arrivalMaxNightStay,\n };\n if (selectedStartDate) {\n if ((arrivalNightStay?.arrivalMinNightStay && !selectedEndDate) || (nightStayValidation?.validationMinNightStay && selectedEndDate)) {\n check.MinNightStayRequired = true;\n }\n if ((arrivalNightStay?.arrivalMaxNightStay && !selectedEndDate) || (nightStayValidation?.validationMaxNightStay && selectedEndDate)) {\n check.MaxNightStayRequired = true;\n }\n }\n if (check.MinNightStayRequired && check.MaxNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.BothMinMaxNightStayRequired, options)];\n }\n if (check.MinNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.MinNightStayRequired, options)];\n }\n if (check.MaxNightStayRequired) {\n return [t(Translation.Step.Date.NightStayRequirement.MaxNightStayRequired, options)];\n }\n return [];\n }, [selectedStartDate, selectedEndDate, arrivalNightStay, nightStayValidation]);\n\n const context: IDatePickerContext = {\n today: dayjs(),\n todayInUnix: dayjs().unix(),\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n\n hoveredMonth: hoveringOverDate,\n maxPrice,\n\n onHoverOver: onHoveredOverDay,\n currentMonth,\n\n onDayClicked: (date: dayjs.Dayjs) => {\n onClickDate(date);\n },\n setMaxPrice,\n arrivalNightStay,\n nightStayValidation,\n nightStayRequirements,\n\n roomCode: roomCode,\n rateCode: rateCode,\n };\n\n const printMonths = useMemo(\n () => (\n <>\n {calendarStyle === 'Month' ? (\n <>\n <DatePickerMonth small={props.small} showingMonth={currentMonth} readOnly={props.readOnly} />\n {props.showMultipleMonths && <DatePickerMonth showingMonth={currentMonth.add(1, 'month')} readOnly={props.readOnly} />}\n </>\n ) : (\n <>\n <React.Suspense fallback={<WeekViewSkeleton />}>\n <DatePickerWeek />\n </React.Suspense>\n </>\n )}\n </>\n ),\n [currentMonth, props.showMultipleMonths, calendarStyle, props.readOnly, roomCode]\n );\n\n const calendarClassNames = classNames(\n 'diji-calendar',\n {\n '--single': !props.showMultipleMonths,\n '--small': props.small,\n '--week': calendarStyle === 'Week',\n },\n props?.className\n );\n const previousMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Previous Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n };\n const nextMonthOnClick = () => {\n DataLayer.instance.sendInteraction('Show Next Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCurrentMonth(currentMonth.add(1, 'month'));\n };\n const setCalendarStyleAsMonth = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Month', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Month');\n };\n const setCalendarStyleAsWeek = () => {\n DataLayer.instance.sendInteraction('Set Calendar Style - Week', InteractionType.CALENDAR, InteractionStep.DATES);\n setCalendarStyle('Week');\n };\n\n useEffect(() => {\n if (props.selectedStartDate && props.selectedEndDate && !nightStayValidation.init) {\n getLastValidDay(props.selectedStartDate, props.selectedEndDate, roomCode, rateCode).then((result) => {\n setNightStayValidation(result.nightStayValidation);\n });\n }\n }, [props.selectedStartDate, props.selectedEndDate]);\n\n useEffect(() => {\n if (props.selectedStartDate) {\n getArrivalNightStay(props.selectedStartDate, roomCode, rateCode).then((result) => {\n setArrivalNightStay(result);\n });\n }\n }, [props.selectedStartDate]);\n\n return (\n <DatePickerContext.Provider value={context}>\n <div ref={firstUpdate} className={calendarClassNames}>\n {calendarStyle === 'Month' && (\n <div className=\"diji-calendar-navigation\">\n <Icon icon={IconType.ArrowLeft2} onClick={previousMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n <Icon icon={IconType.ArrowRight2} onClick={nextMonthOnClick} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" size=\"24px\" />\n </div>\n )}\n {props.supportsWeek && (\n <div className=\"diji-calendar-picker-type\">\n <Icon\n name=\"Calendar_MothViewButton\"\n icon={IconType.ViewMonth}\n size=\"32px\"\n color={calendarStyle === 'Month' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsMonth}\n />\n <Icon\n name=\"Calendar_WeekViewButton\"\n icon={IconType.ViewWeek}\n size=\"32px\"\n color={calendarStyle === 'Week' ? Color.Navy : Color.Grey}\n onClick={setCalendarStyleAsWeek}\n />\n </div>\n )}\n {printMonths}\n {props.showMinNightStay && props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay u-flex u-flex-direction-column u-flex-align-center\">\n <DaysSelectedInformer />\n <MinimumNightStayPill />\n </div>\n )}\n </div>\n\n {props.showMinNightStay && !props.showMultipleMonths && (\n <div className=\"diji-calendar--min-night-stay --small u-flex u-flex-direction-column u-flex-align-center u-marg-top\">\n <DaysSelectedInformer />\n <MinimumNightStayPill />\n </div>\n )}\n </DatePickerContext.Provider>\n );\n}\n"]}
|
|
@@ -83,13 +83,14 @@ function DatePickerDay(props) {
|
|
|
83
83
|
const infants = selectedBasketRow ? selectedBasketRow.getInfants() : 0;
|
|
84
84
|
const promoCode = selectedBasketRow ? selectedBasketRow.getPromoCode() : '';
|
|
85
85
|
const roomCode = datePickerContext.roomCode;
|
|
86
|
+
const rateCode = datePickerContext.rateCode;
|
|
86
87
|
if (props.day && !isPast) {
|
|
87
88
|
if (hotel) {
|
|
88
89
|
setPrice(0);
|
|
89
90
|
setIsLoading(true);
|
|
90
91
|
// If dates are selected, the errors from the /availability call take precedence.
|
|
91
92
|
const parseErrors = !datePickerContext.startDate;
|
|
92
|
-
BookingAPI_1.default.Availability.getCheapestPriceForDay(props.day, adults, children, infants, promoCode, roomCode, hotel.hotelID, memberNumber, parseErrors).then((foundedPrice) => {
|
|
93
|
+
BookingAPI_1.default.Availability.getCheapestPriceForDay(props.day, adults, children, infants, promoCode, roomCode, rateCode, hotel.hotelID, memberNumber, parseErrors).then((foundedPrice) => {
|
|
93
94
|
if (!cancelled) {
|
|
94
95
|
if (foundedPrice) {
|
|
95
96
|
setPrice(foundedPrice.price);
|