@roomstay/frontend 2.6.58 → 2.6.60

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 (69) hide show
  1. package/dist/449.bundle.js +1 -1
  2. package/dist/903.bundle.js +1 -1
  3. package/dist/main.bundle.js +1 -1
  4. package/dist/src/components/generic/BookNowPayLaterInfoBlock.js +1 -1
  5. package/dist/src/components/generic/BookNowPayLaterInfoBlock.js.map +1 -1
  6. package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +9 -1
  7. package/dist/src/components/generic/BookingWizard/BookingWizard.js +86 -1
  8. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  9. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.d.ts +14 -1
  10. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js +27 -0
  11. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js.map +1 -1
  12. package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +19 -0
  13. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js +116 -30
  14. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js.map +1 -1
  15. package/dist/src/components/generic/BookingWizard/BookingWizardContext.d.ts +12 -1
  16. package/dist/src/components/generic/BookingWizard/BookingWizardContext.js.map +1 -1
  17. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.d.ts +6 -2
  18. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js +96 -29
  19. package/dist/src/components/generic/BookingWizard/BookingWizardDateSelector/BookingWizardDateSelector.js.map +1 -1
  20. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.d.ts +18 -3
  21. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js +118 -27
  22. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js.map +1 -1
  23. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js +53 -18
  24. package/dist/src/components/generic/BookingWizard/BookingWizardHotelSelector/BookingWizardHotelSelector.js.map +1 -1
  25. package/dist/src/components/generic/BookingWizard/BookingWizardPromoCode/BookingWizardPromoCode.js +5 -2
  26. package/dist/src/components/generic/BookingWizard/BookingWizardPromoCode/BookingWizardPromoCode.js.map +1 -1
  27. package/dist/src/components/generic/DateRangePicker/DateRangePicker.d.ts +6 -0
  28. package/dist/src/components/generic/DateRangePicker/DateRangePicker.js +8 -7
  29. package/dist/src/components/generic/DateRangePicker/DateRangePicker.js.map +1 -1
  30. package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.d.ts +2 -0
  31. package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.js +11 -2
  32. package/dist/src/components/generic/DateRangePicker/FloatingDateRangePicker.js.map +1 -1
  33. package/dist/src/components/steps/hotel/HotelCard.js +22 -5
  34. package/dist/src/components/steps/hotel/HotelCard.js.map +1 -1
  35. package/dist/src/components/steps/room/ImageGallerySlider.js +5 -3
  36. package/dist/src/components/steps/room/ImageGallerySlider.js.map +1 -1
  37. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +7 -1
  38. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
  39. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.d.ts +3 -1
  40. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +47 -21
  41. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
  42. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.d.ts +3 -1
  43. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js +7 -6
  44. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js.map +1 -1
  45. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +9 -2
  46. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  47. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngine.d.ts +4 -0
  48. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngine.js.map +1 -1
  49. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.d.ts +28 -0
  50. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +202 -41
  51. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  52. package/dist/src/index.d.ts +1 -0
  53. package/dist/src/index.js +5 -2
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/models/BookingWizard/BookingWizardProperty.d.ts +4 -0
  56. package/dist/src/models/BookingWizard/BookingWizardProperty.js.map +1 -1
  57. package/dist/src/pages/findReservation/FindReservation.js +15 -4
  58. package/dist/src/pages/findReservation/FindReservation.js.map +1 -1
  59. package/dist/src/pages/hotel/HotelInfo.js +1 -1
  60. package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
  61. package/dist/src/translations/Translation.d.ts +7 -1
  62. package/dist/src/translations/Translation.js +7 -1
  63. package/dist/src/translations/Translation.js.map +1 -1
  64. package/dist/src/translations/languages/en-gb.js +7 -1
  65. package/dist/src/translations/languages/en-gb.js.map +1 -1
  66. package/dist/test.bundle.js +1 -1
  67. package/dist/tests/offline/entry/config/hotelSpecDefault.js +1 -1
  68. package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
  69. package/package.json +1 -1
@@ -1,6 +1,34 @@
1
+ import React from 'react';
1
2
  import type { InlineRoomMiniEngine } from './InlineRoomMiniEngine';
2
3
  export interface InlineRoomMiniEngineElementProps {
3
4
  engine: InlineRoomMiniEngine;
4
5
  }
5
6
  export default function InlineRoomMiniEngineElement(props: InlineRoomMiniEngineElementProps): JSX.Element;
6
7
  export declare const renderInlineRoomMiniEngineElement: (container: Element, engine: InlineRoomMiniEngine) => void;
8
+ export declare const GuestSelectorCustom: ({ maxAdults, maxChildren, maxInfants, defaultValue, onChange, disableChild, showInfants, disableRoom, applyButton, promoCodeConfig, }: {
9
+ maxAdults?: number | undefined;
10
+ maxChildren?: number | undefined;
11
+ maxInfants?: number | undefined;
12
+ defaultValue?: {
13
+ adults?: number | undefined;
14
+ children?: number | undefined;
15
+ infants?: number | undefined;
16
+ room?: number | undefined;
17
+ } | undefined;
18
+ onChange?: ((params: {
19
+ adults: number;
20
+ children: number;
21
+ infants: number;
22
+ room: number;
23
+ }) => void) | undefined;
24
+ disableChild?: boolean | undefined;
25
+ showInfants?: boolean | undefined;
26
+ disableRoom?: boolean | undefined;
27
+ applyButton?: boolean | undefined;
28
+ promoCodeConfig?: {
29
+ promoCode: string;
30
+ setPromoCode: React.Dispatch<React.SetStateAction<string>>;
31
+ onChange: (val: any) => void;
32
+ valid?: boolean | undefined;
33
+ } | undefined;
34
+ }) => JSX.Element;
@@ -35,9 +35,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.renderInlineRoomMiniEngineElement = void 0;
38
+ exports.GuestSelectorCustom = exports.renderInlineRoomMiniEngineElement = void 0;
39
39
  const contexts_1 = require("../../contexts/index.js");
40
40
  const hooks_1 = require("../../hooks/index.js");
41
+ const classnames_1 = __importDefault(require("classnames"));
41
42
  const ErrorContext_1 = require("contexts/ErrorContext");
42
43
  const NotificationContext_1 = require("contexts/NotificationContext");
43
44
  const dayjs_1 = __importDefault(require("dayjs"));
