@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":"PriceBreakdownBlock.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Icon, IconType } from '@roomstay/ui';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './PriceBreakdownBlock.module.scss';\n\ninterface RoomModalProps {\n rate: RoomRate;\n onClose?: (closedByBooking: boolean) => void;\n}\n\ninterface PriceBreakdownFooterProps {\n rate: RoomRate;\n onClose: () => void;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport const PriceBreakdownFooter = (props: PriceBreakdownFooterProps) => {\n const { t } = useTranslation();\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n const { showChildren } = useSearchScopeHook();\n // Just like the room list, if none are selected we select the last one. Possible refactor here & room list?\n // TODO\n const basketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n const days: any = [];\n const totalDays = basketRow?.getEndDate()?.diff(basketRow?.getStartDate(), 'day') ?? 0;\n\n for (let i = 0; i <= totalDays; i++) {\n const currentDay = basketRow?.getStartDate().add(i, 'day');\n if (currentDay) {\n days.push(currentDay.format('dddd, MMM DD, YYYY'));\n }\n }\n\n const bookButtonLabel = props.getButtonLabel ? props.getButtonLabel(false, false) : t(Translation.Misc.BookNow);\n\n return (\n <div className=\"u-flex align-items-center\">\n <Text color={Color.DarkGrey}>\n {basketRow !== null && (\n <>\n {StringHelper.pluralWithDictAndCount(basketRow?.getAdults(), Translation.Step.Date.Adult, t)},&nbsp;\n {showChildren ? <> {StringHelper.pluralWithDictAndCount(basketRow?.getChildren(), Translation.Step.Date.Child, t)},&nbsp;</> : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <> {StringHelper.pluralWithDictAndCount(basketRow?.getInfants(), Translation.Step.Date.Infant, t)},&nbsp;</>\n ) : null}\n </>\n )}\n {StringHelper.pluralWithDictAndCount(days.length - 1, Translation.Misc.Night, t)}\n </Text>\n <div className=\"u-flex align-items-center\">\n <BookNowButton isFilled rate={props.rate} buttonLabel={bookButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} />\n </div>\n </div>\n );\n};\n\nexport default function PriceBreakdownBlock(props: RoomModalProps) {\n const { t } = useTranslation();\n const ccx = useContext(CompanyContext);\n\n const basketContext = React.useContext(BasketContext);\n\n const selectedRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n const { rate } = props;\n\n const days: {\n label: string;\n alternateLabel: string;\n shortDescription?: string;\n }[] = rate.getLabelsByDate({ startDate: selectedRow.getStartDate(), endDate: selectedRow.getEndDate() });\n\n const nightRates = Object.values(rate.nightRates);\n\n let isLocked = false;\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n const totalFees = rate.getTotalFees();\n const totalTax = rate.getTotalTaxes();\n\n const { isMobile } = useWindowSize();\n\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Filter.RoomType)}\n </Text>\n <div className=\"u-flex\">\n <Headline>\n <strong>{rate.getRoom().name}</strong>\n </Headline>\n </div>\n </div>\n <div className=\"col-md-6\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Filter.RateType)}\n </Text>\n <div className=\"u-flex\">\n <Headline>\n <strong>{rate.name}</strong>\n </Headline>\n </div>\n </div>\n </div>\n <LineBreak />\n {days.map((day, index: number) => {\n const isLastDay = index === days.length - 1;\n\n const nightRate = nightRates[index];\n\n if (!nightRate && !isLastDay) {\n return;\n }\n\n return (\n <div className=\"u-flex u-marg-bottom\" key={index}>\n <Text className={isMobile ? styles['price-breakdown-label'] : null}>\n <span>{day.label} </span>\n {day.alternateLabel && !isLastDay && (\n <>\n <span className={styles['price-breakdown-label-override']}>\n {!isMobile && '-'} {day.alternateLabel}\n {day.shortDescription && (\n <Tooltip title={day.shortDescription}>\n <div className=\"u-marg-left--light d-flex\">\n <Icon icon={IconType.Info} />\n </div>\n </Tooltip>\n )}\n </span>\n </>\n )}\n </Text>\n {isLastDay ? (\n <Text color={Color.Success}>{t(Translation.Misc.CheckOut)}</Text>\n ) : (\n <Text color={Color.DarkGrey} className=\"u-pos-rel\">\n {Number(nightRate.discount) > 0 && (\n <span\n style={{\n textDecoration: 'line-through',\n fontSize: '14px',\n height: '1.1em',\n position: 'absolute',\n top: '0',\n right: '0',\n transform: 'translateY(-100%)',\n }}\n className=\"u-cross-out\"\n >\n <Currency>{nightRate.cost + nightRate.discount}</Currency>\n </span>\n )}\n <span className=\"u-primary u-bold\">\n <Currency>{nightRate.cost}</Currency>\n </span>\n </Text>\n )}\n </div>\n );\n })}\n {!!totalFees && (\n <div className=\"u-flex u-marg-bottom\">\n <Text>{t(Translation.Step.Room.Summary.Fees)}</Text>\n <Text color={Color.DarkGrey}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n )}\n {!!totalTax && (\n <div className=\"u-flex u-marg-bottom\">\n <Text>{t(Translation.Step.Room.Summary.Taxes)}</Text>\n <Text color={Color.DarkGrey}>\n <Currency>{totalTax}</Currency>\n </Text>\n </div>\n )}\n\n <div className=\"u-marg-top-bottom--heavy u-flex flex-column align-items-end\">\n <Text type={TextType.Small} color={Color.Navy}>\n {t(Translation.Misc.Total)}\n </Text>\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getTotalPriceBeforeDiscount()}\n averagePrice={rate.getTotalPrice()}\n isMemberOnly={props.rate.isMemberOnly}\n hidePerNight\n />\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.DarkGrey} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"PriceBreakdownBlock.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmE;AACnE,2CAAkD;AAClD,qCAA8C;AAC9C,+CAA0C;AAC1C,iDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,+EAAuD;AACvD,kEAA2D;AAC3D,mFAA2D;AAC3D,sHAA8F;AAC9F,gHAAwF;AACxF,mEAAgE;AAChE,mDAAmD;AAEnD,wCAAqC;AACrC,uEAA+C;AAC/C,wDAAiD;AAEjD,wGAAuD;AAehD,MAAM,oBAAoB,GAAG,CAAC,KAAgC,EAAE,EAAE;;IACrE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAC9C,4GAA4G;IAC5G,OAAO;IACP,MAAM,SAAS,GAAG,MAAA,aAAa,CAAC,iBAAiB,mCAAI,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjI,MAAM,IAAI,GAAQ,EAAE,CAAC;IACrB,MAAM,SAAS,GAAG,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,EAAE,0CAAE,IAAI,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,EAAE,EAAE,KAAK,CAAC,mCAAI,CAAC,CAAC;IAEvF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;SACtD;KACJ;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEhH,OAAO,CACH,uCAAK,SAAS,EAAC,2BAA2B;QACtC,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ;YACtB,SAAS,KAAK,IAAI,IAAI,CACnB;gBACK,sBAAY,CAAC,sBAAsB,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,SAAS,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;;gBAC3F,YAAY,CAAC,CAAC,CAAC;;oBAAI,sBAAY,CAAC,sBAAsB,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;8BAAW,CAAC,CAAC,CAAC,IAAI;gBAClI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,cAAc,EAAC,CAAC,CAAC,CACzC;;oBAAI,sBAAY,CAAC,sBAAsB,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;8BAAW,CAC/G,CAAC,CAAC,CAAC,IAAI,CACT,CACN;YACA,sBAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,yBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAC7E;QACP,uCAAK,SAAS,EAAC,2BAA2B;YACtC,8BAAC,uBAAa,IAAC,QAAQ,QAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,GAAI,CAC5H,CACJ,CACT,CAAC;AACN,CAAC,CAAC;AAxCW,QAAA,oBAAoB,wBAwC/B;AAEF,SAAwB,mBAAmB,CAAC,KAAqB;;IAC7D,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG,eAAK,CAAC,UAAU,CAAC,wBAAa,CAAC,CAAC;IAEtD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,MAAA,aAAa,CAAC,iBAAiB,mCAAI,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnI,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEvB,MAAM,IAAI,GAIJ,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEzG,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAElD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACxC,QAAQ,GAAG,IAAI,CAAC;KACnB;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,EAAE,CAAC,CAAC;IAE7D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,0BAAa,GAAE,CAAC;IAErC,OAAO,CACH;QACI,uCAAK,SAAS,EAAC,KAAK;YAChB,uCAAK,SAAS,EAAC,UAAU;gBACrB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,IAC5C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CACtC;gBACP,uCAAK,SAAS,EAAC,QAAQ;oBACnB,8BAAC,kBAAQ;wBACL,8CAAS,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAU,CAC/B,CACT,CACJ;YACN,uCAAK,SAAS,EAAC,UAAU;gBACrB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,IAC5C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CACtC;gBACP,uCAAK,SAAS,EAAC,QAAQ;oBACnB,8BAAC,kBAAQ;wBACL,8CAAS,IAAI,CAAC,IAAI,CAAU,CACrB,CACT,CACJ,CACJ;QACN,8BAAC,mBAAS,OAAG;QACZ,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAa,EAAE,EAAE;YAC7B,MAAM,SAAS,GAAG,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAE5C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC1B,OAAO;aACV;YAED,OAAO,CACH,uCAAK,SAAS,EAAC,sBAAsB,EAAC,GAAG,EAAE,KAAK;gBAC5C,8BAAC,cAAI,IAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,yCAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC9D;wBAAO,GAAG,CAAC,KAAK;4BAAS;oBACxB,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,IAAI,CACjC;wBACI,wCAAM,SAAS,EAAE,yCAAM,CAAC,gCAAgC,CAAC;4BACpD,CAAC,QAAQ,IAAI,GAAG;;4BAAG,GAAG,CAAC,cAAc;4BACrC,GAAG,CAAC,gBAAgB,IAAI,CACrB,8BAAC,iBAAO,IAAC,KAAK,EAAE,GAAG,CAAC,gBAAgB;gCAChC,uCAAK,SAAS,EAAC,2BAA2B;oCACtC,8BAAC,SAAI,IAAC,IAAI,EAAE,aAAQ,CAAC,IAAI,GAAI,CAC3B,CACA,CACb,CACE,CACR,CACN,CACE;gBACN,SAAS,CAAC,CAAC,CAAC,CACT,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,OAAO,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAQ,CACpE,CAAC,CAAC,CAAC,CACA,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,WAAW;oBAC7C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAC/B,wCACI,KAAK,EAAE;4BACH,cAAc,EAAE,cAAc;4BAC9B,QAAQ,EAAE,MAAM;4BAChB,MAAM,EAAE,OAAO;4BACf,QAAQ,EAAE,UAAU;4BACpB,GAAG,EAAE,GAAG;4BACR,KAAK,EAAE,GAAG;4BACV,SAAS,EAAE,mBAAmB;yBACjC,EACD,SAAS,EAAC,aAAa;wBAEvB,8BAAC,kBAAQ,QAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAY,CACvD,CACV;oBACD,wCAAM,SAAS,EAAC,kBAAkB;wBAC9B,8BAAC,kBAAQ,QAAE,SAAS,CAAC,IAAI,CAAY,CAClC,CACJ,CACV,CACC,CACT,CAAC;QACN,CAAC,CAAC;QACD,CAAC,CAAC,SAAS,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,CACrC,uCAAK,SAAS,EAAC,sBAAsB;YACjC,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAQ;YACpD,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ;gBACvB,8BAAC,kBAAQ,QAAE,SAAS,CAAY,CAC7B,CACL,CACT;QACA,CAAC,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,CACvB;YACI,8BAAC,mBAAS,OAAG;YACb,uCAAK,SAAS,EAAC,eAAe,IACzB,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACvB,uCAAK,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAC,QAAQ;gBAC3C,8BAAC,cAAI;oBACD,8BAAC,cAAI,IAAC,MAAM,QAAC,IAAI,UACZ,GAAG,CAAC,QAAQ,CAAC,IAAI,CACf;oBACN,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC,WAAW,GAAG,CAC1D;gBACP,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ;oBACvB,wCAAM,SAAS,EAAC,kBAAkB;wBAC9B,8BAAC,kBAAQ,QAAE,GAAG,CAAC,MAAM,CAAY,CAC9B,CACJ,CACL,CACT,CAAC,CACA,CACP,CACN;QACA,CAAC,CAAC,QAAQ,IAAI,CACX,uCAAK,SAAS,EAAC,sBAAsB;YACjC,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAQ;YACrD,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ;gBACvB,8BAAC,kBAAQ,QAAE,QAAQ,CAAY,CAC5B,CACL,CACT;QAED,uCAAK,SAAS,EAAC,6DAA6D;YACxE,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,IACxC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CACvB;YACP,8BAAC,+BAAqB,IAClB,QAAQ,EAAE,QAAQ,EAClB,kBAAkB,EAAE,IAAI,CAAC,2BAA2B,EAAE,EACtD,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,EAClC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EACrC,YAAY,SACd;YACF,uCAAK,SAAS,EAAC,eAAe;gBAC1B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,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,CACJ,CACP,CACN,CAAC;AACN,CAAC;AA3KD,sCA2KC","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Icon, IconType } from '@roomstay/ui';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './PriceBreakdownBlock.module.scss';\n\ninterface RoomModalProps {\n rate: RoomRate;\n onClose?: (closedByBooking: boolean) => void;\n}\n\ninterface PriceBreakdownFooterProps {\n rate: RoomRate;\n onClose: () => void;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport const PriceBreakdownFooter = (props: PriceBreakdownFooterProps) => {\n const { t } = useTranslation();\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n const { showChildren } = useSearchScopeHook();\n // Just like the room list, if none are selected we select the last one. Possible refactor here & room list?\n // TODO\n const basketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n const days: any = [];\n const totalDays = basketRow?.getEndDate()?.diff(basketRow?.getStartDate(), 'day') ?? 0;\n\n for (let i = 0; i <= totalDays; i++) {\n const currentDay = basketRow?.getStartDate().add(i, 'day');\n if (currentDay) {\n days.push(currentDay.format('dddd, MMM DD, YYYY'));\n }\n }\n\n const bookButtonLabel = props.getButtonLabel ? props.getButtonLabel(false, false) : t(Translation.Misc.BookNow);\n\n return (\n <div className=\"u-flex align-items-center\">\n <Text color={Color.DarkGrey}>\n {basketRow !== null && (\n <>\n {StringHelper.pluralWithDictAndCount(basketRow?.getAdults(), Translation.Step.Date.Adult, t)},&nbsp;\n {showChildren ? <> {StringHelper.pluralWithDictAndCount(basketRow?.getChildren(), Translation.Step.Date.Child, t)},&nbsp;</> : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <> {StringHelper.pluralWithDictAndCount(basketRow?.getInfants(), Translation.Step.Date.Infant, t)},&nbsp;</>\n ) : null}\n </>\n )}\n {StringHelper.pluralWithDictAndCount(days.length - 1, Translation.Misc.Night, t)}\n </Text>\n <div className=\"u-flex align-items-center\">\n <BookNowButton isFilled rate={props.rate} buttonLabel={bookButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} />\n </div>\n </div>\n );\n};\n\nexport default function PriceBreakdownBlock(props: RoomModalProps) {\n const { t } = useTranslation();\n const ccx = useContext(CompanyContext);\n\n const basketContext = React.useContext(BasketContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n const { rate } = props;\n\n const days: {\n label: string;\n alternateLabel: string;\n shortDescription?: string;\n }[] = rate.getLabelsByDate({ startDate: selectedRow.getStartDate(), endDate: selectedRow.getEndDate() });\n\n const nightRates = Object.values(rate.nightRates);\n\n let isLocked = false;\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n const totalFees = rate.getTotalFees();\n const totalTax = rate.getTotalTaxes();\n\n const itemisedFees = rate.getItemisedFees(hotel?.fees ?? []);\n\n const { isMobile } = useWindowSize();\n\n return (\n <>\n <div className=\"row\">\n <div className=\"col-md-6\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Filter.RoomType)}\n </Text>\n <div className=\"u-flex\">\n <Headline>\n <strong>{rate.getRoom().name}</strong>\n </Headline>\n </div>\n </div>\n <div className=\"col-md-6\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n {t(Translation.Step.Room.Filter.RateType)}\n </Text>\n <div className=\"u-flex\">\n <Headline>\n <strong>{rate.name}</strong>\n </Headline>\n </div>\n </div>\n </div>\n <LineBreak />\n {days.map((day, index: number) => {\n const isLastDay = index === days.length - 1;\n\n const nightRate = nightRates[index];\n\n if (!nightRate && !isLastDay) {\n return;\n }\n\n return (\n <div className=\"u-flex u-marg-bottom\" key={index}>\n <Text className={isMobile ? styles['price-breakdown-label'] : null}>\n <span>{day.label} </span>\n {day.alternateLabel && !isLastDay && (\n <>\n <span className={styles['price-breakdown-label-override']}>\n {!isMobile && '-'} {day.alternateLabel}\n {day.shortDescription && (\n <Tooltip title={day.shortDescription}>\n <div className=\"u-marg-left--light d-flex\">\n <Icon icon={IconType.Info} />\n </div>\n </Tooltip>\n )}\n </span>\n </>\n )}\n </Text>\n {isLastDay ? (\n <Text color={Color.Success}>{t(Translation.Misc.CheckOut)}</Text>\n ) : (\n <Text color={Color.DarkGrey} className=\"u-pos-rel\">\n {Number(nightRate.discount) > 0 && (\n <span\n style={{\n textDecoration: 'line-through',\n fontSize: '14px',\n height: '1.1em',\n position: 'absolute',\n top: '0',\n right: '0',\n transform: 'translateY(-100%)',\n }}\n className=\"u-cross-out\"\n >\n <Currency>{nightRate.cost + nightRate.discount}</Currency>\n </span>\n )}\n <span className=\"u-primary u-bold\">\n <Currency>{nightRate.cost}</Currency>\n </span>\n </Text>\n )}\n </div>\n );\n })}\n {!!totalFees && !itemisedFees?.length && (\n <div className=\"u-flex u-marg-bottom\">\n <Text>{t(Translation.Step.Room.Summary.Fees)}</Text>\n <Text color={Color.DarkGrey}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n )}\n {!!itemisedFees?.length && (\n <>\n <LineBreak />\n <div className=\"u-marg-bottom\">\n {itemisedFees.map((fee) => (\n <div key={fee.hotelFee.name} className=\"u-flex\">\n <Text>\n <Text inline bold>\n {fee.hotelFee.name}\n </Text>\n {fee.hotelFee.description && ` (${fee.hotelFee.description})`}\n </Text>\n <Text color={Color.DarkGrey}>\n <span className=\"u-primary u-bold\">\n <Currency>{fee.amount}</Currency>\n </span>\n </Text>\n </div>\n ))}\n </div>\n </>\n )}\n {!!totalTax && (\n <div className=\"u-flex u-marg-bottom\">\n <Text>{t(Translation.Step.Room.Summary.Taxes)}</Text>\n <Text color={Color.DarkGrey}>\n <Currency>{totalTax}</Currency>\n </Text>\n </div>\n )}\n\n <div className=\"u-marg-top-bottom--heavy u-flex flex-column align-items-end\">\n <Text type={TextType.Small} color={Color.Navy}>\n {t(Translation.Misc.Total)}\n </Text>\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getTotalPriceBeforeDiscount()}\n averagePrice={rate.getTotalPrice()}\n isMemberOnly={props.rate.isMemberOnly}\n hidePerNight\n />\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.DarkGrey} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </>\n );\n}\n"]}
@@ -65,9 +65,12 @@ const RoomRateDescriptionFooter = (props) => {
65
65
  react_1.default.createElement("div", { className: "u-flex align-items-center" }, bookNowButton)));
66
66
  };
