@roomstay/frontend 2.6.56 → 2.6.58

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.
Files changed (134) hide show
  1. package/dist/370.bundle.js +1 -1
  2. package/dist/493.bundle.js +1 -1
  3. package/dist/537.bundle.js +1 -0
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/main.bundle.js +1 -1
  6. package/dist/src/api/AvailabilityAPI.js +13 -6
  7. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  8. package/dist/src/components/generic/Event/EventCard.js +6 -2
  9. package/dist/src/components/generic/Event/EventCard.js.map +1 -1
  10. package/dist/src/components/generic/PaymentCard/PaymentCardInput.js +19 -4
  11. package/dist/src/components/generic/PaymentCard/PaymentCardInput.js.map +1 -1
  12. package/dist/src/components/generic/RadioButtonGroup/RadioButton.d.ts +1 -0
  13. package/dist/src/components/generic/RadioButtonGroup/RadioButton.js +2 -2
  14. package/dist/src/components/generic/RadioButtonGroup/RadioButton.js.map +1 -1
  15. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.d.ts +3 -2
  16. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +10 -10
  17. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  18. package/dist/src/components/generic/date/DatePicker.d.ts +5 -0
  19. package/dist/src/components/generic/date/DatePicker.js +7 -3
  20. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  21. package/dist/src/components/generic/date/DatePickerDay.js +13 -3
  22. package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
  23. package/dist/src/components/navigation/Header.js +21 -12
  24. package/dist/src/components/navigation/Header.js.map +1 -1
  25. package/dist/src/components/reservation/ReservationItem.js +5 -2
  26. package/dist/src/components/reservation/ReservationItem.js.map +1 -1
  27. package/dist/src/components/reservation/ReservationList.js +1 -1
  28. package/dist/src/components/reservation/ReservationList.js.map +1 -1
  29. package/dist/src/components/steps/addons/AddonCard.js +2 -1
  30. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  31. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +2 -2
  32. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
  33. package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.d.ts +6 -0
  34. package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.js +47 -0
  35. package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.js.map +1 -0
  36. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.d.ts +6 -0
  37. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.js +44 -0
  38. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.js.map +1 -0
  39. package/dist/src/components/steps/confirmation/PaymentInformation.js +4 -1
  40. package/dist/src/components/steps/confirmation/PaymentInformation.js.map +1 -1
  41. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +13 -2
  42. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
  43. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +7 -4
  44. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
  45. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js +3 -1
  46. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js.map +1 -1
  47. package/dist/src/components/summary/BEMobileSummaryModal.js +6 -2
  48. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  49. package/dist/src/components/summary/BESummary.js +19 -3
  50. package/dist/src/components/summary/BESummary.js.map +1 -1
  51. package/dist/src/components/summary/BESummaryAddonRow.js +14 -5
  52. package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
  53. package/dist/src/components/summary/BESummaryRoomRow.js +7 -3
  54. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  55. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +5 -0
  56. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  57. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +180 -2
  58. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  59. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +3 -0
  60. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  61. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +9 -7
  62. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  63. package/dist/src/contexts/DatePickerContext.d.ts +1 -0
  64. package/dist/src/contexts/DatePickerContext.js.map +1 -1
  65. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +8 -2
  66. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
  67. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js +48 -8
  68. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
  69. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +1 -1
  70. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  71. package/dist/src/handlers/payment/PaymentHandler.d.ts +1 -0
  72. package/dist/src/handlers/payment/PaymentHandler.js.map +1 -1
  73. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js +13 -35
  74. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js.map +1 -1
  75. package/dist/src/hooks/UpdateQueryParameters.d.ts +1 -1
  76. package/dist/src/hooks/UpdateQueryParameters.js +8 -3
  77. package/dist/src/hooks/UpdateQueryParameters.js.map +1 -1
  78. package/dist/src/models/Addon/Addon.d.ts +11 -1
  79. package/dist/src/models/Addon/Addon.js.map +1 -1
  80. package/dist/src/models/Api/HotelDTO.d.ts +2 -1
  81. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  82. package/dist/src/models/Api/ReservationsDTO.d.ts +7 -0
  83. package/dist/src/models/Api/ReservationsDTO.js.map +1 -1
  84. package/dist/src/models/BasketAddonRow.d.ts +2 -0
  85. package/dist/src/models/BasketAddonRow.js +25 -1
  86. package/dist/src/models/BasketAddonRow.js.map +1 -1
  87. package/dist/src/models/BasketRow.d.ts +4 -7
  88. package/dist/src/models/BasketRow.js +32 -25
  89. package/dist/src/models/BasketRow.js.map +1 -1
  90. package/dist/src/models/Client/Hotel/Hotel.d.ts +8 -0
  91. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  92. package/dist/src/models/Confirmation.d.ts +1 -2
  93. package/dist/src/models/Confirmation.js.map +1 -1
  94. package/dist/src/models/Fee.d.ts +32 -0
  95. package/dist/src/models/Fee.js +50 -0
  96. package/dist/src/models/Fee.js.map +1 -0
  97. package/dist/src/models/Room/Room.d.ts +7 -0
  98. package/dist/src/models/Room/Room.js +13 -0
  99. package/dist/src/models/Room/Room.js.map +1 -1
  100. package/dist/src/models/Room/RoomRate.d.ts +2 -0
  101. package/dist/src/models/Room/RoomRate.js +14 -0
  102. package/dist/src/models/Room/RoomRate.js.map +1 -1
  103. package/dist/src/models/Room/RoomRateNight.d.ts +3 -0
  104. package/dist/src/models/Room/RoomRateNight.js +3 -0
  105. package/dist/src/models/Room/RoomRateNight.js.map +1 -1
  106. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
  107. package/dist/src/pages/findReservation/FindReservationResults.js +18 -6
  108. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  109. package/dist/src/pages/findReservation/ReservationRow.js +3 -3
  110. package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
  111. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +6 -0
  112. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
  113. package/dist/src/providers/RoomstayThemeEngine.d.ts +1 -1
  114. package/dist/src/providers/RoomstayThemeEngine.js +20 -5
  115. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  116. package/dist/src/stories/RadioButtonGroup.stories.d.ts +1 -1
  117. package/dist/src/util/Analytics/GoogleAnalytics4.js +27 -12
  118. package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
  119. package/dist/src/util/Analytics/UniversalAnalytics.js +3 -3
  120. package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
  121. package/dist/src/util/DataLayer.d.ts +5 -1
  122. package/dist/src/util/DataLayer.js +9 -2
  123. package/dist/src/util/DataLayer.js.map +1 -1
  124. package/dist/src/util/EventsHelper.d.ts +4 -1
  125. package/dist/src/util/EventsHelper.js +15 -4
  126. package/dist/src/util/EventsHelper.js.map +1 -1
  127. package/dist/src/util/TotalCalculator.d.ts +1 -0
  128. package/dist/src/util/TotalCalculator.js +47 -9
  129. package/dist/src/util/TotalCalculator.js.map +1 -1
  130. package/dist/test.bundle.js +1 -1
  131. package/dist/vendors.bundle.js +1 -1
  132. package/package.json +2 -2
  133. package/dist/586.bundle.js +0 -1
  134. package/dist/850.bundle.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BESummary.js","sourceRoot":"/","sources":["src/components/summary/BESummary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAiH;AACjH,2CAAsF;AACtF,4DAAoC;AACpC,+CAAuD;AACvD,iDAA+C;AAC/C,0DAAuD;AAEvD,oEAA8D;AAC9D,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,+EAAuD;AACvD,iGAAyE;AACzE,kEAA2D;AAC3D,+FAAuE;AACvE,gFAA6E;AAC7E,6FAAqE;AACrE,2HAAmG;AAGnG,uGAA+E;AAC/E,wCAAqC;AACrC,wDAAiD;AAEjD,mEAAgE;AAMhE,MAAM,wCAAwC,GAAO,GAAG,EAAE;;IACtD,MAAM,gBAAgB,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAE3D,OAAO,CACH,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC,yCAAyC,EAAE;YAC7D,uBAAuB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,kBAAkB,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC;SACpI,CAAC;QAEF,8BAAC,yCAA+B,IAAC,QAAQ,SAAG,CAC1C,CACT,CAAC;AACN,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAAuB;IACpD,sBAAsB,EAAE;QACpB,SAAS,EAAE,8BAAC,wCAAwC,OAAG;QACvD,QAAQ,EAAE,CAAC;KACd;IACD,UAAU,EAAE;QACR,SAAS,EAAE,CACP,uCAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAChF,8BAAC,uCAAkB,IAAC,IAAI,EAAC,SAAS,GAAG,CACnC,CACT;QACD,QAAQ,EAAE,EAAE;KACf;CACJ,CAAC;AAEF,SAAgB,SAAS,CAAC,KAAqB;;IAC3C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAExD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,kBAAkB,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IAE3D,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC;IAE7C,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,YAAY,GAAG,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,UAAU,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,CAAC,CAAC;IAEzE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAA,sBAAc,EAAC,4BAAoB,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,GAAY,EAAE,EAAE;QAC/C,IAAI,IAAI,EAAE;YACN,OAAO,CACH,8BAAC,cAAI,IAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IAC/B,IAAI,CACF,CACV,CAAC;SACL;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAE,QAAkB,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC;IAEpD,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAE/C,MAAM,YAAY,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;QAC9B,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,KAAI,CAAA,MAAA,aAAa,CAAC,WAAW,0CAAE,UAAU,EAAE,MAAK,0BAAgB,CAAC,UAAU,EAAE,EAAE;YACpG,MAAM,WAAW,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC;YAEpD,OAAO,CACH,uCAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;gBAC7D,SAAS,IAAI,8BAAC,6BAAa,OAAG;gBAC9B,SAAS,GAAG,CAAC,IAAI,CACd,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,uCAAK,SAAS,EAAC,QAAQ;wBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;4BAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;wBAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;4BACtB,8BAAC,kBAAQ,QAAE,SAAS,CAAY,CAC7B,CACL,CACJ,CACT;gBACD,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,uCAAK,SAAS,EAAC,QAAQ;wBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ;wBAC9D,8BAAC,kBAAQ,IAAC,IAAI,QAAC,IAAI,EAAC,OAAO;4BACvB,8BAAC,kBAAQ,QAAE,aAAa,CAAC,aAAa,EAAE,CAAY,CAC7C,CACT;oBAEN,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK;wBACrE,wCAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAS,CAChG,CACL;gBACN,uCAAK,SAAS,EAAC,0BAA0B;oBACrC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAQ;oBAC/D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;wBACtB,8BAAC,kBAAQ,QAAE,WAAW,CAAY,CAC/B,CACL,CACJ,CACT,CAAC;SACL;aAAM;YACH,OAAO,CACH,uCAAK,SAAS,EAAC,mBAAmB;gBAC9B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK,IAC7C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CACvB;gBACP,8BAAC,kBAAQ,IAAC,IAAI,QAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,yBAAS,CAAC,KAAK;oBAC9C,8BAAC,kBAAQ,QAAE,aAAa,CAAC,aAAa,EAAE,CAAY,CAC7C;gBACX,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK;oBACrE,wCAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAS,CAChG,CACL,CACT,CAAC;SACL;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,aAAa,CAAC,mBAAmB,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,MAAA,aAAa,CAAC,WAAW,0CAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAEtK,OAAO,CACH,uCAAK,SAAS,EAAC,wBAAwB;QACnC,uCAAK,SAAS,EAAC,eAAe;YAC1B,8BAAC,kBAAQ,IAAC,IAAI,UAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAY,CACrD;QAEL,eAAe,CAAC,CAAC,CAAC,CACf;YACK,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAc,EAAE,KAAa,EAAE,EAAE;gBACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAAE,OAAO;gBAC3B,OAAO,8BAAC,0BAAgB,IAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,GAAI,CAAC;YAC1G,CAAC,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB;gBACI,8BAAC,mBAAS,IAAC,SAAS,QAAC,MAAM,SAAG;gBAE9B,uCAAK,SAAS,EAAC,YAAY;oBACvB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;wBAC7C,6DAA6B,CAC1B,CACL;gBAEL,MAAM,CAAC,GAAG,CAAC,CAAC,GAAmB,EAAE,EAAE;oBAChC,MAAM,oBAAoB,GAAG,GAAG,EAAE;wBAC9B,OAAO,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBACnD,CAAC,CAAC;oBACF,OAAO,8BAAC,2BAAiB,IAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,oBAAoB,GAAI,CAAC;gBAClG,CAAC,CAAC,CACH,CACN;YAEA,SAAS,GAAG,CAAC,IAAI,CACd;gBACI,uCAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAI;gBAC7E,uCAAK,SAAS,EAAC,QAAQ;oBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;wBAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;oBAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;wBACtB,8BAAC,kBAAQ,QAAE,SAAS,CAAY,CAC7B,CACL,CACP,CACN,CACF,CACN,CAAC,CAAC,CAAC,CACA,uCAAK,SAAS,EAAC,qCAAqC;YAChD,uCAAK,SAAS,EAAC,eAAe;gBAC1B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAQ,CAC9E;YACN,uCAAK,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;gBACjD,8BAAC,0BAAgB,OAAG,CAClB;YACN,uCAAK,SAAS,EAAC,YAAY;gBACvB,uCAAK,SAAS,EAAC,qCAAqC;oBAChD,8BAAC,cAAI,IAAC,IAAI,UAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAQ,CAC7B;gBACL,cAAc,CAAC,YAAwB,EAAE,YAAwB,CAAC;gBAClE,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,oBAAoB,MAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,IAAI,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAQ,CAC1G,CACJ,CACT;QACA,gBAAgB;QAChB,GAAG,CAAC,eAAe,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,CAAA,IAAI,CAC/C,8BAAC,eAAK,IAAC,eAAe,QAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,iBAAS,CAAC,SAAS;YAClE,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAQ,CACzF,CACX;QAED,8BAAC,mBAAS,IAAC,MAAM,SAAG;QAEnB,YAAY,CACX,CACT,CAAC;AACN,CAAC;AA1KD,8BA0KC","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { FC, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport Text, { TextType } from '@/components/generic/Text';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport { OverlayLoader } from '../generic/loader/OverlayLoader';\n\nexport interface BESummaryProps {\n showImages?: boolean;\n}\n\nconst TransportDistanceFromHotelBlockContainer: FC = () => {\n const overridesContext = useContext(HotelOverridesContext);\n\n return (\n <div\n className={classNames('u-flex u-flex-column u-marg-top u-w-100', {\n 'u-flex-justify-around': Object.entries(overridesContext?.transportDistances ?? {}).filter(([key, value]) => !!value).length <= 2,\n })}\n >\n <TransportDistanceFromHotelBlock vertical />\n </div>\n );\n};\n\nexport const BESummaryLayoutOrder: OrderableReactList = {\n TransportDistanceBlock: {\n component: <TransportDistanceFromHotelBlockContainer />,\n priority: 5,\n },\n PerksBlock: {\n component: (\n <div className=\"u-marg-bottom--light u-marg-top--heavy\" style={{ marginTop: '16px' }}>\n <BESummaryPerkBlock size=\"desktop\" />\n </div>\n ),\n priority: 10,\n },\n};\n\nexport function BESummary(props: BESummaryProps) {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const overridesContext = useContext(HotelOverridesContext);\n const engineContext = useContext(FullPageEngineContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const { sortedComponents } = useElementSort(BESummaryLayoutOrder);\n\n const toString = (val: string[]) => val.filter((it) => !!it && it !== '0').join(', ');\n\n const renderLine = (line?: string, key?: string) => {\n if (line) {\n return (\n <Text key={key} type={TextType.Small}>\n {line}\n </Text>\n );\n }\n return null;\n };\n\n const combineAddress = (rawLine1: string[], rawLine2: string[]) => {\n const line1 = toString(rawLine1);\n const line2 = toString(rawLine2);\n if (line1 && line1.length > 40) return renderLine([line1, line2].filter(Boolean).join(', '));\n return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];\n };\n\n const showBasketItems = !!selectedBasketRows.length;\n\n const totalFees = basketContext.getTotalFees();\n\n const totalSection = useMemo(() => {\n if (hotel?.requireDeposit && engineContext.currentStep?.getStepUrl() === StepConfirmation.getStepUrl()) {\n const totalPayNow = basketContext.getTotalPayNow();\n const isLoading = basketContext.isLoadingPriceQuote;\n\n return (\n <div className=\"u-marg-top--light\" style={{ position: 'relative' }}>\n {isLoading && <OverlayLoader />}\n {totalFees > 0 && (\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.Total)}</Text>\n <Headline bold size=\"large\">\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n </div>\n\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.PayNow)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n );\n }\n }, [basketContext.currentBasketRows, basketContext.isLoadingPriceQuote, basketContext.getTotalPrice, hotel?.requireDeposit, engineContext.currentStep?.getStepUrl()]);\n\n return (\n <div className=\"booking-engine-summary\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Misc.Summary)}</Headline>\n </div>\n\n {showBasketItems ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n return <BESummaryRoomRow key={row.getID()} row={row} index={index} showImages={!!props.showImages} />;\n })}\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>Add-on Items</strong>\n </Text>\n </div>\n\n {addons.map((row: BasketAddonRow) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(row);\n };\n return <BESummaryAddonRow row={row} key={row.getID()} onRemoveClick={onRemoveClickHandler} />;\n })}\n </>\n )}\n {/* Fees */}\n {totalFees > 0 && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n </>\n ) : (\n <div className=\"u-marg-bottom rs-summary-hotel-info\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div style={{ height: '150px', position: 'relative' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom rs-summary-hotel-name\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {combineAddress(addressLine1 as string[], addressLine2 as string[])}\n {overridesContext?.phoneNumberInSummary && hotel?.phone && <Text type={TextType.Small}>{hotel?.phone}</Text>}\n </div>\n </div>\n )}\n {sortedComponents}\n {ccx.currentCurrency !== hotel?.defaultCurrency && (\n <Alert iconAlignCenter icon={IconType.Money} type={AlertType.LightGray}>\n <Text type={TextType.Small}>{t(Translation.Step.General.AlternateCurrencyInformation)}</Text>\n </Alert>\n )}\n\n <LineBreak darker />\n\n {totalSection}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"BESummary.js","sourceRoot":"/","sources":["src/components/summary/BESummary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { FC, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport { OverlayLoader } from '../generic/loader/OverlayLoader';\n\nexport interface BESummaryProps {\n showImages?: boolean;\n}\n\nconst TransportDistanceFromHotelBlockContainer: FC = () => {\n const overridesContext = useContext(HotelOverridesContext);\n\n return (\n <div\n className={classNames('u-flex u-flex-column u-marg-top u-w-100', {\n 'u-flex-justify-around': Object.entries(overridesContext?.transportDistances ?? {}).filter(([key, value]) => !!value).length <= 2,\n })}\n >\n <TransportDistanceFromHotelBlock vertical />\n </div>\n );\n};\n\nexport const BESummaryLayoutOrder: OrderableReactList = {\n TransportDistanceBlock: {\n component: <TransportDistanceFromHotelBlockContainer />,\n priority: 5,\n },\n PerksBlock: {\n component: (\n <div className=\"u-marg-bottom--light u-marg-top--heavy\" style={{ marginTop: '16px' }}>\n <BESummaryPerkBlock size=\"desktop\" />\n </div>\n ),\n priority: 10,\n },\n};\n\nexport function BESummary(props: BESummaryProps) {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const overridesContext = useContext(HotelOverridesContext);\n const engineContext = useContext(FullPageEngineContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const { sortedComponents } = useElementSort(BESummaryLayoutOrder);\n\n const toString = (val: string[]) => val.filter((it) => !!it && it !== '0').join(', ');\n\n const renderLine = (line?: string, key?: string) => {\n if (line) {\n return (\n <Text key={key} type={TextType.Small}>\n {line}\n </Text>\n );\n }\n return null;\n };\n\n const combineAddress = (rawLine1: string[], rawLine2: string[]) => {\n const line1 = toString(rawLine1);\n const line2 = toString(rawLine2);\n if (line1 && line1.length > 40) return renderLine([line1, line2].filter(Boolean).join(', '));\n return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];\n };\n\n const showBasketItems = !!selectedBasketRows.length;\n\n const depositFees = basketContext.getDepositFees();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n\n const totalSection = useMemo(() => {\n if (hotel?.requireDeposit && engineContext.currentStep?.getStepUrl() === StepConfirmation.getStepUrl()) {\n const totalPayNow = basketContext.getTotalPayNow();\n const isLoading = basketContext.isLoadingPriceQuote;\n\n return (\n <div className=\"u-marg-top--light\" style={{ position: 'relative' }}>\n {isLoading && <OverlayLoader />}\n {totalFees > 0 && !itemisedFees?.length && (\n // We only show the total fees here if we don't have itemised fees available.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n {!!itemisedFees?.length && depositFees > 0 && hotel.addDepositFeeToBookingTotal && (\n // Because we're already showing itemised fees above the totals section, we only need to show the deposit fee here.\n // And only if the hotel is configured to add the deposit fee to the booking total.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.Total)}</Text>\n <Headline bold size=\"large\">\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n </div>\n\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.PayNow)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n );\n }\n }, [basketContext.currentBasketRows, basketContext.isLoadingPriceQuote, basketContext.getTotalPrice, hotel?.requireDeposit, engineContext.currentStep?.getStepUrl()]);\n\n return (\n <div className=\"booking-engine-summary\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Misc.Summary)}</Headline>\n </div>\n\n {showBasketItems ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n return <BESummaryRoomRow key={row.getID()} row={row} index={index} showImages={!!props.showImages} />;\n })}\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>Add-on Items</strong>\n </Text>\n </div>\n\n {addons.map((row: BasketAddonRow) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(row);\n };\n return <BESummaryAddonRow row={row} key={row.getID()} onRemoveClick={onRemoveClickHandler} />;\n })}\n </>\n )}\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n </>\n ) : (\n <div className=\"u-marg-bottom rs-summary-hotel-info\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div style={{ height: '150px', position: 'relative' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom rs-summary-hotel-name\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {combineAddress(addressLine1 as string[], addressLine2 as string[])}\n {overridesContext?.phoneNumberInSummary && hotel?.phone && <Text type={TextType.Small}>{hotel?.phone}</Text>}\n </div>\n </div>\n )}\n {sortedComponents}\n {ccx.currentCurrency !== hotel?.defaultCurrency && (\n <Alert iconAlignCenter icon={IconType.Money} type={AlertType.LightGray}>\n <Text type={TextType.Small}>{t(Translation.Step.General.AlternateCurrencyInformation)}</Text>\n </Alert>\n )}\n\n <LineBreak darker />\n\n {totalSection}\n </div>\n );\n}\n"]}
@@ -26,6 +26,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
+ const hooks_1 = require("../../hooks/index.js");
30
+ const core_1 = require("@roomstay/core");
29
31
  const dayjs_1 = __importDefault(require("dayjs"));
30
32
  const react_1 = __importDefault(require("react"));
31
33
  const react_i18next_1 = require("react-i18next");
@@ -37,9 +39,10 @@ const Tooltip_1 = __importDefault(require("../generic/Tooltip/Tooltip"));
37
39
  const Addon_1 = require("../../models/Addon/Addon");
38
40
  const Color_1 = require("../../util/Color");
39
41
  function BESummaryAddonRow(props) {
40
- var _a, _b;
42
+ var _a, _b, _c;
41
43
  const { row } = props;
42
44
  const { t } = (0, react_i18next_1.useTranslation)();
45
+ const { hotel } = (0, hooks_1.useCurrentHotel)();
43
46
  const addon = row.getAddon();
44
47
  const date = row.getSelectedDate();
45
48
  const priceInfo = addon.availability[date];
@@ -62,6 +65,12 @@ function BESummaryAddonRow(props) {
62
65
  };
63
66
  const pricingType = addon.pricingType;
64
67
  const totalFees = row.getTotalFees();
68
+ const itemisedFees = hotel && row.getItemisedFees((0, core_1.getFilteredBookingAddonFees)((_a = hotel.fees) !== null && _a !== void 0 ? _a : []));
69
+ let displayPrice = row.getTotalPrice();
70
+ if (itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) {
71
+ // If we have itemised fees, we'll show the total price without fee.
72
+ displayPrice -= totalFees;
73
+ }
65
74
  return (react_1.default.createElement(react_1.default.Fragment, null, priceInfo && (react_1.default.createElement(react_1.default.Fragment, null,
66
75
  react_1.default.createElement("div", { className: "u-marg-bottom--light u-marg-top" },
67
76
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
@@ -73,12 +82,12 @@ function BESummaryAddonRow(props) {
73
82
  },
74
83
  {
75
84
  name: 'Adult',
76
- price: (_a = priceInfo.adultPrice) !== null && _a !== void 0 ? _a : priceInfo.price,
85
+ price: (_b = priceInfo.adultPrice) !== null && _b !== void 0 ? _b : priceInfo.price,
77
86
  quantity: row.getAdultQuantity(),
78
87
  },
79
88
  {
80
89
  name: 'Child',
81
- price: (_b = priceInfo.childPrice) !== null && _b !== void 0 ? _b : priceInfo.price,
90
+ price: (_c = priceInfo.childPrice) !== null && _c !== void 0 ? _c : priceInfo.price,
82
91
  quantity: row.getChildQuantity(),
83
92
  },
84
93
  ].map(({ price, quantity, name }, index) => {
@@ -117,8 +126,8 @@ function BESummaryAddonRow(props) {
117
126
  row.getChildQuantity() > 0 &&
118
127
  printLine('Sub-total', react_1.default.createElement(Currency_1.default, null, row.getAddonSubtotal())),
119
128
  Addon_1.ADDON_PER_NIGHT_TYPES.includes(pricingType) && printLine('Nights', row.getAddon().nights),
120
- totalFees > 0 && printLine('Fees', react_1.default.createElement(Currency_1.default, null, totalFees)),
121
- printLine('Total', react_1.default.createElement(Currency_1.default, null, row.getTotalPrice())),
129
+ totalFees > 0 && !(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && printLine('Fees', react_1.default.createElement(Currency_1.default, null, totalFees)),
130
+ printLine('Total', react_1.default.createElement(Currency_1.default, null, displayPrice)),
122
131
  react_1.default.createElement("div", { className: "u-marg-top--light u-marg-bottom--heavy u-flex justify-content-start" },
123
132
  react_1.default.createElement(Tooltip_1.default, { title: "Remove this addon" },
124
133
  react_1.default.createElement("div", null,
@@ -1 +1 @@
1
- {"version":3,"file":"BESummaryAddonRow.js","sourceRoot":"/","sources":["src/components/summary/BESummaryAddonRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import dayjs, { Dayjs } from 'dayjs';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { ADDON_PER_NIGHT_TYPES, ADDON_PER_PERSON_PER_NIGHT_TYPES, AddonPricingType } from '@/models/Addon/Addon';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport { Color } from '@/util/Color';\n\ninterface BESummaryAddonRowProps {\n row: BasketAddonRow;\n onRemoveClick: () => void;\n}\n\nexport default function BESummaryAddonRow(props: BESummaryAddonRowProps) {\n const { row } = props;\n\n const { t } = useTranslation();\n\n const addon = row.getAddon();\n const date = row.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let selectedTime: Dayjs | undefined;\n if (row.getSelectedTime()) {\n const [hours, minutes, seconds] = row\n .getSelectedTime()\n .substr(1)\n .split(':')\n .map((it) => parseInt(it, 10));\n selectedTime = dayjs().hour(hours).minute(minutes).second(seconds);\n }\n\n const removeOnClickHandler = () => {\n props.onRemoveClick();\n };\n\n const printLine = (left: any, right: any) => {\n return (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small}>{left}</Text>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {right}\n </Text>\n </div>\n );\n };\n\n const pricingType = addon.pricingType;\n const totalFees = row.getTotalFees();\n\n return (\n <>\n {priceInfo && (\n <>\n <div className=\"u-marg-bottom--light u-marg-top\">\n <Text color={Color.Navy}>\n <strong>{addon.name}</strong>\n </Text>\n </div>\n\n {[\n {\n price: priceInfo.price,\n quantity: row.getQuantity(),\n },\n {\n name: 'Adult',\n price: priceInfo.adultPrice ?? priceInfo.price,\n quantity: row.getAdultQuantity(),\n },\n {\n name: 'Child',\n price: priceInfo.childPrice ?? priceInfo.price,\n quantity: row.getChildQuantity(),\n },\n ].map(({ price, quantity, name }, index) => {\n let pluralName = name;\n\n if (quantity > 1) {\n switch (name) {\n case 'Adult':\n pluralName += 's';\n break;\n case 'Child':\n pluralName += 'ren';\n break;\n }\n }\n\n // If this is a per stay or per night addon, we only want to show the price once, if we show the name it will result in something like:\n // 2 x $100 = $200\n // 1 x Adult = $100\n // Total = $200\n if ((pricingType === AddonPricingType.PER_STAY || pricingType === AddonPricingType.PER_NIGHT) && name !== undefined) {\n return;\n }\n\n return (\n <React.Fragment key={index}>\n {price && quantity > 0 && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex align-items-center\">\n <Text type={TextType.Small} inline>\n {quantity} {pluralName ? `${pluralName} ` : ''}×&nbsp;<Currency>{price}</Currency>\n </Text>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n <Currency>{quantity * price}</Currency>\n </Text>\n </div>\n )}\n </React.Fragment>\n );\n })}\n\n {!row.getAddon().hideDatePicker && row.getSelectedDate() && printLine('Date', dayjs(row.getSelectedDate(), 'YYYY-MM-DD').format('D MMM'))}\n {selectedTime && printLine('Time', selectedTime.format('h:mma'))}\n\n {/* If this is a per person per night addon, and there are both children and adults added, show a sub-total. */}\n {ADDON_PER_PERSON_PER_NIGHT_TYPES.includes(pricingType) &&\n row.getAdultQuantity() > 0 &&\n row.getChildQuantity() > 0 &&\n printLine('Sub-total', <Currency>{row.getAddonSubtotal()}</Currency>)}\n\n {ADDON_PER_NIGHT_TYPES.includes(pricingType) && printLine('Nights', row.getAddon().nights)}\n {totalFees > 0 && printLine('Fees', <Currency>{totalFees}</Currency>)}\n {printLine('Total', <Currency>{row.getTotalPrice()}</Currency>)}\n\n <div className=\"u-marg-top--light u-marg-bottom--heavy u-flex justify-content-start\">\n <Tooltip title=\"Remove this addon\">\n <div>\n <BEButton isText size=\"tiny\" primary onClick={removeOnClickHandler}>\n {t(Translation.Misc.Remove)}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n </>\n )}\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"BESummaryAddonRow.js","sourceRoot":"/","sources":["src/components/summary/BESummaryAddonRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport { getFilteredBookingAddonFees } from '@roomstay/core';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { ADDON_PER_NIGHT_TYPES, ADDON_PER_PERSON_PER_NIGHT_TYPES, AddonPricingType } from '@/models/Addon/Addon';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport { Color } from '@/util/Color';\n\ninterface BESummaryAddonRowProps {\n row: BasketAddonRow;\n onRemoveClick: () => void;\n}\n\nexport default function BESummaryAddonRow(props: BESummaryAddonRowProps) {\n const { row } = props;\n\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const addon = row.getAddon();\n const date = row.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let selectedTime: Dayjs | undefined;\n if (row.getSelectedTime()) {\n const [hours, minutes, seconds] = row\n .getSelectedTime()\n .substr(1)\n .split(':')\n .map((it) => parseInt(it, 10));\n selectedTime = dayjs().hour(hours).minute(minutes).second(seconds);\n }\n\n const removeOnClickHandler = () => {\n props.onRemoveClick();\n };\n\n const printLine = (left: any, right: any) => {\n return (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small}>{left}</Text>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {right}\n </Text>\n </div>\n );\n };\n\n const pricingType = addon.pricingType;\n const totalFees = row.getTotalFees();\n const itemisedFees = hotel && row.getItemisedFees(getFilteredBookingAddonFees(hotel.fees ?? []));\n\n let displayPrice = row.getTotalPrice();\n if (itemisedFees?.length) {\n // If we have itemised fees, we'll show the total price without fee.\n displayPrice -= totalFees;\n }\n\n return (\n <>\n {priceInfo && (\n <>\n <div className=\"u-marg-bottom--light u-marg-top\">\n <Text color={Color.Navy}>\n <strong>{addon.name}</strong>\n </Text>\n </div>\n\n {[\n {\n price: priceInfo.price,\n quantity: row.getQuantity(),\n },\n {\n name: 'Adult',\n price: priceInfo.adultPrice ?? priceInfo.price,\n quantity: row.getAdultQuantity(),\n },\n {\n name: 'Child',\n price: priceInfo.childPrice ?? priceInfo.price,\n quantity: row.getChildQuantity(),\n },\n ].map(({ price, quantity, name }, index) => {\n let pluralName = name;\n\n if (quantity > 1) {\n switch (name) {\n case 'Adult':\n pluralName += 's';\n break;\n case 'Child':\n pluralName += 'ren';\n break;\n }\n }\n\n // If this is a per stay or per night addon, we only want to show the price once, if we show the name it will result in something like:\n // 2 x $100 = $200\n // 1 x Adult = $100\n // Total = $200\n if ((pricingType === AddonPricingType.PER_STAY || pricingType === AddonPricingType.PER_NIGHT) && name !== undefined) {\n return;\n }\n\n return (\n <React.Fragment key={index}>\n {price && quantity > 0 && (\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex align-items-center\">\n <Text type={TextType.Small} inline>\n {quantity} {pluralName ? `${pluralName} ` : ''}×&nbsp;<Currency>{price}</Currency>\n </Text>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n <Currency>{quantity * price}</Currency>\n </Text>\n </div>\n )}\n </React.Fragment>\n );\n })}\n\n {!row.getAddon().hideDatePicker && row.getSelectedDate() && printLine('Date', dayjs(row.getSelectedDate(), 'YYYY-MM-DD').format('D MMM'))}\n {selectedTime && printLine('Time', selectedTime.format('h:mma'))}\n\n {/* If this is a per person per night addon, and there are both children and adults added, show a sub-total. */}\n {ADDON_PER_PERSON_PER_NIGHT_TYPES.includes(pricingType) &&\n row.getAdultQuantity() > 0 &&\n row.getChildQuantity() > 0 &&\n printLine('Sub-total', <Currency>{row.getAddonSubtotal()}</Currency>)}\n\n {ADDON_PER_NIGHT_TYPES.includes(pricingType) && printLine('Nights', row.getAddon().nights)}\n\n {/*/ Only show fees if we don't have itemised fees. If we have itemised fees they will be shown later. */}\n {totalFees > 0 && !itemisedFees?.length && printLine('Fees', <Currency>{totalFees}</Currency>)}\n\n {printLine('Total', <Currency>{displayPrice}</Currency>)}\n\n <div className=\"u-marg-top--light u-marg-bottom--heavy u-flex justify-content-start\">\n <Tooltip title=\"Remove this addon\">\n <div>\n <BEButton isText size=\"tiny\" primary onClick={removeOnClickHandler}>\n {t(Translation.Misc.Remove)}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n </>\n )}\n </>\n );\n}\n"]}
@@ -28,6 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const contexts_1 = require("../../contexts/index.js");
30
30
  const hooks_1 = require("../../hooks/index.js");
31
+ const core_1 = require("@roomstay/core");
31
32
  const react_1 = __importStar(require("react"));
32
33
  const react_i18next_1 = require("react-i18next");
33
34
  const react_router_dom_1 = require("react-router-dom");
@@ -44,7 +45,7 @@ const Color_1 = require("../../util/Color");
44
45
  const GetStepRoom_1 = __importDefault(require("../../util/GetStepRoom"));
45
46
  const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
46
47
  function BESummaryRoomRow(props) {
47
- var _a, _b, _c, _d;
48
+ var _a, _b, _c, _d, _e, _f;
48
49
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
49
50
  const { currentStep } = (0, react_1.useContext)(contexts_1.FullPageEngineContext);
50
51
  const { isAccent2ColorDark, hotel } = (0, hooks_1.useCurrentHotel)();
@@ -59,6 +60,7 @@ function BESummaryRoomRow(props) {
59
60
  const removeRate = t(isOnlyRate ? Translation_1.Translation.Step.Room.Summary.NoRemoveLastRate : Translation_1.Translation.Step.Room.Summary.RemoveThisRate);
60
61
  const rowFees = (_b = row.getRate()) === null || _b === void 0 ? void 0 : _b.getTotalFees();
61
62
  const rowTaxes = (_c = row.getRate()) === null || _c === void 0 ? void 0 : _c.getTotalTaxes();
63
+ const rowItemisedFees = hotel && ((_d = row.getRate()) === null || _d === void 0 ? void 0 : _d.getItemisedFees((0, core_1.getFilteredBookingRateFees)((_e = hotel.fees) !== null && _e !== void 0 ? _e : [])));
62
64
  const cancelEditBasketRowOnClick = () => basketContext.clearSelectedRates(); //Set the selected basket row to null, ensuring that no row is selected for editing.
63
65
  const editOnClickHandler = () => {
64
66
  if (currentStep !== (0, GetStepRoom_1.default)()) {
@@ -106,7 +108,7 @@ function BESummaryRoomRow(props) {
106
108
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr() }, [
107
109
  StringHelper_1.default.pluralWithDictAndCount(row.getAdults(), Translation_1.Translation.Step.Date.Adult, t),
108
110
  showChildren ? StringHelper_1.default.pluralWithDictAndCount(row.getChildren(), Translation_1.Translation.Step.Date.Child, t) : null,
109
- ((_d = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _d === void 0 ? void 0 : _d.supportInfants) ? StringHelper_1.default.pluralWithDictAndCount(row.getInfants(), Translation_1.Translation.Step.Date.Infant, t) : null,
111
+ ((_f = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _f === void 0 ? void 0 : _f.supportInfants) ? StringHelper_1.default.pluralWithDictAndCount(row.getInfants(), Translation_1.Translation.Step.Date.Infant, t) : null,
110
112
  ]
111
113
  .filter((item) => !!item)
112
114
  .join(`, `))),
@@ -125,7 +127,9 @@ function BESummaryRoomRow(props) {
125
127
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr() }, t(Translation_1.Translation.Step.General.RoomTotal)),
126
128
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr(Color_1.Color.DarkGrey) },
127
129
  react_1.default.createElement(Currency_1.default, null, totalPrice))),
128
- !!rowFees && (react_1.default.createElement("div", { className: "u-marg-bottom--light u-flex" },
130
+ !!rowFees && !rowItemisedFees && (
131
+ // Only show fees if we don't have itemised fees. If we have itemised fees they will be shown later.
132
+ react_1.default.createElement("div", { className: "u-marg-bottom--light u-flex" },
129
133
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr() }, t(Translation_1.Translation.Step.Room.Summary.Fees)),
130
134
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr(Color_1.Color.DarkGrey) },
131
135
  react_1.default.createElement(Currency_1.default, null, rowFees)))),
@@ -1 +1 @@
1
- {"version":3,"file":"BESummaryRoomRow.js","sourceRoot":"/","sources":["src/components/summary/BESummaryRoomRow.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0E;AAC1E,2CAAkD;AAClD,+CAA0C;AAC1C,iDAA+C;AAC/C,uDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,+EAAuD;AACvD,kEAA2D;AAC3D,mFAA2D;AAC3D,oGAA4E;AAC5E,mEAAgE;AAEhE,6DAAsD;AACtD,wCAAqC;AACrC,qEAA6C;AAC7C,uEAA+C;AAU/C,SAAwB,gBAAgB,CAAC,KAA4B;;IACjE,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAExD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAE9C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEzC,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAE3B,MAAM,UAAU,GAAG,CAAA,MAAA,aAAa,CAAC,iBAAiB,0CAAE,KAAK,EAAE,MAAK,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAEjI,MAAM,OAAO,GAAG,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,YAAY,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,aAAa,EAAE,CAAC;IAEhD,MAAM,0BAA0B,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,CAAC,oFAAoF;IACjK,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,IAAI,WAAW,KAAK,IAAA,qBAAW,GAAE,EAAE;YAC/B,QAAQ,CAAC,IAAA,qBAAW,GAAE,CAAC,UAAU,EAAE,CAAC,CAAC;SACxC;QACD,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,qBAAqB,EAAE;YAC7B,KAAK,CAAC,qBAAqB,EAAE,CAAC;SACjC;IACL,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAC9B,IAAI,WAAW,KAAK,IAAA,qBAAW,GAAE,EAAE;YAC/B,QAAQ,CAAC,IAAA,qBAAW,GAAE,CAAC,UAAU,EAAE,CAAC,CAAC;SACxC;QACD,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAE5C,MAAM,iBAAiB,GAAG,kBAAkB,IAAI,UAAU,CAAC;IAC3D,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,aAAK,CAAC,QAAQ,EAAE,EAAE;QAC3C,OAAO,iBAAiB,CAAC,CAAC,CAAC,aAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC,CAAC;IAEF,OAAO,CACH;QACK,KAAK,IAAI,CAAC,IAAI,8BAAC,mBAAS,IAAC,SAAS,QAAC,MAAM,SAAG;QAC7C,uCAAK,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,6BAA6B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,UAAU,IAAI,CACX,uCAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;gBACxD,8BAAC,4BAAkB,IAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,yBAAS,CAAC,IAAI,GAAI,CAClF,CACT;YACD,uCAAK,SAAS,EAAC,mBAAmB;gBAC9B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D;wBACK,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;wBAAG,KAAK,GAAG,CAAC,CACrC,CACN,CACL;YACN,uCAAK,SAAS,EAAC,sBAAsB;gBACjC,8BAAC,cAAI,IAAC,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,IAAI,CAAC;oBAChC,8CAAS,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,GAAG,IAAI,CAAU,CACpC,CACL;YACN,uCAAK,SAAS,EAAC,sBAAsB;gBACjC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CACR,CACL;YACN,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAC9B;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACvD,GAAG,CAAC,cAAc,EAAE,CAClB,CACL;YACN,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAChC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACvD,GAAG,CAAC,gBAAgB,EAAE,CACpB,CACL;YACN,uCAAK,SAAS,EAAC,8BAA8B;gBACzC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C;oBACG,sBAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpF,YAAY,CAAC,CAAC,CAAC,sBAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC5G,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,cAAc,EAAC,CAAC,CAAC,sBAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC5I;qBACI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACxB,IAAI,CAAC,IAAI,CAAC,CACZ,CACL;YACN,uCAAK,SAAS,EAAC,+CAA+C;gBAC1D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;oBAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;oBAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACvD;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,CAAC,IAAI,CAAC,CAAY,CAC/C,CACL;YACL,YAAY,IAAI,CACb,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAChC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC,IACzD,GAAG,CAAC,YAAY,EAAE,CAChB,CACL,CACT;YACD,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CACnC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,UAAU,CAAY,CAC9B,CACL;YACL,CAAC,CAAC,OAAO,IAAI,CACV,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CACnC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,OAAO,CAAY,CAC3B,CACL,CACT;YACA,CAAC,CAAC,QAAQ,IAAI,CACX,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CACpC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,QAAQ,CAAY,CAC5B,CACL,CACT;YACD,uCAAK,SAAS,EAAC,uDAAuD;gBACjE,UAAU,CAAC,CAAC,CAAC,CACV,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC;oBACtC;wBACI,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,MAAM,EAAC,OAAO,QAAC,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACzG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,CACT,CACA,CACb,CAAC,CAAC,CAAC,CACA,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBAC7D;wBACI,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,MAAM,EAAC,OAAO,QAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACjG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAClB,CACT,CACA,CACb;gBAED,wCAAM,SAAS,EAAC,sCAAsC,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,aAAK,CAAC,SAAS,EAAE,QAEjF;gBACP,8BAAC,iBAAO,IAAC,KAAK,EAAE,UAAU;oBACtB;wBACI,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,MAAM,EAAC,OAAO,QAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACzH,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,CACT,CACA,CACR,CACJ,CACP,CACN,CAAC;AACN,CAAC;AAnLD,mCAmLC","sourcesContent":["import { BasketContext, FullPageEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow from '@/models/BasketRow';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\n\ninterface BESummaryRoomRowProps {\n index: number;\n row: BasketRow;\n showImages: boolean;\n\n onEditPropertyClicked?: () => void;\n}\n\nexport default function BESummaryRoomRow(props: BESummaryRoomRowProps) {\n const basketContext = useContext(BasketContext);\n const { currentStep } = useContext(FullPageEngineContext);\n const { isAccent2ColorDark, hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { showChildren } = useSearchScopeHook();\n\n const { index, row, showImages } = props;\n\n const totalPrice = row.getTotalPrice(true);\n const rate = row.getRate();\n\n const isSelected = basketContext.selectedBasketRow?.getID() === row.getID();\n const isOnlyRate = basketContext.currentBasketRows.length === 1;\n\n const removeRate = t(isOnlyRate ? Translation.Step.Room.Summary.NoRemoveLastRate : Translation.Step.Room.Summary.RemoveThisRate);\n\n const rowFees = row.getRate()?.getTotalFees();\n const rowTaxes = row.getRate()?.getTotalTaxes();\n\n const cancelEditBasketRowOnClick = () => basketContext.clearSelectedRates(); //Set the selected basket row to null, ensuring that no row is selected for editing.\n const editOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.selectBasketRow(row);\n\n if (props.onEditPropertyClicked) {\n props.onEditPropertyClicked();\n }\n };\n const removeOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.removeBasketRow(row);\n };\n\n const promoApplied = row.isPromoCodeValid();\n\n const shouldTextBeWhite = isAccent2ColorDark && isSelected;\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n return (\n <>\n {index >= 1 && <LineBreak noMargins darker />}\n <div key={row.getID()} className={'booking-engine-summary--row' + (isSelected ? ' --selected' : '')}>\n {showImages && (\n <div className=\"u-border-rounded\" style={{ height: '190px' }}>\n <ImageGallerySlider images={row.getRoom().getImages()} imageSize={ImageSize.Tiny} />\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)}>\n <strong>\n {t(Translation.Step.Date.Room)} {index + 1}\n </strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text color={textWhiteOr(Color.Navy)}>\n <strong>{rate?.getRoom().name}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {rate?.name}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Arrival)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getArrivalDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Departure)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getDepartureDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--medium u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {[\n StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t),\n showChildren ? StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t) : null,\n hotel?.childConfiguration?.supportInfants ? StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t) : null,\n ]\n .filter((item) => !!item)\n .join(`, `)}\n </Text>\n </div>\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Misc.Rates)} ({t(Translation.Misc.PerNight)})\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rate?.getAveragePrice(true)}</Currency>\n </Text>\n </div>\n {promoApplied && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.PromoCode)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n {row.getPromoCode()}\n </Text>\n </div>\n )}\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.General.RoomTotal)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{totalPrice}</Currency>\n </Text>\n </div>\n {!!rowFees && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Fees)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowFees}</Currency>\n </Text>\n </div>\n )}\n {!!rowTaxes && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Taxes)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowTaxes}</Currency>\n </Text>\n </div>\n )}\n <div className=\"u-marg-top u-marg-bottom u-flex justify-content-start\">\n {isSelected ? (\n <Tooltip title={t(Translation.Misc.Cancel)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={cancelEditBasketRowOnClick} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </Tooltip>\n ) : (\n <Tooltip title={t(Translation.Step.Confirmation.EditThisProperty)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={editOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Edit)}\n </BEButton>\n </div>\n </Tooltip>\n )}\n\n <span className=\"u-pad-left--light u-pad-right--light\" style={{ color: Color.LightGrey }}>\n |\n </span>\n <Tooltip title={removeRate}>\n <div>\n <BEButton isText size=\"tiny\" primary disabled={isOnlyRate} onClick={removeOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Remove)}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"BESummaryRoomRow.js","sourceRoot":"/","sources":["src/components/summary/BESummaryRoomRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, FullPageEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { getFilteredBookingRateFees } from '@roomstay/core';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow from '@/models/BasketRow';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\n\ninterface BESummaryRoomRowProps {\n index: number;\n row: BasketRow;\n showImages: boolean;\n\n onEditPropertyClicked?: () => void;\n}\n\nexport default function BESummaryRoomRow(props: BESummaryRoomRowProps) {\n const basketContext = useContext(BasketContext);\n const { currentStep } = useContext(FullPageEngineContext);\n const { isAccent2ColorDark, hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { showChildren } = useSearchScopeHook();\n\n const { index, row, showImages } = props;\n\n const totalPrice = row.getTotalPrice(true);\n const rate = row.getRate();\n\n const isSelected = basketContext.selectedBasketRow?.getID() === row.getID();\n const isOnlyRate = basketContext.currentBasketRows.length === 1;\n\n const removeRate = t(isOnlyRate ? Translation.Step.Room.Summary.NoRemoveLastRate : Translation.Step.Room.Summary.RemoveThisRate);\n\n const rowFees = row.getRate()?.getTotalFees();\n const rowTaxes = row.getRate()?.getTotalTaxes();\n const rowItemisedFees = hotel && row.getRate()?.getItemisedFees(getFilteredBookingRateFees(hotel.fees ?? []));\n\n const cancelEditBasketRowOnClick = () => basketContext.clearSelectedRates(); //Set the selected basket row to null, ensuring that no row is selected for editing.\n const editOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.selectBasketRow(row);\n\n if (props.onEditPropertyClicked) {\n props.onEditPropertyClicked();\n }\n };\n const removeOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.removeBasketRow(row);\n };\n\n const promoApplied = row.isPromoCodeValid();\n\n const shouldTextBeWhite = isAccent2ColorDark && isSelected;\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n return (\n <>\n {index >= 1 && <LineBreak noMargins darker />}\n <div key={row.getID()} className={'booking-engine-summary--row' + (isSelected ? ' --selected' : '')}>\n {showImages && (\n <div className=\"u-border-rounded\" style={{ height: '190px' }}>\n <ImageGallerySlider images={row.getRoom().getImages()} imageSize={ImageSize.Tiny} />\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)}>\n <strong>\n {t(Translation.Step.Date.Room)} {index + 1}\n </strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text color={textWhiteOr(Color.Navy)}>\n <strong>{rate?.getRoom().name}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {rate?.name}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Arrival)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getArrivalDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Departure)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getDepartureDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--medium u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {[\n StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t),\n showChildren ? StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t) : null,\n hotel?.childConfiguration?.supportInfants ? StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t) : null,\n ]\n .filter((item) => !!item)\n .join(`, `)}\n </Text>\n </div>\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Misc.Rates)} ({t(Translation.Misc.PerNight)})\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rate?.getAveragePrice(true)}</Currency>\n </Text>\n </div>\n {promoApplied && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.PromoCode)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n {row.getPromoCode()}\n </Text>\n </div>\n )}\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.General.RoomTotal)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{totalPrice}</Currency>\n </Text>\n </div>\n {!!rowFees && !rowItemisedFees && (\n // Only show fees if we don't have itemised fees. If we have itemised fees they will be shown later.\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Fees)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowFees}</Currency>\n </Text>\n </div>\n )}\n {!!rowTaxes && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Taxes)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowTaxes}</Currency>\n </Text>\n </div>\n )}\n <div className=\"u-marg-top u-marg-bottom u-flex justify-content-start\">\n {isSelected ? (\n <Tooltip title={t(Translation.Misc.Cancel)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={cancelEditBasketRowOnClick} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </Tooltip>\n ) : (\n <Tooltip title={t(Translation.Step.Confirmation.EditThisProperty)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={editOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Edit)}\n </BEButton>\n </div>\n </Tooltip>\n )}\n\n <span className=\"u-pad-left--light u-pad-right--light\" style={{ color: Color.LightGrey }}>\n |\n </span>\n <Tooltip title={removeRate}>\n <div>\n <BEButton isText size=\"tiny\" primary disabled={isOnlyRate} onClick={removeOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Remove)}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n </div>\n </>\n );\n}\n"]}
@@ -3,6 +3,7 @@ import type { Addon } from '../../models/Addon/Addon';
3
3
  import type ReservationsDTO from '../../models/Api/ReservationsDTO';
4
4
  import type BasketAddonRow from '../../models/BasketAddonRow';
5
5
  import type BasketRow from '../../models/BasketRow';
6
+ import { ItemisedFee } from '../../models/Fee';
6
7
  import type { IPromotion } from '../../models/Promotion/IPromotion.type';
7
8
  import type { RoomRate } from '../../models/Room/RoomRate';
8
9
  import { RoomstaySession } from '../../models/RoomstaySession';
@@ -10,6 +11,7 @@ export interface BasketContextType {
10
11
  selectedBasketRow: BasketRow;
11
12
  currentBasketRows: BasketRow[];
12
13
  basketAddonRows: BasketAddonRow[];
14
+ basketFeeRows: ItemisedFee[];
13
15
  loadedPromotion: IPromotion | null;
14
16
  startDate: dayjs.Dayjs;
15
17
  endDate: dayjs.Dayjs;
@@ -24,7 +26,9 @@ export interface BasketContextType {
24
26
  getNumberOfRooms: (withTranslation: boolean) => number | string;
25
27
  getTotalPrice: () => any;
26
28
  getTotalDeposit: () => number;
29
+ getDepositFees: () => number;
27
30
  getTotalFees: () => number;
31
+ getItemisedFees: () => ItemisedFee[];
28
32
  getTotalPayNow: () => number;
29
33
  updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;
30
34
  removeBasketRow: (row: BasketRow) => void;
@@ -53,6 +57,7 @@ export interface BasketContextType {
53
57
  removeBasketAddonRow: (row: BasketAddonRow) => void;
54
58
  attemptSelectUnfilledRow: () => BasketRow | undefined;
55
59
  initBasketRows: (basketRows: BasketRow[]) => void;
60
+ updateBasketFeeRows: () => void;
56
61
  onDatePickerOpenChange: (isOpen: boolean) => void;
57
62
  isDatePickerOpen: boolean;
58
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BasketContextType.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextType.ts"],"names":[],"mappings":"","sourcesContent":["import type dayjs from 'dayjs';\n\nimport type { Addon } from '@/models/Addon/Addon';\nimport type ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport type BasketAddonRow from '@/models/BasketAddonRow';\nimport type BasketRow from '@/models/BasketRow';\nimport type { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\n\nexport interface BasketContextType {\n selectedBasketRow: BasketRow;\n currentBasketRows: BasketRow[];\n basketAddonRows: BasketAddonRow[];\n loadedPromotion: IPromotion | null;\n\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n\n isLoadingPriceQuote: boolean;\n\n addBasketRow: (row: BasketRow) => void;\n addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;\n\n getAllValidRows: () => BasketRow[];\n getAllDatelessRows: () => BasketRow[];\n\n getNumberOfAdults: (withTranslation: boolean) => number | string;\n getNumberOfChildren: (withTranslation: boolean) => number | string;\n getNumberOfInfants: (withTranslation: boolean) => number | string;\n getNumberOfRooms: (withTranslation: boolean) => number | string;\n\n getTotalPrice: () => any;\n getTotalDeposit: () => number;\n getTotalFees: () => number;\n getTotalPayNow: () => number;\n\n updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;\n removeBasketRow: (row: BasketRow) => void;\n\n clearBasketRows: (confirm: boolean) => void;\n selectBasketRow: (row: BasketRow | null) => void;\n\n setStartDate: (date: dayjs.Dayjs) => void;\n setEndDate: (date: dayjs.Dayjs) => void;\n /**\n * @param preventApplyingOutcome a callback to check if calling function has decided that it no longer wants to apply the deposit\n * @returns\n */\n getBasketQuoteDetails: (preventApplyingOutcome: () => boolean) => void;\n\n hasCheckedOut: boolean;\n reservationData: ReservationsDTO;\n booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;\n rollback: () => void;\n checkedOut: (data: ReservationsDTO) => void;\n clearSelectedRates: () => void;\n finish: () => void;\n\n getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => void;\n\n removeBasketAddonRow: (row: BasketAddonRow) => void;\n attemptSelectUnfilledRow: () => BasketRow | undefined;\n\n initBasketRows: (basketRows: BasketRow[]) => void;\n\n onDatePickerOpenChange: (isOpen: boolean) => void;\n isDatePickerOpen: boolean;\n}\n"]}
1
+ {"version":3,"file":"BasketContextType.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextType.ts"],"names":[],"mappings":"","sourcesContent":["import type dayjs from 'dayjs';\n\nimport type { Addon } from '@/models/Addon/Addon';\nimport type ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport type BasketAddonRow from '@/models/BasketAddonRow';\nimport type BasketRow from '@/models/BasketRow';\nimport { ItemisedFee } from '@/models/Fee';\nimport type { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\n\nexport interface BasketContextType {\n selectedBasketRow: BasketRow;\n currentBasketRows: BasketRow[];\n basketAddonRows: BasketAddonRow[];\n basketFeeRows: ItemisedFee[];\n loadedPromotion: IPromotion | null;\n\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n\n isLoadingPriceQuote: boolean;\n\n addBasketRow: (row: BasketRow) => void;\n addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;\n\n getAllValidRows: () => BasketRow[];\n getAllDatelessRows: () => BasketRow[];\n\n getNumberOfAdults: (withTranslation: boolean) => number | string;\n getNumberOfChildren: (withTranslation: boolean) => number | string;\n getNumberOfInfants: (withTranslation: boolean) => number | string;\n getNumberOfRooms: (withTranslation: boolean) => number | string;\n\n getTotalPrice: () => any;\n getTotalDeposit: () => number;\n getDepositFees: () => number;\n getTotalFees: () => number;\n getItemisedFees: () => ItemisedFee[];\n getTotalPayNow: () => number;\n\n updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;\n removeBasketRow: (row: BasketRow) => void;\n\n clearBasketRows: (confirm: boolean) => void;\n selectBasketRow: (row: BasketRow | null) => void;\n\n setStartDate: (date: dayjs.Dayjs) => void;\n setEndDate: (date: dayjs.Dayjs) => void;\n /**\n * @param preventApplyingOutcome a callback to check if calling function has decided that it no longer wants to apply the deposit\n * @returns\n */\n getBasketQuoteDetails: (preventApplyingOutcome: () => boolean) => void;\n\n hasCheckedOut: boolean;\n reservationData: ReservationsDTO;\n booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;\n rollback: () => void;\n checkedOut: (data: ReservationsDTO) => void;\n clearSelectedRates: () => void;\n finish: () => void;\n\n getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => void;\n\n removeBasketAddonRow: (row: BasketAddonRow) => void;\n attemptSelectUnfilledRow: () => BasketRow | undefined;\n\n initBasketRows: (basketRows: BasketRow[]) => void;\n updateBasketFeeRows: () => void;\n\n onDatePickerOpenChange: (isOpen: boolean) => void;\n isDatePickerOpen: boolean;\n}\n"]}