@roomstay/frontend 2.6.77 → 2.6.79-0

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 (112) hide show
  1. package/dist/430.bundle.js +1 -1
  2. package/dist/456.bundle.js +1 -0
  3. package/dist/537.bundle.js +1 -1
  4. package/dist/977.bundle.js +1 -0
  5. package/dist/978.bundle.js +1 -1
  6. package/dist/main.bundle.js +1 -1
  7. package/dist/src/api/BookingAPI.d.ts +2 -0
  8. package/dist/src/api/BookingAPI.js +2 -0
  9. package/dist/src/api/BookingAPI.js.map +1 -1
  10. package/dist/src/api/HotelAPI.d.ts +2 -0
  11. package/dist/src/api/HotelAPI.js +7 -0
  12. package/dist/src/api/HotelAPI.js.map +1 -1
  13. package/dist/src/api/ReservationAPI.js +12 -9
  14. package/dist/src/api/ReservationAPI.js.map +1 -1
  15. package/dist/src/api/TrueRewardsAPI.d.ts +4 -0
  16. package/dist/src/api/TrueRewardsAPI.js +37 -0
  17. package/dist/src/api/TrueRewardsAPI.js.map +1 -0
  18. package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +1 -0
  19. package/dist/src/components/generic/BookingWizard/BookingWizard.js +7 -1
  20. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  21. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js +0 -1
  22. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js.map +1 -1
  23. package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +13 -4
  24. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js +24 -10
  25. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js.map +1 -1
  26. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js +1 -1
  27. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js.map +1 -1
  28. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.d.ts +9 -1
  29. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js +187 -22
  30. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js.map +1 -1
  31. package/dist/src/components/generic/Event/EventCard.js +16 -8
  32. package/dist/src/components/generic/Event/EventCard.js.map +1 -1
  33. package/dist/src/components/generic/Event/EventCarousel.js +3 -1
  34. package/dist/src/components/generic/Event/EventCarousel.js.map +1 -1
  35. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +9 -2
  36. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  37. package/dist/src/components/generic/Select/Select.d.ts +2 -1
  38. package/dist/src/components/generic/Select/Select.js +2 -2
  39. package/dist/src/components/generic/Select/Select.js.map +1 -1
  40. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +11 -10
  41. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
  42. package/dist/src/components/steps/confirmation/StepConfirmationForm.js +11 -4
  43. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  44. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.d.ts +7 -0
  45. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js +54 -0
  46. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js.map +1 -0
  47. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.d.ts +2 -0
  48. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js +53 -0
  49. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js.map +1 -0
  50. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.d.ts +2 -0
  51. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +115 -0
  52. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +1 -0
  53. package/dist/src/components/steps/room/AvailableUpgradesModal.js +0 -5
  54. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  55. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +2 -2
  56. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
  57. package/dist/src/components/summary/BESummaryRoomRow.js +1 -1
  58. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  59. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +63 -11
  60. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  61. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +3 -1
  62. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  63. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +5 -2
  64. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  65. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +10 -2
  66. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  67. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +7 -0
  68. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  69. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +1 -0
  70. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
  71. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +3 -0
  72. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  73. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.d.ts +2 -0
  74. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js +44 -0
  75. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js.map +1 -0
  76. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +1 -0
  77. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  78. package/dist/src/index.d.ts +1 -0
  79. package/dist/src/index.js +4 -2
  80. package/dist/src/index.js.map +1 -1
  81. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  82. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  83. package/dist/src/models/BasketRow.d.ts +2 -1
  84. package/dist/src/models/BasketRow.js +32 -2
  85. package/dist/src/models/BasketRow.js.map +1 -1
  86. package/dist/src/models/BookingWizard/BookingWizardProperty.d.ts +13 -0
  87. package/dist/src/models/BookingWizard/BookingWizardProperty.js.map +1 -1
  88. package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -0
  89. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  90. package/dist/src/models/RoomstaySession.d.ts +1 -0
  91. package/dist/src/models/RoomstaySession.js.map +1 -1
  92. package/dist/src/providers/FeatureProvider.js +2 -0
  93. package/dist/src/providers/FeatureProvider.js.map +1 -1
  94. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.d.ts +10 -0
  95. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js +13 -0
  96. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js.map +1 -0
  97. package/dist/src/providers/feature/Feature.d.ts +2 -0
  98. package/dist/src/providers/feature/Feature.js +4 -0
  99. package/dist/src/providers/feature/Feature.js.map +1 -1
  100. package/dist/src/providers/storage/SessionProvider.js +2 -0
  101. package/dist/src/providers/storage/SessionProvider.js.map +1 -1
  102. package/dist/src/translations/Translation.d.ts +20 -0
  103. package/dist/src/translations/Translation.js +20 -0
  104. package/dist/src/translations/Translation.js.map +1 -1
  105. package/dist/src/translations/languages/en-gb.js +20 -0
  106. package/dist/src/translations/languages/en-gb.js.map +1 -1
  107. package/dist/src/util/TotalCalculator.js.map +1 -1
  108. package/dist/test.bundle.js +1 -1
  109. package/dist/vendors.bundle.js +1 -1
  110. package/package.json +3 -3
  111. package/dist/659.bundle.js +0 -1
  112. package/dist/984.bundle.js +0 -1
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.TrueRewardsPaymentMethod = void 0;
39
+ const react_1 = __importStar(require("react"));
40
+ const react_i18next_1 = require("react-i18next");
41
+ const BEButton_1 = __importDefault(require("../../../generic/BEButton"));
42
+ const Icon_1 = require("../../../generic/Icon/Icon");
43
+ const Text_1 = __importStar(require("../../../generic/Text"));
44
+ const TextBox_1 = __importDefault(require("../../../generic/TextBox"));
45
+ const Currency_1 = __importDefault(require("../../../../hooks/Currency"));
46
+ const index_1 = require("../../../../index");
47
+ const Translation_1 = require("../../../../translations/Translation");
48
+ const Color_1 = require("../../../../util/Color");
49
+ const TrueRewardsPaymentMethod_module_scss_1 = __importDefault(require("./TrueRewardsPaymentMethod.module.scss"));
50
+ const TrueRewardsPaymentMethod = () => {
51
+ const { t } = (0, react_i18next_1.useTranslation)();
52
+ const { hotel } = (0, index_1.useCurrentHotel)();
53
+ const { getTotalPayNow } = (0, index_1.useBasket)();
54
+ const totalPayNow = getTotalPayNow();
55
+ const [cardReference, setCardReference] = (0, react_1.useState)('');
56
+ const [cardBalance, setCardBalance] = (0, react_1.useState)(null);
57
+ const [errorMessage, setErrorMessage] = (0, react_1.useState)('');
58
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
59
+ const trimmedReference = cardReference.trim();
60
+ const canSubmit = trimmedReference.length > 6;
61
+ const remaining = cardBalance !== null ? cardBalance - totalPayNow : 0;
62
+ const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = (0, Currency_1.default)({ children: remaining });
63
+ const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = (0, Currency_1.default)({ children: cardBalance });
64
+ const onSubmit = () => __awaiter(void 0, void 0, void 0, function* () {
65
+ setErrorMessage('');
66
+ setCardBalance(null);
67
+ if (hotel === null || hotel === void 0 ? void 0 : hotel.hotelID) {
68
+ try {
69
+ setIsLoading(true);
70
+ const balance = yield index_1.API.TrueRewards.fetchBalance(trimmedReference, hotel.hotelID);
71
+ if (balance === null) {
72
+ setErrorMessage(t(Translation_1.Translation.Step.Confirmation.TrueRewardsInvalid));
73
+ }
74
+ else {
75
+ setCardBalance(balance);
76
+ }
77
+ }
78
+ catch (e) {
79
+ console.error(e);
80
+ setErrorMessage(t(Translation_1.Translation.Step.Confirmation.TrueRewardsFailed));
81
+ }
82
+ finally {
83
+ setIsLoading(false);
84
+ }
85
+ }
86
+ });
87
+ return (react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.container },
88
+ react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.inputRow },
89
+ react_1.default.createElement(TextBox_1.default, { value: cardReference, onChange: (val) => {
90
+ setCardReference(val.target.value);
91
+ setErrorMessage('');
92
+ }, placeholder: t(Translation_1.Translation.Step.Confirmation.EnterCode) }),
93
+ react_1.default.createElement(BEButton_1.default, { className: TrueRewardsPaymentMethod_module_scss_1.default.applyCodeButton, isLoading: isLoading, size: "small", onClick: onSubmit, disabled: !canSubmit, icon: cardBalance !== null ? Icon_1.IconType.Check : Icon_1.IconType.ArrowRight, iconPosition: "right", rounded: true }, cardBalance !== null ? t(Translation_1.Translation.Step.Confirmation.CodeApplied) : t(Translation_1.Translation.Step.Confirmation.ApplyCode))),
94
+ cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.infoBlock },
95
+ react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.leftContent },
96
+ react_1.default.createElement(Text_1.default, { bold: true, type: Text_1.TextType.Small }, cardBalance >= totalPayNow ? t(Translation_1.Translation.Step.Confirmation.TrueRewardsCoversFullBooking) : t(Translation_1.Translation.Step.Confirmation.TrueRewardsInsufficient)),
97
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, cardBalance >= totalPayNow
98
+ ? t(Translation_1.Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)
99
+ : t(Translation_1.Translation.Step.Confirmation.TrueRewardsInsufficientInstructions))),
100
+ react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.rightContent },
101
+ react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.card },
102
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Step.Confirmation.YourBalance)),
103
+ react_1.default.createElement(Text_1.default, { bold: true, color: Color_1.Color.Navy },
104
+ symbol,
105
+ cardBalancePrettyValue)),
106
+ react_1.default.createElement("div", { className: TrueRewardsPaymentMethod_module_scss_1.default.card },
107
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Step.Confirmation.Remaining)),
108
+ react_1.default.createElement(Text_1.default, { bold: true, color: remaining < 0 ? Color_1.Color.Danger : Color_1.Color.Navy },
109
+ symbol,
110
+ remainingPrettyValue))))) : (react_1.default.createElement(react_1.default.Fragment, null,
111
+ errorMessage && (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Danger, type: Text_1.TextType.Small, style: { marginTop: '8px' } }, errorMessage)),
112
+ react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, style: { marginTop: '8px' } }, t(Translation_1.Translation.Step.Confirmation.TrueRewardsInputHelperText))))));
113
+ };
114
+ exports.TrueRewardsPaymentMethod = TrueRewardsPaymentMethod;
115
+ //# sourceMappingURL=TrueRewardsPaymentMethod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrueRewardsPaymentMethod.js","sourceRoot":"/","sources":["src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport useCurrency from '@/hooks/Currency';\nimport { API, useBasket, useCurrentHotel } from '@/index';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\nimport styles from './TrueRewardsPaymentMethod.module.scss';\n\nexport const TrueRewardsPaymentMethod: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { getTotalPayNow } = useBasket();\n const totalPayNow = getTotalPayNow();\n\n const [cardReference, setCardReference] = useState('');\n const [cardBalance, setCardBalance] = useState<number | null>(null);\n const [errorMessage, setErrorMessage] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n const trimmedReference = cardReference.trim();\n const canSubmit = trimmedReference.length > 6;\n const remaining = cardBalance !== null ? cardBalance - totalPayNow : 0;\n\n const { symbol, prettyValue: remainingPrettyValue, isLoading: isRemainingLoading } = useCurrency({ children: remaining });\n const { prettyValue: cardBalancePrettyValue, isLoading: isCardBalanceLoading } = useCurrency({ children: cardBalance });\n\n const onSubmit = async () => {\n setErrorMessage('');\n setCardBalance(null);\n\n if (hotel?.hotelID) {\n try {\n setIsLoading(true);\n const balance = await API.TrueRewards.fetchBalance(trimmedReference, hotel.hotelID);\n\n if (balance === null) {\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsInvalid));\n } else {\n setCardBalance(balance);\n }\n } catch (e) {\n console.error(e);\n setErrorMessage(t(Translation.Step.Confirmation.TrueRewardsFailed));\n } finally {\n setIsLoading(false);\n }\n }\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.inputRow}>\n <TextBox\n value={cardReference}\n onChange={(val) => {\n setCardReference(val.target.value);\n setErrorMessage('');\n }}\n placeholder={t(Translation.Step.Confirmation.EnterCode)}\n />\n <BEButton\n className={styles.applyCodeButton}\n isLoading={isLoading}\n size=\"small\"\n onClick={onSubmit}\n disabled={!canSubmit}\n icon={cardBalance !== null ? IconType.Check : IconType.ArrowRight}\n iconPosition=\"right\"\n rounded\n >\n {cardBalance !== null ? t(Translation.Step.Confirmation.CodeApplied) : t(Translation.Step.Confirmation.ApplyCode)}\n </BEButton>\n </div>\n {cardBalance !== null && !isCardBalanceLoading && !isRemainingLoading ? (\n <div className={styles.infoBlock}>\n <div className={styles.leftContent}>\n <Text bold type={TextType.Small}>\n {cardBalance >= totalPayNow ? t(Translation.Step.Confirmation.TrueRewardsCoversFullBooking) : t(Translation.Step.Confirmation.TrueRewardsInsufficient)}\n </Text>\n <Text type={TextType.Small}>\n {cardBalance >= totalPayNow\n ? t(Translation.Step.Confirmation.TrueRewardsCoversFullInstructions)\n : t(Translation.Step.Confirmation.TrueRewardsInsufficientInstructions)}\n </Text>\n </div>\n <div className={styles.rightContent}>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.YourBalance)}</Text>\n <Text bold color={Color.Navy}>\n {symbol}\n {cardBalancePrettyValue}\n </Text>\n </div>\n <div className={styles.card}>\n <Text type={TextType.Small}>{t(Translation.Step.Confirmation.Remaining)}</Text>\n <Text bold color={remaining < 0 ? Color.Danger : Color.Navy}>\n {symbol}\n {remainingPrettyValue}\n </Text>\n </div>\n </div>\n </div>\n ) : (\n <>\n {errorMessage && (\n <Text color={Color.Danger} type={TextType.Small} style={{ marginTop: '8px' }}>\n {errorMessage}\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} style={{ marginTop: '8px' }}>\n {t(Translation.Step.Confirmation.TrueRewardsInputHelperText)}\n </Text>\n </>\n )}\n </div>\n );\n};\n"]}
@@ -132,11 +132,6 @@ const AvailableUpgradesModal = () => {
132
132
  DataLayer_1.default.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate(), rate);