67
67
  exports.RoomRateDescriptionFooter = RoomRateDescriptionFooter;
68
- const Calendar = ({ row }) => {
69
- return (react_1.default.createElement("div", { className: 'd-flex align-items-center flex-column ' + RoomRateDescriptionTab_module_scss_1.default.calendarContainer },
70
- react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: row === null || row === void 0 ? void 0 : row.getStartDate(), showMultipleMonths: false, supportsMultiSelecting: true, showMinNightStay: false, supportsWeek: false, selectedStartDate: row === null || row === void 0 ? void 0 : row.getStartDate(), selectedEndDate: row === null || row === void 0 ? void 0 : row.getEndDate(), readOnly: true, className: RoomRateDescriptionTab_module_scss_1.default.calendar })));
68
+ const Calendar = ({ row, rate }) => {
69
+ const startDate = row.getStartDate();
70
+ const endDate = row.getEndDate();
71
+ const roomCode = rate.getRoom().code || '';
72
+ return (react_1.default.createElement("div", { className: `d-flex align-items-center flex-column ${RoomRateDescriptionTab_module_scss_1.default.calendarContainer}` },
73
+ react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: startDate, showMultipleMonths: false, supportsMultiSelecting: true, showMinNightStay: false, supportsWeek: false, selectedStartDate: startDate, selectedEndDate: endDate, readOnly: true, className: RoomRateDescriptionTab_module_scss_1.default.calendar, roomCode: roomCode })));
71
74
  };