@@ -54,6 +55,7 @@ const BookNowPayLaterInfoBlock_1 = require("../../components/generic/BookNowPayL
54
55
  const FloatingDatePicker_1 = __importDefault(require("../../components/generic/date/FloatingDatePicker"));
55
56
  const Icon_1 = __importStar(require("../../components/generic/Icon/Icon"));
56
57
  const LargeLoader_1 = __importDefault(require("../../components/generic/loader/LargeLoader"));
58
+ const NumberIncrement_1 = __importDefault(require("../../components/generic/NumberIncrement"));
57
59
  const Overlay_1 = require("../../components/generic/Overlay/Overlay");
58
60
  const PromoCodeInput_1 = __importDefault(require("../../components/generic/PromoCodeInput"));
59
61
  const Select_1 = require("../../components/generic/Select/Select");
@@ -70,8 +72,11 @@ const RoomstayThemeEngine_1 = __importDefault(require("../../providers/RoomstayT
70
72
  const Color_1 = require("../../util/Color");
71
73
  const DataLayer_1 = __importStar(require("../../util/DataLayer"));
72
74
  const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
75
+ const InlineRoomMiniEngine_module_scss_1 = __importDefault(require("./InlineRoomMiniEngine.module.scss"));
73
76
  function InlineRoomMiniEngineElement(props) {
74
- var _a;
77
+ var _a, _b, _c;
78
+ const { layout = 'default', policy, priceDescription } = props.engine.getConfig();
79
+ const isCardLayout = layout === 'card';
75
80
  const { hotel } = (0, hooks_1.useCurrentHotel)();
76
81
  const { memberNumber } = (0, useSignedInMember_1.useSignedInMember)();
77
82
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
@@ -203,7 +208,9 @@ function InlineRoomMiniEngineElement(props) {
203
208
  DataLayer_1.default.instance.sendInteraction('Guests', DataLayer_1.InteractionType.NUMBER_INPUT, DataLayer_1.InteractionStep.ROOMS);
204
209
  row.setChildren(children);
205
210
  }
206
- basketContext.updateBasketRow(row);
211
+ if (!isCardLayout) {
212
+ basketContext.updateBasketRow(row);
213
+ }
207
214
  };
208
215
  const updateDateValues = (startDate, endDate) => {
209
216
  if (startDate && endDate) {
@@ -219,9 +226,12 @@ function InlineRoomMiniEngineElement(props) {
219
226
  }
220
227
  const isCompact = bounds.width < 1000 ? '--compact' : '';
221
228
  const findRoomsOnClick = () => __awaiter(this, void 0, void 0, function* () {
222
- var _b;
229
+ var _d;
230
+ if (isCardLayout) {
231
+ basketContext.updateBasketRow(row);
232
+ }
223
233
  setLoading(true);
224
- setRooms((_b = (yield BookingAPI_1.default.Availability.fetchAvailabilityData(row, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber))) === null || _b === void 0 ? void 0 : _b.filter((room) => room.code === props.engine.getRoomCode()));
234
+ setRooms((_d = (yield BookingAPI_1.default.Availability.fetchAvailabilityData(row, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber))) === null || _d === void 0 ? void 0 : _d.filter((room) => room.code === props.engine.getRoomCode()));
225
235
  setLoading(false);
226
236
  });
227
237
  const getButtonLabelHandler = () => {
@@ -233,6 +243,12 @@ function InlineRoomMiniEngineElement(props) {
233
243
  const updateNumberOfChildrenOnChange = (value) => {
234
244
  updatePeopleValues({ children: +value });
235
245
  };
246
+ const defaultGuestValue = {
247
+ adults: (_a = row === null || row === void 0 ? void 0 : row.getAdults()) !== null && _a !== void 0 ? _a : 1,
248
+ children: (_b = row === null || row === void 0 ? void 0 : row.getChildren()) !== null && _b !== void 0 ? _b : 0,
249
+ infants: 0,
250
+ room: 1,
251
+ };
236
252
  const updatePromoCode = (code) => {
237
253
  DataLayer_1.default.instance.sendInteraction('Promo Code updated', DataLayer_1.InteractionType.FORM_FIELD, DataLayer_1.InteractionStep.ROOMS);
238
254
  if (row) {
@@ -272,39 +288,98 @@ function InlineRoomMiniEngineElement(props) {
272
288
  const changePromoCode = (val) => {
273
289
  updatePromoCode(val);
274
290
  };
275
- const maxOccupancy = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.maxOccupancy) !== null && _a !== void 0 ? _a : 1;
291
+ const maxOccupancy = (_c = hotel === null || hotel === void 0 ? void 0 : hotel.maxOccupancy) !== null && _c !== void 0 ? _c : 1;
292
+ const DatePickerSelector = () => {
293
+ const inner = () => {
294
+ if (isCardLayout) {
295
+ return (react_1.default.createElement("div", { className: (0, classnames_1.default)('u-cursor-pointer', InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-item-dates-inner']) },
296
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(InlineRoomMiniEngine_module_scss_1.default['card']) },
297
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['image'] },
298
+ react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Calendar })),
299
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['content'] },
300
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Body }, t(Translation_1.Translation.Misc.CheckIn)),
301
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['sub-title'], type: Text_1.TextType.Body, color: Color_1.Color.Navy }, (row === null || row === void 0 ? void 0 : row.getArrivalDate()) ? row.getArrivalDate() : t(Translation_1.Translation.Misc.CheckInPlaceHolder)))),
302
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(InlineRoomMiniEngine_module_scss_1.default['card']) },
303
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['image'] },
304
+ react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Calendar })),
305
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['content'] },
306
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Body }, t(Translation_1.Translation.Misc.CheckOut)),
307
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['sub-title'] }, (row === null || row === void 0 ? void 0 : row.getDepartureDate()) ? row.getDepartureDate() : t(Translation_1.Translation.Misc.CheckOutPlaceHolder))))));
308
+ }
309
+ else {
310
+ return (react_1.default.createElement("div", { className: "u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer" },
311
+ react_1.default.createElement(Text_1.default, { color: (row === null || row === void 0 ? void 0 : row.getArrivalDate()) ? Color_1.Color.Accent : Color_1.Color.Graphite, className: "u-mw-75 u-align-center", bold: !!(row === null || row === void 0 ? void 0 : row.getArrivalDate()) },
312
+ react_1.default.createElement("span", null, (row === null || row === void 0 ? void 0 : row.getArrivalDate()) ? row.getArrivalDate() : 'Arrival Date')),
313
+ react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.ArrowRight2 }),
314
+ react_1.default.createElement(Text_1.default, { color: (row === null || row === void 0 ? void 0 : row.getDepartureDate()) ? Color_1.Color.Accent : Color_1.Color.Graphite, className: "u-marg-right u-mw-75 u-align-center", bold: !!(row === null || row === void 0 ? void 0 : row.getDepartureDate()) },
315
+ react_1.default.createElement("span", null, (row === null || row === void 0 ? void 0 : row.getDepartureDate()) ? row.getDepartureDate() : 'Departure Date'))));
316
+ }
317
+ };
318
+ return (react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row === null || row === void 0 ? void 0 : row.getStartDate(), selectedDateChanged: updateDateValues, className: (0, classnames_1.default)('rs-inline-filter-item-dates', {
319
+ 'u-w-100@xl- room-builder-progress--value u-marg-left--none ': !isCardLayout,
320
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-item-dates']]: isCardLayout,
321
+ }) },
322
+ react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere), wrapperClasses: "u-w-100@xl-" }, inner())));
323
+ };
324
+ const GuestSelector = () => {
325
+ var _a, _b, _c, _d, _e, _f, _g;
326
+ if (isCardLayout) {
327
+ const numChildren = ((_a = row === null || row === void 0 ? void 0 : row.getChildren) === null || _a === void 0 ? void 0 : _a.call(row)) || 0;
328
+ const maxAdults = maxOccupancy - numChildren;
329
+ const maxChildren = maxOccupancy + 1 - (((_b = row === null || row === void 0 ? void 0 : row.getAdults) === null || _b === void 0 ? void 0 : _b.call(row)) || 0);
330
+ return (react_1.default.createElement(exports.GuestSelectorCustom, { maxAdults: maxAdults, maxChildren: maxChildren, onChange: (newValue) => {
331
+ updatePeopleValues({
332
+ adults: +newValue.adults,
333
+ children: +newValue.children,
334
+ });
335
+ }, disableChild: false, showInfants: false, disableRoom: true, applyButton: false, defaultValue: defaultGuestValue, promoCodeConfig: {
336
+ promoCode: (_c = basketContext.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCode(),
337
+ setPromoCode,
338
+ onChange: changePromoCode,
339
+ valid: ((_d = basketContext.selectedBasketRow) === null || _d === void 0 ? void 0 : _d.getPromoCodeStatus()) !== 'new' ? ((_e = basketContext.selectedBasketRow) === null || _e === void 0 ? void 0 : _e.getPromoCodeStatus()) === 'valid' : undefined,
340
+ } }));
341
+ }
342
+ else {
343
+ return (react_1.default.createElement(react_1.default.Fragment, null,
344
+ react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateAdults), wrapperClasses: "u-w-100@xl- rs-inline-filter-item-adult" },
345
+ react_1.default.createElement("div", { className: "room-builder-progress--value --mw-l u-flex justify-content-center " },
346
+ react_1.default.createElement(Select_1.Select, { nativeOnMobile: true, options: [...Array(maxOccupancy - ((row === null || row === void 0 ? void 0 : row.getChildren()) ? row.getChildren() : 0))].map((v, value) => {
347
+ value += 1;
348
+ return {
349
+ text: StringHelper_1.default.pluralWithDictAndCount(value, Translation_1.Translation.Step.Date.Adult, t),
350
+ value: value.toString(),
351
+ };
352
+ }), value: (_f = row === null || row === void 0 ? void 0 : row.getAdults()) === null || _f === void 0 ? void 0 : _f.toString(), onChange: updateNumberOfAdultsOnChange, keyName: "value", labelName: "text" }))),
353
+ react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateChildren), wrapperClasses: "u-w-100@xl- rs-inline-filter-item-children" },
354
+ react_1.default.createElement("div", { className: "room-builder-progress--value --mw-l u-flex justify-content-center" },
355
+ react_1.default.createElement(Select_1.Select, { nativeOnMobile: true, options: [...Array(maxOccupancy + 1 - ((row === null || row === void 0 ? void 0 : row.getAdults()) ? row.getAdults() : 0))].map((v, value) => {
356
+ return {
357
+ text: StringHelper_1.default.pluralWithDictAndCount(value, Translation_1.Translation.Step.Date.Child, t),
358
+ value: value.toString(),
359
+ };
360
+ }), value: (_g = row === null || row === void 0 ? void 0 : row.getChildren()) === null || _g === void 0 ? void 0 : _g.toString(), onChange: updateNumberOfChildrenOnChange, keyName: "value", labelName: "text" })))));
361
+ }
362
+ };
276
363
  return (0, react_1.useMemo)(() => {
277
- var _a, _b, _c, _d, _e;
364
+ var _a, _b, _c;
278
365
  return (react_1.default.createElement(react_1.default.Fragment, null,
279
- react_1.default.createElement("div", { className: `room-builder-progress ${isCompact}` },
280
- react_1.default.createElement("div", { className: "u-flex w-100 flex-wrap room-builder-progress--item --current", ref: ref },
281
- react_1.default.createElement("div", { className: "u-flex u-flex-align-center flex-wrap flex-row u-w-100@xl-" },
282
- react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row === null || row === void 0 ? void 0 : row.getStartDate(), selectedDateChanged: updateDateValues, className: "u-w-100@xl- room-builder-progress--value u-marg-left--none" },
283
- react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere), wrapperClasses: "u-w-100@xl-" },
284
- react_1.default.createElement("div", { className: "u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer" },
285
- react_1.default.createElement(Text_1.default, { color: (row === null || row === void 0 ? void 0 : row.getArrivalDate()) ? Color_1.Color.Accent : Color_1.Color.Graphite, className: "u-mw-75 u-align-center", bold: !!(row === null || row === void 0 ? void 0 : row.getArrivalDate()) },
286
- react_1.default.createElement("span", null, (row === null || row === void 0 ? void 0 : row.getArrivalDate()) ? row.getArrivalDate() : 'Arrival Date')),
287
- react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.ArrowRight2 }),
288
- react_1.default.createElement(Text_1.default, { color: (row === null || row === void 0 ? void 0 : row.getDepartureDate()) ? Color_1.Color.Accent : Color_1.Color.Graphite, className: "u-marg-right u-mw-75 u-align-center", bold: !!(row === null || row === void 0 ? void 0 : row.getDepartureDate()) },
289
- react_1.default.createElement("span", null, (row === null || row === void 0 ? void 0 : row.getDepartureDate()) ? row.getDepartureDate() : 'Departure Date'))))),
290
- react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateAdults), wrapperClasses: "u-w-100@xl-" },
291
- react_1.default.createElement("div", { className: "room-builder-progress--value --mw-l u-flex justify-content-center" },
292
- react_1.default.createElement(Select_1.Select, { nativeOnMobile: true, options: [...Array(maxOccupancy - ((row === null || row === void 0 ? void 0 : row.getChildren()) ? row.getChildren() : 0))].map((v, value) => {
293
- value += 1;
294
- return {
295
- text: StringHelper_1.default.pluralWithDictAndCount(value, Translation_1.Translation.Step.Date.Adult, t),
296
- value: value.toString(),
297
- };
298
- }), value: (_a = row === null || row === void 0 ? void 0 : row.getAdults()) === null || _a === void 0 ? void 0 : _a.toString(), onChange: updateNumberOfAdultsOnChange, keyName: "value", labelName: "text" }))),
299
- react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateChildren), wrapperClasses: "u-w-100@xl-" },
300
- react_1.default.createElement("div", { className: "room-builder-progress--value --mw-l u-flex justify-content-center" },
301
- react_1.default.createElement(Select_1.Select, { nativeOnMobile: true, options: [...Array(maxOccupancy + 1 - ((row === null || row === void 0 ? void 0 : row.getAdults()) ? row.getAdults() : 0))].map((v, value) => {
302
- return {
303
- text: StringHelper_1.default.pluralWithDictAndCount(value, Translation_1.Translation.Step.Date.Child, t),
304
- value: value.toString(),
305
- };
306
- }), value: (_b = row === null || row === void 0 ? void 0 : row.getChildren()) === null || _b === void 0 ? void 0 : _b.toString(), onChange: updateNumberOfChildrenOnChange, keyName: "value", labelName: "text" }))),
307
- react_1.default.createElement(Tooltip_1.default, { title: promoCodeTooltip, wrapperClasses: "u-w-100@xl-" },
366
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(`room-builder-progress ${isCompact} rs-inline-container`, {
367
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-container']]: isCardLayout,
368
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-container--card-layout']]: isCardLayout,
369
+ }) },
370
+ react_1.default.createElement("div", { className: (0, classnames_1.default)('rs-inline-filter-container', {
371
+ 'u-flex w-100 flex-wrap room-builder-progress--item --current': !isCardLayout,
372
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-container']]: isCardLayout,
373
+ }), ref: ref },
374
+ react_1.default.createElement("div", { className: (0, classnames_1.default)('rs-inline-filter-inner', {
375
+ 'u-flex u-flex-align-center flex-wrap flex-row u-w-100@xl-': !isCardLayout,
376
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-inner']]: isCardLayout,
377
+ }) },
378
+ react_1.default.createElement(DatePickerSelector, null),
379
+ react_1.default.createElement(GuestSelector, null),
380
+ react_1.default.createElement(Tooltip_1.default, { title: promoCodeTooltip, wrapperClasses: (0, classnames_1.default)('u-w-100@xl- rs-inline-filter-item-promo', {
381
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-item-promo']]: isCardLayout,
382
+ }) },
308
383
  react_1.default.createElement("div", { className: "room-builder-progress--value u-cursor-pointer", ref: thisElement, onClick: openPromoModalOnClick },
309
384
  react_1.default.createElement("div", { className: "u-flex align-items-center justify-content-center u-w-100@xl-" },
310
385
  react_1.default.createElement(Text_1.default, { className: "u-pad-right--light", type: Text_1.TextType.Body, color: (row === null || row === void 0 ? void 0 : row.getPromoCode()) ? row === null || row === void 0 ? void 0 : row.getPromoCodeColour() : Color_1.Color.Navy }, (row === null || row === void 0 ? void 0 : row.getPromoCode()) ? row === null || row === void 0 ? void 0 : row.getPromoCode() : 'Promo Code'),
@@ -312,17 +387,24 @@ function InlineRoomMiniEngineElement(props) {
312
387
  react_1.default.createElement(Overlay_1.Overlay, { open: isPromoModalOpen, container: RoomstayThemeEngine_1.default.EngineContainer, followElement: thisElement.current, onClose: setPromoCodeOnClose },
313
388
  react_1.default.createElement("div", { className: "u-pad--heavy" },
314
389
  react_1.default.createElement("div", null,
315
- react_1.default.createElement(PromoCodeInput_1.default, { value: (_c = basketContext.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCode(), onChange: changePromoCode, valid: ((_d = basketContext.selectedBasketRow) === null || _d === void 0 ? void 0 : _d.getPromoCodeStatus()) !== 'new'
316
- ? ((_e = basketContext.selectedBasketRow) === null || _e === void 0 ? void 0 : _e.getPromoCodeStatus()) === 'valid'
390
+ react_1.default.createElement(PromoCodeInput_1.default, { value: (_a = basketContext.selectedBasketRow) === null || _a === void 0 ? void 0 : _a.getPromoCode(), onChange: changePromoCode, valid: ((_b = basketContext.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCodeStatus()) !== 'new'
391
+ ? ((_c = basketContext.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCodeStatus()) === 'valid'
317
392
  : undefined })),
318
393
  react_1.default.createElement("div", { className: "u-flex justify-content-end align-items-center u-marg-top" },
319
394
  react_1.default.createElement(BEButton_1.default, { isText: true, size: "small", onClick: cancelPromoPopupOnClick }, t(Translation_1.Translation.Misc.Cancel)))))),
320
- react_1.default.createElement("div", { className: `u-flex flex-xl-nowrap flex-row ${isCompact ? 'w-100' : ''}` },
395
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(`u-flex flex-xl-nowrap flex-row rs-inline-filter-button`, {
396
+ 'w-100': isCompact,
397
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-button']]: isCardLayout,
398
+ }) },
321
399
  react_1.default.createElement(BEButton_1.default, { filled: true, primary: true, isLoading: isLoading, wide: isCompact !== '', onClick: findRoomsOnClick }, t(Translation_1.Translation.Misc.CheckRates)))),
322
- react_1.default.createElement("div", { className: "u-border-rounded" }, !isLoading ? (react_1.default.createElement(AutoAutoHeight_1.default, { open: !isLoading },
400
+ react_1.default.createElement("div", { className: (0, classnames_1.default)('u-border-rounded rs-inline-content', {
401
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-content']]: isCardLayout,
402
+ }) }, !isLoading ? (react_1.default.createElement(AutoAutoHeight_1.default, { open: !isLoading },
323
403
  react_1.default.createElement(react_1.default.Fragment, null,
324
404
  react_1.default.createElement(BookNowPayLaterInfoBlock_1.BookNowPayLaterInfoBlock, null),
325
- rooms.length > 0 ? (react_1.default.createElement(RoomRates_1.default, { featuredRates: featuredRates, rates: standardRates, roomCode: rooms[0].code, getButtonLabel: getButtonLabelHandler, onAddToBasketOverride: onAddToBasketOverrideHandler })) : (react_1.default.createElement(RatesNotFoundBlock_1.default, null))))) : (react_1.default.createElement(LargeLoader_1.default, null))))));
405
+ rooms.length > 0 ? (react_1.default.createElement(RoomRates_1.default, { classNames: (0, classnames_1.default)('rs-inline-content-list', {
406
+ [InlineRoomMiniEngine_module_scss_1.default['rs-inline-content-list']]: isCardLayout,
407
+ }), featuredRates: featuredRates, rates: standardRates, roomCode: rooms[0].code, getButtonLabel: getButtonLabelHandler, onAddToBasketOverride: onAddToBasketOverrideHandler, isCardLayout: isCardLayout, policy: policy, priceDescription: priceDescription })) : (react_1.default.createElement(RatesNotFoundBlock_1.default, null))))) : (react_1.default.createElement(LargeLoader_1.default, null))))));
326
408
  }, [isCompact, isLoading, rooms, basketContext.currentBasketRows, isPromoModalOpen, hotel]);