133
133
  row.setRate(rate, RoomUpsellFeature_1.default.isActive());
134
134
  basketContext.updateBasketRow(row);
135
- // TODO: RE-2211 - Look to refactor globally how we're loading the quote details to account for all other changes.
136
- // This is a workaround to force the quote details to be reloaded
137
- if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
138
- basketContext.quoteOrPencilReservation(() => true);
139
- }
140
135
  closeModal();
141
136
  }
142
137
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"AvailableUpgradesModal.js","sourceRoot":"/","sources":["src/components/steps/room/AvailableUpgradesModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { AddToCartEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport React, { FC, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport LargeRoomCard from '@/components/steps/room/LargeRoomCard';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\nconst AvailableUpgradesModal: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n const [isOpen, setIsOpen] = useState(false);\n const [row, setRow] = useState<BasketRow | null>(null);\n\n const basketContext = useContext(BasketContext);\n\n const { on } = useEvent();\n\n const room = row?.getRoom();\n const selectedRate = row?.getRate();\n\n const [rates, setRates] = useState<RoomRate[]>();\n\n useEffect(() => {\n let cancelled = false;\n\n on(AddToCartEvent, async (event: AddToCartEvent): Promise<void | boolean> => {\n if (cancelled) return;\n\n setRow(event.basketRow);\n return true;\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (row) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber, true).then((availableRooms) => {\n if (cancelled) return;\n\n const unfilteredRates: RoomRate[] = [];\n availableRooms\n ?.map((availableRoom) => {\n return availableRoom.getRates();\n })\n .forEach((fewRates) => {\n fewRates.forEach((oneRate) => {\n unfilteredRates.push(oneRate);\n });\n });\n const filteredRates = unfilteredRates\n .filter((rate) => {\n return rate.getAveragePrice() > (selectedRate?.getAveragePrice() as number) && rate.name === selectedRate?.name;\n })\n .sort((a: RoomRate, b: RoomRate) => {\n if (a.getAveragePrice() === selectedRate?.getAveragePrice()) return 1;\n if (b.getAveragePrice() === selectedRate?.getAveragePrice()) return -1;\n return a.getAveragePrice() - b.getAveragePrice();\n })\n .slice(0, 3);\n\n setRates(filteredRates);\n if (filteredRates.length === 0 && selectedRate) {\n // Proceed as if user clicked the nav.\n confirmRateOnClick();\n } else {\n setIsOpen(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n const closeModal = () => {\n setIsOpen(false);\n setRow(null);\n };\n\n const cancelUpsell = () => {\n if (row) {\n DataLayer.instance.sendUpsellCancelled({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate);\n }\n\n closeModal();\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate, rate);\n\n row.setRate(rate, RoomUpsellFeature.isActive());\n basketContext.updateBasketRow(row);\n\n // TODO: RE-2211 - Look to refactor globally how we're loading the quote details to account for all other changes.\n // This is a workaround to force the quote details to be reloaded\n if (hotel?.requireDeposit) {\n basketContext.quoteOrPencilReservation(() => true);\n }\n closeModal();\n } else {\n cancelUpsell();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={cancelUpsell} title={t(Translation.Step.Room.AvailableUpgrades)}>\n <div className=\"upgrades-room-modal\">\n <div className=\"current-room-block container\">\n <div className=\"u-flex u-flex-flex-start row\">\n <div className=\"image-wrapper col-md-3 col-12\">\n <ImageGallerySlider images={room?.getImages() || []} />\n </div>\n <div className=\"u-flex info-block col-md-7 col-sm-9\">\n <div>\n <Text color={Color.DarkGrey} bold>\n {t(Translation.Step.Room.CurrentSelectedRoom)}\n </Text>\n <Headline bold>{room?.name}</Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {selectedRate?.name}\n </Text>\n </div>\n <div>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals>{selectedRate?.getAveragePrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} className=\"u-nowrap\">\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-flex u-flex-align-center col-md-2 col-sm-3\">\n <BEButton wide filled primary onClick={() => confirmRateOnClick()}>\n {t(Translation.Step.Room.Confirm)}\n </BEButton>\n </div>\n </div>\n </div>\n <div className=\"container\" style={{ backgroundColor: Color.Snow }}>\n <div className=\"u-pad-top u-marg-bottom\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.CheckOutOtherOptions)}</Headline>\n </div>\n <div className=\"row no-gutters\">\n {rates?.map((rate) => {\n const onSelectRate = () => {\n confirmRateOnClick(rate);\n };\n\n return (\n <div className=\"col-md-6 col-xl-4 u-marg-bottom u-pad-left--light u-pad-right--light\" key={rate.getRoom().name}>\n <LargeRoomCard selectedRate={selectedRate as RoomRate} rate={rate} onSelectRate={onSelectRate} />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n ) : null;\n};\n\nexport default AvailableUpgradesModal;\n"]}
1
+ {"version":3,"file":"AvailableUpgradesModal.js","sourceRoot":"/","sources":["src/components/steps/room/AvailableUpgradesModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { AddToCartEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport React, { FC, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport LargeRoomCard from '@/components/steps/room/LargeRoomCard';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\nconst AvailableUpgradesModal: FC = () => {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n const [isOpen, setIsOpen] = useState(false);\n const [row, setRow] = useState<BasketRow | null>(null);\n\n const basketContext = useContext(BasketContext);\n\n const { on } = useEvent();\n\n const room = row?.getRoom();\n const selectedRate = row?.getRate();\n\n const [rates, setRates] = useState<RoomRate[]>();\n\n useEffect(() => {\n let cancelled = false;\n\n on(AddToCartEvent, async (event: AddToCartEvent): Promise<void | boolean> => {\n if (cancelled) return;\n\n setRow(event.basketRow);\n return true;\n });\n\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n\n if (row) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber, true).then((availableRooms) => {\n if (cancelled) return;\n\n const unfilteredRates: RoomRate[] = [];\n availableRooms\n ?.map((availableRoom) => {\n return availableRoom.getRates();\n })\n .forEach((fewRates) => {\n fewRates.forEach((oneRate) => {\n unfilteredRates.push(oneRate);\n });\n });\n const filteredRates = unfilteredRates\n .filter((rate) => {\n return rate.getAveragePrice() > (selectedRate?.getAveragePrice() as number) && rate.name === selectedRate?.name;\n })\n .sort((a: RoomRate, b: RoomRate) => {\n if (a.getAveragePrice() === selectedRate?.getAveragePrice()) return 1;\n if (b.getAveragePrice() === selectedRate?.getAveragePrice()) return -1;\n return a.getAveragePrice() - b.getAveragePrice();\n })\n .slice(0, 3);\n\n setRates(filteredRates);\n if (filteredRates.length === 0 && selectedRate) {\n // Proceed as if user clicked the nav.\n confirmRateOnClick();\n } else {\n setIsOpen(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n const closeModal = () => {\n setIsOpen(false);\n setRow(null);\n };\n\n const cancelUpsell = () => {\n if (row) {\n DataLayer.instance.sendUpsellCancelled({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate);\n }\n\n closeModal();\n };\n\n const confirmRateOnClick = (rate?: RoomRate) => {\n if (row) {\n if (rate) {\n DataLayer.instance.sendUpsellConfirmed({ from: row.getStartDate(), to: row.getEndDate() }, row.getRate() as RoomRate, rate);\n\n row.setRate(rate, RoomUpsellFeature.isActive());\n basketContext.updateBasketRow(row);\n closeModal();\n } else {\n cancelUpsell();\n }\n }\n };\n\n return RoomUpsellFeature.isActive() ? (\n <SimpleModal open={isOpen} onClose={cancelUpsell} title={t(Translation.Step.Room.AvailableUpgrades)}>\n <div className=\"upgrades-room-modal\">\n <div className=\"current-room-block container\">\n <div className=\"u-flex u-flex-flex-start row\">\n <div className=\"image-wrapper col-md-3 col-12\">\n <ImageGallerySlider images={room?.getImages() || []} />\n </div>\n <div className=\"u-flex info-block col-md-7 col-sm-9\">\n <div>\n <Text color={Color.DarkGrey} bold>\n {t(Translation.Step.Room.CurrentSelectedRoom)}\n </Text>\n <Headline bold>{room?.name}</Headline>\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {selectedRate?.name}\n </Text>\n </div>\n <div>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals>{selectedRate?.getAveragePrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} className=\"u-nowrap\">\n <span dangerouslySetInnerHTML={{ __html: t(Translation.Step.Room.RoomInfo.IncludesTaxes) }}></span>\n </Text>\n </div>\n </div>\n </div>\n <div className=\"u-flex u-flex-align-center col-md-2 col-sm-3\">\n <BEButton wide filled primary onClick={() => confirmRateOnClick()}>\n {t(Translation.Step.Room.Confirm)}\n </BEButton>\n </div>\n </div>\n </div>\n <div className=\"container\" style={{ backgroundColor: Color.Snow }}>\n <div className=\"u-pad-top u-marg-bottom\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline bold>{t(Translation.Step.Room.CheckOutOtherOptions)}</Headline>\n </div>\n <div className=\"row no-gutters\">\n {rates?.map((rate) => {\n const onSelectRate = () => {\n confirmRateOnClick(rate);\n };\n\n return (\n <div className=\"col-md-6 col-xl-4 u-marg-bottom u-pad-left--light u-pad-right--light\" key={rate.getRoom().name}>\n <LargeRoomCard selectedRate={selectedRate as RoomRate} rate={rate} onSelectRate={onSelectRate} />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n ) : null;\n};\n\nexport default AvailableUpgradesModal;\n"]}
@@ -106,7 +106,7 @@ const renderNightPrice = (rate, nightRate) => {
106
106
  react_1.default.createElement(Currency_1.default, null, nightRate.cost))));
