@roomstay/frontend 2.6.12 → 2.6.13

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 (55) hide show
  1. package/dist/151.bundle.js +1 -1
  2. package/dist/166.bundle.js +1 -1
  3. package/dist/201.bundle.js +1 -1
  4. package/dist/279.bundle.js +1 -1
  5. package/dist/370.bundle.js +1 -1
  6. package/dist/446.bundle.js +1 -1
  7. package/dist/449.bundle.js +1 -1
  8. package/dist/457.bundle.js +1 -1
  9. package/dist/468.bundle.js +1 -1
  10. package/dist/535.bundle.js +1 -1
  11. package/dist/619.bundle.js +1 -1
  12. package/dist/625.bundle.js +1 -1
  13. package/dist/686.bundle.js +1 -1
  14. package/dist/736.bundle.js +1 -1
  15. package/dist/815.bundle.js +1 -1
  16. package/dist/850.bundle.js +1 -1
  17. package/dist/855.bundle.js +1 -1
  18. package/dist/873.bundle.js +1 -1
  19. package/dist/903.bundle.js +1 -1
  20. package/dist/972.bundle.js +1 -1
  21. package/dist/main.bundle.js +1 -1
  22. package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.d.ts +8 -0
  23. package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js +193 -0
  24. package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js.map +1 -0
  25. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.d.ts +1 -0
  26. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js +1 -1
  27. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js.map +1 -1
  28. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js +5 -0
  29. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js.map +1 -1
  30. package/dist/src/index.d.ts +1 -0
  31. package/dist/src/index.js +4 -2
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/providers/FeatureProvider.js +2 -0
  34. package/dist/src/providers/FeatureProvider.js.map +1 -1
  35. package/dist/src/providers/LanguageProvider.js +8 -4
  36. package/dist/src/providers/LanguageProvider.js.map +1 -1
  37. package/dist/src/providers/feature/RoomRateReadMoreVersionFeature.d.ts +10 -0
  38. package/dist/src/providers/feature/RoomRateReadMoreVersionFeature.js +20 -0
  39. package/dist/src/providers/feature/RoomRateReadMoreVersionFeature.js.map +1 -0
  40. package/dist/src/translations/Translation.d.ts +1 -0
  41. package/dist/src/translations/Translation.js +1 -0
  42. package/dist/src/translations/Translation.js.map +1 -1
  43. package/dist/src/translations/languages/en-gb.js +1 -0
  44. package/dist/src/translations/languages/en-gb.js.map +1 -1
  45. package/dist/src/translations/languages/es.js +1 -2
  46. package/dist/src/translations/languages/es.js.map +1 -1
  47. package/dist/src/translations/languages/fr.js +1 -2
  48. package/dist/src/translations/languages/fr.js.map +1 -1
  49. package/dist/src/translations/languages/zh-cn.js +1 -2
  50. package/dist/src/translations/languages/zh-cn.js.map +1 -1
  51. package/dist/src/translations/languages/zh-tw.js +1 -2
  52. package/dist/src/translations/languages/zh-tw.js.map +1 -1
  53. package/dist/test.bundle.js +1 -1
  54. package/dist/vendors.bundle.js +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ import { RoomRate } from '../../../../../models/Room/RoomRate';