72
75
  const RateDescriptionOverides = ({ rate }) => {
73
76
  var _a;
@@ -114,7 +117,7 @@ function RoomRateDescriptionTab(props) {
114
117
  react_1.default.createElement(Headline_1.default, { bold: true }, rateName)),
115
118
  react_1.default.createElement("div", { className: "u-marg-bottom--heavy text-small u-pre-wrap u-clear-font-weight", dangerouslySetInnerHTML: { __html: longDescription ? longDescription : shortDescription !== null && shortDescription !== void 0 ? shortDescription : '' } }),
116
119
  react_1.default.createElement("div", { className: "u-marg-bottom--light" },
117
- react_1.default.createElement(Calendar, { row: row }),
120
+ react_1.default.createElement(Calendar, { row: row, rate: rate }),
118
121
  react_1.default.createElement(RateDescriptionOverides, { rate: rate })),
119
122
  react_1.default.createElement(LineBreak_1.default, null),
120
123
  react_1.default.createElement("div", { className: "u-marg-bottom--light" },
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRateDescriptionTab.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport DatePicker from '@/components/generic/date/DatePicker';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport { useRateDetails } from '@/hooks/useRateDetails';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './RoomRateDescriptionTab.module.scss';\n\ninterface RoomRateDescriptionTabProps {\n rate: RoomRate;\n}\n\ninterface RoomRateDescriptionFooterProps {\n rate: RoomRate;\n onClose: () => void;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport const RoomRateDescriptionFooter = (props: RoomRateDescriptionFooterProps) => {\n const { t } = useTranslation();\n const ccx = useContext(CompanyContext);\n\n const { rate } = props;\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n const bookButtonLabel = props.getButtonLabel ? props.getButtonLabel(false, false) : t(Translation.Misc.BookNow);\n\n const openSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const bookNowButton = isLocked ? (\n <BEButton filled success onClick={openSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton isFilled rate={props.rate} buttonLabel={bookButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} />\n );\n\n const priceBlock = <div className=\"u-flex flex-column align-items-start align-items-md-end justify-content-start\" />;\n\n return (\n <div className=\"u-flex\">\n {priceBlock}\n <div className=\"u-flex align-items-center\">{bookNowButton}</div>\n </div>\n );\n};\n\nconst Calendar = ({ row }: { row: BasketRow }): React.ReactElement => {\n return (\n <div className={'d-flex align-items-center flex-column ' + styles.calendarContainer}>\n <DatePicker\n showMonthOnLoad={row?.getStartDate()}\n showMultipleMonths={false}\n supportsMultiSelecting\n showMinNightStay={false}\n supportsWeek={false}\n selectedStartDate={row?.getStartDate()}\n selectedEndDate={row?.getEndDate()}\n readOnly\n className={styles.calendar}\n />\n </div>\n );\n};\n\nconst RateDescriptionOverides = ({ rate }: { rate: RoomRate }) => {\n const basketContext = useContext(BasketContext);\n const basketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n const displayRates = rate.getDisplayRates({\n startDate: basketRow?.getStartDate(),\n endDate: basketRow?.getEndDate(),\n });\n\n const { t } = useTranslation();\n\n return (\n <div className=\"u-marg-top--medium\">\n {displayRates.map((displayRate, index) => (\n <div className=\"u-marg-bottom--light\" key={index}>\n {displayRate.startDate && displayRate.endDate ? (\n <>\n <Text>\n <strong>{rate.displayRateToDayLabel(displayRate)}</strong>\n </Text>\n <Text>\n {rate.displayRateToDayName(displayRate)}: {displayRate.name}\n </Text>\n </>\n ) : (\n <Text bold>\n {t(Translation.Step.Room.RoomInfo.BaseRate)}: {displayRate.name}\n </Text>\n )}\n\n <Text type={TextType.Small}>\n <span className=\"u-clear-font-weight\" dangerouslySetInnerHTML={{ __html: displayRate.shortDescription }} />\n </Text>\n <Text type={TextType.Small}>\n <span className=\"u-clear-font-weight\" dangerouslySetInnerHTML={{ __html: displayRate.longDescription }} />\n </Text>\n </div>\n ))}\n </div>\n );\n};\n\nexport default function RoomRateDescriptionTab(props: RoomRateDescriptionTabProps) {\n const ccx = useContext(CompanyContext);\n const { currentBasketRows } = useContext(BasketContext);\n\n const { t } = useTranslation();\n const { isMobile } = useWindowSize();\n const cancelPolicy = props.rate.getCancellationPolicy();\n const guaranteePolicy = props.rate.getGuaranteePolicy();\n\n let isLocked = false;\n if (props.rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n const rate = props.rate;\n const row = currentBasketRows[0];\n\n const { rateName, shortDescription, longDescription } = useRateDetails(rate, isLocked);\n\n return (\n <>\n <div>\n <div className=\"u-marg-bottom--light\">\n <Headline bold>{rateName}</Headline>\n </div>\n\n <div\n className=\"u-marg-bottom--heavy text-small u-pre-wrap u-clear-font-weight\"\n dangerouslySetInnerHTML={{ __html: longDescription ? longDescription : shortDescription ?? '' }}\n />\n\n <div className=\"u-marg-bottom--light\">\n <Calendar row={row} />\n <RateDescriptionOverides rate={rate} />\n </div>\n\n <LineBreak />\n <div className=\"u-marg-bottom--light\">\n <Text>\n <strong>{t(Translation.Step.Confirmation.Policies)}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n {guaranteePolicy && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Misc.GuaranteePolicy)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={guaranteePolicy} />\n </Text>\n </div>\n )}\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Misc.CancellationPolicy)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={cancelPolicy} />\n </Text>\n </div>\n </div>\n\n <div className=\"u-flex flex-column align-items-start align-items-md-end justify-content-end\">\n <Text type={TextType.Small} color={Color.Navy}>\n {t(Translation.Misc.Total)}\n </Text>\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getTotalPriceBeforeDiscount()}\n averagePrice={rate.getTotalPrice()}\n isMemberOnly={props.rate.isMemberOnly}\n hidePerNight\n />\n <Text type={TextType.Label} color={Color.DarkGrey} align={isMobile ? TextAlign.Left : TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomRateDescriptionTab.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport DatePicker from '@/components/generic/date/DatePicker';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport { useRateDetails } from '@/hooks/useRateDetails';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './RoomRateDescriptionTab.module.scss';\n\ninterface RoomRateDescriptionTabProps {\n rate: RoomRate;\n}\n\ninterface RoomRateDescriptionFooterProps {\n rate: RoomRate;\n onClose: () => void;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport const RoomRateDescriptionFooter = (props: RoomRateDescriptionFooterProps) => {\n const { t } = useTranslation();\n const ccx = useContext(CompanyContext);\n\n const { rate } = props;\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n const bookButtonLabel = props.getButtonLabel ? props.getButtonLabel(false, false) : t(Translation.Misc.BookNow);\n\n const openSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const bookNowButton = isLocked ? (\n <BEButton filled success onClick={openSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton isFilled rate={props.rate} buttonLabel={bookButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} />\n );\n\n const priceBlock = <div className=\"u-flex flex-column align-items-start align-items-md-end justify-content-start\" />;\n\n return (\n <div className=\"u-flex\">\n {priceBlock}\n <div className=\"u-flex align-items-center\">{bookNowButton}</div>\n </div>\n );\n};\n\nconst Calendar = ({ row, rate }: { row: BasketRow; rate: RoomRate }): JSX.Element => {\n const startDate = row.getStartDate();\n const endDate = row.getEndDate();\n const roomCode = rate.getRoom().code || '';\n return (\n <div className={`d-flex align-items-center flex-column ${styles.calendarContainer}`}>\n <DatePicker\n showMonthOnLoad={startDate}\n showMultipleMonths={false}\n supportsMultiSelecting\n showMinNightStay={false}\n supportsWeek={false}\n selectedStartDate={startDate}\n selectedEndDate={endDate}\n readOnly\n className={styles.calendar}\n roomCode={roomCode}\n />\n </div>\n );\n};\n\nconst RateDescriptionOverides = ({ rate }: { rate: RoomRate }) => {\n const basketContext = useContext(BasketContext);\n const basketRow = basketContext.selectedBasketRow ?? basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n\n const displayRates = rate.getDisplayRates({\n startDate: basketRow?.getStartDate(),\n endDate: basketRow?.getEndDate(),\n });\n\n const { t } = useTranslation();\n\n return (\n <div className=\"u-marg-top--medium\">\n {displayRates.map((displayRate, index) => (\n <div className=\"u-marg-bottom--light\" key={index}>\n {displayRate.startDate && displayRate.endDate ? (\n <>\n <Text>\n <strong>{rate.displayRateToDayLabel(displayRate)}</strong>\n </Text>\n <Text>\n {rate.displayRateToDayName(displayRate)}: {displayRate.name}\n </Text>\n </>\n ) : (\n <Text bold>\n {t(Translation.Step.Room.RoomInfo.BaseRate)}: {displayRate.name}\n </Text>\n )}\n\n <Text type={TextType.Small}>\n <span className=\"u-clear-font-weight\" dangerouslySetInnerHTML={{ __html: displayRate.shortDescription }} />\n </Text>\n <Text type={TextType.Small}>\n <span className=\"u-clear-font-weight\" dangerouslySetInnerHTML={{ __html: displayRate.longDescription }} />\n </Text>\n </div>\n ))}\n </div>\n );\n};\n\nexport default function RoomRateDescriptionTab(props: RoomRateDescriptionTabProps) {\n const ccx = useContext(CompanyContext);\n const { currentBasketRows } = useContext(BasketContext);\n\n const { t } = useTranslation();\n const { isMobile } = useWindowSize();\n const cancelPolicy = props.rate.getCancellationPolicy();\n const guaranteePolicy = props.rate.getGuaranteePolicy();\n\n let isLocked = false;\n if (props.rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n const rate = props.rate;\n const row = currentBasketRows[0];\n\n const { rateName, shortDescription, longDescription } = useRateDetails(rate, isLocked);\n\n return (\n <>\n <div>\n <div className=\"u-marg-bottom--light\">\n <Headline bold>{rateName}</Headline>\n </div>\n\n <div\n className=\"u-marg-bottom--heavy text-small u-pre-wrap u-clear-font-weight\"\n dangerouslySetInnerHTML={{ __html: longDescription ? longDescription : shortDescription ?? '' }}\n />\n\n <div className=\"u-marg-bottom--light\">\n <Calendar row={row} rate={rate} />\n <RateDescriptionOverides rate={rate} />\n </div>\n\n <LineBreak />\n <div className=\"u-marg-bottom--light\">\n <Text>\n <strong>{t(Translation.Step.Confirmation.Policies)}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--heavy\">\n {guaranteePolicy && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Misc.GuaranteePolicy)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={guaranteePolicy} />\n </Text>\n </div>\n )}\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Misc.CancellationPolicy)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>\n <HtmlContentViewer content={cancelPolicy} />\n </Text>\n </div>\n </div>\n\n <div className=\"u-flex flex-column align-items-start align-items-md-end justify-content-end\">\n <Text type={TextType.Small} color={Color.Navy}>\n {t(Translation.Misc.Total)}\n </Text>\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getTotalPriceBeforeDiscount()}\n averagePrice={rate.getTotalPrice()}\n isMemberOnly={props.rate.isMemberOnly}\n hidePerNight\n />\n <Text type={TextType.Label} color={Color.DarkGrey} align={isMobile ? TextAlign.Left : TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </>\n );\n}\n"]}
@@ -102,8 +102,10 @@ function RoomRatePills(props) {
102
102
  return react_1.default.createElement(react_1.default.Fragment, null, t(Translation_1.Translation.Step.Room.RoomInfo.RateVariesByDay));
103
103
  },
104
104
  }, (match) => {
105
- const rate = match.rate;
106
105
  const selectedRow = basketContext.selectedBasketRow;
106
+ if (!selectedRow)
107
+ return false;
108
+ const rate = match.rate;
107
109
  if (!rate)
108
110
  return false;
109
111
  // If room is present, we must be at the room level, we only want to show the pill
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRatePills.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRatePills.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { ReactChild, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { HotelOverridesContext } from '@/contexts/HotelOverridesContext';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport RatePillProvider, { RatePill } from '@/providers/RatePillProvider';\n\ninterface RoomRatePillsProps {\n room?: Room;\n rate?: RoomRate;\n\n limit?: number;\n\n noMargin?: boolean;\n\n rateDescription?: boolean;\n}\n\nexport default function RoomRatePills(props: RoomRatePillsProps) {\n const [pills, setPills] = useState<RatePill[]>([]);\n const currentHotel = useCurrentHotel();\n const hotelOverridesContext = React.useContext(HotelOverridesContext);\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n let pillsToDisplay: RatePill[] = [];\n\n RatePillProvider.registerRatePill(\n { icon: IconType.Breakfast, title: t(Translation.Step.Room.BreakfastIncluded) },\n ({ rate, hotel }) => {\n return !!hotel.showMealPill && !!rate?.mealsIncluded?.breakfast;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.MemberDeal,\n translationProps: {\n companyShort: ccx.name,\n },\n icon: IconType.Check,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.Standard,\n icon: IconType.Check,\n setDescription: getAppliedPromoCodeDescription,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && !(rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode);\n },\n true\n );\n\n /** Registering Room Pills */\n RatePillProvider.registerRoomPill(\n {\n translation: Translation.Misc.Pills.PeopleBookedShort,\n translationProps: {\n people: Math.floor(Math.random() * 8 + 7),\n },\n icon: IconType.People,\n },\n () => {\n return NumberOfPeopleBookedPillFeature.isActive();\n }\n );\n\n RatePillProvider.registerRoomPill(\n {\n icon: IconType.Check,\n title: t(Translation.Step.Room.PromoCodeIsApplied),\n },\n (match) => {\n if (FeaturedPromoFeature.isActive() && match.room?.getRates()) {\n for (const rate of match.room.getRates()) {\n if (rate?.promoCode?.toLowerCase() === basketContext?.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n return true;\n }\n }\n }\n\n return false;\n }\n );\n\n RatePillProvider.registerRatePill(\n {\n icon: IconType.Money,\n title: t(Translation.Step.Room.RoomInfo.RateVariesByDay),\n renderOverride: () => {\n return <>{t(Translation.Step.Room.RoomInfo.RateVariesByDay)}</>;\n },\n },\n (match) => {\n const rate = match.rate;\n const selectedRow = basketContext.selectedBasketRow;\n\n if (!rate) return false;\n // If room is present, we must be at the room level, we only want to show the pill\n // on a rate.\n if (match.room) return false;\n\n const hasRateVariesByDay = rate.hasRateVariesByDay({\n startDate: selectedRow.getStartDate(),\n endDate: selectedRow.getEndDate(),\n });\n\n return hasRateVariesByDay;\n }\n );\n\n if (props.room) {\n pillsToDisplay = RatePillProvider.getPillsForRoom({ room: props.room, hotel: currentHotel.hotel as Hotel });\n } else if (props.rate) {\n pillsToDisplay = RatePillProvider.getPillsForRate({ rate: props.rate, hotel: currentHotel.hotel as Hotel });\n }\n\n if (props.limit) {\n setPills(pillsToDisplay.splice(0, props.limit));\n } else {\n setPills(pillsToDisplay);\n }\n }, [props.room, props.rate, props.limit]);\n\n const getAppliedPromoCodeDescription = (rate: RoomRate) => {\n return rate.promoCodeName;\n };\n\n return (\n <>\n <div className={'c-pill-list ' + (props.noMargin !== true && 'u-marg-bottom--light')}>\n {pills.map((pill, index) => {\n let pillContent = pill.translation ? t(pill.translation, pill.translationProps) : pill.title;\n\n if (pill.renderOverride && typeof pill.renderOverride === 'function') {\n const overrideContent = pill.renderOverride({ hotel: currentHotel.hotel as Hotel, rate: props.rate, room: props.room });\n\n if (overrideContent) {\n pillContent = overrideContent as string;\n }\n }\n\n const pillELement = (\n <Pill type={pill.type ?? PillType.Primary} icon={pill.icon}>\n {pillContent}\n </Pill>\n );\n\n return (\n <div className=\"u-inline u-marg-left--light u-marg-bottom--light\" key={index}>\n {pill.tooltipText ? <Tooltip title={pill.tooltipText}>{pillELement}</Tooltip> : pillELement}\n </div>\n );\n })}\n </div>\n {hotelOverridesContext.showPromoCodeDescription && props.rateDescription && pills?.[0]?.description && (\n <Text type={TextType.Small} className=\"u-marg-bottom\">\n {pills?.[0]?.description}\n </Text>\n )}\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomRatePills.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRatePills.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmE;AACnE,2CAAkD;AAClD,+CAA+D;AAC/D,iDAA+C;AAC/C,0DAAuD;AAEvD,yDAA0D;AAC1D,kEAA2D;AAC3D,kEAA2D;AAC3D,mFAA2D;AAC3D,4EAAyE;AAIzE,oGAA4E;AAC5E,0HAAkG;AAClG,oFAA0E;AAa1E,SAAwB,aAAa,CAAC,KAAyB;;IAC3D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAa,EAAE,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAA,uBAAe,GAAE,CAAC;IACvC,MAAM,qBAAqB,GAAG,eAAK,CAAC,UAAU,CAAC,6CAAqB,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,cAAc,GAAe,EAAE,CAAC;QAEpC,0BAAgB,CAAC,gBAAgB,CAC7B,EAAE,IAAI,EAAE,eAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAC/E,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChB,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,0CAAE,SAAS,CAAA,CAAC;QACpE,CAAC,EACD,IAAI,CACP,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,WAAW,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU;YAChE,gBAAgB,EAAE;gBACd,YAAY,EAAE,GAAG,CAAC,IAAI;aACzB;YACD,IAAI,EAAE,eAAQ,CAAC,KAAK;SACvB,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChB,OAAO,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAA,IAAI,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,WAAW,EAAE,OAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAA,CAAC;QAC9F,CAAC,EACD,IAAI,CACP,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,WAAW,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ;YAC9D,IAAI,EAAE,eAAQ,CAAC,KAAK;YACpB,cAAc,EAAE,8BAA8B;SACjD,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChB,OAAO,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAA,IAAI,CAAC,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,WAAW,EAAE,OAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAA,CAAC,CAAC;QACjG,CAAC,EACD,IAAI,CACP,CAAC;QAEF,6BAA6B;QAC7B,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,WAAW,EAAE,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB;YACrD,gBAAgB,EAAE;gBACd,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;aAC5C;YACD,IAAI,EAAE,eAAQ,CAAC,MAAM;SACxB,EACD,GAAG,EAAE;YACD,OAAO,yCAA+B,CAAC,QAAQ,EAAE,CAAC;QACtD,CAAC,CACJ,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,IAAI,EAAE,eAAQ,CAAC,KAAK;YACpB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;SACrD,EACD,CAAC,KAAK,EAAE,EAAE;;YACN,IAAI,8BAAoB,CAAC,QAAQ,EAAE,KAAI,MAAA,KAAK,CAAC,IAAI,0CAAE,QAAQ,EAAE,CAAA,EAAE;gBAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;oBACtC,IAAI,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,WAAW,EAAE,OAAK,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,iBAAiB,0CAAE,YAAY,EAAE,0CAAE,WAAW,EAAE,CAAA,EAAE;wBACpG,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC,CACJ,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,IAAI,EAAE,eAAQ,CAAC,KAAK;YACpB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YACxD,cAAc,EAAE,GAAG,EAAE;gBACjB,OAAO,8DAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAI,CAAC;YACpE,CAAC;SACJ,EACD,CAAC,KAAK,EAAE,EAAE;YACN,MAAM,WAAW,GAAG,aAAa,CAAC,iBAAiB,CAAC;YACpD,IAAI,CAAC,WAAW;gBAAE,OAAO,KAAK,CAAC;YAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,kFAAkF;YAClF,aAAa;YACb,IAAI,KAAK,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YAE7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC/C,SAAS,EAAE,WAAW,CAAC,YAAY,EAAE;gBACrC,OAAO,EAAE,WAAW,CAAC,UAAU,EAAE;aACpC,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC;QAC9B,CAAC,CACJ,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE;YACZ,cAAc,GAAG,0BAAgB,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,KAAc,EAAE,CAAC,CAAC;SAC/G;aAAM,IAAI,KAAK,CAAC,IAAI,EAAE;YACnB,cAAc,GAAG,0BAAgB,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,KAAc,EAAE,CAAC,CAAC;SAC/G;QAED,IAAI,KAAK,CAAC,KAAK,EAAE;YACb,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACnD;aAAM;YACH,QAAQ,CAAC,cAAc,CAAC,CAAC;SAC5B;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1C,MAAM,8BAA8B,GAAG,CAAC,IAAc,EAAE,EAAE;QACtD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC,CAAC;IAEF,OAAO,CACH;QACI,uCAAK,SAAS,EAAE,cAAc,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,sBAAsB,CAAC,IAC/E,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;YACvB,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAE7F,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;gBAClE,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAc,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAExH,IAAI,eAAe,EAAE;oBACjB,WAAW,GAAG,eAAyB,CAAC;iBAC3C;aACJ;YAED,MAAM,WAAW,GAAG,CAChB,8BAAC,cAAI,IAAC,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,eAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IACrD,WAAW,CACT,CACV,CAAC;YAEF,OAAO,CACH,uCAAK,SAAS,EAAC,kDAAkD,EAAC,GAAG,EAAE,KAAK,IACvE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,8BAAC,iBAAO,IAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAG,WAAW,CAAW,CAAC,CAAC,CAAC,WAAW,CACzF,CACT,CAAC;QACN,CAAC,CAAC,CACA;QACL,qBAAqB,CAAC,wBAAwB,IAAI,KAAK,CAAC,eAAe,KAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,0CAAE,WAAW,CAAA,IAAI,CACnG,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,SAAS,EAAC,eAAe,IAChD,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,0CAAE,WAAW,CACrB,CACV,CACF,CACN,CAAC;AACN,CAAC;AA5JD,gCA4JC","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { HotelOverridesContext } from '@/contexts/HotelOverridesContext';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport RatePillProvider, { RatePill } from '@/providers/RatePillProvider';\n\ninterface RoomRatePillsProps {\n room?: Room;\n rate?: RoomRate;\n\n limit?: number;\n\n noMargin?: boolean;\n\n rateDescription?: boolean;\n}\n\nexport default function RoomRatePills(props: RoomRatePillsProps) {\n const [pills, setPills] = useState<RatePill[]>([]);\n const currentHotel = useCurrentHotel();\n const hotelOverridesContext = React.useContext(HotelOverridesContext);\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n let pillsToDisplay: RatePill[] = [];\n\n RatePillProvider.registerRatePill(\n { icon: IconType.Breakfast, title: t(Translation.Step.Room.BreakfastIncluded) },\n ({ rate, hotel }) => {\n return !!hotel.showMealPill && !!rate?.mealsIncluded?.breakfast;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.MemberDeal,\n translationProps: {\n companyShort: ccx.name,\n },\n icon: IconType.Check,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.Standard,\n icon: IconType.Check,\n setDescription: getAppliedPromoCodeDescription,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && !(rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode);\n },\n true\n );\n\n /** Registering Room Pills */\n RatePillProvider.registerRoomPill(\n {\n translation: Translation.Misc.Pills.PeopleBookedShort,\n translationProps: {\n people: Math.floor(Math.random() * 8 + 7),\n },\n icon: IconType.People,\n },\n () => {\n return NumberOfPeopleBookedPillFeature.isActive();\n }\n );\n\n RatePillProvider.registerRoomPill(\n {\n icon: IconType.Check,\n title: t(Translation.Step.Room.PromoCodeIsApplied),\n },\n (match) => {\n if (FeaturedPromoFeature.isActive() && match.room?.getRates()) {\n for (const rate of match.room.getRates()) {\n if (rate?.promoCode?.toLowerCase() === basketContext?.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n return true;\n }\n }\n }\n\n return false;\n }\n );\n\n RatePillProvider.registerRatePill(\n {\n icon: IconType.Money,\n title: t(Translation.Step.Room.RoomInfo.RateVariesByDay),\n renderOverride: () => {\n return <>{t(Translation.Step.Room.RoomInfo.RateVariesByDay)}</>;\n },\n },\n (match) => {\n const selectedRow = basketContext.selectedBasketRow;\n if (!selectedRow) return false;\n\n const rate = match.rate;\n if (!rate) return false;\n // If room is present, we must be at the room level, we only want to show the pill\n // on a rate.\n if (match.room) return false;\n\n const hasRateVariesByDay = rate.hasRateVariesByDay({\n startDate: selectedRow.getStartDate(),\n endDate: selectedRow.getEndDate(),\n });\n\n return hasRateVariesByDay;\n }\n );\n\n if (props.room) {\n pillsToDisplay = RatePillProvider.getPillsForRoom({ room: props.room, hotel: currentHotel.hotel as Hotel });\n } else if (props.rate) {\n pillsToDisplay = RatePillProvider.getPillsForRate({ rate: props.rate, hotel: currentHotel.hotel as Hotel });\n }\n\n if (props.limit) {\n setPills(pillsToDisplay.splice(0, props.limit));\n } else {\n setPills(pillsToDisplay);\n }\n }, [props.room, props.rate, props.limit]);\n\n const getAppliedPromoCodeDescription = (rate: RoomRate) => {\n return rate.promoCodeName;\n };\n\n return (\n <>\n <div className={'c-pill-list ' + (props.noMargin !== true && 'u-marg-bottom--light')}>\n {pills.map((pill, index) => {\n let pillContent = pill.translation ? t(pill.translation, pill.translationProps) : pill.title;\n\n if (pill.renderOverride && typeof pill.renderOverride === 'function') {\n const overrideContent = pill.renderOverride({ hotel: currentHotel.hotel as Hotel, rate: props.rate, room: props.room });\n\n if (overrideContent) {\n pillContent = overrideContent as string;\n }\n }\n\n const pillELement = (\n <Pill type={pill.type ?? PillType.Primary} icon={pill.icon}>\n {pillContent}\n </Pill>\n );\n\n return (\n <div className=\"u-inline u-marg-left--light u-marg-bottom--light\" key={index}>\n {pill.tooltipText ? <Tooltip title={pill.tooltipText}>{pillELement}</Tooltip> : pillELement}\n </div>\n );\n })}\n </div>\n {hotelOverridesContext.showPromoCodeDescription && props.rateDescription && pills?.[0]?.description && (\n <Text type={TextType.Small} className=\"u-marg-bottom\">\n {pills?.[0]?.description}\n </Text>\n )}\n </>\n );\n}\n"]}
@@ -40,6 +40,7 @@ const LineBreak_1 = __importDefault(require("../generic/LineBreak"));
40
40
  const HotelLocationMap_1 = __importDefault(require("../generic/map/HotelLocationMap"));
41
41
  const SimpleModal_1 = __importDefault(require("../generic/modal/SimpleModal"));
42
42
  const Text_1 = __importStar(require("../generic/Text"));
43
+ const ItemisedFeesListing_1 = require("../steps/common/ItemisedFeesListing/ItemisedFeesListing");
43
44
  const BESummary_1 = require("./BESummary");
44
45
  const BESummaryAddonRow_1 = __importDefault(require("./BESummaryAddonRow"));
45
46
  const BESummaryPerkBlock_1 = require("./BESummaryPerkBlock");
@@ -92,6 +93,8 @@ function BEMobileSummaryModal(props) {
92
93
  const totalPrice = basketContext.getTotalPrice();
93
94
  const totalPayNow = basketContext.getTotalPayNow();
94
95
  const totalFees = basketContext.getTotalFees();
96
+ const itemisedFees = basketContext.getItemisedFees();
97
+ const depositFees = basketContext.getDepositFees();
95
98
  return (react_1.default.createElement(SimpleModal_1.default, { open: props.isOpen, title: t(Translation_1.Translation.Misc.Summary), onClose: onCloseModalHandler, mobileFooter: react_1.default.createElement("div", { className: "row align-items-center" },
96
99
  react_1.default.createElement("div", { className: "col-4" },
97
100
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body }, t(Translation_1.Translation.Misc.Total)),
@@ -177,7 +180,7 @@ function BEMobileSummaryModal(props) {
177
180
  react_1.default.createElement(Text_1.default, { bold: true }, hotel === null || hotel === void 0 ? void 0 : hotel.name)),
178
181
  getAddressString(addressLine1),
179
182
  getAddressString(addressLine2)))),
180
- totalFees > 0 && (react_1.default.createElement(react_1.default.Fragment, null,
183
+ totalFees > 0 && !(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && (react_1.default.createElement(react_1.default.Fragment, null,
181
184
  react_1.default.createElement("div", { className: "line-break", style: { marginTop: 0, marginBottom: '24px' } }),
182
185
  react_1.default.createElement("div", { className: "u-flex" },
183
186
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
@@ -185,6 +188,7 @@ function BEMobileSummaryModal(props) {
185
188
  t(Translation_1.Translation.Step.Room.Summary.CreditCardSurcharge)),
186
189
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
187
190
  react_1.default.createElement(Currency_1.default, null, totalFees))))),
191
+ !!(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && react_1.default.createElement(ItemisedFeesListing_1.ItemisedFeesListing, { fees: itemisedFees }),
188
192
  sortedComponents,
189
193
  react_1.default.createElement("div", { className: "u-marg-top--heavy u-marg-bottom--heavy" },
190
194
  react_1.default.createElement(BESummaryPrivacyPolicy_1.default, null)),
@@ -196,7 +200,7 @@ function BEMobileSummaryModal(props) {
196
200
  " ",
197
201
  t(Translation_1.Translation.Step.Room.Summary.CreditCardSurcharge)),
198
202
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
199
- react_1.default.createElement(Currency_1.default, null, totalFees)))),
203
+ react_1.default.createElement(Currency_1.default, null, depositFees)))),
200
204
  react_1.default.createElement("div", { className: "line-break", style: { marginTop: 0, marginBottom: '8px' } }),
201
205
  react_1.default.createElement("div", { className: "col-12 u-marg-top--light u-marg-bottom--light" },
202
206
  react_1.default.createElement("div", { className: "u-flex" },
@@ -1 +1 @@
1
- {"version":3,"file":"BEMobileSummaryModal.js","sourceRoot":"/","sources":["src/components/summary/BEMobileSummaryModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { BESummaryLayoutOrder } from '@/components/summary/BESummary';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryPrivacyPolicy from '@/components/summary/BESummaryPrivacyPolicy';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport interface BEMobileSummaryModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n showImages?: boolean;\n}\n\nexport default function BEMobileSummaryModal(props: BEMobileSummaryModalProps) {\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const [mobileLayout, setMobileLayout] = useState<OrderableReactList>({});\n\n useEffect(() => {\n // We do this hacky thing since Mobile summary & Desktop summary are almost identical, just blocks are presented differently\n const newLayout: typeof BESummaryLayoutOrder = { ...BESummaryLayoutOrder };\n newLayout.TransportDistanceBlock.component = (\n <div className=\"u-flex justify-content-center u-marg-top u-marg-bottom\">\n <div className=\"u-flex flex-row u-w-100\">\n <TransportDistanceFromHotelBlock vertical hotel={hotel} />\n </div>\n </div>\n );\n newLayout.PerksBlock.component = <BESummaryPerkBlock size=\"mobile\" />;\n\n setMobileLayout(newLayout);\n }, []);\n\n const { sortedComponents } = useElementSort(mobileLayout);\n\n const totalDays = basketContext.endDate ? basketContext.endDate.diff(basketContext.startDate, 'day') : 0;\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const getAddressString = (val: string[]) => {\n const line = val.filter((it) => !!it && it !== '0').join(', ');\n\n if (line) {\n return <Text type={TextType.Small}>{line}</Text>;\n }\n\n return null;\n };\n\n const onCloseModalHandler = () => {\n return props.onClose ? props.onClose() : null;\n };\n\n const editOnClick = () => {\n props.onClose?.();\n };\n\n const onEditPropertyClickedHandler = () => {\n props.onClose?.();\n };\n\n const totalPrice = basketContext.getTotalPrice();\n const totalPayNow = basketContext.getTotalPayNow();\n const totalFees = basketContext.getTotalFees();\n\n return (\n <SimpleModal\n open={props.isOpen}\n title={t(Translation.Misc.Summary)}\n onClose={onCloseModalHandler}\n mobileFooter={\n <div className=\"row align-items-center\">\n <div className=\"col-4\">\n <Text type={TextType.Body}>{t(Translation.Misc.Total)}</Text>\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{StringHelper.pluralWithDictAndCount(totalDays, Translation.Misc.Night, t)}</strong>\n </Text>\n </div>\n <div className=\"col-8 u-flex u-flex-direction-column align-items-end\">\n <Headline bold size=\"normal\" align={TextAlign.Right}>\n <Currency>{totalPrice}</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 </div>\n }\n >\n <>\n <div className=\"container\">\n <div className=\"row u-border-bottom u-pad-top-bottom\">\n <div className=\"col-6\">\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckIn)}</strong>\n </Text>\n <Text type={TextType.Small}>\n {t(Translation.Misc.After)} {hotel?.checkInTime}\n </Text>\n </div>\n <div className=\"col-6\">\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckOut)}</strong>\n </Text>\n <Text type={TextType.Small}>\n {t(Translation.Misc.Before)} {hotel?.checkOutTime}\n </Text>\n </div>\n </div>\n\n <div className=\"row u-border-bottom u-pad be-mobile-summary-select-date-header\" style={{ width: 'unset' }}>\n <div style={{ flex: 1 }}>\n <div className=\"u-flex u-flex-flex-start\">\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.startDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.startDate ? basketContext.startDate.format('MMM D') : t(Translation.Step.Date.Arrival)}\n </span>\n </Text>\n <span className=\"u-marg-left-right--light\">\n <Icon icon={IconType.ArrowRight2} size=\"18px\" color={Color.DarkGrey} />\n </span>\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.endDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.endDate ? basketContext.endDate.format('MMM D') : t(Translation.Step.Date.Departure)}\n </span>\n </Text>\n </div>\n <Text className=\"select-date-header-subtitle\">\n {basketContext.getNumberOfAdults(true)},&nbsp;\n {basketContext.getNumberOfChildren(true)},&nbsp;\n {basketContext.getNumberOfRooms(true)}\n </Text>\n </div>\n <div className=\"u-align-right\">\n <Link to={getStepRoom().getStepUrl()}>\n <BEButton onClick={editOnClick} size=\"tiny\">\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </Link>\n </div>\n </div>\n\n {selectedBasketRows && selectedBasketRows.length ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n\n return (\n <BESummaryRoomRow\n row={row}\n index={index}\n key={row.getID()}\n showImages={!!props.showImages}\n onEditPropertyClicked={onEditPropertyClickedHandler}\n />\n );\n })}\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, index: number) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(row);\n };\n\n return <BESummaryAddonRow row={row} key={row.getID()} onRemoveClick={onRemoveClickHandler} />;\n })}\n </>\n )}\n </>\n ) : (\n <div className=\"u-marg-bottom--heavy u-marg-top--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Body}>{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\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {getAddressString(addressLine1 as string[])}\n {getAddressString(addressLine2 as string[])}\n </div>\n </div>\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 {sortedComponents}\n\n <div className=\"u-marg-top--heavy u-marg-bottom--heavy\">\n <BESummaryPrivacyPolicy />\n </div>\n {hotel?.requireDeposit && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"row align-items-center\">\n <div className=\"col-12 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 <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '8px' }} />\n <div className=\"col-12 u-marg-top--light u-marg-bottom--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small} bold>\n {t(Translation.Misc.PayNow)}\n </Text>\n <Text type={TextType.Small} bold>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n </SimpleModal>\n );\n}\n"]}
1
+ {"version":3,"file":"BEMobileSummaryModal.js","sourceRoot":"/","sources":["src/components/summary/BEMobileSummaryModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport { BESummaryLayoutOrder } from '@/components/summary/BESummary';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryPrivacyPolicy from '@/components/summary/BESummaryPrivacyPolicy';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport interface BEMobileSummaryModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n showImages?: boolean;\n}\n\nexport default function BEMobileSummaryModal(props: BEMobileSummaryModalProps) {\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const [mobileLayout, setMobileLayout] = useState<OrderableReactList>({});\n\n useEffect(() => {\n // We do this hacky thing since Mobile summary & Desktop summary are almost identical, just blocks are presented differently\n const newLayout: typeof BESummaryLayoutOrder = { ...BESummaryLayoutOrder };\n newLayout.TransportDistanceBlock.component = (\n <div className=\"u-flex justify-content-center u-marg-top u-marg-bottom\">\n <div className=\"u-flex flex-row u-w-100\">\n <TransportDistanceFromHotelBlock vertical hotel={hotel} />\n </div>\n </div>\n );\n newLayout.PerksBlock.component = <BESummaryPerkBlock size=\"mobile\" />;\n\n setMobileLayout(newLayout);\n }, []);\n\n const { sortedComponents } = useElementSort(mobileLayout);\n\n const totalDays = basketContext.endDate ? basketContext.endDate.diff(basketContext.startDate, 'day') : 0;\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const getAddressString = (val: string[]) => {\n const line = val.filter((it) => !!it && it !== '0').join(', ');\n\n if (line) {\n return <Text type={TextType.Small}>{line}</Text>;\n }\n\n return null;\n };\n\n const onCloseModalHandler = () => {\n return props.onClose ? props.onClose() : null;\n };\n\n const editOnClick = () => {\n props.onClose?.();\n };\n\n const onEditPropertyClickedHandler = () => {\n props.onClose?.();\n };\n\n const totalPrice = basketContext.getTotalPrice();\n const totalPayNow = basketContext.getTotalPayNow();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n const depositFees = basketContext.getDepositFees();\n\n return (\n <SimpleModal\n open={props.isOpen}\n title={t(Translation.Misc.Summary)}\n onClose={onCloseModalHandler}\n mobileFooter={\n <div className=\"row align-items-center\">\n <div className=\"col-4\">\n <Text type={TextType.Body}>{t(Translation.Misc.Total)}</Text>\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{StringHelper.pluralWithDictAndCount(totalDays, Translation.Misc.Night, t)}</strong>\n </Text>\n </div>\n <div className=\"col-8 u-flex u-flex-direction-column align-items-end\">\n <Headline bold size=\"normal\" align={TextAlign.Right}>\n <Currency>{totalPrice}</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 </div>\n }\n >\n <>\n <div className=\"container\">\n <div className=\"row u-border-bottom u-pad-top-bottom\">\n <div className=\"col-6\">\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckIn)}</strong>\n </Text>\n <Text type={TextType.Small}>\n {t(Translation.Misc.After)} {hotel?.checkInTime}\n </Text>\n </div>\n <div className=\"col-6\">\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckOut)}</strong>\n </Text>\n <Text type={TextType.Small}>\n {t(Translation.Misc.Before)} {hotel?.checkOutTime}\n </Text>\n </div>\n </div>\n\n <div className=\"row u-border-bottom u-pad be-mobile-summary-select-date-header\" style={{ width: 'unset' }}>\n <div style={{ flex: 1 }}>\n <div className=\"u-flex u-flex-flex-start\">\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.startDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.startDate ? basketContext.startDate.format('MMM D') : t(Translation.Step.Date.Arrival)}\n </span>\n </Text>\n <span className=\"u-marg-left-right--light\">\n <Icon icon={IconType.ArrowRight2} size=\"18px\" color={Color.DarkGrey} />\n </span>\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.endDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.endDate ? basketContext.endDate.format('MMM D') : t(Translation.Step.Date.Departure)}\n </span>\n </Text>\n </div>\n <Text className=\"select-date-header-subtitle\">\n {basketContext.getNumberOfAdults(true)},&nbsp;\n {basketContext.getNumberOfChildren(true)},&nbsp;\n {basketContext.getNumberOfRooms(true)}\n </Text>\n </div>\n <div className=\"u-align-right\">\n <Link to={getStepRoom().getStepUrl()}>\n <BEButton onClick={editOnClick} size=\"tiny\">\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </Link>\n </div>\n </div>\n\n {selectedBasketRows && selectedBasketRows.length ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n\n return (\n <BESummaryRoomRow\n row={row}\n index={index}\n key={row.getID()}\n showImages={!!props.showImages}\n onEditPropertyClicked={onEditPropertyClickedHandler}\n />\n );\n })}\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, index: number) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(row);\n };\n\n return <BESummaryAddonRow row={row} key={row.getID()} onRemoveClick={onRemoveClickHandler} />;\n })}\n </>\n )}\n </>\n ) : (\n <div className=\"u-marg-bottom--heavy u-marg-top--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Body}>{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\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {getAddressString(addressLine1 as string[])}\n {getAddressString(addressLine2 as string[])}\n </div>\n </div>\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\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n\n {sortedComponents}\n\n <div className=\"u-marg-top--heavy u-marg-bottom--heavy\">\n <BESummaryPrivacyPolicy />\n </div>\n {hotel?.requireDeposit && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"row align-items-center\">\n <div className=\"col-12 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 <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '8px' }} />\n <div className=\"col-12 u-marg-top--light u-marg-bottom--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small} bold>\n {t(Translation.Misc.PayNow)}\n </Text>\n <Text type={TextType.Small} bold>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n </SimpleModal>\n );\n}\n"]}
@@ -40,6 +40,7 @@ const Icon_1 = require("../generic/Icon/Icon");
40
40
  const LineBreak_1 = __importDefault(require("../generic/LineBreak"));
41
41
  const HotelLocationMap_1 = __importDefault(require("../generic/map/HotelLocationMap"));
42
42
  const Text_1 = __importStar(require("../generic/Text"));
43
+ const ItemisedFeesListing_1 = require("../steps/common/ItemisedFeesListing/ItemisedFeesListing");
43
44
  const BESummaryAddonRow_1 = __importDefault(require("./BESummaryAddonRow"));
44
45
  const BESummaryPerkBlock_1 = require("./BESummaryPerkBlock");
45
46
  const BESummaryRoomRow_1 = __importDefault(require("./BESummaryRoomRow"));
@@ -95,7 +96,9 @@ function BESummary(props) {
95
96
  return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];
96
97
  };
97
98
  const showBasketItems = !!selectedBasketRows.length;
99
+ const depositFees = basketContext.getDepositFees();
98
100
  const totalFees = basketContext.getTotalFees();
101
+ const itemisedFees = basketContext.getItemisedFees();
99
102
  const totalSection = (0, react_1.useMemo)(() => {
100
103
  var _a;
101
104
  if ((hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) && ((_a = engineContext.currentStep) === null || _a === void 0 ? void 0 : _a.getStepUrl()) === StepConfirmation_1.default.getStepUrl()) {
@@ -103,13 +106,25 @@ function BESummary(props) {
103
106
  const isLoading = basketContext.isLoadingPriceQuote;
104
107
  return (react_1.default.createElement("div", { className: "u-marg-top--light", style: { position: 'relative' } },
105
108
  isLoading && react_1.default.createElement(OverlayLoader_1.OverlayLoader, null),
106
- totalFees > 0 && (react_1.default.createElement("div", { className: "u-marg-top--light" },
109
+ totalFees > 0 && !(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && (
110
+ // We only show the total fees here if we don't have itemised fees available.
111
+ react_1.default.createElement("div", { className: "u-marg-top--light" },
107
112
  react_1.default.createElement("div", { className: "u-flex" },
108
113
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
109
114
  " ",
110
115
  t(Translation_1.Translation.Step.Room.Summary.CreditCardSurcharge)),
111
116
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
112
117
  react_1.default.createElement(Currency_1.default, null, totalFees))))),
118
+ !!(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && depositFees > 0 && hotel.addDepositFeeToBookingTotal && (
119
+ // Because we're already showing itemised fees above the totals section, we only need to show the deposit fee here.
120
+ // And only if the hotel is configured to add the deposit fee to the booking total.
121
+ react_1.default.createElement("div", { className: "u-marg-top--light" },
122
+ react_1.default.createElement("div", { className: "u-flex" },
123
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
124
+ " ",
125
+ t(Translation_1.Translation.Step.Room.Summary.CreditCardSurcharge)),
126
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
127
+ react_1.default.createElement(Currency_1.default, null, depositFees))))),
113
128
  react_1.default.createElement("div", { className: "u-marg-top--light" },
114
129
  react_1.default.createElement("div", { className: "u-flex" },
115
130
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Misc.Total)),
@@ -151,14 +166,15 @@ function BESummary(props) {
151
166
  };
152
167
  return react_1.default.createElement(BESummaryAddonRow_1.default, { row: row, key: row.getID(), onRemoveClick: onRemoveClickHandler });
153
168
  }))),
154
- totalFees > 0 && (react_1.default.createElement(react_1.default.Fragment, null,
169
+ totalFees > 0 && !(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && (react_1.default.createElement(react_1.default.Fragment, null,
155
170
  react_1.default.createElement("div", { className: "line-break", style: { marginTop: 0, marginBottom: '24px' } }),
156
171
  react_1.default.createElement("div", { className: "u-flex" },
157
172
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
158
173
  " ",
159
174
  t(Translation_1.Translation.Step.Room.Summary.CreditCardSurcharge)),
160
175
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
161
- react_1.default.createElement(Currency_1.default, null, totalFees))))))) : (react_1.default.createElement("div", { className: "u-marg-bottom rs-summary-hotel-info" },
176
+ react_1.default.createElement(Currency_1.default, null, totalFees))))),
177
+ !!(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && react_1.default.createElement(ItemisedFeesListing_1.ItemisedFeesListing, { fees: itemisedFees }))) : (react_1.default.createElement("div", { className: "u-marg-bottom rs-summary-hotel-info" },
162
178
  react_1.default.createElement("div", { className: "u-marg-bottom" },
163
179
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Step.General.YourCartIsEmpty))),
164
180
  react_1.default.createElement("div", { style: { height: '150px', position: 'relative' } },