@roomstay/frontend 2.6.80 → 2.6.82

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 (101) hide show
  1. package/dist/370.bundle.js +1 -1
  2. package/dist/375.bundle.js +1 -0
  3. package/dist/430.bundle.js +1 -1
  4. package/dist/537.bundle.js +1 -1
  5. package/dist/978.bundle.js +1 -1
  6. package/dist/main.bundle.js +1 -1
  7. package/dist/src/api/AvailabilityAPI.d.ts +5 -1
  8. package/dist/src/api/AvailabilityAPI.js +23 -12
  9. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  10. package/dist/src/api/ReservationAPI.d.ts +1 -1
  11. package/dist/src/api/ReservationAPI.js +14 -10
  12. package/dist/src/api/ReservationAPI.js.map +1 -1
  13. package/dist/src/components/User/Forms/SignInForm.js.map +1 -1
  14. package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js +2 -2
  15. package/dist/src/components/generic/PaymentCard/InlinePaymentOption.js.map +1 -1
  16. package/dist/src/components/reservation/ReservationItem.d.ts +1 -0
  17. package/dist/src/components/reservation/ReservationItem.js +2 -2
  18. package/dist/src/components/reservation/ReservationItem.js.map +1 -1
  19. package/dist/src/components/reservation/ReservationList.d.ts +1 -0
  20. package/dist/src/components/reservation/ReservationList.js +2 -2
  21. package/dist/src/components/reservation/ReservationList.js.map +1 -1
  22. package/dist/src/components/steps/addons/AddonCard.js +8 -0
  23. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  24. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js +5 -4
  25. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js.map +1 -1
  26. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js +9 -6
  27. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js.map +1 -1
  28. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsModal.d.ts +1 -0
  29. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsModal.js +80 -0
  30. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsModal.js.map +1 -0
  31. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.d.ts +5 -1
  32. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +15 -6
  33. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +1 -1
  34. package/dist/src/components/steps/room/AvailableUpgradesModal.js +0 -5
  35. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  36. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +2 -2
  37. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
  38. package/dist/src/components/steps/room/roomDetails/unavailableRoom/UnavailableRoom.js +6 -2
  39. package/dist/src/components/steps/room/roomDetails/unavailableRoom/UnavailableRoom.js.map +1 -1
  40. package/dist/src/components/summary/BEMobileSummaryModal.js +11 -10
  41. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  42. package/dist/src/components/summary/BESummary.js +4 -4
  43. package/dist/src/components/summary/BESummary.js.map +1 -1
  44. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +5 -3
  45. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  46. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +163 -73
  47. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  48. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -2
  49. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  50. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextTypes.d.ts +2 -1
  51. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextTypes.js.map +1 -1
  52. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +20 -8
  53. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  54. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +23 -7
  55. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
  56. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js +0 -1
  57. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js.map +1 -1
  58. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js +8 -5
  59. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js.map +1 -1
  60. package/dist/src/hooks/ConfirmationQuery.d.ts +1 -0
  61. package/dist/src/hooks/ConfirmationQuery.js +2 -1
  62. package/dist/src/hooks/ConfirmationQuery.js.map +1 -1
  63. package/dist/src/models/Api/HotelDTO.d.ts +1 -1
  64. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  65. package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -1
  66. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  67. package/dist/src/models/Room/RoomRate.d.ts +8 -1
  68. package/dist/src/models/Room/RoomRate.js +24 -0
  69. package/dist/src/models/Room/RoomRate.js.map +1 -1
  70. package/dist/src/pages/account/AccountHome/AccountHomePage.js +1 -1
  71. package/dist/src/pages/account/AccountHome/AccountHomePage.js.map +1 -1
  72. package/dist/src/pages/account/AccountRoutes.d.ts +5 -0
  73. package/dist/src/pages/account/AccountRoutes.js +8 -2
  74. package/dist/src/pages/account/AccountRoutes.js.map +1 -1
  75. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js +21 -6
  76. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
  77. package/dist/src/pages/account/Reservations/AccountReservationsPage.js +7 -7
  78. package/dist/src/pages/account/Reservations/AccountReservationsPage.js.map +1 -1
  79. package/dist/src/translations/Translation.d.ts +6 -0
  80. package/dist/src/translations/Translation.js +7 -1
  81. package/dist/src/translations/Translation.js.map +1 -1
  82. package/dist/src/translations/languages/en-gb.js +6 -0
  83. package/dist/src/translations/languages/en-gb.js.map +1 -1
  84. package/dist/src/util/Analytics/Analytics.d.ts +33 -9
  85. package/dist/src/util/Analytics/Analytics.js +26 -0
  86. package/dist/src/util/Analytics/Analytics.js.map +1 -1
  87. package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +2 -1
  88. package/dist/src/util/Analytics/GoogleAnalytics4.js +9 -0
  89. package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
  90. package/dist/src/util/Analytics/UniversalAnalytics.d.ts +4 -22
  91. package/dist/src/util/Analytics/UniversalAnalytics.js +23 -4
  92. package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
  93. package/dist/src/util/DataLayer.d.ts +7 -2
  94. package/dist/src/util/DataLayer.js +47 -18
  95. package/dist/src/util/DataLayer.js.map +1 -1
  96. package/dist/test.bundle.js +1 -1
  97. package/dist/tests/offline/entry/config/hotelSpecDefault.js +1 -1
  98. package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
  99. package/dist/vendors.bundle.js +1 -1
  100. package/package.json +2 -2
  101. package/dist/380.bundle.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BESummary.js","sourceRoot":"/","sources":["src/components/summary/BESummary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { FC, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport { OverlayLoader } from '../generic/loader/OverlayLoader';\n\nexport interface BESummaryProps {\n showImages?: boolean;\n}\n\nconst TransportDistanceFromHotelBlockContainer: FC = () => {\n const overridesContext = useContext(HotelOverridesContext);\n\n return (\n <div\n className={classNames('u-flex u-flex-column u-marg-top u-w-100', {\n 'u-flex-justify-around': Object.entries(overridesContext?.transportDistances ?? {}).filter(([key, value]) => !!value).length <= 2,\n })}\n >\n <TransportDistanceFromHotelBlock vertical />\n </div>\n );\n};\n\nexport const BESummaryLayoutOrder: OrderableReactList = {\n TransportDistanceBlock: {\n component: <TransportDistanceFromHotelBlockContainer />,\n priority: 5,\n },\n PerksBlock: {\n component: (\n <div className=\"u-marg-bottom--light u-marg-top--heavy\" style={{ marginTop: '16px' }}>\n <BESummaryPerkBlock size=\"desktop\" />\n </div>\n ),\n priority: 10,\n },\n};\n\nexport function BESummary(props: BESummaryProps) {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const overridesContext = useContext(HotelOverridesContext);\n const engineContext = useContext(FullPageEngineContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const { sortedComponents } = useElementSort(BESummaryLayoutOrder);\n\n const toString = (val: string[]) => val.filter((it) => !!it && it !== '0').join(', ');\n\n const renderLine = (line?: string, key?: string) => {\n if (line) {\n return (\n <Text key={key} type={TextType.Small}>\n {line}\n </Text>\n );\n }\n return null;\n };\n\n const combineAddress = (rawLine1: string[], rawLine2: string[]) => {\n const line1 = toString(rawLine1);\n const line2 = toString(rawLine2);\n if (line1 && line1.length > 40) return renderLine([line1, line2].filter(Boolean).join(', '));\n return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];\n };\n\n const showBasketItems = !!selectedBasketRows.length;\n\n const depositFees = basketContext.getDepositFees();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n\n const totalSection = useMemo(() => {\n if (hotel?.requireDeposit && engineContext.currentStep?.getStepUrl() === StepConfirmation.getStepUrl()) {\n const totalPayNow = basketContext.getTotalPayNow();\n const isLoading = basketContext.isLoadingPriceQuote;\n\n return (\n <div className=\"u-marg-top--light\" style={{ position: 'relative' }}>\n {isLoading && <OverlayLoader />}\n {totalFees > 0 && !itemisedFees?.length && (\n // We only show the total fees here if we don't have itemised fees available.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n {!!itemisedFees?.length && depositFees > 0 && hotel.addDepositFeeToBookingTotal && (\n // Because we're already showing itemised fees above the totals section, we only need to show the deposit fee here.\n // And only if the hotel is configured to add the deposit fee to the booking total.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.Total)}</Text>\n <Headline bold size=\"large\">\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n </div>\n\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.PayNow)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n );\n }\n }, [basketContext.currentBasketRows, basketContext.isLoadingPriceQuote, basketContext.getTotalPrice, hotel?.requireDeposit, engineContext.currentStep?.getStepUrl()]);\n\n return (\n <div className=\"booking-engine-summary\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Misc.Summary)}</Headline>\n </div>\n\n {showBasketItems ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n return <BESummaryRoomRow key={row.getID()} row={row} index={index} showImages={!!props.showImages} />;\n })}\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>Add-on Items</strong>\n </Text>\n </div>\n\n {addons.map((row: BasketAddonRow) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(row);\n };\n return <BESummaryAddonRow row={row} key={row.getID()} onRemoveClick={onRemoveClickHandler} />;\n })}\n </>\n )}\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n </>\n ) : (\n <div className=\"u-marg-bottom rs-summary-hotel-info\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div style={{ height: '150px', position: 'relative' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom rs-summary-hotel-name\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {combineAddress(addressLine1 as string[], addressLine2 as string[])}\n {overridesContext?.phoneNumberInSummary && hotel?.phone && <Text type={TextType.Small}>{hotel?.phone}</Text>}\n </div>\n </div>\n )}\n {sortedComponents}\n {ccx.currentCurrency !== hotel?.defaultCurrency && (\n <Alert iconAlignCenter icon={IconType.Money} type={AlertType.LightGray}>\n <Text type={TextType.Small}>{t(Translation.Step.General.AlternateCurrencyInformation)}</Text>\n </Alert>\n )}\n\n <LineBreak darker />\n\n {totalSection}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"BESummary.js","sourceRoot":"/","sources":["src/components/summary/BESummary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { FC, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport { OverlayLoader } from '../generic/loader/OverlayLoader';\n\nexport interface BESummaryProps {\n showImages?: boolean;\n}\n\nconst TransportDistanceFromHotelBlockContainer: FC = () => {\n const overridesContext = useContext(HotelOverridesContext);\n\n return (\n <div\n className={classNames('u-flex u-flex-column u-marg-top u-w-100', {\n 'u-flex-justify-around': Object.entries(overridesContext?.transportDistances ?? {}).filter(([key, value]) => !!value).length <= 2,\n })}\n >\n <TransportDistanceFromHotelBlock vertical />\n </div>\n );\n};\n\nexport const BESummaryLayoutOrder: OrderableReactList = {\n TransportDistanceBlock: {\n component: <TransportDistanceFromHotelBlockContainer />,\n priority: 5,\n },\n PerksBlock: {\n component: (\n <div className=\"u-marg-bottom--light u-marg-top--heavy\" style={{ marginTop: '16px' }}>\n <BESummaryPerkBlock size=\"desktop\" />\n </div>\n ),\n priority: 10,\n },\n};\n\nexport function BESummary(props: BESummaryProps) {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const overridesContext = useContext(HotelOverridesContext);\n const engineContext = useContext(FullPageEngineContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const { sortedComponents } = useElementSort(BESummaryLayoutOrder);\n\n const toString = (val: string[]) => val.filter((it) => !!it && it !== '0').join(', ');\n\n const renderLine = (line?: string, key?: string) => {\n if (line) {\n return (\n <Text key={key} type={TextType.Small}>\n {line}\n </Text>\n );\n }\n return null;\n };\n\n const combineAddress = (rawLine1: string[], rawLine2: string[]) => {\n const line1 = toString(rawLine1);\n const line2 = toString(rawLine2);\n if (line1 && line1.length > 40) return renderLine([line1, line2].filter(Boolean).join(', '));\n return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];\n };\n\n const showBasketItems = !!selectedBasketRows.length;\n\n const depositFees = basketContext.getDepositQuoteFees();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n\n const totalSection = useMemo(() => {\n const totalPayNow = basketContext.getTotalPayNow();\n\n if (hotel && totalPayNow && engineContext.currentStep?.getStepUrl() === StepConfirmation.getStepUrl()) {\n const isLoading = basketContext.isLoadingPriceQuote;\n\n return (\n <div className=\"u-marg-top--light\" style={{ position: 'relative' }}>\n {isLoading && <OverlayLoader />}\n {totalFees > 0 && !itemisedFees?.length && (\n // We only show the total fees here if we don't have itemised fees available.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n {!!itemisedFees?.length && depositFees > 0 && hotel.addDepositFeeToBookingTotal && (\n // Because we're already showing itemised fees above the totals section, we only need to show the deposit fee here.\n // And only if the hotel is configured to add the deposit fee to the booking total.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.Total)}</Text>\n <Headline bold size=\"large\">\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n </div>\n\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.PayNow)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n );\n }\n }, [basketContext.currentBasketRows, basketContext.isLoadingPriceQuote, basketContext.getTotalPrice, hotel?.rmsUseDepositQuote, engineContext.currentStep?.getStepUrl()]);\n\n return (\n <div className=\"booking-engine-summary\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Misc.Summary)}</Headline>\n </div>\n\n {showBasketItems ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n return <BESummaryRoomRow key={row.getID()} row={row} index={index} showImages={!!props.showImages} />;\n })}\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>Add-on Items</strong>\n </Text>\n </div>\n\n {addons.map((row: BasketAddonRow) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(row);\n };\n return <BESummaryAddonRow row={row} key={row.getID()} onRemoveClick={onRemoveClickHandler} />;\n })}\n </>\n )}\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n </>\n ) : (\n <div className=\"u-marg-bottom rs-summary-hotel-info\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div style={{ height: '150px', position: 'relative' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom rs-summary-hotel-name\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {combineAddress(addressLine1 as string[], addressLine2 as string[])}\n {overridesContext?.phoneNumberInSummary && hotel?.phone && <Text type={TextType.Small}>{hotel?.phone}</Text>}\n </div>\n </div>\n )}\n {sortedComponents}\n {ccx.currentCurrency !== hotel?.defaultCurrency && (\n <Alert iconAlignCenter icon={IconType.Money} type={AlertType.LightGray}>\n <Text type={TextType.Small}>{t(Translation.Step.General.AlternateCurrencyInformation)}</Text>\n </Alert>\n )}\n\n <LineBreak darker />\n\n {totalSection}\n </div>\n );\n}\n"]}
@@ -7,6 +7,7 @@ import { ItemisedFee } from '../../models/Fee';
7
7
  import type { IPromotion } from '../../models/Promotion/IPromotion.type';
8
8
  import type { RoomRate } from '../../models/Room/RoomRate';
9
9
  import { RoomstaySession } from '../../models/RoomstaySession';
10
+ import { IPaymentCheckoutDetails } from '@roomstay/core';
10
11
  export interface BasketContextType {
11
12
  selectedBasketRow: BasketRow;
12
13
  currentBasketRows: BasketRow[];
@@ -27,11 +28,11 @@ export interface BasketContextType {
27
28
  getNumberOfInfants: (withTranslation: boolean) => number | string;
28
29
  getNumberOfRooms: (withTranslation: boolean) => number | string;
29
30
  getTotalPrice: () => any;
30
- getTotalDeposit: () => number;
31
- getDepositFees: () => number;
31
+ getTotalQuoteDeposit: () => number;
32
+ getDepositQuoteFees: () => number;
32
33
  getTotalFees: () => number;
33
34
  getItemisedFees: () => ItemisedFee[];
34
- getTotalPayNow: () => number;
35
+ getTotalPayNow: () => number | null;
35
36
  updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;
36
37
  removeBasketRow: (row: BasketRow) => void;
37
38
  clearBasketRows: (confirm: boolean) => void;
@@ -46,6 +47,7 @@ export interface BasketContextType {
46
47
  checkedOut: (data: ReservationsDTO) => void;
47
48
  clearSelectedRates: () => void;
48
49
  finish: () => void;
50
+ additionalPaymentRequired: (data: IPaymentCheckoutDetails) => void;
49
51
  getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;
50
52
  setAddonQuantities: (addon: Addon, quantities: {
51
53
  quantity: number;
@@ -1 +1 @@
1
- {"version":3,"file":"BasketContextType.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextType.ts"],"names":[],"mappings":"","sourcesContent":["import { ReservationsDTO } from '@roomstay/core';\nimport type dayjs from 'dayjs';\n\nimport type { Addon } from '@/models/Addon/Addon';\nimport type BasketAddonRow from '@/models/BasketAddonRow';\nimport type BasketRow from '@/models/BasketRow';\nimport { ItemisedFee } from '@/models/Fee';\nimport type { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\n\nexport interface BasketContextType {\n selectedBasketRow: BasketRow;\n currentBasketRows: BasketRow[];\n basketAddonRows: BasketAddonRow[];\n basketFeeRows: ItemisedFee[];\n loadedPromotion: IPromotion | null;\n quoteQueryID: string; // This ID is used to detect changes and re-fetch deposit quotes during checkout.\n\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n pencilId: string | undefined;\n\n isLoadingPriceQuote: boolean;\n\n addBasketRow: (row: BasketRow) => void;\n addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;\n\n getAllValidRows: () => BasketRow[];\n getAllDatelessRows: () => BasketRow[];\n\n getNumberOfAdults: (withTranslation: boolean) => number | string;\n getNumberOfChildren: (withTranslation: boolean) => number | string;\n getNumberOfInfants: (withTranslation: boolean) => number | string;\n getNumberOfRooms: (withTranslation: boolean) => number | string;\n\n getTotalPrice: () => any;\n getTotalDeposit: () => number;\n getDepositFees: () => number;\n getTotalFees: () => number;\n getItemisedFees: () => ItemisedFee[];\n getTotalPayNow: () => number;\n\n updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;\n removeBasketRow: (row: BasketRow) => void;\n\n clearBasketRows: (confirm: boolean) => void;\n selectBasketRow: (row: BasketRow | null) => void;\n\n setStartDate: (date: dayjs.Dayjs) => void;\n setEndDate: (date: dayjs.Dayjs) => void;\n\n quoteOrPencilReservation: (applyQuote: () => boolean) => void;\n\n hasCheckedOut: boolean;\n reservationData: ReservationsDTO;\n booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;\n rollback: () => void;\n checkedOut: (data: ReservationsDTO) => void;\n clearSelectedRates: () => void;\n finish: () => void;\n\n getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => void;\n\n removeBasketAddonRow: (row: BasketAddonRow) => void;\n attemptSelectUnfilledRow: () => BasketRow | undefined;\n\n initBasketRows: (basketRows: BasketRow[]) => void;\n updateBasketFeeRows: () => void;\n\n onDatePickerOpenChange: (isOpen: boolean) => void;\n isDatePickerOpen: boolean;\n}\n"]}
1
+ {"version":3,"file":"BasketContextType.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextType.ts"],"names":[],"mappings":"","sourcesContent":["import { ReservationsDTO } from '@roomstay/core';\nimport type dayjs from 'dayjs';\n\nimport type { Addon } from '@/models/Addon/Addon';\nimport type BasketAddonRow from '@/models/BasketAddonRow';\nimport type BasketRow from '@/models/BasketRow';\nimport { ItemisedFee } from '@/models/Fee';\nimport type { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport { IPaymentCheckoutDetails } from '@roomstay/core';\n\nexport interface BasketContextType {\n selectedBasketRow: BasketRow;\n currentBasketRows: BasketRow[];\n basketAddonRows: BasketAddonRow[];\n basketFeeRows: ItemisedFee[];\n loadedPromotion: IPromotion | null;\n quoteQueryID: string; // This ID is used to detect changes and re-fetch deposit quotes during checkout.\n\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n pencilId: string | undefined;\n\n isLoadingPriceQuote: boolean;\n\n addBasketRow: (row: BasketRow) => void;\n addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;\n\n getAllValidRows: () => BasketRow[];\n getAllDatelessRows: () => BasketRow[];\n\n getNumberOfAdults: (withTranslation: boolean) => number | string;\n getNumberOfChildren: (withTranslation: boolean) => number | string;\n getNumberOfInfants: (withTranslation: boolean) => number | string;\n getNumberOfRooms: (withTranslation: boolean) => number | string;\n\n getTotalPrice: () => any;\n getTotalQuoteDeposit: () => number;\n getDepositQuoteFees: () => number;\n getTotalFees: () => number;\n getItemisedFees: () => ItemisedFee[];\n // Can be null if we don't know the pay now amount (SynXis)\n getTotalPayNow: () => number | null;\n\n updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;\n removeBasketRow: (row: BasketRow) => void;\n\n clearBasketRows: (confirm: boolean) => void;\n selectBasketRow: (row: BasketRow | null) => void;\n\n setStartDate: (date: dayjs.Dayjs) => void;\n setEndDate: (date: dayjs.Dayjs) => void;\n\n quoteOrPencilReservation: (applyQuote: () => boolean) => void;\n\n hasCheckedOut: boolean;\n reservationData: ReservationsDTO;\n booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;\n rollback: () => void;\n checkedOut: (data: ReservationsDTO) => void;\n clearSelectedRates: () => void;\n finish: () => void;\n additionalPaymentRequired: (data: IPaymentCheckoutDetails) => void;\n\n getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => void;\n\n removeBasketAddonRow: (row: BasketAddonRow) => void;\n attemptSelectUnfilledRow: () => BasketRow | undefined;\n\n initBasketRows: (basketRows: BasketRow[]) => void;\n updateBasketFeeRows: () => void;\n\n onDatePickerOpenChange: (isOpen: boolean) => void;\n isDatePickerOpen: boolean;\n}\n"]}
@@ -297,19 +297,14 @@ function BasketContextWrapper(props) {
297
297
  return (0, rxjs_1.timer)(scalingDuration);
298
298
  }), (0, operators_1.finalize)(() => console.log('We are done!')));
299
299
  };
300
- const updateBasketFeeRows = () => {
301
- var _a, _b;
302
- const validBasketRows = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows.filter((row) => row.isValid());
303
- if (!validBasketRows.length || !(hotel === null || hotel === void 0 ? void 0 : hotel.fees)) {
304
- setBasketFeeRows([]);
305
- return;
306
- }
307
- const hotelFees = (_a = hotel.fees) !== null && _a !== void 0 ? _a : [];
300
+ /**
301
+ * Booking Fees.
302
+ * These fees aren't related to an addon or a room, they're just on the booking itself.
303
+ */
304
+ const getBookingFees = () => {
305
+ var _a;
306
+ const hotelFees = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.fees) !== null && _a !== void 0 ? _a : [];
308
307
  const newFees = [];
309
- /**
310
- * Booking Fees.
311
- * These fees aren't related to an addon or a room, they're just on the booking itself.
312
- */
313
308
  let totalBookingFees = 0;
314
309
  for (const fee of (0, core_1.getFilteredBookingFees)(hotelFees)) {
315
310
  const feeAmount = (0, core_1.calculateFeeAmount)(fee);
@@ -328,61 +323,65 @@ function BasketContextWrapper(props) {
328
323
  baseAmount += feeAmount;
329
324
  }
330
325
  }
331
- /**
332
- * Booking Rate Fees.
333
- */
334
- for (const row of validBasketRows) {
335
- const initialCost = (_b = row.getTotalPrice(true)) !== null && _b !== void 0 ? _b : 0;
336
- let totalFeesAdded = 0;
337
- let totalFeesIncludedInRates = 0;
338
- const rateFees = (0, core_1.getFilteredBookingRateFees)(hotelFees);
339
- // In order to calculate fees that were removed from the incoming rates using extractFeeFromRates option, we need
340
- // to know which fees were removed. When there's more than 1 percentage fee that's been removed, we can't
341
- // work backwards to figure out what the original price was without this.
342
- const removedPercentages = rateFees.filter((fee) => fee.extractFeeFromRates).map((fee) => fee.amount);
343
- for (const fee of rateFees) {
344
- if (fee.extractFeeFromRates || fee.includeInRates) {
345
- // For these fees, we need to add the amount to the the totalFeesIncludedInRates variable, so that we can
346
- // correctly calculate subsequent fees that are using the 'extractFeeFromRates' option.
347
- const baseAmount = fee.extractFeeFromRates ? initialCost : initialCost + totalFeesIncludedInRates;
348
- totalFeesIncludedInRates += (0, core_1.calculateFeeAmount)(fee, {
349
- baseAmount,
350
- numberOfNights: row.getNumberOfDays(),
351
- extractedFromRates: fee.extractFeeFromRates,
352
- removedPercentages,
353
- });
354
- }
355
- let feeCalculationBaseAmount;
356
- if (fee.extractFeeFromRates) {
357
- // If this fee is included in the rates, there's no additional fee to calculate.
358
- feeCalculationBaseAmount = fee.includeInRates ? 0 : initialCost;
359
- }
360
- else if (fee.includeInRates) {
361
- // These fees are already included in the rates, we only need to calculate "fees on fees" if applicable.
362
- if (!fee.includePreviousFeesInCalculation) {
363
- continue;
364
- }
365
- feeCalculationBaseAmount = totalFeesAdded;
366
- }
367
- else {
368
- // This fee either needs to include the full running total, or just the initial cost.
369
- feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? initialCost + totalFeesAdded + totalFeesIncludedInRates : initialCost;
370
- }
371
- const feeAmount = (0, core_1.calculateFeeAmount)(fee, {
372
- baseAmount: feeCalculationBaseAmount,
326
+ return newFees;
327
+ };
328
+ const getBookingRateFees = (row) => {
329
+ var _a, _b;
330
+ const hotelFees = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.fees) !== null && _a !== void 0 ? _a : [];
331
+ const newFees = [];
332
+ const initialCost = (_b = row.getTotalPrice(true)) !== null && _b !== void 0 ? _b : 0;
333
+ let totalFeesAdded = 0;
334
+ let totalFeesIncludedInRates = 0;
335
+ const rateFees = (0, core_1.getFilteredBookingRateFees)(hotelFees);
336
+ // In order to calculate fees that were removed from the incoming rates using extractFeeFromRates option, we need
337
+ // to know which fees were removed. When there's more than 1 percentage fee that's been removed, we can't
338
+ // work backwards to figure out what the original price was without this.
339
+ const removedPercentages = rateFees.filter((fee) => fee.extractFeeFromRates).map((fee) => fee.amount);
340
+ for (const fee of rateFees) {
341
+ if (fee.extractFeeFromRates || fee.includeInRates) {
342
+ // For these fees, we need to add the amount to the the totalFeesIncludedInRates variable, so that we can
343
+ // correctly calculate subsequent fees that are using the 'extractFeeFromRates' option.
344
+ const baseAmount = fee.extractFeeFromRates ? initialCost : initialCost + totalFeesIncludedInRates;
345
+ totalFeesIncludedInRates += (0, core_1.calculateFeeAmount)(fee, {
346
+ baseAmount,
373
347
  numberOfNights: row.getNumberOfDays(),
374
348
  extractedFromRates: fee.extractFeeFromRates,
375
349
  removedPercentages,
376
350
  });
377
- newFees.push({ hotelFee: fee, amount: feeAmount });
378
- if (!fee.extractFeeFromRates) {
379
- totalFeesAdded += feeAmount;
351
+ }
352
+ let feeCalculationBaseAmount;
353
+ if (fee.extractFeeFromRates) {
354
+ // If this fee is included in the rates, there's no additional fee to calculate.
355
+ feeCalculationBaseAmount = fee.includeInRates ? 0 : initialCost;
356
+ }
357
+ else if (fee.includeInRates) {
358
+ // These fees are already included in the rates, we only need to calculate "fees on fees" if applicable.
359
+ if (!fee.includePreviousFeesInCalculation) {
360
+ continue;
380
361
  }
362
+ feeCalculationBaseAmount = totalFeesAdded;
363
+ }
364
+ else {
365
+ // This fee either needs to include the full running total, or just the initial cost.
366
+ feeCalculationBaseAmount = fee.includePreviousFeesInCalculation ? initialCost + totalFeesAdded + totalFeesIncludedInRates : initialCost;
367
+ }
368
+ const feeAmount = (0, core_1.calculateFeeAmount)(fee, {
369
+ baseAmount: feeCalculationBaseAmount,
370
+ numberOfNights: row.getNumberOfDays(),
371
+ extractedFromRates: fee.extractFeeFromRates,
372
+ removedPercentages,
373
+ });
374
+ newFees.push({ hotelFee: fee, amount: feeAmount });
375
+ if (!fee.extractFeeFromRates) {
376
+ totalFeesAdded += feeAmount;
381
377
  }
382
378
  }
383
- /**
384
- * Booking Addon Fees.
385
- */
379
+ return newFees;
380
+ };
381
+ const getBookingAddonFees = () => {
382
+ var _a;
383
+ const hotelFees = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.fees) !== null && _a !== void 0 ? _a : [];
384
+ const newFees = [];
386
385
  const validBasketAddonRows = basketAddonRows.filter((row) => row.isValid());
387
386
  for (const row of validBasketAddonRows) {
388
387
  const initialCost = row.getTotalPrice() - row.getTotalFees();
@@ -423,10 +422,36 @@ function BasketContextWrapper(props) {
423
422
  }
424
423
  }
425
424
  }
425
+ return newFees;
426
+ };
427
+ const updateBasketFeeRows = () => {
428
+ const validBasketRows = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows.filter((row) => row.isValid());
429
+ if (!validBasketRows.length || !(hotel === null || hotel === void 0 ? void 0 : hotel.fees)) {
430
+ setBasketFeeRows([]);
431
+ return;
432
+ }
433
+ const newFees = [];
434
+ /**
435
+ * Booking Fees.
436
+ * These fees aren't related to an addon or a room, they're just on the booking itself.
437
+ */
438
+ newFees.push(...getBookingFees());
439
+ /**
440
+ * Booking Rate Fees.
441
+ */
442
+ for (const row of validBasketRows) {
443
+ const rateFees = getBookingRateFees(row);
444
+ newFees.push(...rateFees);
445
+ }
446
+ /**
447
+ * Booking Addon Fees.
448
+ */
449
+ newFees.push(...getBookingAddonFees());
426
450
  setBasketFeeRows(newFees);
427
451
  };
428
452
  const quoteQueryID = (0, react_1.useMemo)(() => {
429
- if (!hotel || !(hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
453
+ const requireQuote = (hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote) || (hotel === null || hotel === void 0 ? void 0 : hotel.bookingFlow) !== core_1.EBookingFlow.Default;
454
+ if (!hotel || !requireQuote) {
430
455
  return '';
431
456
  }
432
457
  return BookingAPI_1.default.Reservation.buildQuoteQueryID(currentBasketRows, isExternalMemberHotel ? memberNumber : undefined);
@@ -577,7 +602,7 @@ function BasketContextWrapper(props) {
577
602
  if ((hotel === null || hotel === void 0 ? void 0 : hotel.bookingFlow) === core_1.EBookingFlow.PreCheckoutPencil) {
578
603
  callApi = BookingAPI_1.default.Reservation.pencilReservation;
579
604
  }
580
- else if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
605
+ else if (hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote) {
581
606
  callApi = BookingAPI_1.default.Reservation.getPriceQuote;
582
607
  }
583
608
  else {
@@ -664,7 +689,7 @@ function BasketContextWrapper(props) {
664
689
  getTotalPrice: () => {
665
690
  let totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice() : 0); });
666
691
  // If the hotel requires a deposit, and enableCreditCardSurchase is false, we need to add the deposit fees to the total price.
667
- if ((hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) && !(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge) && (hotel === null || hotel === void 0 ? void 0 : hotel.addDepositFeeToBookingTotal)) {
692
+ if ((hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote) && !(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge) && (hotel === null || hotel === void 0 ? void 0 : hotel.addDepositFeeToBookingTotal)) {
668
693
  const depositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
669
694
  totalPrice += depositFees;
670
695
  }
@@ -677,17 +702,15 @@ function BasketContextWrapper(props) {
677
702
  });
678
703
  return totalPrice;
679
704
  },
680
- getTotalDeposit: () => {
681
- const totalDeposit = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalDeposit : 0); });
682
- return totalDeposit;
705
+ getTotalQuoteDeposit: () => {
706
+ return returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalDeposit : 0); });
683
707
  },
684
- getDepositFees: () => {
685
- const totalDepositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
686
- return totalDepositFees;
708
+ getDepositQuoteFees: () => {
709
+ return returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
687
710
  },
688
711
  getTotalFees: () => {
689
712
  let totalFees = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalFees() : 0); });
690
- if (totalFees == 0 && (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
713
+ if (totalFees == 0 && (hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote)) {
691
714
  // Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.
692
715
  totalFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
693
716
  }
@@ -729,11 +752,56 @@ function BasketContextWrapper(props) {
729
752
  return (0, Fee_1.sortFees)(fees, (hotel === null || hotel === void 0 ? void 0 : hotel.fees) || []);
730
753
  },
731
754
  getTotalPayNow: () => {
732
- if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
755
+ var _a, _b;
756
+ if (hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote) {
733
757
  const depositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
734
- return workingContext.getTotalDeposit() + depositFees;
758
+ return workingContext.getTotalQuoteDeposit() + depositFees;
759
+ }
760
+ const anyPolicyIsMissingDepositMode = currentBasketRows.some((row) => {
761
+ var _a;
762
+ const guaranteePolicy = (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getGuaranteePolicy();
763
+ return guaranteePolicy && guaranteePolicy.depositMode === null;
764
+ });
765
+ if (anyPolicyIsMissingDepositMode) {
766
+ // This should only happen for SynXis.
767
+ return null;
768
+ }
769
+ let totalPayNow = 0;
770
+ const anyRateRequiresFullPrepayment = currentBasketRows.some((row) => { var _a; return ((_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getGuaranteePolicy().depositMode) === core_1.EGuaranteePolicyDepositMode.Full; });
771
+ if (anyRateRequiresFullPrepayment) {
772
+ // Add booking fees that aren't associated with a rate or addon.
773
+ getBookingFees().forEach((fee) => {
774
+ totalPayNow += fee.amount;
775
+ });
776
+ }
777
+ const firstRateGuaranteePolicy = (_b = (_a = currentBasketRows[0]) === null || _a === void 0 ? void 0 : _a.getRate()) === null || _b === void 0 ? void 0 : _b.getGuaranteePolicy();
778
+ if (firstRateGuaranteePolicy) {
779
+ const addonTotal = basketAddonRows.reduce((acc, row) => acc + row.getTotalPrice(), 0);
780
+ const addonTotalWithFees = addonTotal + getBookingAddonFees().reduce((acc, row) => acc + row.amount, 0);
781
+ const depositPercentage = firstRateGuaranteePolicy.depositPercentage;
782
+ switch (firstRateGuaranteePolicy.depositMode) {
783
+ case core_1.EGuaranteePolicyDepositMode.Full:
784
+ totalPayNow += addonTotalWithFees;
785
+ break;
786
+ case core_1.EGuaranteePolicyDepositMode.Percentage:
787
+ if (depositPercentage) {
788
+ totalPayNow += addonTotalWithFees * (depositPercentage / 100);
789
+ }
790
+ break;
791
+ case core_1.EGuaranteePolicyDepositMode.None:
792
+ case core_1.EGuaranteePolicyDepositMode.FirstNight:
793
+ break;
794
+ }
795
+ }
796
+ for (const row of currentBasketRows) {
797
+ const rate = row.getRate();
798
+ // The BookingRate fees that are not included in the rate.
799
+ const bookingRateFees = getBookingRateFees(row).reduce((acc, fee) => acc + fee.amount, 0);
800
+ if (rate) {
801
+ totalPayNow += rate.getDepositAccordingToGuaranteePolicy(bookingRateFees);
802
+ }
735
803
  }
736
- return workingContext.getTotalPrice();
804
+ return totalPayNow;
737
805
  },
738
806
  /**
739
807
  * Pops the provided row from the current basket array
@@ -814,9 +882,31 @@ function BasketContextWrapper(props) {
814
882
  sessionProvider === null || sessionProvider === void 0 ? void 0 : sessionProvider.initialize(undefined, (_b = beContext === null || beContext === void 0 ? void 0 : beContext.engine) === null || _b === void 0 ? void 0 : _b.getSource());
815
883
  const params = new URLSearchParams(window.location.search);
816
884
  params.delete('planpay_checkout_id');
885
+ // MPGS params
886
+ params.delete('resultIndicator');
887
+ params.delete('sessionVersion');
888
+ params.delete('checkoutVersion');
817
889
  window.history.replaceState({}, '', `${window.location.pathname}?${params}`);
818
890
  navigate(StepThanks_1.default.getStepUrl());
819
891
  },
892
+ /**
893
+ * This is called when the users' payment was successfully verified, but there is additional payment required.
894
+ */
895
+ additionalPaymentRequired: (data) => __awaiter(this, void 0, void 0, function* () {
896
+ var _f;
897
+ const currentSession = (_f = beContext.sessionProvider) === null || _f === void 0 ? void 0 : _f.getSession();
898
+ const resRequest = currentSession === null || currentSession === void 0 ? void 0 : currentSession.reservationRequest;
899
+ const resData = reservationData;
900
+ if (!resData)
901
+ return;
902
+ if (resRequest === null || resRequest === void 0 ? void 0 : resRequest.payment) {
903
+ // Delete SplitPaymentAmount because from now any requests will be for the remaining amount
904
+ delete resRequest.payment.SplitPaymentAmount;
905
+ }
906
+ resData.payment = data;
907
+ yield beContext.sessionProvider.updateSessionAsync({ reservation: resData, reservationRequest: resRequest });
908
+ setReservationData(resData);
909
+ }),
820
910
  finish: () => {
821
911
  setReservationData(null);
822
912
  setHasCheckedOut(false);