107
107
  };
108
108
  function PriceBreakdownBlock(props) {
109
- var _a, _b;
109
+ var _a, _b, _c;
110
110
  const { t } = (0, react_i18next_1.useTranslation)();
111
111
  const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
112
112
  const basketContext = react_1.default.useContext(contexts_1.BasketContext);
@@ -158,7 +158,7 @@ function PriceBreakdownBlock(props) {
158
158
  isLastDay ? (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Success }, t(Translation_1.Translation.Misc.CheckOut))) : (react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, className: "u-pos-rel" }, renderNightPrice(rate, nightRate)))));
159
159
  }),
160
160
  !!totalFees && !(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && (react_1.default.createElement("div", { className: "u-flex u-marg-bottom" },
161
- react_1.default.createElement(Text_1.default, null, t(Translation_1.Translation.Step.Room.Summary.Fees)),
161
+ react_1.default.createElement(Text_1.default, null, t(Translation_1.Translation.Step.Room.Summary.Fees, { context: (_c = ccx.selectedHotel) === null || _c === void 0 ? void 0 : _c.languageContext })),
162
162
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey },
163
163
  react_1.default.createElement(Currency_1.default, null, totalFees)))),
164
164
  !!(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && (react_1.default.createElement(react_1.default.Fragment, null,
@@ -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 RoomRateNight from '@/models/Room/RoomRateNight';\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\nconst renderNightPrice = (rate: RoomRate, nightRate: RoomRateNight) => {\n const { t } = useTranslation();\n const isStayXPayY = !!(rate.nightsToDiscount && Number(rate.nightsToDiscount) > 0);\n const isFreeNight = Number(nightRate.cost) === 0 && Number(nightRate.discount) > 0;\n\n // Show \"Free\" for Stay X Pay Y free nights\n if (isStayXPayY && isFreeNight) {\n return (\n <span className=\"u-primary u-bold\" style={{ color: Color.Success }}>\n {t(Translation.Step.Room.FreeNight)}\n </span>\n );\n }\n\n // Regular pricing, with strikethrough of undiscounted price (if there is a discount)\n return (\n <>\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>{Number(nightRate.cost) + Number(nightRate.discount)}</Currency>\n </span>\n )}\n <span className=\"u-primary u-bold\">\n <Currency>{nightRate.cost}</Currency>\n </span>\n </>\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 {renderNightPrice(rate, nightRate)}\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"]}
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 RoomRateNight from '@/models/Room/RoomRateNight';\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\nconst renderNightPrice = (rate: RoomRate, nightRate: RoomRateNight) => {\n const { t } = useTranslation();\n const isStayXPayY = !!(rate.nightsToDiscount && Number(rate.nightsToDiscount) > 0);\n const isFreeNight = Number(nightRate.cost) === 0 && Number(nightRate.discount) > 0;\n\n // Show \"Free\" for Stay X Pay Y free nights\n if (isStayXPayY && isFreeNight) {\n return (\n <span className=\"u-primary u-bold\" style={{ color: Color.Success }}>\n {t(Translation.Step.Room.FreeNight)}\n </span>\n );\n }\n\n // Regular pricing, with strikethrough of undiscounted price (if there is a discount)\n return (\n <>\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>{Number(nightRate.cost) + Number(nightRate.discount)}</Currency>\n </span>\n )}\n <span className=\"u-primary u-bold\">\n <Currency>{nightRate.cost}</Currency>\n </span>\n </>\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 {renderNightPrice(rate, nightRate)}\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, { context: ccx.selectedHotel?.languageContext })}</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"]}
@@ -135,7 +135,7 @@ function BESummaryRoomRow(props) {
135
135
  !!rowFees && !rowItemisedFees && (
136
136
  // Only show fees if we don't have itemised fees. If we have itemised fees they will be shown later.
137
137
  react_1.default.createElement("div", { className: "u-marg-bottom--light u-flex" },
138
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr() }, t(Translation_1.Translation.Step.Room.Summary.Fees)),
138
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr() }, t(Translation_1.Translation.Step.Room.Summary.Fees, { context: hotel === null || hotel === void 0 ? void 0 : hotel.languageContext })),
139
139
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: textWhiteOr(Color_1.Color.DarkGrey) },
140
140
  react_1.default.createElement(Currency_1.default, null, rowFees)))),