327
409
  }
328
410
  exports.default = InlineRoomMiniEngineElement;
@@ -339,4 +421,83 @@ const renderInlineRoomMiniEngineElement = (container, engine) => {
339
421
  react_1.default.createElement(InlineRoomMiniEngineElement, { engine: engine }))))))), container);
340
422
  };
341
423
  exports.renderInlineRoomMiniEngineElement = renderInlineRoomMiniEngineElement;
424
+ const GuestSelectorCustom = ({ maxAdults, maxChildren, maxInfants = 10, defaultValue, onChange, disableChild, showInfants, disableRoom, applyButton, promoCodeConfig, }) => {
425
+ var _a, _b, _c, _d;
426
+ const { t } = (0, react_i18next_1.useTranslation)();
427
+ const ref = react_1.default.useRef(null);
428
+ const targetRef = (0, react_1.useRef)(null);
429
+ const [adults, setAdults] = (0, react_1.useState)((_a = defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.adults) !== null && _a !== void 0 ? _a : 1);
430
+ const [children, setChildren] = (0, react_1.useState)((_b = defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.children) !== null && _b !== void 0 ? _b : 0);
431
+ const [infants, setInfants] = (0, react_1.useState)((_c = defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.infants) !== null && _c !== void 0 ? _c : 0);
432
+ const [room, setRoom] = (0, react_1.useState)((_d = defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.room) !== null && _d !== void 0 ? _d : 1);
433
+ const [open, setOpen] = (0, react_1.useState)(false);
434
+ const onChangeAdults = (newValue) => {
435
+ setAdults(newValue);
436
+ onChange === null || onChange === void 0 ? void 0 : onChange({ adults: newValue, children: children, infants: infants, room: room });
437
+ };
438
+ const onChangeChildren = (newValue) => {
439
+ setChildren(newValue);
440
+ onChange === null || onChange === void 0 ? void 0 : onChange({ adults: adults, children: newValue, infants: infants, room: room });
441
+ };
442
+ const onChangeInfants = (newValue) => {
443
+ setInfants(newValue);
444
+ onChange === null || onChange === void 0 ? void 0 : onChange({ adults: adults, children: children, infants: newValue, room: room });
445
+ };
446
+ const onChangeRoom = (newValue) => {
447
+ setRoom(newValue);
448
+ onChange === null || onChange === void 0 ? void 0 : onChange({ adults: adults, children: children, infants: infants, room: newValue });
449
+ };
450
+ const inner = () => {
451
+ return (react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['popper--box'] },
452
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['popper--content'], ref: ref },
453
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['row-wrapper'] },
454
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.row },
455
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Small }, StringHelper_1.default.plural(adults, 'Adult', t)),
456
+ react_1.default.createElement(NumberIncrement_1.default, { number: adults, min: 1, max: maxAdults, onChange: (value) => onChangeAdults(value), textSize: Text_1.TextType.Small }))),
457
+ disableChild ? null : (react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['row-wrapper'] },
458
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.divider }),
459
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.row },
460
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Small }, StringHelper_1.default.plural(children, 'Child', t)),
461
+ react_1.default.createElement(NumberIncrement_1.default, { number: children, min: 0, max: maxChildren, onChange: (value) => onChangeChildren(value), textSize: Text_1.TextType.Small })))),
462
+ showInfants ? (react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['row-wrapper'] },
463
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.divider }),
464
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.row },
465
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Small }, StringHelper_1.default.plural(infants, 'Infant', t)),
466
+ react_1.default.createElement(NumberIncrement_1.default, { number: infants, min: 0, onChange: (value) => onChangeInfants(value), textSize: Text_1.TextType.Small })),
467
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.divider }))) : null,
468
+ disableRoom ? null : (react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['row-wrapper'] },
469
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.divider }),
470
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.row },
471
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Small }, StringHelper_1.default.plural(room, 'Room', t)),
472
+ react_1.default.createElement(NumberIncrement_1.default, { number: room, min: 1, max: 10, onChange: (value) => onChangeRoom(value), textSize: Text_1.TextType.Small })))),
473
+ promoCodeConfig ? (react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['row-wrapper'] },
474
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default.divider }),
475
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(InlineRoomMiniEngine_module_scss_1.default.row) },
476
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Small }, t(Translation_1.Translation.Misc.Promocode)),
477
+ react_1.default.createElement(PromoCodeInput_1.default, { className: InlineRoomMiniEngine_module_scss_1.default.promo, value: promoCodeConfig.promoCode, onChange: promoCodeConfig.onChange, valid: promoCodeConfig.valid })))) : null)));
478
+ };
479
+ const content = () => {
480
+ return (react_1.default.createElement(Overlay_1.Overlay, { offset: [0, 6], usePortal: false, followElement: targetRef.current, placement: "top-start", strategy: "absolute", open: open, onClose: () => setOpen === null || setOpen === void 0 ? void 0 : setOpen(false), className: InlineRoomMiniEngine_module_scss_1.default.popper, hideStyles: true }, inner()));
481
+ };
482
+ const getValueAsText = () => {
483
+ const parts = [StringHelper_1.default.pluralWithCount(adults, 'Adult', t)];
484
+ if (children > 0) {
485
+ parts.push(StringHelper_1.default.pluralWithCount(children, 'Child', t));
486
+ }
487
+ if (infants > 0) {
488
+ parts.push(StringHelper_1.default.pluralWithCount(infants, 'Infant', t));
489
+ }
490
+ return parts.join(' - ');
491
+ };
492
+ return (react_1.default.createElement("div", { ref: targetRef, className: (0, classnames_1.default)('u-cursor-pointer', 'rs-inline-filter-item-guest', InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-item-guest']) },
493
+ react_1.default.createElement("div", { className: (0, classnames_1.default)(InlineRoomMiniEngine_module_scss_1.default['card']), onClick: () => setOpen === null || setOpen === void 0 ? void 0 : setOpen(!open) },
494
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['image'] },
495
+ react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.People })),
496
+ react_1.default.createElement("div", { className: InlineRoomMiniEngine_module_scss_1.default['content'] },
497
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['title'], type: Text_1.TextType.Body }, t(Translation_1.Translation.Misc.Guests)),
498
+ react_1.default.createElement(Text_1.default, { className: InlineRoomMiniEngine_module_scss_1.default['sub-title'], type: Text_1.TextType.Body, color: Color_1.Color.Navy }, getValueAsText())),
499
+ react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.Dropdown })),
500
+ content()));
501
+ };
502
+ exports.GuestSelectorCustom = GuestSelectorCustom;
342
503
  //# sourceMappingURL=InlineRoomMiniEngineElement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InlineRoomMiniEngineElement.js","sourceRoot":"/","sources":["src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA6I;AAC7I,2CAA4D;AAC5D,wDAA4D;AAC5D,sEAA0E;AAC1E,kDAA0B;AAC1B,+CAAwE;AACxE,yCAAmC;AACnC,iDAA+C;AAC/C,uDAA8C;AAC9C,0EAA2C;AAC3C,0DAAuD;AAEvD,iFAAyD;AACzD,kEAAmC;AACnC,6EAAqD;AACrD,4FAAyF;AACzF,sGAA8E;AAC9E,uEAAgE;AAChE,0FAAkE;AAClE,kEAA+D;AAC/D,yFAAiE;AACjE,+DAAkF;AAClF,kEAA2D;AAC3D,mFAA2D;AAC3D,oGAA4E;AAC5E,wGAAgF;AAEhF,8EAA2E;AAC3E,iEAA8D;AAC9D,mEAA2C;AAK3C,uGAA+E;AAC/E,oGAA4E;AAC5E,0FAAkE;AAClE,wCAAqC;AACrC,8DAA+E;AAC/E,uEAA+C;AAM/C,SAAwB,2BAA2B,CAAC,KAAuC;;IACvF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAE7C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAS,EAAE,CAAC,CAAC;IAE/C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAEhE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAa,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAa,EAAE,CAAC,CAAC;IAEnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,2BAAU,GAAE,CAAC;IACnC,MAAM,WAAW,GAAG,eAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAC;IAE9D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAE7B,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,EAAE,MAAK,KAAK,EAAE;QACrC,gBAAgB,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;KAClJ;SAAM;QACH,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,EAAE,MAAK,OAAO,EAAE;YACvC,gBAAgB,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACtE;aAAM;YACH,gBAAgB,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SACxE;KACJ;IAED,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE;YACN,aAAa,CAAC,YAAY,CAAC,IAAI,mBAAS,EAAE,CAAC,CAAC;YAC5C,OAAO;SACV;QAED,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;YAChE,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;gBACpG,IAAI,CAAC,SAAS,EAAE;oBACZ,QAAQ,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAW,CAAC,CAAC;oBAC3F,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClB,eAAe,CAAC,IAAI,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAG,EAAE;YACR,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAExB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,GAAG,EAAE;YACL,gBAAgB,EAAE,CAAC;SACtB;IACL,CAAC,EAAE,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IAE1B,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACX,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAAE,OAAO;QAEzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,aAAa,GAAe,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAe,EAAE,CAAC;QAEzC,IAAI,8BAAoB,CAAC,QAAQ,EAAE,EAAE;YACjC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACvC,IAAI,CAAA,MAAA,WAAW,CAAC,SAAS,0CAAE,WAAW,EAAE,OAAK,MAAA,MAAA,aAAa,CAAC,iBAAiB,0CAAE,YAAY,EAAE,0CAAE,WAAW,EAAE,CAAA,EAAE;oBACzG,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;iBAC1C;qBAAM;oBACH,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBACnC;aACJ;YAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;aACvC;SACJ;aAAM;YACH,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnC;QAED,IAAI;YACA,MAAM,MAAM,GAAqB;gBAC7B,WAAW,EAAE,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,0CAAE,MAAM,CAAC,UAAU,CAAC;gBACpD,YAAY,EAAE,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,EAAE,0CAAE,MAAM,CAAC,UAAU,CAAC;gBACnD,SAAS,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE;gBAC3B,WAAW,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,EAAE;gBAC/B,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,SAAS;aACvB,CAAC;YAEF,MAAM,UAAU,GACZ,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;gBAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAE5B,MAAM,SAAS,GAAmB;oBAC9B,IAAI,EAAE,IAAc;oBACpB,IAAI,EAAE,IAAc;oBACpB,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;oBAClC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;oBACpC,QAAQ,EAAE,GAAG,CAAC,eAAe;oBAE7B,KAAK,EACD,MAAA,MAAA,IAAI,CAAC,QAAQ,EAAE,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBAC1B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;wBAC5B,OAAO;4BACH,IAAI;4BACJ,IAAI;4BAEJ,KAAK,EAAE;gCACH,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;gCACpC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;gCAChC,QAAQ,EAAE,GAAG,CAAC,eAAe;6BAChC;yBACJ,CAAC;oBACN,CAAC,CAAC,mCAAI,EAAE;iBACf,CAAC;gBAEF,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC,mCAAI,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,IAAI,yCAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1D,KAAK,CAAC,KAAK,CAAC,CAAC;SAChB;QAAC,OAAO,EAAE,EAAE;YACT,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACpB;QAED,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE;YACf,4DAA4D;YAC5D,6BAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACjD;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA8D,EAAE,EAAE;QAC5G,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,EAAE;YACtC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,YAAY,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE;YAChE,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,YAAY,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAED,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,SAAsB,EAAE,OAAoB,EAAE,EAAE;QACtE,IAAI,SAAS,IAAI,OAAO,EAAE;YACtB,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAExB,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC;IAEF,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,EAAE,CAAA,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,EAAE,CAAA,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC,CAAC;QAChC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAC/C;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,MAAM,gBAAgB,GAAG,GAAS,EAAE;;QAChC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,MAAA,CAAC,MAAM,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,EAAE,YAAY,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAW,CAAC,CAAC;QAC5K,UAAU,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAA,CAAC;IACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,OAAO,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CAAC,KAAa,EAAE,EAAE;QACnD,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,MAAM,8BAA8B,GAAG,CAAC,KAAa,EAAE,EAAE;QACrD,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;QACrC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,UAAU,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAE5G,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACvB,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,IAAI,EAAE;gBACN,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC9B;SACJ;IACL,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CAAC,IAAc,EAAE,EAAE;QACpD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACnC,mBAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAExI,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO;aACF,aAAa,CAAC;YACX,IAAI,EAAE,0BAAgB,CAAC,OAAO,EAAE,EAAE,QAAQ;SAC7C,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;;YACP,iCAAiC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,mCAAI,YAAY,IAAI,0BAAgB,CAAC,UAAU,EAAE,YAAY,OAAO,CAAC,mBAAmB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5I,CAAC,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,YAAY,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,CAAC,CAAC;QAClC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACjC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACxG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,EAAE;QACjC,eAAe,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,mCAAI,CAAC,CAAC;IAE9C,OAAO,IAAA,eAAO,EACV,GAAG,EAAE;;QAAC,OAAA,CACF;YACI,uCAAK,SAAS,EAAE,yBAAyB,SAAS,EAAE;gBAChD,uCAAK,SAAS,EAAC,8DAA8D,EAAC,GAAG,EAAE,GAAG;oBAClF,uCAAK,SAAS,EAAC,2DAA2D;wBACtE,8BAAC,4BAAkB,IACf,SAAS,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,EAC9B,mBAAmB,EAAE,gBAAgB,EACrC,SAAS,EAAC,4DAA4D;4BAEtE,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,EAAE,cAAc,EAAC,aAAa;gCAC/G,uCAAK,SAAS,EAAC,+EAA+E;oCAC1F,8BAAC,cAAI,IAAC,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,EAAE,EAAC,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAE,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,EAAE,CAAA;wCAChI,4CAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,cAAc,CAAQ,CACzE;oCACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,WAAW,GAAI;oCACpC,8BAAC,cAAI,IACD,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,EAAE,EAAC,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,EAC9D,SAAS,EAAC,qCAAqC,EAC/C,IAAI,EAAE,CAAC,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,EAAE,CAAA;wCAE/B,4CAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAQ,CAC/E,CACL,CACA,CACO;wBACrB,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,cAAc,EAAC,aAAa;4BAC/E,uCAAK,SAAS,EAAC,mEAAmE;gCAC9E,8BAAC,eAAM,IACH,cAAc,QACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;wCAC3G,KAAK,IAAI,CAAC,CAAC;wCACX,OAAO;4CACH,IAAI,EAAE,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;4CAChF,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;yCAC1B,CAAC;oCACN,CAAC,CAAC,EACF,KAAK,EAAE,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE,0CAAE,QAAQ,EAAE,EACnC,QAAQ,EAAE,4BAA4B,EACtC,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,MAAM,GAClB,CACA,CACA;wBACV,8BAAC,iBAAO,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,cAAc,EAAC,aAAa;4BACjF,uCAAK,SAAS,EAAC,mEAAmE;gCAC9E,8BAAC,eAAM,IACH,cAAc,QACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE,EAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;wCAC3G,OAAO;4CACH,IAAI,EAAE,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;4CAChF,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;yCAC1B,CAAC;oCACN,CAAC,CAAC,EACF,KAAK,EAAE,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,EAAE,0CAAE,QAAQ,EAAE,EACrC,QAAQ,EAAE,8BAA8B,EACxC,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,MAAM,GAClB,CACA,CACA;wBACV,8BAAC,iBAAO,IAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAC,aAAa;4BAC1D,uCAAK,SAAS,EAAC,+CAA+C,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB;gCAC3G,uCAAK,SAAS,EAAC,8DAA8D;oCACzE,8BAAC,cAAI,IAAC,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,EAAC,CAAC,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,aAAK,CAAC,IAAI,IACxH,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,EAAC,CAAC,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CACtD;oCACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,GAAI,CACtD,CACJ,CACA;wBACV,8BAAC,iBAAO,IAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,6BAAmB,CAAC,eAAe,EAAE,aAAa,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB;4BAC7I,uCAAK,SAAS,EAAC,cAAc;gCACzB;oCACI,8BAAC,wBAAc,IACX,KAAK,EAAE,MAAA,aAAa,CAAC,iBAAiB,0CAAE,YAAY,EAAE,EACtD,QAAQ,EAAE,eAAe,EACzB,KAAK,EACD,CAAA,MAAA,aAAa,CAAC,iBAAiB,0CAAE,kBAAkB,EAAE,MAAK,KAAK;4CAC3D,CAAC,CAAC,CAAA,MAAA,aAAa,CAAC,iBAAiB,0CAAE,kBAAkB,EAAE,MAAK,OAAO;4CACnE,CAAC,CAAC,SAAS,GAErB,CACA;gCAEN,uCAAK,SAAS,EAAC,0DAA0D;oCACrE,8BAAC,kBAAQ,IAAC,MAAM,QAAC,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,uBAAuB,IACzD,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,CACT,CACJ,CACA,CACR;oBACN,uCAAK,SAAS,EAAE,kCAAkC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBACxE,8BAAC,kBAAQ,IAAC,MAAM,QAAC,OAAO,QAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,IAC3F,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxB,CACT,CACJ;gBACN,uCAAK,SAAS,EAAC,kBAAkB,IAC5B,CAAC,SAAS,CAAC,CAAC,CAAC,CACV,8BAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,SAAS;oBAC5B;wBACI,8BAAC,mDAAwB,OAAG;wBAC3B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB,8BAAC,mBAAS,IACN,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAc,EACjC,cAAc,EAAE,qBAAqB,EACrC,qBAAqB,EAAE,4BAA4B,GACrD,CACL,CAAC,CAAC,CAAC,CACA,8BAAC,4BAAkB,OAAG,CACzB,CACF,CACU,CACpB,CAAC,CAAC,CAAC,CACA,8BAAC,qBAAW,OAAG,CAClB,CACC,CACJ,CACP,CACN,CAAA;KAAA,EACD,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAC1F,CAAC;AACN,CAAC;AA9WD,8CA8WC;AAEM,MAAM,iCAAiC,GAAG,CAAC,SAAkB,EAAE,MAA4B,EAAE,EAAE;IAClG,IAAA,kBAAM,EACF,8BAAC,sCAA2B,IAAC,MAAM,EAAE,MAAM;QACvC,8BAAC,6BAAU,IACP,MAAM,EAAE;gBACJ,kBAAkB,EAAE,KAAK;gBACzB,oBAAoB,EAAE,KAAK;aAC9B;YAED,8BAAC,gDAA0B;gBACvB,8BAAC,kCAAmB;oBAChB,8BAAC,gCAAqB,IAAC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO;wBAC5D,8BAAC,+BAAoB;4BACjB,8BAAC,2BAA2B,IAAC,MAAM,EAAE,MAAM,GAAI,CAC5B,CACH,CACN,CACG,CACpB,CACa,EAC9B,SAAS,CACZ,CAAC;AACN,CAAC,CAAC;AAtBW,QAAA,iCAAiC,qCAsB5C","sourcesContent":["import { BasketContext, BasketContextWrapper, BookingEngineContextWrapper, CompanyContext, CompanyContextWrapper } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { ErrorContextWrapper } from 'contexts/ErrorContext';\nimport { NotificationContextWrapper } from 'contexts/NotificationContext';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { render } from 'react-dom';\nimport { useTranslation } from 'react-i18next';\nimport { HashRouter } from 'react-router-dom';\nimport useMeasure from 'react-use-measure';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport { BookNowPayLaterInfoBlock } from '@/components/generic/BookNowPayLaterInfoBlock';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport RatesNotFoundBlock from '@/components/steps/room/RatesNotFoundBlock';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport type { InlineRoomMiniEngine } from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nimport { RoomListSearchEvent } from '@/events/actions/RoomListSearchEvent';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow from '@/models/BasketRow';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomListSearch } from '@/models/RoomListSearch';\nimport { SearchParameters } from '@/models/SearchParameters';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport StringHelper from '@/util/StringHelper';\n\nexport interface InlineRoomMiniEngineElementProps {\n engine: InlineRoomMiniEngine;\n}\n\nexport default function InlineRoomMiniEngineElement(props: InlineRoomMiniEngineElementProps) {\n const { hotel } = useCurrentHotel();\n const { memberNumber } = useSignedInMember();\n\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n\n const row = basketContext.currentBasketRows[0];\n const [isLoading, setLoading] = useState(true);\n const [ranFirstLoad, setRanFirstLoad] = useState(false);\n const [rooms, setRooms] = useState<Room[]>([]);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n const [featuredRates, setFeaturedRates] = useState<RoomRate[]>([]);\n const [standardRates, setStandardRates] = useState<RoomRate[]>([]);\n\n const [promoCode, setPromoCode] = useState(row?.getPromoCode());\n const { t } = useTranslation();\n\n const [ref, bounds] = useMeasure();\n const thisElement = React.useRef<HTMLDivElement | null>(null);\n\n const { raise } = useEvent();\n\n let promoCodeTooltip = '';\n\n if (row?.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? t(Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation.Step.Date.PromoCodeTooltip.NoValue);\n } else {\n if (row?.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Valid);\n } else {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Invalid);\n }\n }\n\n useEffect(() => {\n let cancelled = false;\n\n if (!row) {\n basketContext.addBasketRow(new BasketRow());\n return;\n }\n\n if (row && row.getStartDate() && row.getEndDate() && !ranFirstLoad) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber).then((hotelRooms) => {\n if (!cancelled) {\n setRooms(hotelRooms?.filter((room) => room.code === props.engine.getRoomCode()) as Room[]);\n setLoading(false);\n setRanFirstLoad(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n useEffect(() => {\n if (row) {\n findRoomsOnClick();\n }\n }, [row?.getPromoCode()]);\n\n useEffect(() => {\n if (!(rooms && rooms.length > 0)) return;\n\n const room = rooms[0];\n\n let nonPromoRates: RoomRate[] = [];\n const toSetFeaturedRate: RoomRate[] = [];\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n toSetFeaturedRate.unshift(currentRate);\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate.length > 0) {\n setFeaturedRates(toSetFeaturedRate);\n }\n } else {\n nonPromoRates = room.getRates();\n }\n\n try {\n const search: SearchParameters = {\n checkInTime: row?.getStartDate()?.format('YYYY-M-D'),\n checkOutTime: row?.getEndDate()?.format('YYYY-M-D'),\n numAdults: row?.getAdults(),\n numChildren: row?.getChildren(),\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const eventRooms: RoomListSearch[] =\n rooms?.map((room) => {\n const { name, code } = room;\n\n const foundRoom: RoomListSearch = {\n name: name as string,\n code: code as string,\n lowestPrice: room.getLowestPrice(),\n highestPrice: room.getHighestPrice(),\n currency: ccx.currentCurrency,\n\n rates:\n room.getRates()?.map((rate) => {\n const { name, code } = rate;\n return {\n name,\n code,\n\n price: {\n averagePrice: rate.getAveragePrice(),\n totalPrice: rate.getTotalPrice(),\n currency: ccx.currentCurrency,\n },\n };\n }) ?? [],\n };\n\n return foundRoom;\n }) ?? [];\n\n const event = new RoomListSearchEvent(search, eventRooms);\n raise(event);\n } catch (ex) {\n console.warn(ex);\n }\n\n setStandardRates(nonPromoRates);\n }, [rooms]);\n\n useEffect(() => {\n if (hotel?.colors) {\n // Do this manually as Guide Step manages this for Fullpage.\n RoomstayThemeEngine.changeTheme(hotel.colors);\n }\n }, [hotel, hotel?.colors]);\n\n const updatePeopleValues = ({ adults, children }: { adults?: number; children?: number; promoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n\n basketContext.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n basketContext.updateBasketRow(row, false);\n }\n };\n\n if (!row?.getArrivalDate() && !row?.getDepartureDate()) {\n const today = Date.now();\n row?.setStartDate(dayjs(today));\n row?.setEndDate(dayjs(today).add(1, 'day'));\n }\n\n const isCompact = bounds.width < 1000 ? '--compact' : '';\n\n const findRoomsOnClick = async () => {\n setLoading(true);\n setRooms((await API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber))?.filter((room) => room.code === props.engine.getRoomCode()) as Room[]);\n setLoading(false);\n };\n const getButtonLabelHandler = () => {\n return t(Translation.Misc.BookNow);\n };\n\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code updated', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (row) {\n row.setPromoCode(code);\n basketContext.updateBasketRow(row);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const onAddToBasketOverrideHandler = (rate: RoomRate) => {\n row.setRate(rate);\n basketContext.updateBasketRow(row);\n DataLayer.instance.sendRoomRateAddToCart(rate, row.getNumberOfDays(), row.getStartDate(), row.getEndDate(), row.getPreUpsellRoomRate());\n\n const session = props.engine.getSessionProvider();\n session\n .updateSession({\n step: StepConfirmation.getName(), // TODO:\n })\n .then(() => {\n // TODO: Remove this URL coupling\n window.open(`${hotel?.checkoutUrl ?? '/checkout/'}#${StepConfirmation.getStepUrl()}?session=${session.getCurrentSessionID()}`, '_self');\n });\n };\n const openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setPromoCode(row?.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const maxOccupancy = hotel?.maxOccupancy ?? 1;\n\n return useMemo(\n () => (\n <>\n <div className={`room-builder-progress ${isCompact}`}>\n <div className=\"u-flex w-100 flex-wrap room-builder-progress--item --current\" ref={ref}>\n <div className=\"u-flex u-flex-align-center flex-wrap flex-row u-w-100@xl-\">\n <FloatingDatePicker\n startDate={row?.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- room-builder-progress--value u-marg-left--none\"\n >\n <Tooltip title={t(Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={row?.getArrivalDate() ? Color.Accent : Color.Graphite} className=\"u-mw-75 u-align-center\" bold={!!row?.getArrivalDate()}>\n <span>{row?.getArrivalDate() ? row.getArrivalDate() : 'Arrival Date'}</span>\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text\n color={row?.getDepartureDate() ? Color.Accent : Color.Graphite}\n className=\"u-marg-right u-mw-75 u-align-center\"\n bold={!!row?.getDepartureDate()}\n >\n <span>{row?.getDepartureDate() ? row.getDepartureDate() : 'Departure Date'}</span>\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(maxOccupancy - (row?.getChildren() ? row.getChildren() : 0))].map((v: any, value: number) => {\n value += 1;\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Adult, t),\n value: value.toString(),\n };\n })}\n value={row?.getAdults()?.toString()}\n onChange={updateNumberOfAdultsOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(maxOccupancy + 1 - (row?.getAdults() ? row.getAdults() : 0))].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Child, t),\n value: value.toString(),\n };\n })}\n value={row?.getChildren()?.toString()}\n onChange={updateNumberOfChildrenOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl-\">\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={row?.getPromoCode() ? row?.getPromoCodeColour() : Color.Navy}>\n {row?.getPromoCode() ? row?.getPromoCode() : 'Promo Code'}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </Tooltip>\n <Overlay open={isPromoModalOpen} container={RoomstayThemeEngine.EngineContainer} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={basketContext.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n basketContext.selectedBasketRow?.getPromoCodeStatus() !== 'new'\n ? basketContext.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : undefined\n }\n />\n </div>\n\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText size=\"small\" onClick={cancelPromoPopupOnClick}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </div>\n </Overlay>\n </div>\n <div className={`u-flex flex-xl-nowrap flex-row ${isCompact ? 'w-100' : ''}`}>\n <BEButton filled primary isLoading={isLoading} wide={isCompact !== ''} onClick={findRoomsOnClick}>\n {t(Translation.Misc.CheckRates)}\n </BEButton>\n </div>\n </div>\n <div className=\"u-border-rounded\">\n {!isLoading ? (\n <AutoAutoHeight open={!isLoading}>\n <>\n <BookNowPayLaterInfoBlock />\n {rooms.length > 0 ? (\n <RoomRates\n featuredRates={featuredRates}\n rates={standardRates}\n roomCode={rooms[0].code as string}\n getButtonLabel={getButtonLabelHandler}\n onAddToBasketOverride={onAddToBasketOverrideHandler}\n />\n ) : (\n <RatesNotFoundBlock />\n )}\n </>\n </AutoAutoHeight>\n ) : (\n <LargeLoader />\n )}\n </div>\n </div>\n </>\n ),\n [isCompact, isLoading, rooms, basketContext.currentBasketRows, isPromoModalOpen, hotel]\n );\n}\n\nexport const renderInlineRoomMiniEngineElement = (container: Element, engine: InlineRoomMiniEngine) => {\n render(\n <BookingEngineContextWrapper engine={engine}>\n <HashRouter\n future={{\n v7_startTransition: false,\n v7_relativeSplatPath: false,\n }}\n >\n <NotificationContextWrapper>\n <ErrorContextWrapper>\n <CompanyContextWrapper configCompany={engine.getConfig().company}>\n <BasketContextWrapper>\n <InlineRoomMiniEngineElement engine={engine} />\n </BasketContextWrapper>\n </CompanyContextWrapper>\n </ErrorContextWrapper>\n </NotificationContextWrapper>\n </HashRouter>\n </BookingEngineContextWrapper>,\n container\n );\n};\n"]}