2
+ export interface RoomRateRowProps {
3
+ rate: RoomRate;
4
+ getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;
5
+ onAddToBasketOverride?: (rate: RoomRate) => void;
6
+ isPromoRate?: boolean;
7
+ }
8
+ export default function ReadMoreRoomRateRow(props: RoomRateRowProps): JSX.Element;
@@ -0,0 +1,193 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const contexts_1 = require("../../../../../contexts/index.js");
30
+ const hooks_1 = require("../../../../../hooks/index.js");
31
+ const classnames_1 = __importDefault(require("classnames"));
32
+ const react_1 = __importStar(require("react"));
33
+ const react_i18next_1 = require("react-i18next");
34
+ const Translation_1 = require("translations/Translation");
35
+ const BEButton_1 = __importDefault(require("../../../../generic/BEButton"));
36
+ const Icon_1 = require("../../../../generic/Icon/Icon");
37
+ const Pill_1 = __importStar(require("../../../../generic/Pill"));
38
+ const PlanpayPrice_1 = require("../../../../generic/PlanpayPrice/PlanpayPrice");
39
+ const Text_1 = __importStar(require("../../../../generic/Text"));
40
+ const RoomDetailsPriceBlock_1 = __importDefault(require("../RoomDetailsPriceBlock"));
41
+ const BookNowButton_1 = __importDefault(require("./BookNowButton"));
42
+ const RoomRateDetailsAndPriceBreakdownModal_1 = __importStar(require("./RoomRateDetailsAndPriceBreakdownModal"));
43
+ const RoomRatePills_1 = __importDefault(require("./RoomRatePills"));
44
+ const Currency_1 = __importDefault(require("../../../../../hooks/Currency"));
45
+ const Planpay_1 = __importDefault(require("../../../../../hooks/Planpay"));
46
+ const RoomRate_1 = require("../../../../../models/Room/RoomRate");
47
+ const RoomRateReadMoreVersionFeature_1 = __importDefault(require("../../../../../providers/feature/RoomRateReadMoreVersionFeature"));
48
+ const Color_1 = require("../../../../../util/Color");
49
+ const DataLayer_1 = __importStar(require("../../../../../util/DataLayer"));
50
+ const TextAlignment_1 = require("../../../../../util/TextAlignment");
51
+ const ReadMoreRoomRateRow_module_scss_1 = __importDefault(require("./ReadMoreRoomRateRow.module.scss"));
52
+ function ReadMoreRoomRateRow(props) {
53
+ var _a, _b, _c;
54
+ const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
55
+ const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
56
+ const [viewingModal, setViewingModal] = (0, react_1.useState)({
57
+ open: false,
58
+ currentTab: RoomRateDetailsAndPriceBreakdownModal_1.RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails,
59
+ });
60
+ const [requireReadMore, setRequireReadMore] = (0, react_1.useState)(false);
61
+ const [readMoreOpened, setReadMoreOpened] = (0, react_1.useState)(false);
62
+ const [targetOpenHeight, setTargetOpenHeight] = (0, react_1.useState)(0);
63
+ const innerDescRef = (0, react_1.useRef)(null);
64
+ const outerDescRef = (0, react_1.useRef)(null);
65
+ const { t } = (0, react_i18next_1.useTranslation)();
66
+ const { isAccent2ColorDark } = (0, hooks_1.useCurrentHotel)();
67
+ const { rate } = props;
68
+ const selectedRow = basketContext.selectedBasketRow;
69
+ const isRoomSelectedAndEditing = selectedRow === null || selectedRow === void 0 ? void 0 : selectedRow.isValid();
70
+ const isThisSelectedRow = selectedRow && rate.name === ((_a = selectedRow.getRate()) === null || _a === void 0 ? void 0 : _a.name) && ((_b = rate.getRoom()) === null || _b === void 0 ? void 0 : _b.name) === ((_c = selectedRow.getRoom()) === null || _c === void 0 ? void 0 : _c.name);
71
+ const currentRow = (0, react_1.useRef)(null);
72
+ const classes = (0, classnames_1.default)('room-info', {
73
+ '--default': !rate.isMemberOnly,
74
+ '--locked': rate.isMemberOnly,
75
+ '--current': isThisSelectedRow && isRoomSelectedAndEditing,
76
+ '--is-promo': props.isPromoRate,
77
+ });
78
+ let isLocked = false;
79
+ if (rate.isMemberOnly && !ccx.signedInUser) {
80
+ isLocked = true;
81
+ }
82
+ (0, react_1.useEffect)(() => {
83
+ let isCancelled = false;
84
+ const onResize = () => {
85
+ if (!isCancelled && innerDescRef.current && outerDescRef.current) {
86
+ const innerBoundiugRect = innerDescRef.current.getBoundingClientRect();
87
+ const outerBoundingRect = outerDescRef.current.getBoundingClientRect();
88
+ setRequireReadMore(innerBoundiugRect.height > outerBoundingRect.height);
89
+ setTargetOpenHeight(innerBoundiugRect.height);
90
+ }
91
+ };
92
+ onResize();
93
+ window.addEventListener('resize', onResize);
94
+ return () => {
95
+ isCancelled = true;
96
+ window.removeEventListener('resize', onResize);
97
+ };
98
+ }, [innerDescRef, outerDescRef]);
99
+ (0, react_1.useEffect)(() => {
100
+ if (!isLocked) {
101
+ DataLayer_1.default.instance.addRoomRateImpression(rate.getRoom(), rate);
102
+ }
103
+ }, [isThisSelectedRow]);
104
+ const openTab = (tab) => {
105
+ setViewingModal({ open: true, currentTab: tab });
106
+ };
107
+ let bookNowLabel = '';
108
+ if (props.getButtonLabel) {
109
+ bookNowLabel = props.getButtonLabel(isRoomSelectedAndEditing, isThisSelectedRow);
110
+ }
111
+ else {
112
+ if (isRoomSelectedAndEditing) {
113
+ bookNowLabel = isThisSelectedRow ? t(Translation_1.Translation.Step.Room.RoomInfo.Selected) : (bookNowLabel = t(Translation_1.Translation.Step.Room.RoomInfo.Update));
114
+ }
115
+ else {
116
+ bookNowLabel = t(Translation_1.Translation.Misc.BookNow);
117
+ }
118
+ }
119
+ const openMemberSignupModalOnClick = () => {
120
+ DataLayer_1.default.instance.sendInteraction('Member Signup Modal', DataLayer_1.InteractionType.LINK, DataLayer_1.InteractionStep.ROOMS);
121
+ ccx.openMemberSignupModal();
122
+ };
123
+ const rateDetailsOnClick = () => {
124
+ setReadMoreOpened((opened) => {
125
+ return !opened;
126
+ });
127
+ };
128
+ const updateModalOnClose = () => {
129
+ setViewingModal((old) => {
130
+ old.open = false;
131
+ return Object.assign({}, old);
132
+ });
133
+ };
134
+ const openTabOnClick = () => {
135
+ DataLayer_1.default.instance.sendInteraction('Rate Breakdown', DataLayer_1.InteractionType.LINK, DataLayer_1.InteractionStep.ROOMS);
136
+ openTab(RoomRateDetailsAndPriceBreakdownModal_1.RoomRateDetailsAndPriceBreakdownModalTabs.PriceBreakdown);
137
+ };
138
+ const shouldTextBeWhite = isAccent2ColorDark && ((isThisSelectedRow && isRoomSelectedAndEditing) || props.isPromoRate);
139
+ const textWhiteOr = (color = Color_1.Color.Graphite) => {
140
+ return shouldTextBeWhite ? Color_1.Color.White : color;
141
+ };
142
+ const { value: price, isLoading } = (0, Currency_1.default)({
143
+ disableLoading: true,
144
+ hideDecimals: true,
145
+ children: rate.getAveragePrice(true),
146
+ });
147
+ const { hasPricePreview } = (0, Planpay_1.default)();
148
+ const outerDescriptionClassList = (0, classnames_1.default)({
149
+ [ReadMoreRoomRateRow_module_scss_1.default.descriptionTextOuter]: true,
150
+ 'text-small': true,
151
+ [ReadMoreRoomRateRow_module_scss_1.default.requireReadMore]: requireReadMore,
152
+ [ReadMoreRoomRateRow_module_scss_1.default.revealReadMore]: readMoreOpened,
153
+ });
154
+ return (react_1.default.createElement("div", { className: classes, ref: currentRow },
155
+ react_1.default.createElement("div", { className: "row" },
156
+ react_1.default.createElement("div", { className: (0, classnames_1.default)({
157
+ 'col-lg-6': hasPricePreview,
158
+ 'col-lg-8': !hasPricePreview,
159
+ }) },
160
+ react_1.default.createElement("div", { className: "u-flex flex-column h-100" },
161
+ react_1.default.createElement("div", null,
162
+ react_1.default.createElement("div", { className: "u-marg-bottom-half" }, isLocked ? (react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body, color: Color_1.Color.Success },
163
+ react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.RoomInfo.MemberOnlyDeal)))) : (react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body, color: textWhiteOr(), bold: true }, rate.name))),
164
+ react_1.default.createElement("div", { className: outerDescriptionClassList, style: {
165
+ color: textWhiteOr(),
166
+ ['--maxLines']: RoomRateReadMoreVersionFeature_1.default.getMaxLines(),
167
+ ['--lineHeight']: targetOpenHeight + 'px',
168
+ }, ref: outerDescRef },
169
+ react_1.default.createElement("div", { className: ReadMoreRoomRateRow_module_scss_1.default.descriptionTextInner, dangerouslySetInnerHTML: { __html: isLocked ? t(Translation_1.Translation.Step.Room.RoomInfo.DealForMemberOnly) : rate.description }, ref: innerDescRef })),
170
+ isLocked && (react_1.default.createElement("div", { className: "u-marg" },
171
+ react_1.default.createElement("span", { onClick: openMemberSignupModalOnClick },
172
+ react_1.default.createElement(Pill_1.default, { icon: Icon_1.IconType.Money, type: Pill_1.PillType.Success }, t(Translation_1.Translation.Step.Room.RoomInfo.SignUpToSee)))))),
173
+ react_1.default.createElement("div", { className: "u-flex justify-content-start u-marg-bottom u-marg-top-bottom@l-" },
174
+ requireReadMore && (react_1.default.createElement("div", { className: "u-marg-right u-inline-flex" },
175
+ react_1.default.createElement(BEButton_1.default, { icon: Icon_1.IconType.ArrowRight2, isText: true, primary: true, size: "small", iconPosition: "right", onClick: rateDetailsOnClick, textColor: textWhiteOr(Color_1.Color.Accent) }, readMoreOpened ? t(Translation_1.Translation.Step.Room.ReadLess) : t(Translation_1.Translation.Step.Room.ReadMore)))),
176
+ react_1.default.createElement(BEButton_1.default, { icon: Icon_1.IconType.ArrowRight2, isText: true, textColor: textWhiteOr(Color_1.Color.Navy), size: "small", iconPosition: "right", onClick: openTabOnClick, disabled: isLocked }, t(Translation_1.Translation.Step.Room.RoomInfo.ViewPriceBreakdown))),
177
+ react_1.default.createElement(RoomRatePills_1.default, { noMargin: true, rate: props.rate }))),
178
+ react_1.default.createElement("div", { className: (0, classnames_1.default)({
179
+ 'col-lg-6': hasPricePreview,
180
+ 'col-lg-4': !hasPricePreview,
181
+ }, 'u-flex flex-column align-items-start align-items-md-start align-items-lg-end justify-content-start') },
182
+ react_1.default.createElement("div", { className: "u-flex flex-column align-items-start align-items-lg-end" },
183
+ react_1.default.createElement(RoomDetailsPriceBlock_1.default, { isLocked: isLocked, averagePreDiscount: rate.getAveragePriceBeforeDiscount(true), averagePrice: rate.getAveragePrice(true), isMemberOnly: props.rate.isMemberOnly, useLightText: shouldTextBeWhite }),
184
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Label, color: textWhiteOr(Color_1.Color.DarkGrey), align: TextAlignment_1.TextAlign.Right }, rate.getPriceType() === RoomRate_1.RoomRatePriceInclusion.IncludingFeesAndTaxes
185
+ ? t(Translation_1.Translation.Step.Room.RoomInfo.IncludesTaxes)
186
+ : t(Translation_1.Translation.Step.Room.ExcludingTaxes))),
187
+ !isLoading && hasPricePreview ? (react_1.default.createElement("div", { className: "u-marg-top--light" },
188
+ react_1.default.createElement(PlanpayPrice_1.PlanpayPrice, { price: price, checkin: ((selectedRow === null || selectedRow === void 0 ? void 0 : selectedRow.getStartDate()) || basketContext.endDate).format('YYYY-MM-DD'), currency: ccx.currentCurrency }))) : null,
189
+ react_1.default.createElement("div", { className: "u-marg-top--light" }, isLocked ? (react_1.default.createElement(BEButton_1.default, { filled: true, success: true, wide: true, onClick: openMemberSignupModalOnClick }, t(Translation_1.Translation.Step.Room.RoomInfo.RevealPrice))) : (react_1.default.createElement(BookNowButton_1.default, { rate: rate, buttonLabel: bookNowLabel, onAddToBasketOverride: props.onAddToBasketOverride, isFilled: !isThisSelectedRow }))))),
190
+ react_1.default.createElement(RoomRateDetailsAndPriceBreakdownModal_1.default, { isOpen: viewingModal.open, currentTab: viewingModal.currentTab, rate: props.rate, getButtonLabel: props.getButtonLabel, onAddToBasketOverride: props.onAddToBasketOverride, onClose: updateModalOnClose })));
191
+ }
192
+ exports.default = ReadMoreRoomRateRow;
193
+ //# sourceMappingURL=ReadMoreRoomRateRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadMoreRoomRateRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmE;AACnE,2CAAkD;AAClD,4DAAoC;AACpC,+CAAuE;AACvE,iDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,yDAA0D;AAC1D,kEAA2D;AAC3D,iFAA8E;AAC9E,kEAA2D;AAC3D,sHAA8F;AAC9F,gHAAwF;AACxF,6JAE6F;AAC7F,gHAAwF;AACxF,gEAA2C;AAC3C,8DAAyC;AACzC,qDAA0E;AAC1E,wHAAgG;AAChG,wCAAqC;AACrC,8DAA+E;AAC/E,wDAAiD;AAEjD,wGAAuD;AAWvD,SAAwB,mBAAmB,CAAC,KAAuB;;IAC/D,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC;QAC7C,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,iFAAyC,CAAC,WAAW;KACpE,CAAC,CAAC;IAEH,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAE5D,MAAM,YAAY,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAElD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEjD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACvB,MAAM,WAAW,GAAG,aAAa,CAAC,iBAAiB,CAAC;IACpD,MAAM,wBAAwB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE,CAAC;IAExD,MAAM,iBAAiB,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,MAAK,MAAA,WAAW,CAAC,OAAO,EAAE,0CAAE,IAAI,CAAA,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,EAAE,0CAAE,IAAI,OAAK,MAAA,WAAW,CAAC,OAAO,EAAE,0CAAE,IAAI,CAAA,CAAC;IAE3I,MAAM,UAAU,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,WAAW,EAAE;QACpC,WAAW,EAAE,CAAC,IAAI,CAAC,YAAY;QAC/B,UAAU,EAAE,IAAI,CAAC,YAAY;QAC7B,WAAW,EAAE,iBAAiB,IAAI,wBAAwB;QAC1D,YAAY,EAAE,KAAK,CAAC,WAAW;KAClC,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACxC,QAAQ,GAAG,IAAI,CAAC;KACnB;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE;gBAC9D,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACvE,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBAEvE,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACxE,mBAAmB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;aACjD;QACL,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE;YACR,WAAW,GAAG,IAAI,CAAC;YAEnB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,EAAE;YACX,mBAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;SAClE;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,CAAC,GAA8C,EAAE,EAAE;QAC/D,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,KAAK,CAAC,cAAc,EAAE;QACtB,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,CAAC;KACpF;SAAM;QACH,IAAI,wBAAwB,EAAE;YAC1B,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;SAC7I;aAAM;YACH,YAAY,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC9C;KACJ;IAED,MAAM,4BAA4B,GAAG,GAAG,EAAE;QACtC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,qBAAqB,EAAE,2BAAe,CAAC,IAAI,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACvG,GAAG,CAAC,qBAAqB,EAAE,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,iBAAiB,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,OAAO,CAAC,MAAM,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,eAAe,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;YACjB,yBAAY,GAAG,EAAG;QACtB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,2BAAe,CAAC,IAAI,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAClG,OAAO,CAAC,iFAAyC,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,kBAAkB,IAAI,CAAC,CAAC,iBAAiB,IAAI,wBAAwB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IACvH,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,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAA,kBAAW,EAAC;QAC5C,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC;IACH,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,iBAAU,GAAE,CAAC;IAEzC,MAAM,yBAAyB,GAAG,IAAA,oBAAU,EAAC;QACzC,CAAC,yCAAM,CAAC,oBAAoB,CAAC,EAAE,IAAI;QACnC,YAAY,EAAE,IAAI;QAClB,CAAC,yCAAM,CAAC,eAAe,CAAC,EAAE,eAAe;QACzC,CAAC,yCAAM,CAAC,cAAc,CAAC,EAAE,cAAc;KAC1C,CAAC,CAAC;IAEH,OAAO,CACH,uCAAK,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU;QACpC,uCAAK,SAAS,EAAC,KAAK;YAChB,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC;oBAClB,UAAU,EAAE,eAAe;oBAC3B,UAAU,EAAE,CAAC,eAAe;iBAC/B,CAAC;gBAEF,uCAAK,SAAS,EAAC,0BAA0B;oBACrC;wBACI,uCAAK,SAAS,EAAC,oBAAoB,IAC9B,QAAQ,CAAC,CAAC,CAAC,CACR,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,aAAK,CAAC,OAAO;4BAC3C,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAU,CAChE,CACV,CAAC,CAAC,CAAC,CACA,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,UAChD,IAAI,CAAC,IAAI,CACP,CACV,CACC;wBACN,uCACI,SAAS,EAAE,yBAAyB,EACpC,KAAK,EAAE;gCACH,KAAK,EAAE,WAAW,EAAE;gCACpB,CAAC,YAAmB,CAAC,EAAE,wCAA8B,CAAC,WAAW,EAAE;gCACnE,CAAC,cAAqB,CAAC,EAAE,gBAAgB,GAAG,IAAI;6BACnD,EACD,GAAG,EAAE,YAAY;4BAEjB,uCACI,SAAS,EAAE,yCAAM,CAAC,oBAAoB,EACtC,uBAAuB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EACtH,GAAG,EAAE,YAAY,GACnB,CACA;wBACL,QAAQ,IAAI,CACT,uCAAK,SAAS,EAAC,QAAQ;4BACnB,wCAAM,OAAO,EAAE,4BAA4B;gCACvC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,eAAQ,CAAC,OAAO,IAC7C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC3C,CACJ,CACL,CACT,CACC;oBACN,uCAAK,SAAS,EAAC,iEAAiE;wBAC3E,eAAe,IAAI,CAChB,uCAAK,SAAS,EAAC,4BAA4B;4BACvC,8BAAC,kBAAQ,IACL,IAAI,EAAE,eAAQ,CAAC,WAAW,EAC1B,MAAM,QACN,OAAO,QACP,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,OAAO,EACpB,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,MAAM,CAAC,IAEnC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAChF,CACT,CACT;wBACD,8BAAC,kBAAQ,IACL,IAAI,EAAE,eAAQ,CAAC,WAAW,EAC1B,MAAM,QACN,SAAS,EAAE,WAAW,CAAC,aAAK,CAAC,IAAI,CAAC,EAClC,IAAI,EAAC,OAAO,EACZ,YAAY,EAAC,OAAO,EACpB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,QAAQ,IAEjB,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAC9C,CACT;oBACN,8BAAC,uBAAa,IAAC,QAAQ,QAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAI,CAC1C,CACJ;YACN,uCACI,SAAS,EAAE,IAAA,oBAAU,EACjB;oBACI,UAAU,EAAE,eAAe;oBAC3B,UAAU,EAAE,CAAC,eAAe;iBAC/B,EACD,oGAAoG,CACvG;gBAED,uCAAK,SAAS,EAAC,yDAAyD;oBACpE,8BAAC,+BAAqB,IAClB,QAAQ,EAAE,QAAQ,EAClB,kBAAkB,EAAE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAC5D,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EACxC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EACrC,YAAY,EAAE,iBAAiB,GACjC;oBACF,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,aAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK,IACjF,IAAI,CAAC,YAAY,EAAE,KAAK,iCAAsB,CAAC,qBAAqB;wBACjE,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;wBACjD,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAC1C,CACL;gBACL,CAAC,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,CAC7B,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,8BAAC,2BAAY,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,YAAY,EAAE,KAAI,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,eAAe,GAAI,CACjJ,CACT,CAAC,CAAC,CAAC,IAAI;gBACR,uCAAK,SAAS,EAAC,mBAAmB,IAC7B,QAAQ,CAAC,CAAC,CAAC,CACR,8BAAC,kBAAQ,IAAC,MAAM,QAAC,OAAO,QAAC,IAAI,QAAC,OAAO,EAAE,4BAA4B,IAC9D,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CACvC,CACd,CAAC,CAAC,CAAC,CACA,8BAAC,uBAAa,IAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAAE,QAAQ,EAAE,CAAC,iBAAiB,GAAI,CAC7I,CACC,CACJ,CACJ;QACN,8BAAC,+CAAqC,IAClC,MAAM,EAAE,YAAY,CAAC,IAAI,EACzB,UAAU,EAAE,YAAY,CAAC,UAAU,EACnC,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,EAClD,OAAO,EAAE,kBAAkB,GAC7B,CACA,CACT,CAAC;AACN,CAAC;AA/PD,sCA+PC","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport RoomRateDetailsAndPriceBreakdownModal, {\n RoomRateDetailsAndPriceBreakdownModalTabs,\n} from '@/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { RoomRate, RoomRatePriceInclusion } from '@/models/Room/RoomRate';\nimport RoomRateReadMoreVersionFeature from '@/providers/feature/RoomRateReadMoreVersionFeature';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './ReadMoreRoomRateRow.module.scss';\n\nexport interface RoomRateRowProps {\n rate: RoomRate;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n\n isPromoRate?: boolean;\n}\n\nexport default function ReadMoreRoomRateRow(props: RoomRateRowProps) {\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const [viewingModal, setViewingModal] = useState({\n open: false,\n currentTab: RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails,\n });\n\n const [requireReadMore, setRequireReadMore] = useState(false);\n const [readMoreOpened, setReadMoreOpened] = useState(false);\n\n const [targetOpenHeight, setTargetOpenHeight] = useState(0);\n\n const innerDescRef = useRef<HTMLDivElement>(null);\n const outerDescRef = useRef<HTMLDivElement>(null);\n\n const { t } = useTranslation();\n const { isAccent2ColorDark } = useCurrentHotel();\n\n const { rate } = props;\n const selectedRow = basketContext.selectedBasketRow;\n const isRoomSelectedAndEditing = selectedRow?.isValid();\n\n const isThisSelectedRow = selectedRow && rate.name === selectedRow.getRate()?.name && rate.getRoom()?.name === selectedRow.getRoom()?.name;\n\n const currentRow = useRef<HTMLDivElement | null>(null);\n\n const classes = classNames('room-info', {\n '--default': !rate.isMemberOnly,\n '--locked': rate.isMemberOnly,\n '--current': isThisSelectedRow && isRoomSelectedAndEditing,\n '--is-promo': props.isPromoRate,\n });\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n useEffect(() => {\n let isCancelled = false;\n\n const onResize = () => {\n if (!isCancelled && innerDescRef.current && outerDescRef.current) {\n const innerBoundiugRect = innerDescRef.current.getBoundingClientRect();\n const outerBoundingRect = outerDescRef.current.getBoundingClientRect();\n\n setRequireReadMore(innerBoundiugRect.height > outerBoundingRect.height);\n setTargetOpenHeight(innerBoundiugRect.height);\n }\n };\n\n onResize();\n\n window.addEventListener('resize', onResize);\n\n return () => {\n isCancelled = true;\n\n window.removeEventListener('resize', onResize);\n };\n }, [innerDescRef, outerDescRef]);\n\n useEffect(() => {\n if (!isLocked) {\n DataLayer.instance.addRoomRateImpression(rate.getRoom(), rate);\n }\n }, [isThisSelectedRow]);\n\n const openTab = (tab: RoomRateDetailsAndPriceBreakdownModalTabs) => {\n setViewingModal({ open: true, currentTab: tab });\n };\n\n let bookNowLabel = '';\n if (props.getButtonLabel) {\n bookNowLabel = props.getButtonLabel(isRoomSelectedAndEditing, isThisSelectedRow);\n } else {\n if (isRoomSelectedAndEditing) {\n bookNowLabel = isThisSelectedRow ? t(Translation.Step.Room.RoomInfo.Selected) : (bookNowLabel = t(Translation.Step.Room.RoomInfo.Update));\n } else {\n bookNowLabel = t(Translation.Misc.BookNow);\n }\n }\n\n const openMemberSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const rateDetailsOnClick = () => {\n setReadMoreOpened((opened) => {\n return !opened;\n });\n };\n\n const updateModalOnClose = () => {\n setViewingModal((old) => {\n old.open = false;\n return { ...old };\n });\n };\n\n const openTabOnClick = () => {\n DataLayer.instance.sendInteraction('Rate Breakdown', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.PriceBreakdown);\n };\n\n const shouldTextBeWhite = isAccent2ColorDark && ((isThisSelectedRow && isRoomSelectedAndEditing) || props.isPromoRate);\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n const { value: price, isLoading } = useCurrency({\n disableLoading: true,\n hideDecimals: true,\n children: rate.getAveragePrice(true),\n });\n const { hasPricePreview } = usePlanpay();\n\n const outerDescriptionClassList = classNames({\n [styles.descriptionTextOuter]: true,\n 'text-small': true,\n [styles.requireReadMore]: requireReadMore,\n [styles.revealReadMore]: readMoreOpened,\n });\n\n return (\n <div className={classes} ref={currentRow}>\n <div className=\"row\">\n <div\n className={classNames({\n 'col-lg-6': hasPricePreview,\n 'col-lg-8': !hasPricePreview,\n })}\n >\n <div className=\"u-flex flex-column h-100\">\n <div>\n <div className=\"u-marg-bottom-half\">\n {isLocked ? (\n <Text type={TextType.Body} color={Color.Success}>\n <strong>{t(Translation.Step.Room.RoomInfo.MemberOnlyDeal)}</strong>\n </Text>\n ) : (\n <Text type={TextType.Body} color={textWhiteOr()} bold>\n {rate.name}\n </Text>\n )}\n </div>\n <div\n className={outerDescriptionClassList}\n style={{\n color: textWhiteOr(),\n ['--maxLines' as any]: RoomRateReadMoreVersionFeature.getMaxLines(),\n ['--lineHeight' as any]: targetOpenHeight + 'px',\n }}\n ref={outerDescRef}\n >\n <div\n className={styles.descriptionTextInner}\n dangerouslySetInnerHTML={{ __html: isLocked ? t(Translation.Step.Room.RoomInfo.DealForMemberOnly) : rate.description }}\n ref={innerDescRef}\n />\n </div>\n {isLocked && (\n <div className=\"u-marg\">\n <span onClick={openMemberSignupModalOnClick}>\n <Pill icon={IconType.Money} type={PillType.Success}>\n {t(Translation.Step.Room.RoomInfo.SignUpToSee)}\n </Pill>\n </span>\n </div>\n )}\n </div>\n <div className=\"u-flex justify-content-start u-marg-bottom u-marg-top-bottom@l-\">\n {requireReadMore && (\n <div className=\"u-marg-right u-inline-flex\">\n <BEButton\n icon={IconType.ArrowRight2}\n isText\n primary\n size=\"small\"\n iconPosition=\"right\"\n onClick={rateDetailsOnClick}\n textColor={textWhiteOr(Color.Accent)}\n >\n {readMoreOpened ? t(Translation.Step.Room.ReadLess) : t(Translation.Step.Room.ReadMore)}\n </BEButton>\n </div>\n )}\n <BEButton\n icon={IconType.ArrowRight2}\n isText\n textColor={textWhiteOr(Color.Navy)}\n size=\"small\"\n iconPosition=\"right\"\n onClick={openTabOnClick}\n disabled={isLocked}\n >\n {t(Translation.Step.Room.RoomInfo.ViewPriceBreakdown)}\n </BEButton>\n </div>\n <RoomRatePills noMargin rate={props.rate} />\n </div>\n </div>\n <div\n className={classNames(\n {\n 'col-lg-6': hasPricePreview,\n 'col-lg-4': !hasPricePreview,\n },\n 'u-flex flex-column align-items-start align-items-md-start align-items-lg-end justify-content-start'\n )}\n >\n <div className=\"u-flex flex-column align-items-start align-items-lg-end\">\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getAveragePriceBeforeDiscount(true)}\n averagePrice={rate.getAveragePrice(true)}\n isMemberOnly={props.rate.isMemberOnly}\n useLightText={shouldTextBeWhite}\n />\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)} align={TextAlign.Right}>\n {rate.getPriceType() === RoomRatePriceInclusion.IncludingFeesAndTaxes\n ? t(Translation.Step.Room.RoomInfo.IncludesTaxes)\n : t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n {!isLoading && hasPricePreview ? (\n <div className=\"u-marg-top--light\">\n <PlanpayPrice price={price} checkin={(selectedRow?.getStartDate() || basketContext.endDate).format('YYYY-MM-DD')} currency={ccx.currentCurrency} />\n </div>\n ) : null}\n <div className=\"u-marg-top--light\">\n {isLocked ? (\n <BEButton filled success wide onClick={openMemberSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton rate={rate} buttonLabel={bookNowLabel} onAddToBasketOverride={props.onAddToBasketOverride} isFilled={!isThisSelectedRow} />\n )}\n </div>\n </div>\n </div>\n <RoomRateDetailsAndPriceBreakdownModal\n isOpen={viewingModal.open}\n currentTab={viewingModal.currentTab}\n rate={props.rate}\n getButtonLabel={props.getButtonLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n onClose={updateModalOnClose}\n />\n </div>\n );\n}\n"]}
@@ -4,6 +4,7 @@ interface RoomRatePillsProps {
4
4
  room?: Room;
5
5
  rate?: RoomRate;
6
6
  limit?: number;
7
+ noMargin?: boolean;
7
8
  }