141
141
  !!rowTaxes && (react_1.default.createElement("div", { className: "u-marg-bottom--light u-flex" },
@@ -1 +1 @@
1
- {"version":3,"file":"BESummaryRoomRow.js","sourceRoot":"/","sources":["src/components/summary/BESummaryRoomRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, FullPageEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { getFilteredBookingRateFees } from '@roomstay/core';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow from '@/models/BasketRow';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\n\ninterface BESummaryRoomRowProps {\n index: number;\n row: BasketRow;\n showImages: boolean;\n\n onEditPropertyClicked?: () => void;\n}\n\nexport default function BESummaryRoomRow(props: BESummaryRoomRowProps) {\n const basketContext = useContext(BasketContext);\n const { currentStep } = useContext(FullPageEngineContext);\n const { isAccent2ColorDark, hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { showChildren } = useSearchScopeHook();\n\n const { index, row, showImages } = props;\n\n const totalPrice = row.getTotalPrice(true);\n const rate = row.getRate();\n\n const isSelected = basketContext.selectedBasketRow?.getID() === row.getID();\n const isOnlyRate = basketContext.currentBasketRows.length === 1;\n\n const removeRate = t(isOnlyRate ? Translation.Step.Room.Summary.NoRemoveLastRate : Translation.Step.Room.Summary.RemoveThisRate);\n\n const rowFees = row.getRate()?.getTotalFees();\n const rowTaxes = row.getRate()?.getTotalTaxes();\n const rowItemisedFees = hotel && row.getRate()?.getItemisedFees(getFilteredBookingRateFees(hotel.fees ?? []));\n\n const cancelEditBasketRowOnClick = () => basketContext.clearSelectedRates(); //Set the selected basket row to null, ensuring that no row is selected for editing.\n const editOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.selectBasketRow(row);\n\n if (props.onEditPropertyClicked) {\n props.onEditPropertyClicked();\n }\n };\n const removeOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.removeBasketRow(row);\n };\n\n const promoApplied = row.isPromoCodeValid();\n\n const shouldTextBeWhite = isAccent2ColorDark && isSelected;\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n return (\n <>\n {index >= 1 && <LineBreak noMargins darker />}\n <div key={row.getID()} className={'booking-engine-summary--row' + (isSelected ? ' --selected' : '')}>\n {showImages && (\n <div className=\"u-border-rounded\" style={{ height: '190px' }}>\n <ImageGallerySlider images={row.getRoom().getImages()} imageSize={ImageSize.Tiny} />\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)}>\n <strong>\n {t(Translation.Step.Date.Room)} {index + 1}\n </strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text color={textWhiteOr(Color.Navy)}>\n <strong>{rate?.getRoom().name}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {rate?.name}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Arrival)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getArrivalDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Departure)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getDepartureDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--medium u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {[\n StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t),\n showChildren ? StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t) : null,\n hotel?.childConfiguration?.supportInfants ? StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t) : null,\n ]\n .filter((item) => !!item)\n .join(`, `)}\n </Text>\n </div>\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Misc.Rates)} ({t(Translation.Misc.PerNight)})\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rate?.getAveragePriceBeforeDiscount(true)}</Currency>\n </Text>\n </div>\n {promoApplied && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.PromoCode)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n {row.getPromoCode()}\n </Text>\n </div>\n )}\n {rate && rate?.getTotalDiscount() > 0 && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Misc.Discount)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <span className=\"u-ellip-overflow\">-</span>\n <Currency>{rate?.getTotalDiscount()}</Currency>\n </Text>\n </div>\n )}\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.General.RoomTotal)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{totalPrice}</Currency>\n </Text>\n </div>\n {!!rowFees && !rowItemisedFees && (\n // Only show fees if we don't have itemised fees. If we have itemised fees they will be shown later.\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Fees)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowFees}</Currency>\n </Text>\n </div>\n )}\n {!!rowTaxes && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Taxes)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowTaxes}</Currency>\n </Text>\n </div>\n )}\n <div className=\"u-marg-top u-marg-bottom u-flex justify-content-start\">\n {isSelected ? (\n <Tooltip title={t(Translation.Misc.Cancel)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={cancelEditBasketRowOnClick} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </Tooltip>\n ) : (\n <Tooltip title={t(Translation.Step.Confirmation.EditThisProperty)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={editOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Edit)}\n </BEButton>\n </div>\n </Tooltip>\n )}\n\n <span className=\"u-pad-left--light u-pad-right--light\" style={{ color: Color.LightGrey }}>\n |\n </span>\n <Tooltip title={removeRate}>\n <div>\n <BEButton isText size=\"tiny\" primary disabled={isOnlyRate} onClick={removeOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Remove)}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"BESummaryRoomRow.js","sourceRoot":"/","sources":["src/components/summary/BESummaryRoomRow.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0E;AAC1E,2CAAkD;AAClD,yCAA4D;AAC5D,+CAA0C;AAC1C,iDAA+C;AAC/C,uDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,+EAAuD;AACvD,kEAA2D;AAC3D,mFAA2D;AAC3D,oGAA4E;AAC5E,mEAAgE;AAEhE,6DAAsD;AACtD,wCAAqC;AACrC,qEAA6C;AAC7C,uEAA+C;AAU/C,SAAwB,gBAAgB,CAAC,KAA4B;;IACjE,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAExD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,uCAAkB,GAAE,CAAC;IAE9C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEzC,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAE3B,MAAM,UAAU,GAAG,CAAA,MAAA,aAAa,CAAC,iBAAiB,0CAAE,KAAK,EAAE,MAAK,GAAG,CAAC,KAAK,EAAE,CAAC;IAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAEjI,MAAM,OAAO,GAAG,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,YAAY,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,aAAa,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,KAAK,KAAI,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,eAAe,CAAC,IAAA,iCAA0B,EAAC,MAAA,KAAK,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC,CAAA,CAAC;IAE9G,MAAM,0BAA0B,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,CAAC,oFAAoF;IACjK,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,IAAI,WAAW,KAAK,IAAA,qBAAW,GAAE,EAAE;YAC/B,QAAQ,CAAC,IAAA,qBAAW,GAAE,CAAC,UAAU,EAAE,CAAC,CAAC;SACxC;QACD,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,qBAAqB,EAAE;YAC7B,KAAK,CAAC,qBAAqB,EAAE,CAAC;SACjC;IACL,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAC9B,IAAI,WAAW,KAAK,IAAA,qBAAW,GAAE,EAAE;YAC/B,QAAQ,CAAC,IAAA,qBAAW,GAAE,CAAC,UAAU,EAAE,CAAC,CAAC;SACxC;QACD,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAE5C,MAAM,iBAAiB,GAAG,kBAAkB,IAAI,UAAU,CAAC;IAC3D,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,aAAK,CAAC,QAAQ,EAAE,EAAE;QAC3C,OAAO,iBAAiB,CAAC,CAAC,CAAC,aAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC,CAAC;IAEF,OAAO,CACH;QACK,KAAK,IAAI,CAAC,IAAI,8BAAC,mBAAS,IAAC,SAAS,QAAC,MAAM,SAAG;QAC7C,uCAAK,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,6BAA6B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,UAAU,IAAI,CACX,uCAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;gBACxD,8BAAC,4BAAkB,IAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,yBAAS,CAAC,IAAI,GAAI,CAClF,CACT;YACD,uCAAK,SAAS,EAAC,mBAAmB;gBAC9B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D;wBACK,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;wBAAG,KAAK,GAAG,CAAC,CACrC,CACN,CACL;YACN,uCAAK,SAAS,EAAC,sBAAsB;gBACjC,8BAAC,cAAI,IAAC,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,IAAI,CAAC;oBAChC,8CAAS,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,GAAG,IAAI,CAAU,CACpC,CACL;YACN,uCAAK,SAAS,EAAC,sBAAsB;gBACjC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CACR,CACL;YACN,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAC9B;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACvD,GAAG,CAAC,cAAc,EAAE,CAClB,CACL;YACN,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAChC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACvD,GAAG,CAAC,gBAAgB,EAAE,CACpB,CACL;YACN,uCAAK,SAAS,EAAC,8BAA8B;gBACzC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C;oBACG,sBAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpF,YAAY,CAAC,CAAC,CAAC,sBAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC5G,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,cAAc,EAAC,CAAC,CAAC,sBAAY,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC5I;qBACI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACxB,IAAI,CAAC,IAAI,CAAC,CACZ,CACL;YACN,uCAAK,SAAS,EAAC,+CAA+C;gBAC1D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;oBAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;oBAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACvD;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,6BAA6B,CAAC,IAAI,CAAC,CAAY,CAC7D,CACL;YACL,YAAY,IAAI,CACb,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAChC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC,IACzD,GAAG,CAAC,YAAY,EAAE,CAChB,CACL,CACT;YACA,IAAI,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,EAAE,IAAG,CAAC,IAAI,CACrC,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC1B;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,wCAAM,SAAS,EAAC,kBAAkB,QAAS;oBAC3C,8BAAC,kBAAQ,QAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,EAAE,CAAY,CAC5C,CACL,CACT;YACD,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CACnC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,UAAU,CAAY,CAC9B,CACL;YACL,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,IAAI;YAC9B,oGAAoG;YACpG,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,EAAE,CAAC,CACxE;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,OAAO,CAAY,CAC3B,CACL,CACT;YACA,CAAC,CAAC,QAAQ,IAAI,CACX,uCAAK,SAAS,EAAC,6BAA6B;gBACxC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CACpC;gBACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC;oBAC1D,8BAAC,kBAAQ,QAAE,QAAQ,CAAY,CAC5B,CACL,CACT;YACD,uCAAK,SAAS,EAAC,uDAAuD;gBACjE,UAAU,CAAC,CAAC,CAAC,CACV,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC;oBACtC;wBACI,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,MAAM,EAAC,OAAO,QAAC,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACzG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,CACT,CACA,CACb,CAAC,CAAC,CAAC,CACA,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;oBAC7D;wBACI,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,MAAM,EAAC,OAAO,QAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACjG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAClB,CACT,CACA,CACb;gBAED,wCAAM,SAAS,EAAC,sCAAsC,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,aAAK,CAAC,SAAS,EAAE,QAEjF;gBACP,8BAAC,iBAAO,IAAC,KAAK,EAAE,UAAU;oBACtB;wBACI,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,MAAM,EAAC,OAAO,QAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IACzH,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,CACT,CACA,CACR,CACJ,CACP,CACN,CAAC;AACN,CAAC;AAhMD,mCAgMC","sourcesContent":["import { BasketContext, FullPageEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { getFilteredBookingRateFees } from '@roomstay/core';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport LineBreak from '@/components/generic/LineBreak';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow from '@/models/BasketRow';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\n\ninterface BESummaryRoomRowProps {\n index: number;\n row: BasketRow;\n showImages: boolean;\n\n onEditPropertyClicked?: () => void;\n}\n\nexport default function BESummaryRoomRow(props: BESummaryRoomRowProps) {\n const basketContext = useContext(BasketContext);\n const { currentStep } = useContext(FullPageEngineContext);\n const { isAccent2ColorDark, hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { showChildren } = useSearchScopeHook();\n\n const { index, row, showImages } = props;\n\n const totalPrice = row.getTotalPrice(true);\n const rate = row.getRate();\n\n const isSelected = basketContext.selectedBasketRow?.getID() === row.getID();\n const isOnlyRate = basketContext.currentBasketRows.length === 1;\n\n const removeRate = t(isOnlyRate ? Translation.Step.Room.Summary.NoRemoveLastRate : Translation.Step.Room.Summary.RemoveThisRate);\n\n const rowFees = row.getRate()?.getTotalFees();\n const rowTaxes = row.getRate()?.getTotalTaxes();\n const rowItemisedFees = hotel && row.getRate()?.getItemisedFees(getFilteredBookingRateFees(hotel.fees ?? []));\n\n const cancelEditBasketRowOnClick = () => basketContext.clearSelectedRates(); //Set the selected basket row to null, ensuring that no row is selected for editing.\n const editOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.selectBasketRow(row);\n\n if (props.onEditPropertyClicked) {\n props.onEditPropertyClicked();\n }\n };\n const removeOnClickHandler = () => {\n if (currentStep !== getStepRoom()) {\n navigate(getStepRoom().getStepUrl());\n }\n basketContext.removeBasketRow(row);\n };\n\n const promoApplied = row.isPromoCodeValid();\n\n const shouldTextBeWhite = isAccent2ColorDark && isSelected;\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n return (\n <>\n {index >= 1 && <LineBreak noMargins darker />}\n <div key={row.getID()} className={'booking-engine-summary--row' + (isSelected ? ' --selected' : '')}>\n {showImages && (\n <div className=\"u-border-rounded\" style={{ height: '190px' }}>\n <ImageGallerySlider images={row.getRoom().getImages()} imageSize={ImageSize.Tiny} />\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)}>\n <strong>\n {t(Translation.Step.Date.Room)} {index + 1}\n </strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text color={textWhiteOr(Color.Navy)}>\n <strong>{rate?.getRoom().name}</strong>\n </Text>\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {rate?.name}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Arrival)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getArrivalDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.Departure)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.Accent)}>\n {row.getDepartureDate()}\n </Text>\n </div>\n <div className=\"u-marg-bottom--medium u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {[\n StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t),\n showChildren ? StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t) : null,\n hotel?.childConfiguration?.supportInfants ? StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t) : null,\n ]\n .filter((item) => !!item)\n .join(`, `)}\n </Text>\n </div>\n <div className=\"u-marg-top--light u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Misc.Rates)} ({t(Translation.Misc.PerNight)})\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rate?.getAveragePriceBeforeDiscount(true)}</Currency>\n </Text>\n </div>\n {promoApplied && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Date.PromoCode)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n {row.getPromoCode()}\n </Text>\n </div>\n )}\n {rate && rate?.getTotalDiscount() > 0 && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Misc.Discount)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <span className=\"u-ellip-overflow\">-</span>\n <Currency>{rate?.getTotalDiscount()}</Currency>\n </Text>\n </div>\n )}\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.General.RoomTotal)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{totalPrice}</Currency>\n </Text>\n </div>\n {!!rowFees && !rowItemisedFees && (\n // Only show fees if we don't have itemised fees. If we have itemised fees they will be shown later.\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Fees, { context: hotel?.languageContext })}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowFees}</Currency>\n </Text>\n </div>\n )}\n {!!rowTaxes && (\n <div className=\"u-marg-bottom--light u-flex\">\n <Text type={TextType.Small} color={textWhiteOr()}>\n {t(Translation.Step.Room.Summary.Taxes)}\n </Text>\n <Text type={TextType.Small} color={textWhiteOr(Color.DarkGrey)}>\n <Currency>{rowTaxes}</Currency>\n </Text>\n </div>\n )}\n <div className=\"u-marg-top u-marg-bottom u-flex justify-content-start\">\n {isSelected ? (\n <Tooltip title={t(Translation.Misc.Cancel)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={cancelEditBasketRowOnClick} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </Tooltip>\n ) : (\n <Tooltip title={t(Translation.Step.Confirmation.EditThisProperty)}>\n <div>\n <BEButton isText size=\"tiny\" primary onClick={editOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Edit)}\n </BEButton>\n </div>\n </Tooltip>\n )}\n\n <span className=\"u-pad-left--light u-pad-right--light\" style={{ color: Color.LightGrey }}>\n |\n </span>\n <Tooltip title={removeRate}>\n <div>\n <BEButton isText size=\"tiny\" primary disabled={isOnlyRate} onClick={removeOnClickHandler} textColor={textWhiteOr(Color.Accent)}>\n {t(Translation.Misc.Remove)}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n </div>\n </>\n );\n}\n"]}
@@ -244,6 +244,8 @@ function BasketContextWrapper(props) {
244
244
  queryParameters[AppQueryParameters_1.EAppQueryParameters.Children] = row.getChildren().toString();
245
245
  if (row.getAdults() !== undefined)
246
246
  queryParameters[AppQueryParameters_1.EAppQueryParameters.Adults] = row.getAdults().toString();
247
+ if (row.getRoomCode() !== '')
248
+ queryParameters[AppQueryParameters_1.EAppQueryParameters.Room] = row.getRoomCode();
247
249
  updateQueryParams(queryParameters);
248
250
  };
249
251
  const updateBasketRow = (row, updateGlobalDates = true) => {
@@ -280,6 +282,16 @@ function BasketContextWrapper(props) {
280
282
  return (0, rxjs_1.timer)(scalingDuration);
281
283
  }), (0, operators_1.finalize)(() => console.log('We are done!')));
282
284
  };
285
+ const getTotalQuoteDepositFees = () => {
286
+ //Retrieves the total quote deposit's fees
287
+ const totalQuoteFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
288
+ return totalQuoteFees;
289
+ };
290
+ const getTotalQuoteFullPaymentFees = () => {
291
+ //Retrieves the total quote full payment's fees
292
+ const totalQuoteFullPaymentFees = returnAggregationAndTranslation((row) => row.quoteDetails ? row.quoteDetails.fullPaymentAmount - row.quoteDetails.totalRate : 0);
293
+ return totalQuoteFullPaymentFees;
294
+ };
283
295
  const updateBasketFeeRows = () => {
284
296
  var _a, _b;
285
297
  const validBasketRows = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows.filter((row) => row.isValid());
@@ -409,7 +421,8 @@ function BasketContextWrapper(props) {
409
421
  setBasketFeeRows(newFees);
410
422
  };
411
423
  const quoteQueryID = (0, react_1.useMemo)(() => {
412
- if (!hotel || !(hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
424
+ const requireQuote = (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) || (hotel === null || hotel === void 0 ? void 0 : hotel.bookingFlow) !== core_1.EBookingFlow.Default;
425
+ if (!hotel || !requireQuote) {
413
426
  return '';
414
427
  }
415
428
  return BookingAPI_1.default.Reservation.buildQuoteQueryID(currentBasketRows, isExternalMemberHotel ? memberNumber : undefined);
@@ -644,13 +657,33 @@ function BasketContextWrapper(props) {
644
657
  getNumberOfRooms: (withTranslation = false) => {
645
658
  return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation_1.Translation.Step.Date.Room : undefined);
646
659
  },
660
+ /**
661
+ * Calculates the total booking price, including:
662
+ * - Nightly rates
663
+ * - Deposit fees
664
+ * - Add-ons
665
+ *
666
+ * @returns {number} The total booking price.
667
+ */
647
668
  getTotalPrice: () => {
648
- let totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice() : 0); });
649
- // If the hotel requires a deposit, and enableCreditCardSurchase is false, we need to add the deposit fees to the total price.
650
- if ((hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) && !(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge) && (hotel === null || hotel === void 0 ? void 0 : hotel.addDepositFeeToBookingTotal)) {
651
- const depositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
652
- totalPrice += depositFees;
669
+ let totalPrice = 0;
670
+ if (!!(hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
671
+ // If deposit is required, get the total price from quote details
672
+ totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalRate : 0); });
673
+ // Add deposit fees if credit card surcharge is disabled
674
+ if (!(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge)) {
675
+ // **Previous logic**: totalPrice = total Base rate + Fees on Deposit amount
676
+ // const totalQuoteFees = getTotalQuoteDepositFees();
677
+ // totalPrice += totalQuoteFees;
678
+ // **Updated logic**: totalPrice = total Base rate + its fees
679
+ totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.fullPaymentAmount : 0); });
680
+ }
681
+ }
682
+ else {
683
+ // Otherwise, calculate the total price from valid rows
684
+ totalPrice = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice() : 0); });
653
685
  }
686
+ // Add prices from any additional add-ons in the booking basket
654
687
  basketAddonRows.forEach((row) => {
655
688
  totalPrice += row.getTotalPrice();
656
689
  });
@@ -660,6 +693,11 @@ function BasketContextWrapper(props) {
660
693
  });