1
+ {"version":3,"file":"InlineRoomMiniEngineElement.js","sourceRoot":"/","sources":["src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BasketContextWrapper, BookingEngineContextWrapper, CompanyContext, CompanyContextWrapper } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport { ErrorContextWrapper } from 'contexts/ErrorContext';\nimport { NotificationContextWrapper } from 'contexts/NotificationContext';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { render } from 'react-dom';\nimport { useTranslation } from 'react-i18next';\nimport { HashRouter } from 'react-router-dom';\nimport useMeasure from 'react-use-measure';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport { BookingWizardOnBooking } from '@/components/generic/BookingWizard/BookingWizardContext';\nimport { BookNowPayLaterInfoBlock } from '@/components/generic/BookNowPayLaterInfoBlock';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport RatesNotFoundBlock from '@/components/steps/room/RatesNotFoundBlock';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport type { InlineRoomMiniEngine } from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nimport { RoomListSearchEvent } from '@/events/actions/RoomListSearchEvent';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow from '@/models/BasketRow';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomListSearch } from '@/models/RoomListSearch';\nimport { SearchParameters } from '@/models/SearchParameters';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport StringHelper from '@/util/StringHelper';\n\nimport styles from './InlineRoomMiniEngine.module.scss';\n\nexport interface InlineRoomMiniEngineElementProps {\n engine: InlineRoomMiniEngine;\n}\n\nexport default function InlineRoomMiniEngineElement(props: InlineRoomMiniEngineElementProps) {\n const { layout = 'default', policy, priceDescription } = props.engine.getConfig();\n const isCardLayout = layout === 'card';\n\n const { hotel } = useCurrentHotel();\n\n const { memberNumber } = useSignedInMember();\n\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n\n const row = basketContext.currentBasketRows[0];\n const [isLoading, setLoading] = useState(true);\n const [ranFirstLoad, setRanFirstLoad] = useState(false);\n const [rooms, setRooms] = useState<Room[]>([]);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n const [featuredRates, setFeaturedRates] = useState<RoomRate[]>([]);\n const [standardRates, setStandardRates] = useState<RoomRate[]>([]);\n\n const [promoCode, setPromoCode] = useState(row?.getPromoCode());\n\n const { t } = useTranslation();\n\n const [ref, bounds] = useMeasure();\n const thisElement = React.useRef<HTMLDivElement | null>(null);\n\n const { raise } = useEvent();\n\n let promoCodeTooltip = '';\n\n if (row?.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? t(Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation.Step.Date.PromoCodeTooltip.NoValue);\n } else {\n if (row?.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Valid);\n } else {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Invalid);\n }\n }\n\n useEffect(() => {\n let cancelled = false;\n\n if (!row) {\n basketContext.addBasketRow(new BasketRow());\n return;\n }\n\n if (row && row.getStartDate() && row.getEndDate() && !ranFirstLoad) {\n API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber).then((hotelRooms) => {\n if (!cancelled) {\n setRooms(hotelRooms?.filter((room) => room.code === props.engine.getRoomCode()) as Room[]);\n setLoading(false);\n setRanFirstLoad(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row, memberNumber]);\n\n useEffect(() => {\n if (row) {\n findRoomsOnClick();\n }\n }, [row?.getPromoCode()]);\n\n useEffect(() => {\n if (!(rooms && rooms.length > 0)) return;\n\n const room = rooms[0];\n\n let nonPromoRates: RoomRate[] = [];\n const toSetFeaturedRate: RoomRate[] = [];\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n toSetFeaturedRate.unshift(currentRate);\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate.length > 0) {\n setFeaturedRates(toSetFeaturedRate);\n }\n } else {\n nonPromoRates = room.getRates();\n }\n\n try {\n const search: SearchParameters = {\n checkInTime: row?.getStartDate()?.format('YYYY-M-D'),\n checkOutTime: row?.getEndDate()?.format('YYYY-M-D'),\n numAdults: row?.getAdults(),\n numChildren: row?.getChildren(),\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const eventRooms: RoomListSearch[] =\n rooms?.map((room) => {\n const { name, code } = room;\n\n const foundRoom: RoomListSearch = {\n name: name as string,\n code: code as string,\n lowestPrice: room.getLowestPrice(),\n highestPrice: room.getHighestPrice(),\n currency: ccx.currentCurrency,\n\n rates:\n room.getRates()?.map((rate) => {\n const { name, code } = rate;\n return {\n name,\n code,\n\n price: {\n averagePrice: rate.getAveragePrice(),\n totalPrice: rate.getTotalPrice(),\n currency: ccx.currentCurrency,\n },\n };\n }) ?? [],\n };\n\n return foundRoom;\n }) ?? [];\n\n const event = new RoomListSearchEvent(search, eventRooms);\n raise(event);\n } catch (ex) {\n console.warn(ex);\n }\n\n setStandardRates(nonPromoRates);\n }, [rooms]);\n\n useEffect(() => {\n if (hotel?.colors) {\n // Do this manually as Guide Step manages this for Fullpage.\n RoomstayThemeEngine.changeTheme(hotel.colors);\n }\n }, [hotel, hotel?.colors]);\n\n const updatePeopleValues = ({ adults, children }: { adults?: number; children?: number; promoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n\n if (!isCardLayout) {\n basketContext.updateBasketRow(row);\n }\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n basketContext.updateBasketRow(row, false);\n }\n };\n\n if (!row?.getArrivalDate() && !row?.getDepartureDate()) {\n const today = Date.now();\n row?.setStartDate(dayjs(today));\n row?.setEndDate(dayjs(today).add(1, 'day'));\n }\n\n const isCompact = bounds.width < 1000 ? '--compact' : '';\n\n const findRoomsOnClick = async () => {\n if (isCardLayout) {\n basketContext.updateBasketRow(row);\n }\n setLoading(true);\n setRooms((await API.Availability.fetchAvailabilityData(row, hotel?.hotelID as string, memberNumber))?.filter((room) => room.code === props.engine.getRoomCode()) as Room[]);\n setLoading(false);\n };\n const getButtonLabelHandler = () => {\n return t(Translation.Misc.BookNow);\n };\n\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n\n const defaultGuestValue: BookingWizardOnBooking['guests'] = {\n adults: row?.getAdults() ?? 1,\n children: row?.getChildren() ?? 0,\n infants: 0,\n room: 1,\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code updated', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (row) {\n row.setPromoCode(code);\n basketContext.updateBasketRow(row);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const onAddToBasketOverrideHandler = (rate: RoomRate) => {\n row.setRate(rate);\n basketContext.updateBasketRow(row);\n DataLayer.instance.sendRoomRateAddToCart(rate, row.getNumberOfDays(), row.getStartDate(), row.getEndDate(), row.getPreUpsellRoomRate());\n\n const session = props.engine.getSessionProvider();\n session\n .updateSession({\n step: StepConfirmation.getName(), // TODO:\n })\n .then(() => {\n // TODO: Remove this URL coupling\n window.open(`${hotel?.checkoutUrl ?? '/checkout/'}#${StepConfirmation.getStepUrl()}?session=${session.getCurrentSessionID()}`, '_self');\n });\n };\n const openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setPromoCode(row?.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const maxOccupancy = hotel?.maxOccupancy ?? 1;\n\n const DatePickerSelector = () => {\n const inner = () => {\n if (isCardLayout) {\n return (\n <div className={classNames('u-cursor-pointer', styles['rs-inline-filter-item-dates-inner'])}>\n <div className={classNames(styles['card'])}>\n <div className={styles['image']}>\n <Icon icon={IconType.Calendar} />\n </div>\n <div className={styles['content']}>\n <Text className={styles['title']} type={TextType.Body}>\n {t(Translation.Misc.CheckIn)}\n </Text>\n <Text className={styles['sub-title']} type={TextType.Body} color={Color.Navy}>\n {row?.getArrivalDate() ? row.getArrivalDate() : t(Translation.Misc.CheckInPlaceHolder)}\n </Text>\n </div>\n </div>\n <div className={classNames(styles['card'])}>\n <div className={styles['image']}>\n <Icon icon={IconType.Calendar} />\n </div>\n <div className={styles['content']}>\n <Text className={styles['title']} type={TextType.Body}>\n {t(Translation.Misc.CheckOut)}\n </Text>\n <Text className={styles['sub-title']}>{row?.getDepartureDate() ? row.getDepartureDate() : t(Translation.Misc.CheckOutPlaceHolder)}</Text>\n </div>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={row?.getArrivalDate() ? Color.Accent : Color.Graphite} className=\"u-mw-75 u-align-center\" bold={!!row?.getArrivalDate()}>\n <span>{row?.getArrivalDate() ? row.getArrivalDate() : 'Arrival Date'}</span>\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={row?.getDepartureDate() ? Color.Accent : Color.Graphite} className=\"u-marg-right u-mw-75 u-align-center\" bold={!!row?.getDepartureDate()}>\n <span>{row?.getDepartureDate() ? row.getDepartureDate() : 'Departure Date'}</span>\n </Text>\n </div>\n );\n }\n };\n\n return (\n <FloatingDatePicker\n startDate={row?.getStartDate()}\n selectedDateChanged={updateDateValues}\n className={classNames('rs-inline-filter-item-dates', {\n 'u-w-100@xl- room-builder-progress--value u-marg-left--none ': !isCardLayout,\n [styles['rs-inline-filter-item-dates']]: isCardLayout,\n })}\n >\n <Tooltip title={t(Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere)} wrapperClasses=\"u-w-100@xl-\">\n {inner()}\n </Tooltip>\n </FloatingDatePicker>\n );\n };\n\n const GuestSelector = () => {\n if (isCardLayout) {\n const numChildren = row?.getChildren?.() || 0;\n const maxAdults = maxOccupancy - numChildren;\n const maxChildren = maxOccupancy + 1 - (row?.getAdults?.() || 0);\n return (\n <GuestSelectorCustom\n maxAdults={maxAdults}\n maxChildren={maxChildren}\n onChange={(newValue) => {\n updatePeopleValues({\n adults: +newValue.adults,\n children: +newValue.children,\n });\n }}\n disableChild={false}\n showInfants={false}\n disableRoom\n applyButton={false}\n defaultValue={defaultGuestValue}\n promoCodeConfig={{\n promoCode: basketContext.selectedBasketRow?.getPromoCode(),\n setPromoCode,\n onChange: changePromoCode,\n valid: basketContext.selectedBasketRow?.getPromoCodeStatus() !== 'new' ? basketContext.selectedBasketRow?.getPromoCodeStatus() === 'valid' : undefined,\n }}\n />\n );\n } else {\n return (\n <>\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl- rs-inline-filter-item-adult\">\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center \">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(maxOccupancy - (row?.getChildren() ? row.getChildren() : 0))].map((v: any, value: number) => {\n value += 1;\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Adult, t),\n value: value.toString(),\n };\n })}\n value={row?.getAdults()?.toString()}\n onChange={updateNumberOfAdultsOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl- rs-inline-filter-item-children\">\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={[...Array(maxOccupancy + 1 - (row?.getAdults() ? row.getAdults() : 0))].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Child, t),\n value: value.toString(),\n };\n })}\n value={row?.getChildren()?.toString()}\n onChange={updateNumberOfChildrenOnChange}\n keyName=\"value\"\n labelName=\"text\"\n />\n </div>\n </Tooltip>\n </>\n );\n }\n };\n return useMemo(\n () => (\n <>\n <div\n className={classNames(`room-builder-progress ${isCompact} rs-inline-container`, {\n [styles['rs-inline-container']]: isCardLayout,\n [styles['rs-inline-container--card-layout']]: isCardLayout,\n })}\n >\n <div\n className={classNames('rs-inline-filter-container', {\n 'u-flex w-100 flex-wrap room-builder-progress--item --current': !isCardLayout,\n [styles['rs-inline-filter-container']]: isCardLayout,\n })}\n ref={ref}\n >\n <div\n className={classNames('rs-inline-filter-inner', {\n 'u-flex u-flex-align-center flex-wrap flex-row u-w-100@xl-': !isCardLayout,\n [styles['rs-inline-filter-inner']]: isCardLayout,\n })}\n >\n <DatePickerSelector />\n <GuestSelector />\n\n <Tooltip\n title={promoCodeTooltip}\n wrapperClasses={classNames('u-w-100@xl- rs-inline-filter-item-promo', {\n [styles['rs-inline-filter-item-promo']]: isCardLayout,\n })}\n >\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={row?.getPromoCode() ? row?.getPromoCodeColour() : Color.Navy}>\n {row?.getPromoCode() ? row?.getPromoCode() : 'Promo Code'}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </Tooltip>\n <Overlay open={isPromoModalOpen} container={RoomstayThemeEngine.EngineContainer} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={basketContext.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n basketContext.selectedBasketRow?.getPromoCodeStatus() !== 'new'\n ? basketContext.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : undefined\n }\n />\n </div>\n\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText size=\"small\" onClick={cancelPromoPopupOnClick}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </div>\n </Overlay>\n </div>\n <div\n className={classNames(`u-flex flex-xl-nowrap flex-row rs-inline-filter-button`, {\n 'w-100': isCompact,\n [styles['rs-inline-filter-button']]: isCardLayout,\n })}\n >\n <BEButton filled primary isLoading={isLoading} wide={isCompact !== ''} onClick={findRoomsOnClick}>\n {t(Translation.Misc.CheckRates)}\n </BEButton>\n </div>\n </div>\n <div\n className={classNames('u-border-rounded rs-inline-content', {\n [styles['rs-inline-content']]: isCardLayout,\n })}\n >\n {!isLoading ? (\n <AutoAutoHeight open={!isLoading}>\n <>\n <BookNowPayLaterInfoBlock />\n {rooms.length > 0 ? (\n <RoomRates\n classNames={classNames('rs-inline-content-list', {\n [styles['rs-inline-content-list']]: isCardLayout,\n })}\n featuredRates={featuredRates}\n rates={standardRates}\n roomCode={rooms[0].code as string}\n getButtonLabel={getButtonLabelHandler}\n onAddToBasketOverride={onAddToBasketOverrideHandler}\n isCardLayout={isCardLayout}\n policy={policy}\n priceDescription={priceDescription}\n />\n ) : (\n <RatesNotFoundBlock />\n )}\n </>\n </AutoAutoHeight>\n ) : (\n <LargeLoader />\n )}\n </div>\n </div>\n </>\n ),\n [isCompact, isLoading, rooms, basketContext.currentBasketRows, isPromoModalOpen, hotel]\n );\n}\n\nexport const renderInlineRoomMiniEngineElement = (container: Element, engine: InlineRoomMiniEngine) => {\n render(\n <BookingEngineContextWrapper engine={engine}>\n <HashRouter\n future={{\n v7_startTransition: false,\n v7_relativeSplatPath: false,\n }}\n >\n <NotificationContextWrapper>\n <ErrorContextWrapper>\n <CompanyContextWrapper configCompany={engine.getConfig().company}>\n <BasketContextWrapper>\n <InlineRoomMiniEngineElement engine={engine} />\n </BasketContextWrapper>\n </CompanyContextWrapper>\n </ErrorContextWrapper>\n </NotificationContextWrapper>\n </HashRouter>\n </BookingEngineContextWrapper>,\n container\n );\n};\n\nexport const GuestSelectorCustom = ({\n maxAdults,\n maxChildren,\n maxInfants = 10,\n defaultValue,\n onChange,\n disableChild,\n showInfants,\n disableRoom,\n applyButton,\n promoCodeConfig,\n}: {\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n defaultValue?: { adults?: number; children?: number; infants?: number; room?: number };\n onChange?: (params: { adults: number; children: number; infants: number; room: number }) => void;\n disableChild?: boolean;\n showInfants?: boolean;\n disableRoom?: boolean;\n applyButton?: boolean;\n promoCodeConfig?: {\n promoCode: string;\n setPromoCode: React.Dispatch<React.SetStateAction<string>>;\n onChange: (val: any) => void;\n valid?: boolean;\n };\n}) => {\n const { t } = useTranslation();\n const ref = React.useRef(null);\n const targetRef = useRef(null);\n\n const [adults, setAdults] = useState(defaultValue?.adults ?? 1);\n const [children, setChildren] = useState(defaultValue?.children ?? 0);\n const [infants, setInfants] = useState(defaultValue?.infants ?? 0);\n const [room, setRoom] = useState(defaultValue?.room ?? 1);\n const [open, setOpen] = useState(false);\n\n const onChangeAdults = (newValue: number) => {\n setAdults(newValue);\n onChange?.({ adults: newValue, children: children, infants: infants, room: room });\n };\n const onChangeChildren = (newValue: number) => {\n setChildren(newValue);\n onChange?.({ adults: adults, children: newValue, infants: infants, room: room });\n };\n const onChangeInfants = (newValue: number) => {\n setInfants(newValue);\n onChange?.({ adults: adults, children: children, infants: newValue, room: room });\n };\n\n const onChangeRoom = (newValue: number) => {\n setRoom(newValue);\n onChange?.({ adults: adults, children: children, infants: infants, room: newValue });\n };\n\n const inner = () => {\n return (\n <div className={styles['popper--box']}>\n <div className={styles['popper--content']} ref={ref}>\n <div className={styles['row-wrapper']}>\n <div className={styles.row}>\n <Text className={styles['title']} type={TextType.Small}>\n {StringHelper.plural(adults, 'Adult', t)}\n </Text>\n <NumberIncrement number={adults} min={1} max={maxAdults} onChange={(value: number) => onChangeAdults(value)} textSize={TextType.Small} />\n </div>\n </div>\n {disableChild ? null : (\n <div className={styles['row-wrapper']}>\n <div className={styles.divider} />\n <div className={styles.row}>\n <Text className={styles['title']} type={TextType.Small}>\n {StringHelper.plural(children, 'Child', t)}\n </Text>\n <NumberIncrement number={children} min={0} max={maxChildren} onChange={(value: number) => onChangeChildren(value)} textSize={TextType.Small} />\n </div>\n </div>\n )}\n {showInfants ? (\n <div className={styles['row-wrapper']}>\n <div className={styles.divider} />\n <div className={styles.row}>\n <Text className={styles['title']} type={TextType.Small}>\n {StringHelper.plural(infants, 'Infant', t)}\n </Text>\n <NumberIncrement number={infants} min={0} onChange={(value: number) => onChangeInfants(value)} textSize={TextType.Small} />\n </div>\n\n <div className={styles.divider} />\n </div>\n ) : null}\n {disableRoom ? null : (\n <div className={styles['row-wrapper']}>\n <div className={styles.divider} />\n <div className={styles.row}>\n <Text className={styles['title']} type={TextType.Small}>\n {StringHelper.plural(room, 'Room', t)}\n </Text>\n <NumberIncrement number={room} min={1} max={10} onChange={(value: number) => onChangeRoom(value)} textSize={TextType.Small} />\n </div>\n </div>\n )}\n {promoCodeConfig ? (\n <div className={styles['row-wrapper']}>\n <div className={styles.divider} />\n <div className={classNames(styles.row)}>\n <Text className={styles['title']} type={TextType.Small}>\n {t(Translation.Misc.Promocode)}\n </Text>\n <PromoCodeInput className={styles.promo} value={promoCodeConfig.promoCode} onChange={promoCodeConfig.onChange} valid={promoCodeConfig.valid} />\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n };\n\n const content = () => {\n return (\n <Overlay\n offset={[0, 6]}\n usePortal={false}\n followElement={targetRef.current}\n placement=\"top-start\"\n strategy=\"absolute\"\n open={open}\n onClose={() => setOpen?.(false)}\n className={styles.popper}\n hideStyles\n >\n {inner()}\n </Overlay>\n );\n };\n\n const getValueAsText = () => {\n const parts = [StringHelper.pluralWithCount(adults, 'Adult', t)];\n\n if (children > 0) {\n parts.push(StringHelper.pluralWithCount(children, 'Child', t));\n }\n\n if (infants > 0) {\n parts.push(StringHelper.pluralWithCount(infants, 'Infant', t));\n }\n\n return parts.join(' - ');\n };\n\n return (\n <div ref={targetRef} className={classNames('u-cursor-pointer', 'rs-inline-filter-item-guest', styles['rs-inline-filter-item-guest'])}>\n <div className={classNames(styles['card'])} onClick={() => setOpen?.(!open)}>\n <div className={styles['image']}>\n <Icon icon={IconType.People} />\n </div>\n <div className={styles['content']}>\n <Text className={styles['title']} type={TextType.Body}>\n {t(Translation.Misc.Guests)}\n </Text>\n <Text className={styles['sub-title']} type={TextType.Body} color={Color.Navy}>\n {getValueAsText()}\n </Text>\n </div>\n\n <Icon icon={IconType.Dropdown} />\n </div>\n {content()}\n </div>\n );\n};\n"]}