8
9
  export default function RoomRatePills(props: RoomRatePillsProps): JSX.Element;
9
10
  export {};
@@ -103,7 +103,7 @@ function RoomRatePills(props) {
103
103
  setPills(pillsToDisplay);
104
104
  }
105
105
  }, [props.room, props.rate, props.limit]);
106
- return (react_1.default.createElement("div", { className: "c-pill-list u-marg-bottom--light" }, pills.map((pill, index) => {
106
+ return (react_1.default.createElement("div", { className: 'c-pill-list ' + (props.noMargin !== true && 'u-marg-bottom--light') }, pills.map((pill, index) => {
107
107
  var _a;
108
108
  const pillELement = (react_1.default.createElement(Pill_1.default, { type: (_a = pill.type) !== null && _a !== void 0 ? _a : Pill_1.PillType.Primary, icon: pill.icon }, pill.translation ? t(pill.translation, pill.translationProps) : pill.title));
109
109
  return (react_1.default.createElement("div", { className: "u-inline u-marg-left--light u-marg-bottom--light", key: index }, pill.tooltipText ? react_1.default.createElement(Tooltip_1.default, { title: pill.tooltipText }, pillELement) : pillELement));
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRatePills.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRatePills.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmE;AACnE,2CAAkD;AAClD,+CAA+D;AAC/D,iDAA+C;AAC/C,0DAAuD;AAEvD,yDAA0D;AAC1D,kEAA2D;AAC3D,mFAA2D;AAI3D,oGAA4E;AAC5E,0HAAkG;AAClG,oFAA0E;AAS1E,SAAwB,aAAa,CAAC,KAAyB;IAC3D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAa,EAAE,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAA,uBAAe,GAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,cAAc,GAAe,EAAE,CAAC;QAEpC,0BAAgB,CAAC,gBAAgB,CAC7B,EAAE,IAAI,EAAE,eAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAC/E,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChB,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,0CAAE,SAAS,CAAA,CAAC;QACpE,CAAC,EACD,IAAI,CACP,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,WAAW,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU;YAChE,gBAAgB,EAAE;gBACd,YAAY,EAAE,GAAG,CAAC,IAAI;aACzB;YACD,IAAI,EAAE,eAAQ,CAAC,KAAK;SACvB,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChB,OAAO,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAA,IAAI,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,WAAW,EAAE,OAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAA,CAAC;QAC9F,CAAC,EACD,IAAI,CACP,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,WAAW,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ;YAC9D,IAAI,EAAE,eAAQ,CAAC,KAAK;SACvB,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChB,OAAO,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAA,IAAI,CAAC,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,WAAW,EAAE,OAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAA,CAAC,CAAC;QACjG,CAAC,EACD,IAAI,CACP,CAAC;QAEF,6BAA6B;QAC7B,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,WAAW,EAAE,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB;YACrD,gBAAgB,EAAE;gBACd,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;aAC5C;YACD,IAAI,EAAE,eAAQ,CAAC,MAAM;SACxB,EACD,GAAG,EAAE;YACD,OAAO,yCAA+B,CAAC,QAAQ,EAAE,CAAC;QACtD,CAAC,CACJ,CAAC;QAEF,0BAAgB,CAAC,gBAAgB,CAC7B;YACI,IAAI,EAAE,eAAQ,CAAC,KAAK;YACpB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;SACrD,EACD,CAAC,KAAK,EAAE,EAAE;;YACN,IAAI,8BAAoB,CAAC,QAAQ,EAAE,KAAI,MAAA,KAAK,CAAC,IAAI,0CAAE,QAAQ,EAAE,CAAA,EAAE;gBAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;oBACtC,IAAI,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,WAAW,EAAE,OAAK,MAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,iBAAiB,0CAAE,YAAY,EAAE,0CAAE,WAAW,EAAE,CAAA,EAAE;wBACpG,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC,CACJ,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE;YACZ,cAAc,GAAG,0BAAgB,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,KAAc,EAAE,CAAC,CAAC;SAC/G;aAAM,IAAI,KAAK,CAAC,IAAI,EAAE;YACnB,cAAc,GAAG,0BAAgB,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,KAAc,EAAE,CAAC,CAAC;SAC/G;QAED,IAAI,KAAK,CAAC,KAAK,EAAE;YACb,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACnD;aAAM;YACH,QAAQ,CAAC,cAAc,CAAC,CAAC;SAC5B;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1C,OAAO,CACH,uCAAK,SAAS,EAAC,kCAAkC,IAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;QACvB,MAAM,WAAW,GAAG,CAChB,8BAAC,cAAI,IAAC,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,eAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IACrD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CACxE,CACV,CAAC;QAEF,OAAO,CACH,uCAAK,SAAS,EAAC,kDAAkD,EAAC,GAAG,EAAE,KAAK,IACvE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,8BAAC,iBAAO,IAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAG,WAAW,CAAW,CAAC,CAAC,CAAC,WAAW,CACzF,CACT,CAAC;IACN,CAAC,CAAC,CACA,CACT,CAAC;AACN,CAAC;AA1GD,gCA0GC","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport RatePillProvider, { RatePill } from '@/providers/RatePillProvider';\n\ninterface RoomRatePillsProps {\n room?: Room;\n rate?: RoomRate;\n\n limit?: number;\n}\n\nexport default function RoomRatePills(props: RoomRatePillsProps) {\n const [pills, setPills] = useState<RatePill[]>([]);\n const currentHotel = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n let pillsToDisplay: RatePill[] = [];\n\n RatePillProvider.registerRatePill(\n { icon: IconType.Breakfast, title: t(Translation.Step.Room.BreakfastIncluded) },\n ({ rate, hotel }) => {\n return !!hotel.showMealPill && !!rate?.mealsIncluded?.breakfast;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.MemberDeal,\n translationProps: {\n companyShort: ccx.name,\n },\n icon: IconType.Check,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.Standard,\n icon: IconType.Check,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && !(rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode);\n },\n true\n );\n\n /** Registering Room Pills */\n RatePillProvider.registerRoomPill(\n {\n translation: Translation.Misc.Pills.PeopleBookedShort,\n translationProps: {\n people: Math.floor(Math.random() * 8 + 7),\n },\n icon: IconType.People,\n },\n () => {\n return NumberOfPeopleBookedPillFeature.isActive();\n }\n );\n\n RatePillProvider.registerRoomPill(\n {\n icon: IconType.Check,\n title: t(Translation.Step.Room.PromoCodeIsApplied),\n },\n (match) => {\n if (FeaturedPromoFeature.isActive() && match.room?.getRates()) {\n for (const rate of match.room.getRates()) {\n if (rate?.promoCode?.toLowerCase() === basketContext?.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n return true;\n }\n }\n }\n\n return false;\n }\n );\n\n if (props.room) {\n pillsToDisplay = RatePillProvider.getPillsForRoom({ room: props.room, hotel: currentHotel.hotel as Hotel });\n } else if (props.rate) {\n pillsToDisplay = RatePillProvider.getPillsForRate({ rate: props.rate, hotel: currentHotel.hotel as Hotel });\n }\n\n if (props.limit) {\n setPills(pillsToDisplay.splice(0, props.limit));\n } else {\n setPills(pillsToDisplay);\n }\n }, [props.room, props.rate, props.limit]);\n\n return (\n <div className=\"c-pill-list u-marg-bottom--light\">\n {pills.map((pill, index) => {\n const pillELement = (\n <Pill type={pill.type ?? PillType.Primary} icon={pill.icon}>\n {pill.translation ? t(pill.translation, pill.translationProps) : pill.title}\n </Pill>\n );\n\n return (\n <div className=\"u-inline u-marg-left--light u-marg-bottom--light\" key={index}>\n {pill.tooltipText ? <Tooltip title={pill.tooltipText}>{pillELement}</Tooltip> : pillELement}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomRatePills.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRatePills.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport RatePillProvider, { RatePill } from '@/providers/RatePillProvider';\n\ninterface RoomRatePillsProps {\n room?: Room;\n rate?: RoomRate;\n\n limit?: number;\n\n noMargin?: boolean;\n}\n\nexport default function RoomRatePills(props: RoomRatePillsProps) {\n const [pills, setPills] = useState<RatePill[]>([]);\n const currentHotel = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n let pillsToDisplay: RatePill[] = [];\n\n RatePillProvider.registerRatePill(\n { icon: IconType.Breakfast, title: t(Translation.Step.Room.BreakfastIncluded) },\n ({ rate, hotel }) => {\n return !!hotel.showMealPill && !!rate?.mealsIncluded?.breakfast;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.MemberDeal,\n translationProps: {\n companyShort: ccx.name,\n },\n icon: IconType.Check,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode;\n },\n true\n );\n\n RatePillProvider.registerRatePill(\n {\n translation: Translation.Step.Room.RoomInfo.PromoCode.Standard,\n icon: IconType.Check,\n },\n ({ rate, hotel }) => {\n return !!rate?.promoCode && !(rate?.promoCode?.toUpperCase() === hotel?.memberOnlyPromoCode);\n },\n true\n );\n\n /** Registering Room Pills */\n RatePillProvider.registerRoomPill(\n {\n translation: Translation.Misc.Pills.PeopleBookedShort,\n translationProps: {\n people: Math.floor(Math.random() * 8 + 7),\n },\n icon: IconType.People,\n },\n () => {\n return NumberOfPeopleBookedPillFeature.isActive();\n }\n );\n\n RatePillProvider.registerRoomPill(\n {\n icon: IconType.Check,\n title: t(Translation.Step.Room.PromoCodeIsApplied),\n },\n (match) => {\n if (FeaturedPromoFeature.isActive() && match.room?.getRates()) {\n for (const rate of match.room.getRates()) {\n if (rate?.promoCode?.toLowerCase() === basketContext?.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n return true;\n }\n }\n }\n\n return false;\n }\n );\n\n if (props.room) {\n pillsToDisplay = RatePillProvider.getPillsForRoom({ room: props.room, hotel: currentHotel.hotel as Hotel });\n } else if (props.rate) {\n pillsToDisplay = RatePillProvider.getPillsForRate({ rate: props.rate, hotel: currentHotel.hotel as Hotel });\n }\n\n if (props.limit) {\n setPills(pillsToDisplay.splice(0, props.limit));\n } else {\n setPills(pillsToDisplay);\n }\n }, [props.room, props.rate, props.limit]);\n\n return (\n <div className={'c-pill-list ' + (props.noMargin !== true && 'u-marg-bottom--light')}>\n {pills.map((pill, index) => {\n const pillELement = (\n <Pill type={pill.type ?? PillType.Primary} icon={pill.icon}>\n {pill.translation ? t(pill.translation, pill.translationProps) : pill.title}\n </Pill>\n );\n\n return (\n <div className=\"u-inline u-marg-left--light u-marg-bottom--light\" key={index}>\n {pill.tooltipText ? <Tooltip title={pill.tooltipText}>{pillELement}</Tooltip> : pillELement}\n </div>\n );\n })}\n </div>\n );\n}\n"]}
@@ -35,10 +35,12 @@ const BEButton_1 = __importDefault(require("../../../../generic/BEButton"));
35
35
  const Icon_1 = require("../../../../generic/Icon/Icon");
36
36
  const MembersOnlyRow_1 = __importDefault(require("./MembersOnlyRow"));
37
37
  const RoomRateRow_1 = __importDefault(require("./RoomRateRow"));
38
+ const RoomRateReadMoreVersionFeature_1 = __importDefault(require("../../../../../providers/feature/RoomRateReadMoreVersionFeature"));
38
39
  const RoomSortProvider_1 = __importDefault(require("../../../../../providers/RoomSortProvider"));
39
40
  const Color_1 = require("../../../../../util/Color");
40
41
  const DataLayer_1 = __importDefault(require("../../../../../util/DataLayer"));
41
42
  const ScreenSize_1 = __importDefault(require("../../../../../util/ScreenSize"));
43
+ const ReadMoreRoomRateRow_1 = __importDefault(require("./ReadMoreRoomRateRow"));
42
44
  const RoomRateListPromotion_1 = require("./RoomRateListPromotion/RoomRateListPromotion");
43
45
  function RoomRates(props) {
44
46
  const { t } = (0, react_i18next_1.useTranslation)();
@@ -84,6 +86,9 @@ function RoomRates(props) {
84
86
  };
85
87
  const itemsToRender = [];
86
88
  const renderRoomRateRow = (rate, isPromo = false) => {
89
+ if (RoomRateReadMoreVersionFeature_1.default.isActive()) {
90
+ return (react_1.default.createElement(ReadMoreRoomRateRow_1.default, { key: rate.name, rate: rate, getButtonLabel: props.getButtonLabel, onAddToBasketOverride: props.onAddToBasketOverride, isPromoRate: isPromo }));
91
+ }
87
92
  return react_1.default.createElement(RoomRateRow_1.default, { key: rate.name, rate: rate, getButtonLabel: props.getButtonLabel, onAddToBasketOverride: props.onAddToBasketOverride, isPromoRate: isPromo });
88
93
  };
89
94
  const maxRows = hasFeaturedRates && !showingMoreOpen ? featuredRates.length : numOfRatesToShowFirst;
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRates.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRates.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport MembersOnlyRow from '@/components/steps/room/roomDetails/roomRates/MembersOnlyRow';\nimport RoomRateRow from '@/components/steps/room/roomDetails/roomRates/RoomRateRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport { RoomRateListPromotion } from './RoomRateListPromotion/RoomRateListPromotion';\n\nexport interface RoomRatesProps {\n roomCode: string;\n rates: RoomRate[];\n\n featuredRates?: RoomRate[];\n\n classNames?: string;\n\n hideMemberOnlyRow?: boolean;\n\n // Inline Booking Widget overrides\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport default function RoomRates(props: RoomRatesProps) {\n const { t } = useTranslation();\n const [showingMoreOpen, setShowingMoreOpen] = useState(false);\n\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const { rates } = props;\n\n const numOfRatesToShowFirst = beContext.screenSize <= ScreenSize.Medium ? 2 : 3;\n\n const sortBy = beContext.currentRoomSort;\n\n useEffect(() => {\n if (basketContext.selectedBasketRow?.getRoom() && basketContext.selectedBasketRow.getRoom().code === props.roomCode) {\n setShowingMoreOpen(true);\n }\n }, [basketContext.selectedBasketRow]);\n\n useEffect(() => {\n DataLayer.instance.sendRoomImpressions();\n }, [showingMoreOpen]);\n\n return useMemo(() => {\n const featuredRates = props.featuredRates?.filter((rate) => !!rate);\n const hasFeaturedRates = !!featuredRates && featuredRates.length > 0;\n\n let sortedRates: RoomRate[];\n\n if (rates.length !== 0) {\n sortedRates = rates.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n // Need two sorts because of MOD\n sortedRates = rates.sort((a, b) => {\n if (a.isMemberOnly) {\n return -1;\n } else if (b.isMemberOnly) {\n return 1;\n } else {\n return 0;\n }\n });\n\n const showMoreOnClick = () => {\n setShowingMoreOpen(true);\n };\n\n const itemsToRender = [];\n\n const renderRoomRateRow = (rate: RoomRate, isPromo = false) => {\n return <RoomRateRow key={rate.name} rate={rate} getButtonLabel={props.getButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} isPromoRate={isPromo} />;\n };\n\n const maxRows = hasFeaturedRates && !showingMoreOpen ? featuredRates.length : numOfRatesToShowFirst;\n let rowsLeftToOpen = 0;\n\n if (featuredRates && featuredRates.length) {\n featuredRates.sort(RoomSortProvider.getSortByFunction(sortBy));\n // First we add Featured Rates to the top of the list - no limits there\n featuredRates.forEach((row) => {\n if (row) {\n itemsToRender.push(renderRoomRateRow(row, true));\n }\n });\n }\n\n // Then we do a tricky check to see if MOD intent should be displayed\n if (!hasFeaturedRates || showingMoreOpen) {\n if (\n !props.hideMemberOnlyRow &&\n !!hotel?.memberOnlyPromoCode &&\n (!ccx.signedInUser || hotel?.memberOnlyPromoCode === basketContext?.selectedBasketRow?.getPromoCode())\n ) {\n itemsToRender.push(<MembersOnlyRow />);\n }\n }\n\n if (basketContext.loadedPromotion) {\n itemsToRender.push(<RoomRateListPromotion promotion={basketContext.loadedPromotion} />);\n }\n\n // Then we add the remaining rates to the render list - stop adding if we hit `maxRows`\n sortedRates.forEach((rate: RoomRate) => {\n if (itemsToRender.length < maxRows || showingMoreOpen) {\n itemsToRender.push(renderRoomRateRow(rate));\n } else {\n rowsLeftToOpen++;\n }\n });\n\n return (\n <div className={props.classNames ?? ''}>\n {itemsToRender.map((item: any, index: number) => {\n return <React.Fragment key={index}>{item}</React.Fragment>;\n })}\n {rowsLeftToOpen > 0 && (\n <div className=\"room-show-more\">\n <BEButton icon={IconType.ArrowDown2} iconPosition=\"right\" stopIconAnimation isText textColor={Color.Navy} onClick={showMoreOnClick}>\n {t(Translation.Step.Room.RoomInfo.Show)} {rowsLeftToOpen} {t(Translation.Step.Room.RoomInfo.MoreRates)}\n </BEButton>\n </div>\n )}\n </div>\n );\n }, [props.featuredRates, rates, beContext.currentRoomSort, showingMoreOpen, basketContext?.loadedPromotion]);\n}\n"]}
1
+ {"version":3,"file":"RoomRates.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRates.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport MembersOnlyRow from '@/components/steps/room/roomDetails/roomRates/MembersOnlyRow';\nimport RoomRateRow from '@/components/steps/room/roomDetails/roomRates/RoomRateRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomRateReadMoreVersionFeature from '@/providers/feature/RoomRateReadMoreVersionFeature';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport ReadMoreRoomRateRow from './ReadMoreRoomRateRow';\nimport { RoomRateListPromotion } from './RoomRateListPromotion/RoomRateListPromotion';\n\nexport interface RoomRatesProps {\n roomCode: string;\n rates: RoomRate[];\n\n featuredRates?: RoomRate[];\n\n classNames?: string;\n\n hideMemberOnlyRow?: boolean;\n\n // Inline Booking Widget overrides\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport default function RoomRates(props: RoomRatesProps) {\n const { t } = useTranslation();\n const [showingMoreOpen, setShowingMoreOpen] = useState(false);\n\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const { rates } = props;\n\n const numOfRatesToShowFirst = beContext.screenSize <= ScreenSize.Medium ? 2 : 3;\n\n const sortBy = beContext.currentRoomSort;\n\n useEffect(() => {\n if (basketContext.selectedBasketRow?.getRoom() && basketContext.selectedBasketRow.getRoom().code === props.roomCode) {\n setShowingMoreOpen(true);\n }\n }, [basketContext.selectedBasketRow]);\n\n useEffect(() => {\n DataLayer.instance.sendRoomImpressions();\n }, [showingMoreOpen]);\n\n return useMemo(() => {\n const featuredRates = props.featuredRates?.filter((rate) => !!rate);\n const hasFeaturedRates = !!featuredRates && featuredRates.length > 0;\n\n let sortedRates: RoomRate[];\n\n if (rates.length !== 0) {\n sortedRates = rates.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n // Need two sorts because of MOD\n sortedRates = rates.sort((a, b) => {\n if (a.isMemberOnly) {\n return -1;\n } else if (b.isMemberOnly) {\n return 1;\n } else {\n return 0;\n }\n });\n\n const showMoreOnClick = () => {\n setShowingMoreOpen(true);\n };\n\n const itemsToRender = [];\n\n const renderRoomRateRow = (rate: RoomRate, isPromo = false) => {\n if (RoomRateReadMoreVersionFeature.isActive()) {\n return (\n <ReadMoreRoomRateRow\n key={rate.name}\n rate={rate}\n getButtonLabel={props.getButtonLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n isPromoRate={isPromo}\n />\n );\n }\n\n return <RoomRateRow key={rate.name} rate={rate} getButtonLabel={props.getButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} isPromoRate={isPromo} />;\n };\n\n const maxRows = hasFeaturedRates && !showingMoreOpen ? featuredRates.length : numOfRatesToShowFirst;\n let rowsLeftToOpen = 0;\n\n if (featuredRates && featuredRates.length) {\n featuredRates.sort(RoomSortProvider.getSortByFunction(sortBy));\n // First we add Featured Rates to the top of the list - no limits there\n featuredRates.forEach((row) => {\n if (row) {\n itemsToRender.push(renderRoomRateRow(row, true));\n }\n });\n }\n\n // Then we do a tricky check to see if MOD intent should be displayed\n if (!hasFeaturedRates || showingMoreOpen) {\n if (\n !props.hideMemberOnlyRow &&\n !!hotel?.memberOnlyPromoCode &&\n (!ccx.signedInUser || hotel?.memberOnlyPromoCode === basketContext?.selectedBasketRow?.getPromoCode())\n ) {\n itemsToRender.push(<MembersOnlyRow />);\n }\n }\n\n if (basketContext.loadedPromotion) {\n itemsToRender.push(<RoomRateListPromotion promotion={basketContext.loadedPromotion} />);\n }\n\n // Then we add the remaining rates to the render list - stop adding if we hit `maxRows`\n sortedRates.forEach((rate: RoomRate) => {\n if (itemsToRender.length < maxRows || showingMoreOpen) {\n itemsToRender.push(renderRoomRateRow(rate));\n } else {\n rowsLeftToOpen++;\n }\n });\n\n return (\n <div className={props.classNames ?? ''}>\n {itemsToRender.map((item: any, index: number) => {\n return <React.Fragment key={index}>{item}</React.Fragment>;\n })}\n {rowsLeftToOpen > 0 && (\n <div className=\"room-show-more\">\n <BEButton icon={IconType.ArrowDown2} iconPosition=\"right\" stopIconAnimation isText textColor={Color.Navy} onClick={showMoreOnClick}>\n {t(Translation.Step.Room.RoomInfo.Show)} {rowsLeftToOpen} {t(Translation.Step.Room.RoomInfo.MoreRates)}\n </BEButton>\n </div>\n )}\n </div>\n );\n }, [props.featuredRates, rates, beContext.currentRoomSort, showingMoreOpen, basketContext?.loadedPromotion]);\n}\n"]}
@@ -50,6 +50,7 @@ export { default as FeaturedPromoFeature } from './providers/feature/FeaturedPro
50
50
  export { default as FullPageEngineSmallSpacingFeature } from './providers/feature/FullPageEngineSmallSpacingFeature';
51
51
  export { default as InlineAddonStepFeature } from './providers/feature/InlineAddonStepFeature';
52
52
  export { default as PlanPayPricePreviewFeature } from './providers/feature/PlanPayPricePreviewFeature';
53
+ export { default as RoomRateReadMoreVersionFeature } from './providers/feature/RoomRateReadMoreVersionFeature';
53
54
  export { default as RoomUpsellFeature } from './providers/feature/RoomUpsellFeature';
54
55
  export { default as ShowIATANumberOnCheckoutFeature } from './providers/feature/ShowIATANumberOnCheckoutFeature';
55
56
  export { registerReplacement, withDI } from './providers/DIProvider';
package/dist/src/index.js CHANGED
@@ -17,8 +17,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.StepHotel = exports.StepGroupedRoom = exports.StepDate = exports.StepConfirmation = exports.StepAddon = exports.HotelDataSource = exports.API = exports.useFormContext = exports.DataLayer = exports.SessionProvider = exports.RoomstayThemeEngine = exports.withDI = exports.registerReplacement = exports.ShowIATANumberOnCheckoutFeature = exports.RoomUpsellFeature = exports.PlanPayPricePreviewFeature = exports.InlineAddonStepFeature = exports.FullPageEngineSmallSpacingFeature = exports.FeaturedPromoFeature = exports.E164PhoneNumberFieldFeature = exports.DatePickerTypeFeature = exports.ConfirmationVerifyFeature = exports.RoomSort = exports.RatePillProvider = exports.FeatureProvider = exports.CurrencyProvider = exports.SmallSpinner = exports.StepNoRoomBestRateAlert = exports.RoomModalPerkRow = exports.BE_ROOM_MODAL_PERK_ROW = exports.NoRoomsFoundBlock = exports.BE_NO_ROOMS_FOUND_BLOCK = exports.HotelInfoPerksRow = exports.BE_HOTEL_INFO_PERK_ROW = exports.StepConfirmationCountrySelector = exports.TextBox = exports.TextArea = exports.RadioFields = exports.LineBreak = exports.InputGroup = exports.Icon = exports.Headline = exports.Currency = exports.Checkbox = exports.BEButton = exports.Alert = exports.AutoAutoHeight = exports.Link = exports.useTranslation = exports.react = void 0;
21
- exports.Version = exports.events = exports.RoomstayEventManager = exports.StepManager = exports.StepThanks = exports.StepRoom = void 0;
20
+ exports.StepGroupedRoom = exports.StepDate = exports.StepConfirmation = exports.StepAddon = exports.HotelDataSource = exports.API = exports.useFormContext = exports.DataLayer = exports.SessionProvider = exports.RoomstayThemeEngine = exports.withDI = exports.registerReplacement = exports.ShowIATANumberOnCheckoutFeature = exports.RoomUpsellFeature = exports.RoomRateReadMoreVersionFeature = exports.PlanPayPricePreviewFeature = exports.InlineAddonStepFeature = exports.FullPageEngineSmallSpacingFeature = exports.FeaturedPromoFeature = exports.E164PhoneNumberFieldFeature = exports.DatePickerTypeFeature = exports.ConfirmationVerifyFeature = exports.RoomSort = exports.RatePillProvider = exports.FeatureProvider = exports.CurrencyProvider = exports.SmallSpinner = exports.StepNoRoomBestRateAlert = exports.RoomModalPerkRow = exports.BE_ROOM_MODAL_PERK_ROW = exports.NoRoomsFoundBlock = exports.BE_NO_ROOMS_FOUND_BLOCK = exports.HotelInfoPerksRow = exports.BE_HOTEL_INFO_PERK_ROW = exports.StepConfirmationCountrySelector = exports.TextBox = exports.TextArea = exports.RadioFields = exports.LineBreak = exports.InputGroup = exports.Icon = exports.Headline = exports.Currency = exports.Checkbox = exports.BEButton = exports.Alert = exports.AutoAutoHeight = exports.Link = exports.useTranslation = exports.react = void 0;
21
+ exports.Version = exports.events = exports.RoomstayEventManager = exports.StepManager = exports.StepThanks = exports.StepRoom = exports.StepHotel = void 0;
22
22
  // TODO: Look into resolving this.
23
23
  const react_1 = __importDefault(require("react"));
24
24
  const StepConfirmation_1 = __importDefault(require("./pages/steps/StepConfirmation/StepConfirmation"));
@@ -116,6 +116,8 @@ var InlineAddonStepFeature_1 = require("./providers/feature/InlineAddonStepFeatu
116
116
  Object.defineProperty(exports, "InlineAddonStepFeature", { enumerable: true, get: function () { return __importDefault(InlineAddonStepFeature_1).default; } });
117
117
  var PlanPayPricePreviewFeature_1 = require("./providers/feature/PlanPayPricePreviewFeature");
118
118
  Object.defineProperty(exports, "PlanPayPricePreviewFeature", { enumerable: true, get: function () { return __importDefault(PlanPayPricePreviewFeature_1).default; } });
119
+ var RoomRateReadMoreVersionFeature_1 = require("./providers/feature/RoomRateReadMoreVersionFeature");
120
+ Object.defineProperty(exports, "RoomRateReadMoreVersionFeature", { enumerable: true, get: function () { return __importDefault(RoomRateReadMoreVersionFeature_1).default; } });
119
121
  var RoomUpsellFeature_1 = require("./providers/feature/RoomUpsellFeature");
120
122
  Object.defineProperty(exports, "RoomUpsellFeature", { enumerable: true, get: function () { return __importDefault(RoomUpsellFeature_1).default; } });
121
123
  var ShowIATANumberOnCheckoutFeature_1 = require("./providers/feature/ShowIATANumberOnCheckoutFeature");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO: Look into resolving this.\nimport ReactRaw from 'react';\n\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport StepDate from '@/pages/steps/StepDate/StepDate';\nimport StepRoom from '@/pages/steps/StepRoom/StepRoom';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport StepManager from '@/util/StepManager';\n\nimport RoomstayEventManager from './events/RoomstayEventManager';\n\nexport const react = ReactRaw;\n\nexport { useTranslation } from 'react-i18next';\nexport { Link } from 'react-router-dom';\n\n// Components\nexport { default as AutoAutoHeight } from '@/animations/AutoAutoHeight';\nexport * from '@/components/generic/Alert';\nexport { default as Alert } from '@/components/generic/Alert';\nexport { default as BEButton } from '@/components/generic/BEButton';\nexport { default as Checkbox } from '@/components/generic/Checkbox/Checkbox';\nexport { default as Currency } from '@/components/generic/Currency';\nexport { default as Headline } from '@/components/generic/Headline';\nexport { default as Icon } from '@/components/generic/Icon/Icon';\nexport * from '@/components/generic/Icon/Icon';\nexport { default as InputGroup } from '@/components/generic/InputGroup/InputGroup';\nexport { default as LineBreak } from '@/components/generic/LineBreak';\nexport { default as RadioFields } from '@/components/generic/radio/RadioFields';\nexport * from '@/components/generic/Select/index';\nexport * from '@/components/generic/Text';\nexport { default as TextArea } from '@/components/generic/TextArea';\nexport { default as TextBox } from '@/components/generic/TextBox';\nexport * from '@/components/steps/confirmation/StepConfirmationCommentsComponent';\nexport { default as StepConfirmationCountrySelector } from '@/components/steps/confirmation/StepConfirmationCountrySelector';\nexport { BE_HOTEL_INFO_PERK_ROW } from '@/components/steps/hotel/HotelInfoPerksRow';\nexport { HotelInfoPerkRowProps, default as HotelInfoPerksRow } from '@/components/steps/hotel/HotelInfoPerksRow';\nexport { BE_NO_ROOMS_FOUND_BLOCK } from '@/components/steps/room/NoRoomsFoundBlock';\nexport { default as NoRoomsFoundBlock } from '@/components/steps/room/NoRoomsFoundBlock';\nexport { BE_ROOM_MODAL_PERK_ROW } from '@/components/steps/room/RoomModalPerkRow';\nexport { default as RoomModalPerkRow, RoomModalPerkRowProps } from '@/components/steps/room/RoomModalPerkRow';\nexport * from '@/components/steps/room/StepRoomBestRateAlert';\nexport { default as StepNoRoomBestRateAlert } from '@/components/steps/room/StepRoomBestRateAlert';\nexport * from '@/components/summary/BESummary';\nexport * from '@/components/summary/BESummaryPerkBlock';\nexport * from '@/engines/BookingWizardEngine/BookingWizardEngine';\nexport * from '@/engines/CustomEngine/CustomEngine';\nexport * from '@/engines/FullPageBookingEngine/FullPageBookingEngine';\nexport * from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nexport * from '@/engines/RecentSearchesEngine/RecentSearchesEngine';\n\n// Loaders\nexport { default as SmallSpinner } from '@/components/generic/loader/SmallSpinner';\n\n// Providers\nexport * from '@/providers/CurrencyProvider';\nexport { default as CurrencyProvider } from '@/providers/CurrencyProvider';\nexport { default as FeatureProvider } from '@/providers/FeatureProvider';\nexport * from '@/providers/LanguageProvider';\nexport * from '@/providers/PromotionProvider';\nexport { default as RatePillProvider } from '@/providers/RatePillProvider';\nexport { RoomSort } from '@/providers/RoomSortProvider';\n\n// Features\n\nexport { default as ConfirmationVerifyFeature } from '@/providers/feature/ConfirmationVerifyFeature';\nexport { default as DatePickerTypeFeature } from '@/providers/feature/DatePickerTypeFeature';\nexport { default as E164PhoneNumberFieldFeature } from '@/providers/feature/E164PhoneNumberFieldFeature';\nexport { default as FeaturedPromoFeature } from '@/providers/feature/FeaturedPromoFeature';\nexport { default as FullPageEngineSmallSpacingFeature } from '@/providers/feature/FullPageEngineSmallSpacingFeature';\nexport { default as InlineAddonStepFeature } from '@/providers/feature/InlineAddonStepFeature';\nexport { default as PlanPayPricePreviewFeature } from '@/providers/feature/PlanPayPricePreviewFeature';\nexport { default as RoomUpsellFeature } from '@/providers/feature/RoomUpsellFeature';\nexport { default as ShowIATANumberOnCheckoutFeature } from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\n\n// Contexts\nexport { registerReplacement, withDI } from '@/providers/DIProvider';\nexport * from '@/providers/RoomstayThemeEngine';\nexport { default as RoomstayThemeEngine } from '@/providers/RoomstayThemeEngine';\nexport { default as SessionProvider } from '@/providers/SessionProvider';\nexport { default as DataLayer } from '@/util/DataLayer';\nexport * from '@/util/DataLayer';\nexport * from '@/util/DefaultValueManager';\nexport * from '@/util/RouteManager';\nexport * from '@frontend/contexts';\nexport { useFormContext } from 'react-hook-form';\n\n// Models\nexport { default as API } from '@/api/BookingAPI';\nexport * from '@/models/Api/HotelDTO';\nexport * from '@/models/Api/HotelOverrideDTO';\nexport type { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nexport * from '@/models/Client/Hotel/Company';\nexport * from '@/models/Client/Hotel/DistanceUnitType.types';\nexport * from '@/models/Client/Hotel/Hotel';\nexport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nexport * from '@/models/Client/Hotel/HotelPerk';\nexport * from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\n// Steps\nexport { default as StepAddon } from '@/pages/steps/StepAddon/StepAddon';\nexport { default as StepConfirmation } from '@/pages/steps/StepConfirmation/StepConfirmation';\nexport { default as StepDate } from '@/pages/steps/StepDate/StepDate';\nexport { default as StepGroupedRoom } from '@/pages/steps/StepGroupedRoom/StepGroupedRoom';\nexport { default as StepHotel } from '@/pages/steps/StepHotel/StepHotel';\nexport { default as StepRoom } from '@/pages/steps/StepRoom/StepRoom';\nexport { default as StepThanks } from '@/pages/steps/StepThanks/StepThanks';\nexport * from '@/translations/Translation';\nexport { default as StepManager } from '@/util/StepManager';\n\n// Util\n\nexport type { default as ColorProfile } from '@/models/Client/Hotel/ColorProfile';\nexport * from '@/util/Color';\nexport * from '@/util/Debounce';\n\n// Hooks\n\nexport * from '@/events/index';\nexport * from '@/hooks/CurrentHotelHook';\nexport * from '@/hooks/EventHook';\n\n/** @deprecated use `roomstay.events` instead */\nexport { default as RoomstayEventManager } from '@/events/RoomstayEventManager';\n\nexport const events = {\n on: RoomstayEventManager.addEvent,\n raise: RoomstayEventManager.raise,\n};\n\ndeclare const RS_VERSION: string;\nexport const Version = RS_VERSION;\n\nStepManager.currentSteps = {\n 0: StepDate,\n 10: StepRoom,\n 20: StepConfirmation,\n 30: StepThanks,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO: Look into resolving this.\nimport ReactRaw from 'react';\n\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport StepDate from '@/pages/steps/StepDate/StepDate';\nimport StepRoom from '@/pages/steps/StepRoom/StepRoom';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport StepManager from '@/util/StepManager';\n\nimport RoomstayEventManager from './events/RoomstayEventManager';\n\nexport const react = ReactRaw;\n\nexport { useTranslation } from 'react-i18next';\nexport { Link } from 'react-router-dom';\n\n// Components\nexport { default as AutoAutoHeight } from '@/animations/AutoAutoHeight';\nexport * from '@/components/generic/Alert';\nexport { default as Alert } from '@/components/generic/Alert';\nexport { default as BEButton } from '@/components/generic/BEButton';\nexport { default as Checkbox } from '@/components/generic/Checkbox/Checkbox';\nexport { default as Currency } from '@/components/generic/Currency';\nexport { default as Headline } from '@/components/generic/Headline';\nexport { default as Icon } from '@/components/generic/Icon/Icon';\nexport * from '@/components/generic/Icon/Icon';\nexport { default as InputGroup } from '@/components/generic/InputGroup/InputGroup';\nexport { default as LineBreak } from '@/components/generic/LineBreak';\nexport { default as RadioFields } from '@/components/generic/radio/RadioFields';\nexport * from '@/components/generic/Select/index';\nexport * from '@/components/generic/Text';\nexport { default as TextArea } from '@/components/generic/TextArea';\nexport { default as TextBox } from '@/components/generic/TextBox';\nexport * from '@/components/steps/confirmation/StepConfirmationCommentsComponent';\nexport { default as StepConfirmationCountrySelector } from '@/components/steps/confirmation/StepConfirmationCountrySelector';\nexport { BE_HOTEL_INFO_PERK_ROW } from '@/components/steps/hotel/HotelInfoPerksRow';\nexport { HotelInfoPerkRowProps, default as HotelInfoPerksRow } from '@/components/steps/hotel/HotelInfoPerksRow';\nexport { BE_NO_ROOMS_FOUND_BLOCK } from '@/components/steps/room/NoRoomsFoundBlock';\nexport { default as NoRoomsFoundBlock } from '@/components/steps/room/NoRoomsFoundBlock';\nexport { BE_ROOM_MODAL_PERK_ROW } from '@/components/steps/room/RoomModalPerkRow';\nexport { default as RoomModalPerkRow, RoomModalPerkRowProps } from '@/components/steps/room/RoomModalPerkRow';\nexport * from '@/components/steps/room/StepRoomBestRateAlert';\nexport { default as StepNoRoomBestRateAlert } from '@/components/steps/room/StepRoomBestRateAlert';\nexport * from '@/components/summary/BESummary';\nexport * from '@/components/summary/BESummaryPerkBlock';\nexport * from '@/engines/BookingWizardEngine/BookingWizardEngine';\nexport * from '@/engines/CustomEngine/CustomEngine';\nexport * from '@/engines/FullPageBookingEngine/FullPageBookingEngine';\nexport * from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nexport * from '@/engines/RecentSearchesEngine/RecentSearchesEngine';\n\n// Loaders\nexport { default as SmallSpinner } from '@/components/generic/loader/SmallSpinner';\n\n// Providers\nexport * from '@/providers/CurrencyProvider';\nexport { default as CurrencyProvider } from '@/providers/CurrencyProvider';\nexport { default as FeatureProvider } from '@/providers/FeatureProvider';\nexport * from '@/providers/LanguageProvider';\nexport * from '@/providers/PromotionProvider';\nexport { default as RatePillProvider } from '@/providers/RatePillProvider';\nexport { RoomSort } from '@/providers/RoomSortProvider';\n\n// Features\n\nexport { default as ConfirmationVerifyFeature } from '@/providers/feature/ConfirmationVerifyFeature';\nexport { default as DatePickerTypeFeature } from '@/providers/feature/DatePickerTypeFeature';\nexport { default as E164PhoneNumberFieldFeature } from '@/providers/feature/E164PhoneNumberFieldFeature';\nexport { default as FeaturedPromoFeature } from '@/providers/feature/FeaturedPromoFeature';\nexport { default as FullPageEngineSmallSpacingFeature } from '@/providers/feature/FullPageEngineSmallSpacingFeature';\nexport { default as InlineAddonStepFeature } from '@/providers/feature/InlineAddonStepFeature';\nexport { default as PlanPayPricePreviewFeature } from '@/providers/feature/PlanPayPricePreviewFeature';\nexport { default as RoomRateReadMoreVersionFeature } from '@/providers/feature/RoomRateReadMoreVersionFeature';\nexport { default as RoomUpsellFeature } from '@/providers/feature/RoomUpsellFeature';\nexport { default as ShowIATANumberOnCheckoutFeature } from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\n\n// Contexts\nexport { registerReplacement, withDI } from '@/providers/DIProvider';\nexport * from '@/providers/RoomstayThemeEngine';\nexport { default as RoomstayThemeEngine } from '@/providers/RoomstayThemeEngine';\nexport { default as SessionProvider } from '@/providers/SessionProvider';\nexport { default as DataLayer } from '@/util/DataLayer';\nexport * from '@/util/DataLayer';\nexport * from '@/util/DefaultValueManager';\nexport * from '@/util/RouteManager';\nexport * from '@frontend/contexts';\nexport { useFormContext } from 'react-hook-form';\n\n// Models\nexport { default as API } from '@/api/BookingAPI';\nexport * from '@/models/Api/HotelDTO';\nexport * from '@/models/Api/HotelOverrideDTO';\nexport type { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nexport * from '@/models/Client/Hotel/Company';\nexport * from '@/models/Client/Hotel/DistanceUnitType.types';\nexport * from '@/models/Client/Hotel/Hotel';\nexport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nexport * from '@/models/Client/Hotel/HotelPerk';\nexport * from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\n// Steps\nexport { default as StepAddon } from '@/pages/steps/StepAddon/StepAddon';\nexport { default as StepConfirmation } from '@/pages/steps/StepConfirmation/StepConfirmation';\nexport { default as StepDate } from '@/pages/steps/StepDate/StepDate';\nexport { default as StepGroupedRoom } from '@/pages/steps/StepGroupedRoom/StepGroupedRoom';\nexport { default as StepHotel } from '@/pages/steps/StepHotel/StepHotel';\nexport { default as StepRoom } from '@/pages/steps/StepRoom/StepRoom';\nexport { default as StepThanks } from '@/pages/steps/StepThanks/StepThanks';\nexport * from '@/translations/Translation';\nexport { default as StepManager } from '@/util/StepManager';\n\n// Util\n\nexport type { default as ColorProfile } from '@/models/Client/Hotel/ColorProfile';\nexport * from '@/util/Color';\nexport * from '@/util/Debounce';\n\n// Hooks\n\nexport * from '@/events/index';\nexport * from '@/hooks/CurrentHotelHook';\nexport * from '@/hooks/EventHook';\n\n/** @deprecated use `roomstay.events` instead */\nexport { default as RoomstayEventManager } from '@/events/RoomstayEventManager';\n\nexport const events = {\n on: RoomstayEventManager.addEvent,\n raise: RoomstayEventManager.raise,\n};\n\ndeclare const RS_VERSION: string;\nexport const Version = RS_VERSION;\n\nStepManager.currentSteps = {\n 0: StepDate,\n 10: StepRoom,\n 20: StepConfirmation,\n 30: StepThanks,\n};\n"]}
@@ -15,6 +15,7 @@ const NumberOfPeopleBookedPillFeature_1 = __importDefault(require("./feature/Num
15
15
  const PlanPayPricePreviewFeature_1 = __importDefault(require("./feature/PlanPayPricePreviewFeature"));
16
16
  const RoomUpsellFeature_1 = __importDefault(require("./feature/RoomUpsellFeature"));
17
17
  const ShowIATANumberOnCheckoutFeature_1 = __importDefault(require("./feature/ShowIATANumberOnCheckoutFeature"));
18
+ const RoomRateReadMoreVersionFeature_1 = __importDefault(require("./feature/RoomRateReadMoreVersionFeature"));
18
19
  class FeatureProvider {
19
20
  static load(name) {
20
21
  for (const feature of this.features) {
@@ -45,5 +46,6 @@ FeatureProvider.features = [
45
46
  FullPageEngineSmallSpacingFeature_1.default,
46
47
  ModifyBookingFeature_1.default,
47
48
  PlanPayPricePreviewFeature_1.default,
49
+ RoomRateReadMoreVersionFeature_1.default,
48
50
  ];
49
51
  //# sourceMappingURL=FeatureProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureProvider.js","sourceRoot":"/","sources":["src/providers/FeatureProvider.ts"],"names":[],"mappings":";;;;;AAAA,8GAAsF;AACtF,sGAA8E;AAC9E,kHAA0F;AAC1F,oGAA4E;AAC5E,8HAAsG;AACtG,wGAAgF;AAChF,kGAA0E;AAC1E,oGAA4E;AAC5E,0HAAkG;AAClG,gHAAwF;AACxF,8FAAsE;AACtE,0HAAkG;AAElG,MAAqB,eAAe;IAgBzB,MAAM,CAAC,IAAI,CAAC,IAAuF;QACtG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,IAAI,EAAE,CAAC;aAClB;SACJ;IACL,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAuF;QACxG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,MAAM,EAAE,CAAC;aACpB;SACJ;IACL,CAAC;;AA9BL,kCA+BC;AA9BkB,wBAAQ,GAAG;IACtB,gCAAsB;IACtB,+BAAqB;IACrB,2BAAiB;IACjB,8BAAoB;IACpB,mCAAyB;IACzB,yCAA+B;IAC/B,qCAA2B;IAC3B,6BAAmB;IACnB,yCAA+B;IAC/B,2CAAiC;IACjC,8BAAoB;IACpB,oCAA0B;CAC7B,CAAC","sourcesContent":["import ConfirmationVerifyFeature from '@/providers/feature/ConfirmationVerifyFeature';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport E164PhoneNumberFieldFeature from '@/providers/feature/E164PhoneNumberFieldFeature';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport FullPageEngineSmallSpacingFeature from '@/providers/feature/FullPageEngineSmallSpacingFeature';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport PlanPayPricePreviewFeature from '@/providers/feature/PlanPayPricePreviewFeature';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport ShowIATANumberOnCheckoutFeature from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\n\nexport default class FeatureProvider {\n private static features = [\n InlineAddonStepFeature,\n DatePickerTypeFeature,\n RoomUpsellFeature,\n FeaturedPromoFeature,\n ConfirmationVerifyFeature,\n ShowIATANumberOnCheckoutFeature,\n E164PhoneNumberFieldFeature,\n MemberPortalFeature,\n NumberOfPeopleBookedPillFeature,\n FullPageEngineSmallSpacingFeature,\n ModifyBookingFeature,\n PlanPayPricePreviewFeature,\n ];\n\n public static load(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features]) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.load();\n }\n }\n }\n\n public static unLoad(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features]) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.unLoad();\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"FeatureProvider.js","sourceRoot":"/","sources":["src/providers/FeatureProvider.ts"],"names":[],"mappings":";;;;;AAAA,8GAAsF;AACtF,sGAA8E;AAC9E,kHAA0F;AAC1F,oGAA4E;AAC5E,8HAAsG;AACtG,wGAAgF;AAChF,kGAA0E;AAC1E,oGAA4E;AAC5E,0HAAkG;AAClG,gHAAwF;AACxF,8FAAsE;AACtE,0HAAkG;AAElG,8GAAsF;AAEtF,MAAqB,eAAe;IAiBzB,MAAM,CAAC,IAAI,CAAC,IAAuF;QACtG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,IAAI,EAAE,CAAC;aAClB;SACJ;IACL,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAuF;QACxG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,MAAM,EAAE,CAAC;aACpB;SACJ;IACL,CAAC;;AA/BL,kCAgCC;AA/BkB,wBAAQ,GAAG;IACtB,gCAAsB;IACtB,+BAAqB;IACrB,2BAAiB;IACjB,8BAAoB;IACpB,mCAAyB;IACzB,yCAA+B;IAC/B,qCAA2B;IAC3B,6BAAmB;IACnB,yCAA+B;IAC/B,2CAAiC;IACjC,8BAAoB;IACpB,oCAA0B;IAC1B,wCAA8B;CACjC,CAAC","sourcesContent":["import ConfirmationVerifyFeature from '@/providers/feature/ConfirmationVerifyFeature';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport E164PhoneNumberFieldFeature from '@/providers/feature/E164PhoneNumberFieldFeature';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport FullPageEngineSmallSpacingFeature from '@/providers/feature/FullPageEngineSmallSpacingFeature';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport PlanPayPricePreviewFeature from '@/providers/feature/PlanPayPricePreviewFeature';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport ShowIATANumberOnCheckoutFeature from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\n\nimport RoomRateReadMoreVersionFeature from './feature/RoomRateReadMoreVersionFeature';\n\nexport default class FeatureProvider {\n private static features = [\n InlineAddonStepFeature,\n DatePickerTypeFeature,\n RoomUpsellFeature,\n FeaturedPromoFeature,\n ConfirmationVerifyFeature,\n ShowIATANumberOnCheckoutFeature,\n E164PhoneNumberFieldFeature,\n MemberPortalFeature,\n NumberOfPeopleBookedPillFeature,\n FullPageEngineSmallSpacingFeature,\n ModifyBookingFeature,\n PlanPayPricePreviewFeature,\n RoomRateReadMoreVersionFeature,\n ];\n\n public static load(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features]) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.load();\n }\n }\n }\n\n public static unLoad(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features]) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.unLoad();\n }\n }\n }\n}\n"]}
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.LanguageProvider = exports.Language = void 0;
7
7
  const i18next_1 = __importDefault(require("i18next"));
8
8
  const en_gb_1 = __importDefault(require("translations/languages/en-gb"));
9
+ const es_1 = __importDefault(require("translations/languages/es"));
10
+ const fr_1 = __importDefault(require("translations/languages/fr"));
11
+ const zh_cn_1 = __importDefault(require("translations/languages/zh-cn"));
12
+ const zh_tw_1 = __importDefault(require("translations/languages/zh-tw"));
9
13
  const RoomstayThemeEngine_1 = __importDefault(require("./RoomstayThemeEngine"));
10
14
  const ObjectHelper_1 = require("../util/ObjectHelper");
11
15
  var Language;
@@ -84,9 +88,9 @@ LanguageProvider.filterLanguages = [];
84
88
  LanguageProvider.overrides = {};
85
89
  LanguageProvider.languages = {
86
90
  [Language.en_us]: en_gb_1.default,
87
- [Language.es]: en_gb_1.default,
88
- [Language.fr]: en_gb_1.default,
89
- [Language.zh_cn]: en_gb_1.default,
90
- [Language.zh_tw]: en_gb_1.default,
91
+ [Language.es]: (0, ObjectHelper_1.mergeDeep)(en_gb_1.default, es_1.default),
92
+ [Language.fr]: (0, ObjectHelper_1.mergeDeep)(en_gb_1.default, fr_1.default),
93
+ [Language.zh_cn]: (0, ObjectHelper_1.mergeDeep)(en_gb_1.default, zh_cn_1.default),
94
+ [Language.zh_tw]: (0, ObjectHelper_1.mergeDeep)(en_gb_1.default, zh_tw_1.default),
91
95
  };
92
96
  //# sourceMappingURL=LanguageProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageProvider.js","sourceRoot":"/","sources":["src/providers/LanguageProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import i18n from 'i18next';\nimport { DeepPartial } from 'react-hook-form';\nimport common_en from 'translations/languages/en-gb';\nimport { Translation } from 'translations/Translation';\n\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { mergeDeep } from '@/util/ObjectHelper';\n\ntype TTranslation = typeof Translation;\ntype TI18nMappedLanguage = {\n translation: TTranslation;\n};\ntype TI18nMappedLanguages = {\n [key in Language]?: TI18nMappedLanguage;\n};\n\nexport type TLanguageTranslations = {\n [key in Language]?: TTranslation;\n};\n\nexport enum Language {\n en_us = 'en-US',\n zh_cn = 'zh-CN',\n zh_tw = 'zh-TW',\n es = 'es',\n fr = 'fr',\n clear = 'testing_only', // TODO remove before live\n}\n\nexport class LanguageProvider {\n public static filterLanguages: Language[] = [];\n private static overrides: { [name: string]: TTranslation } = {};\n private static languages: { [langType in Language]?: TTranslation } = {\n [Language.en_us]: common_en,\n [Language.es]: common_en,\n [Language.fr]: common_en,\n [Language.zh_cn]: common_en,\n [Language.zh_tw]: common_en,\n };\n\n public static changeLanguage(lang: Language) {\n RoomstayThemeEngine.selectedLang = lang;\n i18n.changeLanguage(lang);\n }\n\n public static getPrettyLanguageName(lang: Language) {\n switch (lang) {\n case Language.en_us:\n return 'English';\n case Language.zh_cn:\n return '简体中文';\n case Language.zh_tw:\n return '繁體中文';\n case Language.es:\n return 'Español';\n case Language.fr:\n return 'Français';\n default:\n return '';\n }\n }\n\n public static getI18nMappedLanguages(): TI18nMappedLanguages {\n const workingMappings: TI18nMappedLanguages = {};\n\n const languages = this.getLanguages();\n\n Object.keys(languages).forEach((key) => {\n const translation = this.getOverridesForLanguage(key as Language);\n\n workingMappings[key as Language] = {\n translation,\n };\n });\n\n return workingMappings;\n }\n\n /**\n * Create a way to override translations for specific languages, and hotels.\n * @param lang\n * @param overrideTree\n */\n public static registerOverride(lang: Language, overrideTree: DeepPartial<TTranslation>) {\n LanguageProvider.overrides[lang] = mergeDeep<TTranslation>(LanguageProvider.overrides[lang], overrideTree) as TTranslation;\n\n // Check required for making sure Lang is loaded first.\n if (i18n && i18n.addResourceBundle) {\n i18n.addResourceBundle(lang, 'translation', this.getOverridesForLanguage(lang));\n }\n }\n\n public static getLanguages(): TLanguageTranslations {\n if (this.filterLanguages.length >= 1) {\n const filteredLanguages: TLanguageTranslations = {};\n\n this.filterLanguages.map((lang) => {\n filteredLanguages[lang] = this.languages[lang];\n });\n\n return filteredLanguages;\n } else {\n return this.languages;\n }\n }\n\n private static getOverridesForLanguage(lang: Language): TTranslation {\n const languages = this.getLanguages();\n const translation = languages[lang];\n return mergeDeep<TTranslation>(translation, LanguageProvider.overrides[lang]) as TTranslation;\n }\n}\n"]}
1
+ {"version":3,"file":"LanguageProvider.js","sourceRoot":"/","sources":["src/providers/LanguageProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import i18n from 'i18next';\nimport { DeepPartial } from 'react-hook-form';\nimport common_en from 'translations/languages/en-gb';\nimport es from 'translations/languages/es';\nimport fr from 'translations/languages/fr';\nimport zhCn from 'translations/languages/zh-cn';\nimport zhTw from 'translations/languages/zh-tw';\nimport { Translation } from 'translations/Translation';\n\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { mergeDeep } from '@/util/ObjectHelper';\n\ntype TTranslation = typeof Translation;\ntype TI18nMappedLanguage = {\n translation: TTranslation;\n};\ntype TI18nMappedLanguages = {\n [key in Language]?: TI18nMappedLanguage;\n};\n\nexport type TLanguageTranslations = {\n [key in Language]?: TTranslation;\n};\n\nexport enum Language {\n en_us = 'en-US',\n zh_cn = 'zh-CN',\n zh_tw = 'zh-TW',\n es = 'es',\n fr = 'fr',\n clear = 'testing_only', // TODO remove before live\n}\n\nexport class LanguageProvider {\n public static filterLanguages: Language[] = [];\n private static overrides: { [name: string]: TTranslation } = {};\n private static languages: { [langType in Language]?: TTranslation } = {\n [Language.en_us]: common_en,\n [Language.es]: mergeDeep(common_en, es),\n [Language.fr]: mergeDeep(common_en, fr),\n [Language.zh_cn]: mergeDeep(common_en, zhCn),\n [Language.zh_tw]: mergeDeep(common_en, zhTw),\n };\n\n public static changeLanguage(lang: Language) {\n RoomstayThemeEngine.selectedLang = lang;\n i18n.changeLanguage(lang);\n }\n\n public static getPrettyLanguageName(lang: Language) {\n switch (lang) {\n case Language.en_us:\n return 'English';\n case Language.zh_cn:\n return '简体中文';\n case Language.zh_tw:\n return '繁體中文';\n case Language.es:\n return 'Español';\n case Language.fr:\n return 'Français';\n default:\n return '';\n }\n }\n\n public static getI18nMappedLanguages(): TI18nMappedLanguages {\n const workingMappings: TI18nMappedLanguages = {};\n\n const languages = this.getLanguages();\n\n Object.keys(languages).forEach((key) => {\n const translation = this.getOverridesForLanguage(key as Language);\n\n workingMappings[key as Language] = {\n translation,\n };\n });\n\n return workingMappings;\n }\n\n /**\n * Create a way to override translations for specific languages, and hotels.\n * @param lang\n * @param overrideTree\n */\n public static registerOverride(lang: Language, overrideTree: DeepPartial<TTranslation>) {\n LanguageProvider.overrides[lang] = mergeDeep<TTranslation>(LanguageProvider.overrides[lang], overrideTree) as TTranslation;\n\n // Check required for making sure Lang is loaded first.\n if (i18n && i18n.addResourceBundle) {\n i18n.addResourceBundle(lang, 'translation', this.getOverridesForLanguage(lang));\n }\n }\n\n public static getLanguages(): TLanguageTranslations {\n if (this.filterLanguages.length >= 1) {\n const filteredLanguages: TLanguageTranslations = {};\n\n this.filterLanguages.map((lang) => {\n filteredLanguages[lang] = this.languages[lang];\n });\n\n return filteredLanguages;\n } else {\n return this.languages;\n }\n }\n\n private static getOverridesForLanguage(lang: Language): TTranslation {\n const languages = this.getLanguages();\n const translation = languages[lang];\n return mergeDeep<TTranslation>(translation, LanguageProvider.overrides[lang]) as TTranslation;\n }\n}\n"]}