661
694
  return totalPrice;
662
695
  },
696
+ /**
697
+ * Returns the total quote deposit amount, excluding fees.
698
+ *
699
+ * @returns {number} The sum of the quote deposit.
700
+ */
663
701
  getTotalDeposit: () => {
664
702
  const totalDeposit = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalDeposit : 0); });
665
703
  return totalDeposit;
@@ -672,7 +710,7 @@ function BasketContextWrapper(props) {
672
710
  let totalFees = returnAggregationAndTranslation((row) => { var _a; return (row.isValid() ? (_a = row.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalFees() : 0); });
673
711
  if (totalFees == 0 && (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
674
712
  // Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.
675
- totalFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
713
+ totalFees = getTotalQuoteFullPaymentFees();
676
714
  }
677
715
  basketAddonRows.forEach((row) => {
678
716
  totalFees += row.getTotalFees();
@@ -711,12 +749,26 @@ function BasketContextWrapper(props) {
711
749
  const fees = (0, Fee_1.feeMapToArray)(feeMap);
712
750
  return (0, Fee_1.sortFees)(fees, (hotel === null || hotel === void 0 ? void 0 : hotel.fees) || []);
713
751
  },
752
+ /**
753
+ * Calculates the total amount to be paid immediately, including:
754
+ * - Required deposit
755
+ * - Deposit fees (if applicable)
756
+ * - Add-ons
757
+ *
758
+ * @returns {number} The total amount to pay now.
759
+ */
714
760
  getTotalPayNow: () => {
715
- if (hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) {
716
- const depositFees = returnAggregationAndTranslation((row) => { var _a; return (row.quoteDetails ? (_a = row.quoteDetails) === null || _a === void 0 ? void 0 : _a.totalFees : 0); });
717
- return workingContext.getTotalDeposit() + depositFees;
761
+ let totalDeposit = workingContext.getTotalDeposit();
762
+ if (!!(hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit) && !(hotel === null || hotel === void 0 ? void 0 : hotel.enableCreditCardSurcharge)) {
763
+ // Add deposit fees if credit card surcharge is disabled
764
+ const totalDepositFees = getTotalQuoteDepositFees();
765
+ totalDeposit += totalDepositFees;
718
766
  }
719
- return workingContext.getTotalPrice();
767
+ // Add prices from any additional add-ons in the booking basket
768
+ basketAddonRows.forEach((row) => {
769
+ totalDeposit += row.getTotalPrice();
770
+ });
771
+ return totalDeposit;
720
772
  },
721
773
  /**
722
774
  * Pops the provided row from the current basket array