@roomstay/frontend 2.1.28 → 2.1.30

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 (33) hide show
  1. package/dist/535.bundle.js +2 -0
  2. package/dist/559.bundle.js +1 -1
  3. package/dist/848.bundle.js +1 -0
  4. package/dist/882.bundle.js +1 -1
  5. package/dist/main.bundle.js +2 -1
  6. package/dist/main.bundle.js.LICENSE.txt +5 -0
  7. package/dist/src/api/AddonAPI.js +3 -1
  8. package/dist/src/api/AddonAPI.js.map +1 -1
  9. package/dist/src/components/generic/Overlay/Overlay.d.ts +1 -0
  10. package/dist/src/components/generic/Overlay/Overlay.js +1 -1
  11. package/dist/src/components/generic/Overlay/Overlay.js.map +1 -1
  12. package/dist/src/components/generic/date/FloatingDatePicker.d.ts +1 -0
  13. package/dist/src/components/generic/date/FloatingDatePicker.js +1 -1
  14. package/dist/src/components/generic/date/FloatingDatePicker.js.map +1 -1
  15. package/dist/src/components/steps/room/RoomList.js +35 -11
  16. package/dist/src/components/steps/room/RoomList.js.map +1 -1
  17. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +1 -1
  18. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  19. package/dist/src/index.d.ts +3 -0
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/models/Addon/Addon.d.ts +1 -0
  22. package/dist/src/models/Addon/Addon.js.map +1 -1
  23. package/dist/src/models/Client/Hotel/Hotel.d.ts +34 -29
  24. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  25. package/dist/test.bundle.js +2 -1
  26. package/dist/test.bundle.js.LICENSE.txt +5 -0
  27. package/dist/tests/offline/entry/RSCompany.js +1 -1
  28. package/dist/tests/offline/entry/RSCompany.js.map +1 -1
  29. package/dist/vendors.bundle.js +1 -1
  30. package/package.json +1 -1
  31. package/dist/399.bundle.js +0 -2
  32. package/dist/760.bundle.js +0 -1
  33. /package/dist/{399.bundle.js.LICENSE.txt → 535.bundle.js.LICENSE.txt} +0 -0
@@ -0,0 +1,5 @@
1
+ /*!
2
+ Copyright (c) 2018 Jed Watson.
3
+ Licensed under the MIT License (MIT), see
4
+ http://jedwatson.github.io/classnames
5
+ */
@@ -81,7 +81,9 @@ class AddonAPI extends BaseAPI_1.default {
81
81
  addons.push(new Addon_1.Addon(addon));
82
82
  }
83
83
  }
84
- this.storedAddons[id] = addons;
84
+ this.storedAddons[id] = addons.sort((a, b) => {
85
+ return (b.order || 0) - (a.order || 0);
86
+ });
85
87
  resolve(addons);
86
88
  }
87
89
  catch (ex) {
@@ -1 +1 @@
1
- {"version":3,"file":"AddonAPI.js","sourceRoot":"/","sources":["src/api/AddonAPI.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqD;AAErD,gDAA6C;AAC7C,0FAAkE;AAElE,wDAA0C;AAE1C,MAAqB,QAAS,SAAQ,iBAAO;IAA7C;;QACY,iBAAY,GAA2B,EAAE,CAAC;QAE3C,eAAU,GAAG,CAAC,UAAuB,EAAE,OAAe,EAAE,EAAE,CAC7D,IAAI,OAAO,CAAU,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;;YAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAEhC,MAAM,IAAI,GAAG,MAAA,SAAS,CAAC,OAAO,EAAE,0CAAE,IAAI,CAAC;YACvC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,6BAAmB,CAAC,YAAY,CAAC;YAElD,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEnF;;cAEE;YACF,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE;gBACvB,OAAO,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;aACzC;YAED,IAAI;gBACA,MAAM,QAAQ,GAAsC,MAAM,IAAI,CAAC,GAAG,CAC9D,qBAAW,CAAC,QAAQ,EACpB;oBACI,IAAI;oBACJ,MAAM;oBACN,QAAQ;oBACR,WAAW;oBACX,YAAY;oBACZ,QAAQ;iBACX,EACD,EAAE,EACF,OAAO,CACV,CAAC;gBAEF,MAAM,MAAM,GAAY,EAAE,CAAC;gBAC3B,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;oBAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;wBAC5D,SAAS;qBACZ;oBAED,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAElC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;wBAC5I,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;wBACvB,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;wBAC7C,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;wBAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBACjC;iBACJ;gBAED,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;gBAE/B,OAAO,CAAC,MAAM,CAAC,CAAC;aACnB;YAAC,OAAO,EAAE,EAAE;gBACT,MAAM,CAAC,EAAE,CAAC,CAAC;gBACX,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;aAC/B;QACL,CAAC,CAAA,CAAC,CAAC;IACX,CAAC;CAAA;AA9DD,2BA8DC","sourcesContent":["import BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\nimport BasketRow from '@/models/BasketRow';\nimport { Addon } from '@/models/Addon/Addon';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\n\nimport * as Sentry from '@sentry/browser';\n\nexport default class AddonAPI extends BaseAPI {\n private storedAddons: { [ref: string]: any } = {};\n\n public findAddons = (basketRows: BasketRow[], hotelID: string) =>\n new Promise<Addon[]>(async (resolve, reject) => {\n const basketRow = basketRows[0];\n\n const rate = basketRow.getRate()?.code;\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const checkInDate = basketRow.getStartDate().format('YYYY-MM-DD');\n const checkOutDate = basketRow.getEndDate().format('YYYY-MM-DD');\n const language = RoomstayThemeEngine.selectedLang;\n\n const id = [rate, adults, children, checkInDate, checkOutDate, language].join('|');\n\n /*\n resolve with locally cached data, so we don't have to re-query this\n */\n if (this.storedAddons[id]) {\n return resolve(this.storedAddons[id]);\n }\n\n try {\n const response: { [ratePlanCode: string]: Addon } = await this.get(\n APIEndpoint.Packages,\n {\n rate,\n adults,\n children,\n checkInDate,\n checkOutDate,\n language,\n },\n '',\n hotelID\n );\n\n const addons: Addon[] = [];\n for (const addonCode in response) {\n if (!Object.prototype.hasOwnProperty.call(response, addonCode)) {\n continue;\n }\n\n const addon = response[addonCode];\n\n if (Object.values(addon.availability).every((priceInfo) => priceInfo.adultPrice || priceInfo.childPrice || priceInfo.price || addon.inclusive)) {\n addon.code = addonCode;\n addon.checkInDate = basketRow.getStartDate();\n addon.checkOutDate = basketRow.getEndDate();\n addons.push(new Addon(addon));\n }\n }\n\n this.storedAddons[id] = addons;\n\n resolve(addons);\n } catch (ex) {\n reject(ex);\n Sentry.captureException(ex);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"AddonAPI.js","sourceRoot":"/","sources":["src/api/AddonAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import BaseAPI, { APIEndpoint } from '@/api/BaseAPI';\nimport BasketRow from '@/models/BasketRow';\nimport { Addon } from '@/models/Addon/Addon';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\n\nimport * as Sentry from '@sentry/browser';\n\nexport default class AddonAPI extends BaseAPI {\n private storedAddons: { [ref: string]: any } = {};\n\n public findAddons = (basketRows: BasketRow[], hotelID: string) =>\n new Promise<Addon[]>(async (resolve, reject) => {\n const basketRow = basketRows[0];\n\n const rate = basketRow.getRate()?.code;\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const checkInDate = basketRow.getStartDate().format('YYYY-MM-DD');\n const checkOutDate = basketRow.getEndDate().format('YYYY-MM-DD');\n const language = RoomstayThemeEngine.selectedLang;\n\n const id = [rate, adults, children, checkInDate, checkOutDate, language].join('|');\n\n /*\n resolve with locally cached data, so we don't have to re-query this\n */\n if (this.storedAddons[id]) {\n return resolve(this.storedAddons[id]);\n }\n\n try {\n const response: { [ratePlanCode: string]: Addon } = await this.get(\n APIEndpoint.Packages,\n {\n rate,\n adults,\n children,\n checkInDate,\n checkOutDate,\n language,\n },\n '',\n hotelID\n );\n\n const addons: Addon[] = [];\n for (const addonCode in response) {\n if (!Object.prototype.hasOwnProperty.call(response, addonCode)) {\n continue;\n }\n\n const addon = response[addonCode];\n\n if (Object.values(addon.availability).every((priceInfo) => priceInfo.adultPrice || priceInfo.childPrice || priceInfo.price || addon.inclusive)) {\n addon.code = addonCode;\n addon.checkInDate = basketRow.getStartDate();\n addon.checkOutDate = basketRow.getEndDate();\n addons.push(new Addon(addon));\n }\n }\n\n this.storedAddons[id] = addons.sort((a, b) => {\n return (b.order || 0) - (a.order || 0);\n });\n\n resolve(addons);\n } catch (ex) {\n reject(ex);\n Sentry.captureException(ex);\n }\n });\n}\n"]}
@@ -15,5 +15,6 @@ export type OverlayProps = {
15
15
  onClose?: (e: Event) => void;
16
16
  offset?: [number, number];
17
17
  overlayRef?: LegacyRef<HTMLDivElement>;
18
+ isAboveNav?: boolean;
18
19
  };
19
20
  export declare const Overlay: (props: OverlayProps) => JSX.Element;
@@ -80,7 +80,7 @@ const Overlay = (props) => {
80
80
  // Here we depend on the props.open as that's the "intended" state. Fade animation will handle it going in and out.
81
81
  react_1.default.createElement(react_1.default.Fragment, null,
82
82
  !props.followElement && react_1.default.createElement("span", { ref: setReferenceElement }),
83
- react_1.default.createElement("div", Object.assign({ ref: setPopperElement, style: popperStyles.popper }, attributes.popper, { className: (0, classnames_1.default)(Overlay_module_scss_1.default['rs-popper-container'], props.containerClassName) }),
83
+ react_1.default.createElement("div", Object.assign({ ref: setPopperElement, style: popperStyles.popper }, attributes.popper, { className: (0, classnames_1.default)(Overlay_module_scss_1.default['rs-popper-container'], props.containerClassName, { [Overlay_module_scss_1.default['--above-nav']]: props.isAboveNav }) }),
84
84
  react_1.default.createElement(Fade_1.default, { open: props.open },
85
85
  react_1.default.createElement("div", { ref: props.overlayRef, className: overlayClasses }, props.children)))));
86
86
  if (!isOpen) {
@@ -1 +1 @@
1
- {"version":3,"file":"Overlay.js","sourceRoot":"/","sources":["src/components/generic/Overlay/Overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { useState, ReactNode, useEffect, useLayoutEffect, LegacyRef } from 'react';\nimport { Modifier, usePopper } from 'react-popper';\n\nimport styles from './Overlay.module.scss';\nimport { RoomstayPortal } from '@/components/generic/Portal/Portal';\nimport { useBodyClick } from '@frontend/hooks';\nimport FadeAnimation from '@/animations/Fade';\nimport classNames from 'classnames';\nimport { Placement, PositioningStrategy } from '@popperjs/core';\n\nexport type OverlayProps = {\n children: ReactNode | ReactNode[];\n open: boolean;\n\n usePortal?: boolean;\n container?: HTMLElement | null;\n\n followElement?: Element | null;\n className?: string;\n containerClassName?: string;\n\n hideStyles?: boolean;\n\n placement?: Placement;\n fallbackPlacements?: Placement;\n strategy?: PositioningStrategy;\n\n onClose?: (e: Event) => void;\n offset?: [number, number];\n overlayRef?: LegacyRef<HTMLDivElement>;\n};\n\nexport const Overlay = (props: OverlayProps) => {\n const [referenceElement, setReferenceElement] = useState<Element | null>(null);\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n\n const [isOpen, setIsOpen] = useState(props.open);\n\n const { onBodyClickExcept } = useBodyClick();\n\n // Used to prevent premature closing of window before it gets a chance to open\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n let cancelled = false;\n\n if (props.open) {\n setIsOpen(props.open);\n } else {\n // Allow for fade out animation to run before removing element\n timeout = setTimeout(() => {\n if (!cancelled) {\n setIsOpen(false);\n }\n }, 500);\n }\n\n return () => {\n cancelled = true;\n clearTimeout(timeout);\n };\n }, [props.open]);\n\n useLayoutEffect(() => {\n const { remove } = onBodyClickExcept((e: Event) => {\n if (isOpen) {\n e.preventDefault();\n e.stopPropagation();\n props.onClose?.(e);\n }\n }, popperElement as HTMLDivElement);\n\n return () => {\n remove();\n };\n }, [isOpen, popperElement]);\n\n const modifiers: Modifier<any>[] = [\n {\n name: 'flip',\n options: {\n flipVariations: false,\n fallbackPlacements: props.fallbackPlacements,\n },\n },\n ];\n if (props.offset) {\n modifiers.push({\n name: 'offset',\n options: {\n offset: props.offset,\n },\n });\n }\n\n const { styles: popperStyles, attributes } = usePopper(props.followElement ?? referenceElement, popperElement, {\n placement: props.placement ?? 'bottom',\n strategy: props.strategy ?? 'absolute',\n modifiers,\n });\n\n const overlayClasses = classNames(props.className, {\n [styles['rs-overlay']]: !props.hideStyles,\n });\n\n const overlayElement = (\n // Here we depend on the props.open as that's the \"intended\" state. Fade animation will handle it going in and out.\n\n <>\n {!props.followElement && <span ref={setReferenceElement}></span>}\n\n <div ref={setPopperElement} style={popperStyles.popper} {...attributes.popper} className={classNames(styles['rs-popper-container'], props.containerClassName)}>\n <FadeAnimation open={props.open}>\n <div ref={props.overlayRef} className={overlayClasses}>\n {props.children}\n </div>\n </FadeAnimation>\n </div>\n </>\n );\n\n if (!isOpen) {\n return <></>;\n }\n\n if (props.usePortal || props.container) {\n // PreventZIndex is only enabled if container is not specified, since modal will be appended to body, Roomstay engine by default will overlay it\n return (\n <RoomstayPortal target={props.container || document.body} preventZIndex={!!props.container}>\n {overlayElement}\n </RoomstayPortal>\n );\n }\n\n return overlayElement;\n};\n"]}
1
+ {"version":3,"file":"Overlay.js","sourceRoot":"/","sources":["src/components/generic/Overlay/Overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { useState, ReactNode, useEffect, useLayoutEffect, LegacyRef } from 'react';\nimport { Modifier, usePopper } from 'react-popper';\n\nimport styles from './Overlay.module.scss';\nimport { RoomstayPortal } from '@/components/generic/Portal/Portal';\nimport { useBodyClick } from '@frontend/hooks';\nimport FadeAnimation from '@/animations/Fade';\nimport classNames from 'classnames';\nimport { Placement, PositioningStrategy } from '@popperjs/core';\n\nexport type OverlayProps = {\n children: ReactNode | ReactNode[];\n open: boolean;\n\n usePortal?: boolean;\n container?: HTMLElement | null;\n\n followElement?: Element | null;\n className?: string;\n containerClassName?: string;\n\n hideStyles?: boolean;\n\n placement?: Placement;\n fallbackPlacements?: Placement;\n strategy?: PositioningStrategy;\n\n onClose?: (e: Event) => void;\n offset?: [number, number];\n overlayRef?: LegacyRef<HTMLDivElement>;\n isAboveNav?: boolean;\n};\n\nexport const Overlay = (props: OverlayProps) => {\n const [referenceElement, setReferenceElement] = useState<Element | null>(null);\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n\n const [isOpen, setIsOpen] = useState(props.open);\n\n const { onBodyClickExcept } = useBodyClick();\n\n // Used to prevent premature closing of window before it gets a chance to open\n useEffect(() => {\n let timeout: NodeJS.Timeout;\n let cancelled = false;\n\n if (props.open) {\n setIsOpen(props.open);\n } else {\n // Allow for fade out animation to run before removing element\n timeout = setTimeout(() => {\n if (!cancelled) {\n setIsOpen(false);\n }\n }, 500);\n }\n\n return () => {\n cancelled = true;\n clearTimeout(timeout);\n };\n }, [props.open]);\n\n useLayoutEffect(() => {\n const { remove } = onBodyClickExcept((e: Event) => {\n if (isOpen) {\n e.preventDefault();\n e.stopPropagation();\n props.onClose?.(e);\n }\n }, popperElement as HTMLDivElement);\n\n return () => {\n remove();\n };\n }, [isOpen, popperElement]);\n\n const modifiers: Modifier<any>[] = [\n {\n name: 'flip',\n options: {\n flipVariations: false,\n fallbackPlacements: props.fallbackPlacements,\n },\n },\n ];\n if (props.offset) {\n modifiers.push({\n name: 'offset',\n options: {\n offset: props.offset,\n },\n });\n }\n\n const { styles: popperStyles, attributes } = usePopper(props.followElement ?? referenceElement, popperElement, {\n placement: props.placement ?? 'bottom',\n strategy: props.strategy ?? 'absolute',\n modifiers,\n });\n\n const overlayClasses = classNames(props.className, {\n [styles['rs-overlay']]: !props.hideStyles,\n });\n\n const overlayElement = (\n // Here we depend on the props.open as that's the \"intended\" state. Fade animation will handle it going in and out.\n\n <>\n {!props.followElement && <span ref={setReferenceElement}></span>}\n\n <div\n ref={setPopperElement}\n style={popperStyles.popper}\n {...attributes.popper}\n className={classNames(styles['rs-popper-container'], props.containerClassName, { [styles['--above-nav']]: props.isAboveNav })}\n >\n <FadeAnimation open={props.open}>\n <div ref={props.overlayRef} className={overlayClasses}>\n {props.children}\n </div>\n </FadeAnimation>\n </div>\n </>\n );\n\n if (!isOpen) {\n return <></>;\n }\n\n if (props.usePortal || props.container) {\n // PreventZIndex is only enabled if container is not specified, since modal will be appended to body, Roomstay engine by default will overlay it\n return (\n <RoomstayPortal target={props.container || document.body} preventZIndex={!!props.container}>\n {overlayElement}\n </RoomstayPortal>\n );\n }\n\n return overlayElement;\n};\n"]}
@@ -6,5 +6,6 @@ export interface FloatingDatePickerProps {
6
6
  endDate?: dayjs.Dayjs;
7
7
  selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;
8
8
  className?: string;
9
+ isAboveNav?: boolean;
9
10
  }
10
11
  export default function FloatingDatePicker(props: FloatingDatePickerProps): JSX.Element;
@@ -57,7 +57,7 @@ function FloatingDatePicker(props) {
57
57
  react_1.default.createElement(DatePicker_1.default, { showMonthOnLoad: props.startDate, showMultipleMonths: false, supportsMultiSelecting: true, onStartDateChanged: onStartDateChangedHandler, onEndDateChanged: selectedDateChanged, showMinNightStay: true, supportsWeek: false })));
58
58
  return (react_1.default.createElement(react_1.default.Fragment, null,
59
59
  react_1.default.createElement("div", { ref: thisElement, className: props.className, onClick: onOverlayOpen }, props.children),
60
- react_1.default.createElement(Overlay_1.Overlay, { open: isOpen, onClose: onOverlayClose, container: (_b = (_a = thisElement.current) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement, followElement: thisElement.current, className: "floating-roomstay-calendar" }, inner)));
60
+ react_1.default.createElement(Overlay_1.Overlay, { open: isOpen, onClose: onOverlayClose, container: (_b = (_a = thisElement.current) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement, followElement: thisElement.current, className: "floating-roomstay-calendar", isAboveNav: props.isAboveNav }, inner)));
61
61
  }
62
62
  exports.default = FloatingDatePicker;
63
63
  //# sourceMappingURL=FloatingDatePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iCAAyC;AAEzC,sFAA8D;AAI9D,8DAA+E;AAC/E,kEAA+D;AAY/D,SAAwB,kBAAkB,CAAC,KAA8B;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,CAAC,OAAoB,EAAE,EAAE;QACjD,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAEtG,IAAI,KAAK,CAAC,mBAAmB,IAAI,SAAS,EAAE;YACxC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAE,EAAE;QAC5C,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACrG,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACV,uCAAK,SAAS,EAAC,uCAAuC;QAClD,8BAAC,oBAAU,IACP,eAAe,EAAE,KAAK,CAAC,SAAS,EAChC,kBAAkB,EAAE,KAAK,EACzB,sBAAsB,QACtB,kBAAkB,EAAE,yBAAyB,EAC7C,gBAAgB,EAAE,mBAAmB,EACrC,gBAAgB,QAChB,YAAY,EAAE,KAAK,GACrB,CACA,CACT,CAAC;IAEF,OAAO,CACH;QACI,uCAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,IACpE,KAAK,CAAC,QAAQ,CACb;QACN,8BAAC,iBAAO,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,aAAa,0CAAE,aAAa,EAC5D,aAAa,EAAE,WAAW,CAAC,OAAO,EAClC,SAAS,EAAC,4BAA4B,IAErC,KAAK,CACA,CACX,CACN,CAAC;AACN,CAAC;AA5DD,qCA4DC","sourcesContent":["import React from 'react';\nimport { useRef, useState } from 'react';\n\nimport DatePicker from '@/components/generic/date/DatePicker';\n\nimport dayjs from 'dayjs';\n\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\n\nexport interface FloatingDatePickerProps {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n}\n\nexport default function FloatingDatePicker(props: FloatingDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement>(null);\n\n const selectedDateChanged = (endDate: dayjs.Dayjs) => {\n DataLayer.instance.sendInteraction('Check Out Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n\n if (props.selectedDateChanged && startDate) {\n props.selectedDateChanged(startDate, endDate);\n }\n\n setIsOpen(false);\n };\n\n const onStartDateChangedHandler = (date: any) => {\n DataLayer.instance.sendInteraction('Check In Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n setStartDate(date);\n };\n\n const onOverlayClose = () => {\n setIsOpen(false);\n };\n\n const onOverlayOpen = () => {\n setIsOpen(true);\n };\n\n const inner = (\n <div className=\"d-flex align-items-center flex-column\">\n <DatePicker\n showMonthOnLoad={props.startDate}\n showMultipleMonths={false}\n supportsMultiSelecting\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showMinNightStay\n supportsWeek={false}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={props.className} onClick={onOverlayOpen}>\n {props.children}\n </div>\n <Overlay\n open={isOpen}\n onClose={onOverlayClose}\n container={thisElement.current?.parentElement?.parentElement}\n followElement={thisElement.current}\n className=\"floating-roomstay-calendar\"\n >\n {inner}\n </Overlay>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"FloatingDatePicker.js","sourceRoot":"/","sources":["src/components/generic/date/FloatingDatePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,iCAAyC;AAEzC,sFAA8D;AAI9D,8DAA+E;AAC/E,kEAA+D;AAa/D,SAAwB,kBAAkB,CAAC,KAA8B;;IACrE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,mBAAmB,GAAG,CAAC,OAAoB,EAAE,EAAE;QACjD,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAEtG,IAAI,KAAK,CAAC,mBAAmB,IAAI,SAAS,EAAE;YACxC,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,IAAS,EAAE,EAAE;QAC5C,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,eAAe,EAAE,2BAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACrG,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,SAAS,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACV,uCAAK,SAAS,EAAC,uCAAuC;QAClD,8BAAC,oBAAU,IACP,eAAe,EAAE,KAAK,CAAC,SAAS,EAChC,kBAAkB,EAAE,KAAK,EACzB,sBAAsB,QACtB,kBAAkB,EAAE,yBAAyB,EAC7C,gBAAgB,EAAE,mBAAmB,EACrC,gBAAgB,QAChB,YAAY,EAAE,KAAK,GACrB,CACA,CACT,CAAC;IAEF,OAAO,CACH;QACI,uCAAK,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,IACpE,KAAK,CAAC,QAAQ,CACb;QACN,8BAAC,iBAAO,IACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,aAAa,0CAAE,aAAa,EAC5D,aAAa,EAAE,WAAW,CAAC,OAAO,EAClC,SAAS,EAAC,4BAA4B,EACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAE3B,KAAK,CACA,CACX,CACN,CAAC;AACN,CAAC;AA7DD,qCA6DC","sourcesContent":["import React from 'react';\nimport { useRef, useState } from 'react';\n\nimport DatePicker from '@/components/generic/date/DatePicker';\n\nimport dayjs from 'dayjs';\n\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\n\nexport interface FloatingDatePickerProps {\n children?: React.ReactNode;\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n selectedDateChanged?: (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => void;\n\n className?: string;\n isAboveNav?: boolean;\n}\n\nexport default function FloatingDatePicker(props: FloatingDatePickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(null);\n\n const thisElement = useRef<HTMLDivElement>(null);\n\n const selectedDateChanged = (endDate: dayjs.Dayjs) => {\n DataLayer.instance.sendInteraction('Check Out Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n\n if (props.selectedDateChanged && startDate) {\n props.selectedDateChanged(startDate, endDate);\n }\n\n setIsOpen(false);\n };\n\n const onStartDateChangedHandler = (date: any) => {\n DataLayer.instance.sendInteraction('Check In Date', InteractionType.CALENDAR, InteractionStep.ROOMS);\n setStartDate(date);\n };\n\n const onOverlayClose = () => {\n setIsOpen(false);\n };\n\n const onOverlayOpen = () => {\n setIsOpen(true);\n };\n\n const inner = (\n <div className=\"d-flex align-items-center flex-column\">\n <DatePicker\n showMonthOnLoad={props.startDate}\n showMultipleMonths={false}\n supportsMultiSelecting\n onStartDateChanged={onStartDateChangedHandler}\n onEndDateChanged={selectedDateChanged}\n showMinNightStay\n supportsWeek={false}\n />\n </div>\n );\n\n return (\n <>\n <div ref={thisElement} className={props.className} onClick={onOverlayOpen}>\n {props.children}\n </div>\n <Overlay\n open={isOpen}\n onClose={onOverlayClose}\n container={thisElement.current?.parentElement?.parentElement}\n followElement={thisElement.current}\n className=\"floating-roomstay-calendar\"\n isAboveNav={props.isAboveNav}\n >\n {inner}\n </Overlay>\n </>\n );\n}\n"]}
@@ -1,11 +1,33 @@
1
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
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = require("react");
29
+ const react_1 = __importStar(require("react"));
7
30
  const contexts_1 = require("../../../contexts/index.js");
8
- const react_2 = __importDefault(require("react"));
9
31
  const RoomDetails_1 = __importDefault(require("./roomDetails/RoomDetails"));
10
32
  const LargeLoader_1 = __importDefault(require("../../generic/loader/LargeLoader"));
11
33
  const RoomSortProvider_1 = __importDefault(require("../../../providers/RoomSortProvider"));
@@ -14,7 +36,6 @@ const RoomListCrossSellBlock_1 = __importDefault(require("./RoomListCrossSellBlo
14
36
  const DataLayer_1 = __importDefault(require("../../../util/DataLayer"));
15
37
  const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
16
38
  const hooks_1 = require("../../../hooks/index.js");
17
- const contexts_2 = require("../../../contexts/index.js");
18
39
  const GuestSearchEvent_1 = require("../../../events/actions/GuestSearchEvent");
19
40
  const RoomListSearchEvent_1 = require("../../../events/actions/RoomListSearchEvent");
20
41
  const RoomDetailsRetargeting_1 = require("./roomDetails/RoomDetailsRetargeting");
@@ -26,10 +47,10 @@ function RoomList() {
26
47
  var _a;
27
48
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
28
49
  const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
29
- const ccx = (0, react_1.useContext)(contexts_2.CompanyContext);
50
+ const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
30
51
  const { roomstayMember } = (0, react_1.useContext)(contexts_1.RoomstayMemberContext);
31
52
  const { hotel } = (0, hooks_1.useCurrentHotel)();
32
- const [rooms, setRooms] = react_2.default.useState([]);
53
+ const [rooms, setRooms] = react_1.default.useState([]);
33
54
  const [isLoading, setIsLoading] = (0, react_1.useState)(false);
34
55
  const [openRoom, setOpenRoom] = (0, react_1.useState)(null);
35
56
  const [apiHasError, setApiHasError] = (0, react_1.useState)(null);
@@ -47,7 +68,10 @@ function RoomList() {
47
68
  if (roomListRef.current && listWhenLastScrolled !== rooms) {
48
69
  listWhenLastScrolled = rooms;
49
70
  const offset = beContext.screenSize <= ScreenSize_1.default.Medium ? 185 : 350;
50
- window.scrollTo({ top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset), behavior: 'smooth' });
71
+ window.scrollTo({
72
+ top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset),
73
+ behavior: 'smooth',
74
+ });
51
75
  }
52
76
  };
53
77
  (0, react_1.useEffect)(() => {
@@ -160,12 +184,12 @@ function RoomList() {
160
184
  setTimeout(() => {
161
185
  scrollIntoView();
162
186
  }, 100);
163
- const elements = (react_2.default.createElement("div", { ref: roomListRef }, isLoading ? (react_2.default.createElement(LargeLoader_1.default, null)) : sortedRooms.length ? (sortedRooms.map((room, index) => react_2.default.createElement(RoomDetails_1.default, { key: room.code, room: room, disableMarginBottom: index === sortedRooms.length - 1 }))) : (react_2.default.createElement(react_2.default.Fragment, null,
164
- apiHasError ? react_2.default.createElement(StepRoomErrorForm_1.StepRoomErrorForm, null) : react_2.default.createElement(NoRoomsFoundBlock_1.default, null), (_a = hotel === null || hotel === void 0 ? void 0 : hotel.crossSellHotelIds) === null || _a === void 0 ? void 0 :
165
- _a.map((hotelId) => (react_2.default.createElement(RoomListCrossSellBlock_1.default, { key: hotelId, hotelId: hotelId })))))));
187
+ const elements = (react_1.default.createElement("div", { ref: roomListRef }, isLoading ? (react_1.default.createElement(LargeLoader_1.default, null)) : sortedRooms.length ? (sortedRooms.map((room, index) => react_1.default.createElement(RoomDetails_1.default, { key: room.code, room: room, disableMarginBottom: index === sortedRooms.length - 1 }))) : (react_1.default.createElement(react_1.default.Fragment, null,
188
+ apiHasError ? react_1.default.createElement(StepRoomErrorForm_1.StepRoomErrorForm, null) : react_1.default.createElement(NoRoomsFoundBlock_1.default, null), (_a = hotel === null || hotel === void 0 ? void 0 : hotel.crossSellHotelIds) === null || _a === void 0 ? void 0 :
189
+ _a.map((hotelId) => (react_1.default.createElement(RoomListCrossSellBlock_1.default, { key: hotelId, hotelId: hotelId })))))));
166
190
  DataLayer_1.default.instance.sendRoomImpressions();
167
- return (react_2.default.createElement(react_2.default.Fragment, null,
168
- react_2.default.createElement(RoomListAlert_1.RoomListAlert, null, !isLoading && retargetingRoom ? react_2.default.createElement(RoomDetailsRetargeting_1.RoomDetailsRetargeting, { key: retargetingRoom.code, room: retargetingRoom }) : null),
191
+ return (react_1.default.createElement(react_1.default.Fragment, null,
192
+ react_1.default.createElement(RoomListAlert_1.RoomListAlert, null, !isLoading && retargetingRoom ? react_1.default.createElement(RoomDetailsRetargeting_1.RoomDetailsRetargeting, { key: retargetingRoom.code, room: retargetingRoom }) : null),
169
193
  elements));
170
194
  }, [rooms, isLoading, openRoom, sortBy, beContext.currentFilters, basketContext.loadedPromotion]);
171
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useState, useMemo, useRef, useEffect } from 'react';\nimport { BasketContext, BookingEngineContext, RoomstayMemberContext } from '@frontend/contexts';\nimport React from 'react';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport { Room } from '@/models/Room/Room';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport Filter from '@/models/Room/Filters/Filter';\nimport FilterProvider from '@/providers/FilterProvider';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { CompanyContext } from '@frontend/contexts';\n\nimport { SearchParameters } from '@/models/SearchParameters';\nimport { GuestSearchEvent } from '@/events/actions/GuestSearchEvent';\nimport { RoomListSearch } from '@/models/RoomListSearch';\nimport { RoomListSearchEvent } from '@/events/actions/RoomListSearchEvent';\n\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport dayjs from 'dayjs';\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\nimport BasketRow from 'models/BasketRow';\n\nexport default function RoomList() {\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n const ccx = useContext(CompanyContext);\n const { roomstayMember } = useContext(RoomstayMemberContext);\n\n const { hotel } = useCurrentHotel();\n\n const [rooms, setRooms] = React.useState<Room[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const [openRoom, setOpenRoom] = useState<boolean | null>(null);\n const [apiHasError, setApiHasError] = useState<boolean | null>(null);\n\n const roomListRef = useRef<HTMLDivElement | null>(null);\n\n const selectedRow = basketContext.selectedBasketRow;\n\n const startDate = selectedRow?.getStartDate();\n const endDate = selectedRow?.getEndDate();\n const promoCode = selectedRow?.getPromoCode();\n\n const adults = selectedRow?.getAdults();\n const children = selectedRow?.getChildren();\n const sortBy = beContext.currentRoomSort;\n\n let listWhenLastScrolled: Room[] | null = null;\n\n const { raise } = useEvent();\n\n const scrollIntoView = () => {\n if (roomListRef.current && listWhenLastScrolled !== rooms) {\n listWhenLastScrolled = rooms;\n const offset = beContext.screenSize <= ScreenSize.Medium ? 185 : 350;\n\n window.scrollTo({ top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset), behavior: 'smooth' });\n }\n };\n\n useEffect(() => {\n let isCancelled = false;\n\n try {\n const search: SearchParameters = {\n checkInTime: startDate?.format('YYYY-M-D'),\n checkOutTime: endDate?.format('YYYY-M-D'),\n numAdults: adults,\n numChildren: children,\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const event = new GuestSearchEvent(search);\n raise(event);\n\n const filters: Filter[] = Object.values(beContext.currentFilters).filter((filter) => !!filter) as Filter[];\n\n let row = basketContext.selectedBasketRow;\n\n if (!row && !rooms.length) {\n row = basketContext.attemptSelectUnfilledRow() as BasketRow;\n }\n\n if (!row) {\n const validRows = basketContext.getAllValidRows();\n row = validRows[validRows.length - 1];\n }\n\n if (row) {\n setIsLoading(true);\n FilterProvider.getRoomList(row, filters, hotel?.hotelID as string)\n .then((availableRooms) => {\n if (!isCancelled) {\n setRooms(availableRooms);\n setOpenRoom(!!basketContext.selectedBasketRow);\n setApiHasError(false);\n\n const foundRooms: RoomListSearch[] =\n availableRooms?.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, foundRooms);\n raise(event);\n }\n })\n .catch(() => {\n if (!isCancelled) {\n setRooms([]);\n setOpenRoom(null);\n setApiHasError(true);\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n } catch (ex) {\n //\n }\n\n return () => {\n setIsLoading(false);\n isCancelled = true;\n };\n }, [adults, children, startDate, endDate, promoCode, ccx.currentLanguage, beContext.currentFilters, basketContext.selectedBasketRow?.getStale()]);\n\n const retargetingRoom = useMemo(() => {\n if (!roomstayMember || roomstayMember.bookings?.length === 0) return null;\n\n let lastBookingDate: dayjs.Dayjs;\n let lastBookingRoomcode = '';\n roomstayMember.bookings.forEach((booking) => {\n if (booking.hotelId !== hotel?.hotelID) {\n return;\n }\n\n Object.values(booking.itinerary).map((itinerary) => {\n const { roomCode, nights } = itinerary;\n const dates = Object.keys(nights).map(dayjs);\n const maxDate = dayjs(\n Math.max.apply(\n null,\n dates.map((d) => +d)\n )\n );\n if (!lastBookingDate || maxDate.isAfter(maxDate)) {\n lastBookingDate = maxDate;\n lastBookingRoomcode = roomCode;\n }\n });\n });\n\n return rooms.find((room) => room.code === lastBookingRoomcode);\n }, [rooms, roomstayMember]);\n\n return useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n setTimeout(() => {\n scrollIntoView();\n }, 100);\n\n const elements = (\n <div ref={roomListRef}>\n {isLoading ? (\n <LargeLoader />\n ) : sortedRooms.length ? (\n sortedRooms.map((room, index) => <RoomDetails key={room.code} room={room} disableMarginBottom={index === sortedRooms.length - 1} />)\n ) : (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n )}\n </div>\n );\n\n DataLayer.instance.sendRoomImpressions();\n\n return (\n <>\n <RoomListAlert>{!isLoading && retargetingRoom ? <RoomDetailsRetargeting key={retargetingRoom.code} room={retargetingRoom} /> : null}</RoomListAlert>\n {elements}\n </>\n );\n }, [rooms, isLoading, openRoom, sortBy, beContext.currentFilters, basketContext.loadedPromotion]);\n}\n"]}
1
+ {"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { BasketContext, BookingEngineContext, CompanyContext, RoomstayMemberContext } from '@frontend/contexts';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport { Room } from '@/models/Room/Room';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport Filter from '@/models/Room/Filters/Filter';\nimport FilterProvider from '@/providers/FilterProvider';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\n\nimport { SearchParameters } from '@/models/SearchParameters';\nimport { GuestSearchEvent } from '@/events/actions/GuestSearchEvent';\nimport { RoomListSearch } from '@/models/RoomListSearch';\nimport { RoomListSearchEvent } from '@/events/actions/RoomListSearchEvent';\n\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport dayjs from 'dayjs';\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\nimport BasketRow from 'models/BasketRow';\nimport { IRoomstayMemberBookingItem } from '@roomstay/core';\n\nexport default function RoomList() {\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n const ccx = useContext(CompanyContext);\n const { roomstayMember } = useContext(RoomstayMemberContext);\n\n const { hotel } = useCurrentHotel();\n\n const [rooms, setRooms] = React.useState<Room[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const [openRoom, setOpenRoom] = useState<boolean | null>(null);\n const [apiHasError, setApiHasError] = useState<boolean | null>(null);\n\n const roomListRef = useRef<HTMLDivElement | null>(null);\n\n const selectedRow = basketContext.selectedBasketRow;\n\n const startDate = selectedRow?.getStartDate();\n const endDate = selectedRow?.getEndDate();\n const promoCode = selectedRow?.getPromoCode();\n\n const adults = selectedRow?.getAdults();\n const children = selectedRow?.getChildren();\n const sortBy = beContext.currentRoomSort;\n\n let listWhenLastScrolled: Room[] | null = null;\n\n const { raise } = useEvent();\n\n const scrollIntoView = () => {\n if (roomListRef.current && listWhenLastScrolled !== rooms) {\n listWhenLastScrolled = rooms;\n const offset = beContext.screenSize <= ScreenSize.Medium ? 185 : 350;\n\n window.scrollTo({\n top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset),\n behavior: 'smooth',\n });\n }\n };\n\n useEffect(() => {\n let isCancelled = false;\n\n try {\n const search: SearchParameters = {\n checkInTime: startDate?.format('YYYY-M-D'),\n checkOutTime: endDate?.format('YYYY-M-D'),\n numAdults: adults,\n numChildren: children,\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const event = new GuestSearchEvent(search);\n raise(event);\n\n const filters: Filter[] = Object.values(beContext.currentFilters).filter((filter) => !!filter) as Filter[];\n\n let row = basketContext.selectedBasketRow;\n\n if (!row && !rooms.length) {\n row = basketContext.attemptSelectUnfilledRow() as BasketRow;\n }\n\n if (!row) {\n const validRows = basketContext.getAllValidRows();\n row = validRows[validRows.length - 1];\n }\n\n if (row) {\n setIsLoading(true);\n FilterProvider.getRoomList(row, filters, hotel?.hotelID as string)\n .then((availableRooms) => {\n if (!isCancelled) {\n setRooms(availableRooms);\n setOpenRoom(!!basketContext.selectedBasketRow);\n setApiHasError(false);\n\n const foundRooms: RoomListSearch[] =\n availableRooms?.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, foundRooms);\n raise(event);\n }\n })\n .catch(() => {\n if (!isCancelled) {\n setRooms([]);\n setOpenRoom(null);\n setApiHasError(true);\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n } catch (ex) {\n //\n }\n\n return () => {\n setIsLoading(false);\n isCancelled = true;\n };\n }, [adults, children, startDate, endDate, promoCode, ccx.currentLanguage, beContext.currentFilters, basketContext.selectedBasketRow?.getStale()]);\n\n const retargetingRoom = useMemo(() => {\n if (!roomstayMember || roomstayMember.bookings?.length === 0) return null;\n\n let lastBookingDate: dayjs.Dayjs;\n let lastBookingRoomcode = '';\n roomstayMember.bookings.forEach((booking) => {\n if (booking.hotelId !== hotel?.hotelID) {\n return;\n }\n\n Object.values<IRoomstayMemberBookingItem>(booking.itinerary).map((itinerary) => {\n const { roomCode, nights } = itinerary;\n const dates = Object.keys(nights).map(dayjs);\n const maxDate = dayjs(\n Math.max.apply(\n null,\n dates.map((d) => +d)\n )\n );\n if (!lastBookingDate || maxDate.isAfter(maxDate)) {\n lastBookingDate = maxDate;\n lastBookingRoomcode = roomCode;\n }\n });\n });\n\n return rooms.find((room) => room.code === lastBookingRoomcode);\n }, [rooms, roomstayMember]);\n\n return useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n setTimeout(() => {\n scrollIntoView();\n }, 100);\n\n const elements = (\n <div ref={roomListRef}>\n {isLoading ? (\n <LargeLoader />\n ) : sortedRooms.length ? (\n sortedRooms.map((room, index) => <RoomDetails key={room.code} room={room} disableMarginBottom={index === sortedRooms.length - 1} />)\n ) : (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n )}\n </div>\n );\n\n DataLayer.instance.sendRoomImpressions();\n\n return (\n <>\n <RoomListAlert>{!isLoading && retargetingRoom ? <RoomDetailsRetargeting key={retargetingRoom.code} room={retargetingRoom} /> : null}</RoomListAlert>\n {elements}\n </>\n );\n }, [rooms, isLoading, openRoom, sortBy, beContext.currentFilters, basketContext.loadedPromotion]);\n}\n"]}
@@ -181,7 +181,7 @@ function RoomBuilderProgressRow(props) {
181
181
  react_1.default.createElement(NumberOfChildrenPicker_1.default, { row: row, onChange: updateNumberOfChildrenOnChange }))),
182
182
  react_1.default.createElement(react_1.default.Fragment, null,
183
183
  react_1.default.createElement("div", { className: "room-builder-progress--value" },
184
- react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row.getStartDate(), selectedDateChanged: updateDateValues, className: "u-w-100@xl- d-flex align-items-center justify-content-center" },
184
+ react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row.getStartDate(), selectedDateChanged: updateDateValues, className: "u-w-100@xl- d-flex align-items-center justify-content-center", isAboveNav: true },
185
185
  react_1.default.createElement(Tooltip_1.default, { title: "Select Arrival and departure dates by clicking here" },
186
186
  react_1.default.createElement("div", { className: "u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer" },
187
187
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.Accent, bold: true, className: "u-nowrap" }, row.getArrivalDate()),
@@ -1 +1 @@
1
- {"version":3,"file":"RoomBuilderProgressRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport BasketRow from '@/models/BasketRow';\nimport { useRef, useState, useContext, useEffect } from 'react';\nimport classNames from 'classnames';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport StringHelper from '@/util/StringHelper';\nimport { Color } from '@/util/Color';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport ScreenSize from '@/util/ScreenSize';\nimport dayjs from 'dayjs';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport NumberOfChildrenPicker from '@/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker';\nimport NumberOfAdultsPicker from '@/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\n\nexport interface RoomBuilderProgressRowProps {\n row: BasketRow;\n number?: number;\n}\n\nexport default function RoomBuilderProgressRow(props: RoomBuilderProgressRowProps) {\n const context = useContext(BasketContext);\n const engineContext = useContext(BookingEngineContext);\n const { t } = useTranslation();\n\n const [isEditing, setIsEditing] = useState(false);\n\n const { row } = props;\n\n const isCurrent = context.selectedBasketRow && context.selectedBasketRow.getID() === row.getID();\n const classes = classNames('room-builder-progress--item', {\n '--current': isCurrent,\n '--complete': row.isValid(),\n });\n const [promoCode, setPromoCode] = useState(row.getPromoCode());\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n useEffect(() => {\n if (isEditing && !isCurrent) {\n setIsEditing(false);\n }\n }, [context.selectBasketRow]);\n\n const updatePeopleValues = ({ adults, children, updatedPromoCode }: { adults?: number; children?: number; updatedPromoCode?: 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 ((updatedPromoCode || updatedPromoCode === '') && updatedPromoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n row.setPromoCode(updatedPromoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate) {\n row.setStartDate(startDate);\n }\n\n if (endDate) {\n row.setEndDate(endDate);\n }\n\n context.updateBasketRow(row);\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const isRemovable = context.currentBasketRows.length > 1;\n const removeRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Remove Room', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.removeBasketRow(row);\n };\n const removeButton = (\n <Tooltip title={isRemovable ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.'}>\n <div className=\"room-builder-progress--remove\">\n <BEButton isText icon={IconType.Close} iconPosition=\"right\" stopIconAnimation disabled={!isRemovable} onClick={removeRoomOnClick} />\n </div>\n </Tooltip>\n );\n\n const isLargerThanLarge = engineContext.screenSize > ScreenSize.ExtraLarge;\n const showEditSection = isLargerThanLarge || isCurrent;\n\n const roomLabel = context.currentBasketRows.length !== 1 ? (props.number as number) + 1 : '';\n\n let promoCodeTooltip = '';\n\n if (row.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? 'Promo Code is being checked... please wait.' : 'Set a Promo Code for a possible offer!';\n } else {\n if (row.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = 'Successful promo code entered';\n } else {\n promoCodeTooltip = 'Error code not valid';\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 setPromoCode(row.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const saveRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Save Room Changes', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const cancelRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Room Changes', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const editRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Edit Room', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(row);\n setIsEditing(true);\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n return (\n <div className={classes}>\n {isCurrent || !row.isValid() ? (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl- align-items-center\">\n <div>\n {row.isValid() ? (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.EditingRoom)} {roomLabel}\n </strong>\n </Text>\n ) : (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.SelectRoom)} {roomLabel}\n </strong>\n </Text>\n )}\n </div>\n {showEditSection ? (\n <>\n {!isLargerThanLarge && (\n <div className={'w-100 d-flex' + (showEditSection ? ' u-marg-bottom@xl-' : '')}>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n Choose room below\n </Text>\n </div>\n )}\n <Tooltip title=\"Update number of adults\" wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfAdultsPicker row={row} onChange={updateNumberOfAdultsOnChange} />\n </div>\n </Tooltip>\n <Tooltip title=\"Update number of children\" wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfChildrenPicker row={row} onChange={updateNumberOfChildrenOnChange} />\n </div>\n </Tooltip>\n\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n >\n <Tooltip title=\"Select Arrival and departure dates by clicking here\">\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\">\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 </>\n\n <Overlay open={isPromoModalOpen} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={context.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new'\n ? context.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 Cancel\n </BEButton>\n </div>\n </div>\n </Overlay>\n {!isLargerThanLarge && row.isValid() && (\n <BEButton wide primary filled onClick={saveRoomChangesOnClick}>\n Save\n </BEButton>\n )}\n </>\n ) : (\n <div className=\"w-100\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.NextRoom)}\n </Text>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n {row.isValid() && (\n <div className=\"u-none@xl-\">\n <Tooltip title=\"Cancel changes\">\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={cancelRoomChangesOnClick}>\n {t(Translation.Misc.Cancel).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n )}\n {removeButton}\n </div>\n </div>\n ) : (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex justify-content-start\">\n <div className=\"u-flex flex-column\">\n <span>\n <Text inline={isLargerThanLarge}>\n <strong>{row.getRoom().name}</strong>\n </Text>\n <Text inline={isLargerThanLarge} type={isLargerThanLarge ? TextType.Body : TextType.Small}>\n <span className=\"u-marg-left--light@xl\">\n {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n ,&nbsp;\n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </span>\n </Text>\n </span>\n <Text type={TextType.Caption} color={Color.DarkGrey}>\n <strong>{row.getStayDateRange('ddd, MMM D, YYYY', ' -')}</strong>\n </Text>\n </div>\n {row.isPromoCodeValid() && (\n <div className=\"u-marg-left d-flex align-items-center\">\n <Pill type={PillType.Success} icon={IconType.Money}>\n {row.getPromoCode()}\n </Pill>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n <Tooltip title=\"Edit this room\">\n <div className=\"u-flex align-items-center room-builder-progress--edit\">\n <BEButton isText size=\"tiny\" onClick={editRoomOnClick}>\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n {removeButton}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomBuilderProgressRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport BasketRow from '@/models/BasketRow';\nimport { useRef, useState, useContext, useEffect } from 'react';\nimport classNames from 'classnames';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport StringHelper from '@/util/StringHelper';\nimport { Color } from '@/util/Color';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport ScreenSize from '@/util/ScreenSize';\nimport dayjs from 'dayjs';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport NumberOfChildrenPicker from '@/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker';\nimport NumberOfAdultsPicker from '@/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\n\nexport interface RoomBuilderProgressRowProps {\n row: BasketRow;\n number?: number;\n}\n\nexport default function RoomBuilderProgressRow(props: RoomBuilderProgressRowProps) {\n const context = useContext(BasketContext);\n const engineContext = useContext(BookingEngineContext);\n const { t } = useTranslation();\n\n const [isEditing, setIsEditing] = useState(false);\n\n const { row } = props;\n\n const isCurrent = context.selectedBasketRow && context.selectedBasketRow.getID() === row.getID();\n const classes = classNames('room-builder-progress--item', {\n '--current': isCurrent,\n '--complete': row.isValid(),\n });\n const [promoCode, setPromoCode] = useState(row.getPromoCode());\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n useEffect(() => {\n if (isEditing && !isCurrent) {\n setIsEditing(false);\n }\n }, [context.selectBasketRow]);\n\n const updatePeopleValues = ({ adults, children, updatedPromoCode }: { adults?: number; children?: number; updatedPromoCode?: 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 ((updatedPromoCode || updatedPromoCode === '') && updatedPromoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n row.setPromoCode(updatedPromoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate) {\n row.setStartDate(startDate);\n }\n\n if (endDate) {\n row.setEndDate(endDate);\n }\n\n context.updateBasketRow(row);\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const isRemovable = context.currentBasketRows.length > 1;\n const removeRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Remove Room', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.removeBasketRow(row);\n };\n const removeButton = (\n <Tooltip title={isRemovable ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.'}>\n <div className=\"room-builder-progress--remove\">\n <BEButton isText icon={IconType.Close} iconPosition=\"right\" stopIconAnimation disabled={!isRemovable} onClick={removeRoomOnClick} />\n </div>\n </Tooltip>\n );\n\n const isLargerThanLarge = engineContext.screenSize > ScreenSize.ExtraLarge;\n const showEditSection = isLargerThanLarge || isCurrent;\n\n const roomLabel = context.currentBasketRows.length !== 1 ? (props.number as number) + 1 : '';\n\n let promoCodeTooltip = '';\n\n if (row.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? 'Promo Code is being checked... please wait.' : 'Set a Promo Code for a possible offer!';\n } else {\n if (row.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = 'Successful promo code entered';\n } else {\n promoCodeTooltip = 'Error code not valid';\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 setPromoCode(row.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const saveRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Save Room Changes', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const cancelRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Room Changes', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const editRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Edit Room', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(row);\n setIsEditing(true);\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n return (\n <div className={classes}>\n {isCurrent || !row.isValid() ? (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl- align-items-center\">\n <div>\n {row.isValid() ? (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.EditingRoom)} {roomLabel}\n </strong>\n </Text>\n ) : (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.SelectRoom)} {roomLabel}\n </strong>\n </Text>\n )}\n </div>\n {showEditSection ? (\n <>\n {!isLargerThanLarge && (\n <div className={'w-100 d-flex' + (showEditSection ? ' u-marg-bottom@xl-' : '')}>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n Choose room below\n </Text>\n </div>\n )}\n <Tooltip title=\"Update number of adults\" wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfAdultsPicker row={row} onChange={updateNumberOfAdultsOnChange} />\n </div>\n </Tooltip>\n <Tooltip title=\"Update number of children\" wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfChildrenPicker row={row} onChange={updateNumberOfChildrenOnChange} />\n </div>\n </Tooltip>\n\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n isAboveNav\n >\n <Tooltip title=\"Select Arrival and departure dates by clicking here\">\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\">\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 </>\n\n <Overlay open={isPromoModalOpen} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={context.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new'\n ? context.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 Cancel\n </BEButton>\n </div>\n </div>\n </Overlay>\n {!isLargerThanLarge && row.isValid() && (\n <BEButton wide primary filled onClick={saveRoomChangesOnClick}>\n Save\n </BEButton>\n )}\n </>\n ) : (\n <div className=\"w-100\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.NextRoom)}\n </Text>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n {row.isValid() && (\n <div className=\"u-none@xl-\">\n <Tooltip title=\"Cancel changes\">\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={cancelRoomChangesOnClick}>\n {t(Translation.Misc.Cancel).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n )}\n {removeButton}\n </div>\n </div>\n ) : (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex justify-content-start\">\n <div className=\"u-flex flex-column\">\n <span>\n <Text inline={isLargerThanLarge}>\n <strong>{row.getRoom().name}</strong>\n </Text>\n <Text inline={isLargerThanLarge} type={isLargerThanLarge ? TextType.Body : TextType.Small}>\n <span className=\"u-marg-left--light@xl\">\n {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n ,&nbsp;\n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </span>\n </Text>\n </span>\n <Text type={TextType.Caption} color={Color.DarkGrey}>\n <strong>{row.getStayDateRange('ddd, MMM D, YYYY', ' -')}</strong>\n </Text>\n </div>\n {row.isPromoCodeValid() && (\n <div className=\"u-marg-left d-flex align-items-center\">\n <Pill type={PillType.Success} icon={IconType.Money}>\n {row.getPromoCode()}\n </Pill>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n <Tooltip title=\"Edit this room\">\n <div className=\"u-flex align-items-center room-builder-progress--edit\">\n <BEButton isText size=\"tiny\" onClick={editRoomOnClick}>\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n {removeButton}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -59,6 +59,9 @@ export * from './models/Client/Hotel/DistanceUnitType.types';
59
59
  export * from './models/Client/Hotel/WeekdayStartsOn.types';
60
60
  export * from './models/Client/Hotel/Company';
61
61
  export { default as API } from './api/BookingAPI';
62
+ export { HotelOverrideDTO } from './models/Api/HotelOverrideDTO';
63
+ export { default as HotelDTO } from './models/Api/HotelDTO';
64
+ export { default as ColorProfile } from './models/Client/Hotel/ColorProfile';
62
65
  export { default as StepManager } from './util/StepManager';
63
66
  export { default as StepAddon } from './pages/steps/StepAddon/StepAddon';
64
67
  export { default as StepDate } from './pages/steps/StepDate/StepDate';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"/","sources":["src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import 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\n// TODO: Look into resolving this.\nimport ReactRaw from 'react';\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 * from '@/engines/FullPageBookingEngine/FullPageBookingEngine';\nexport * from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nexport * from '@/engines/RecentSearchesEngine/RecentSearchesEngine';\nexport * from '@/engines/BookingWizardEngine/BookingWizardEngine';\nexport * from '@/engines/CustomEngine/CustomEngine';\n\nexport { default as Icon } from '@/components/generic/Icon/Icon';\nexport * from '@/components/generic/Icon/Icon';\nexport * from '@/components/generic/Text';\nexport * from '@/components/generic/Select/index';\n\nexport { default as TextBox } from '@/components/generic/TextBox';\nexport { default as TextArea } from '@/components/generic/TextArea';\nexport { default as InputGroup } from '@/components/generic/InputGroup/InputGroup';\nexport { default as RadioFields } from '@/components/generic/radio/RadioFields';\nexport { default as Checkbox } from '@/components/generic/Checkbox/Checkbox';\n\nexport { default as LineBreak } from '@/components/generic/LineBreak';\nexport { default as AutoAutoHeight } from '@/animations/AutoAutoHeight';\nexport { default as Headline } from '@/components/generic/Headline';\n\nexport * from '@/components/generic/Alert';\nexport { default as Alert } from '@/components/generic/Alert';\nexport { default as BEButton } from '@/components/generic/BEButton';\n\nexport { BE_NO_ROOMS_FOUND_BLOCK } from '@/components/steps/room/NoRoomsFoundBlock';\nexport { default as NoRoomsFoundBlock } from '@/components/steps/room/NoRoomsFoundBlock';\n\nexport { default as StepConfirmationCountrySelector } from '@/components/steps/confirmation/StepConfirmationCountrySelector';\n\nexport * from '@/components/steps/confirmation/StepConfirmationCommentsComponent';\nexport * from '@/components/summary/BESummaryPerkBlock';\n\nexport * from '@/components/summary/BESummary';\n\nexport * from '@/components/steps/room/StepRoomBestRateAlert';\nexport { default as StepNoRoomBestRateAlert } from '@/components/steps/room/StepRoomBestRateAlert';\n\n// Loaders\nexport { default as SmallSpinner } from '@/components/generic/loader/SmallSpinner';\n\n// Providers\nexport * from '@/providers/LanguageProvider';\nexport * from '@/providers/CurrencyProvider';\nexport { default as CurrencyProvider } from '@/providers/CurrencyProvider';\nexport { default as FeatureProvider } from '@/providers/FeatureProvider';\nexport { default as RatePillProvider } from '@/providers/RatePillProvider';\nexport * from '@/providers/PromotionProvider';\n\n// Features\n\nexport { default as ConfirmationVerifyFeature } from '@/providers/feature/ConfirmationVerifyFeature';\nexport { default as DatePickerTypeFeature } from '@/providers/feature/DatePickerTypeFeature';\nexport { default as FeaturedPromoFeature } from '@/providers/feature/FeaturedPromoFeature';\nexport { default as InlineAddonStepFeature } from '@/providers/feature/InlineAddonStepFeature';\nexport { default as RoomUpsellFeature } from '@/providers/feature/RoomUpsellFeature';\nexport { default as ShowIATANumberOnCheckoutFeature } from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\nexport { default as E164PhoneNumberFieldFeature } from '@/providers/feature/E164PhoneNumberFieldFeature';\nexport { default as FullPageEngineSmallSpacingFeature } from '@/providers/feature/FullPageEngineSmallSpacingFeature';\n\n// Contexts\nexport * from '@frontend/contexts';\nexport { useFormContext } from 'react-hook-form';\n\nexport { default as SessionProvider } from '@/providers/SessionProvider';\nexport * from '@/providers/RoomstayThemeEngine';\nexport { default as RoomstayThemeEngine } from '@/providers/RoomstayThemeEngine';\nexport { registerReplacement, withDI } from '@/providers/DIProvider';\n\nexport { default as DataLayer } from '@/util/DataLayer';\nexport * from '@/util/DataLayer';\n\n// Models\nexport * from '@/models/Client/Hotel/Hotel';\nexport * from '@/models/Client/Hotel/HotelPerk';\n\nexport * from '@/models/Client/Hotel/DistanceUnitType.types';\nexport * from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\nexport * from '@/models/Client/Hotel/Company';\n\nexport { default as API } from '@/api/BookingAPI';\n\n// Steps\nexport { default as StepManager } from '@/util/StepManager';\n\nexport { default as StepAddon } from '@/pages/steps/StepAddon/StepAddon';\nexport { default as StepDate } from '@/pages/steps/StepDate/StepDate';\nexport { default as StepConfirmation } from '@/pages/steps/StepConfirmation/StepConfirmation';\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';\n\nexport * from '@/translations/Translation';\n\n// Util\n\nexport * from '@/util/Color';\nexport * from '@/util/Debounce';\n\n// Hooks\n\nexport * from '@/hooks/CurrentHotelHook';\nexport * from '@/hooks/EventHook';\n\nexport * from '@/events/index';\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":";;;;;;;;;;;;;;;;;;;;AAAA,uGAA+E;AAC/E,+EAAuD;AACvD,+EAAuD;AACvD,qFAA6D;AAC7D,qEAA6C;AAE7C,kCAAkC;AAClC,kDAA6B;AAC7B,yFAAiE;AAEpD,QAAA,KAAK,GAAG,eAAQ,CAAC;AAE9B,+CAA+C;AAAtC,+GAAA,cAAc,OAAA;AACvB,qDAAwC;AAA/B,wGAAA,IAAI,OAAA;AAEb,aAAa;AACb,wFAAsE;AACtE,sFAAoE;AACpE,sFAAoE;AACpE,oFAAkE;AAClE,sEAAoD;AAEpD,uDAAiE;AAAxD,6GAAA,OAAO,OAAQ;AACxB,iEAA+C;AAC/C,4DAA0C;AAC1C,oEAAkD;AAElD,wDAAkE;AAAzD,mHAAA,OAAO,OAAW;AAC3B,0DAAoE;AAA3D,qHAAA,OAAO,OAAY;AAC5B,yEAAmF;AAA1E,yHAAA,OAAO,OAAc;AAC9B,sEAAgF;AAAvE,2HAAA,OAAO,OAAe;AAC/B,mEAA6E;AAApE,qHAAA,OAAO,OAAY;AAE5B,4DAAsE;AAA7D,uHAAA,OAAO,OAAa;AAC7B,8DAAwE;AAA/D,iIAAA,OAAO,OAAkB;AAClC,0DAAoE;AAA3D,qHAAA,OAAO,OAAY;AAE5B,6DAA2C;AAC3C,oDAA8D;AAArD,+GAAA,OAAO,OAAS;AACzB,0DAAoE;AAA3D,qHAAA,OAAO,OAAY;AAE5B,+EAAoF;AAA3E,4HAAA,uBAAuB,OAAA;AAChC,+EAAyF;AAAhF,uIAAA,OAAO,OAAqB;AAErC,mHAA6H;AAApH,mKAAA,OAAO,OAAmC;AAEnD,oGAAkF;AAClF,0EAAwD;AAExD,iEAA+C;AAE/C,gFAA8D;AAC9D,uFAAmG;AAA1F,iJAAA,OAAO,OAA2B;AAE3C,UAAU;AACV,yEAAmF;AAA1E,6HAAA,OAAO,OAAgB;AAEhC,YAAY;AACZ,+DAA6C;AAC7C,+DAA6C;AAC7C,iEAA2E;AAAlE,qIAAA,OAAO,OAAoB;AACpC,+DAAyE;AAAhE,mIAAA,OAAO,OAAmB;AACnC,iEAA2E;AAAlE,qIAAA,OAAO,OAAoB;AACpC,gEAA8C;AAE9C,WAAW;AAEX,2FAAqG;AAA5F,uJAAA,OAAO,OAA6B;AAC7C,mFAA6F;AAApF,+IAAA,OAAO,OAAyB;AACzC,iFAA2F;AAAlF,6IAAA,OAAO,OAAwB;AACxC,qFAA+F;AAAtF,iJAAA,OAAO,OAA0B;AAC1C,2EAAqF;AAA5E,uIAAA,OAAO,OAAqB;AACrC,uGAAiH;AAAxG,mKAAA,OAAO,OAAmC;AACnD,+FAAyG;AAAhG,2JAAA,OAAO,OAA+B;AAC/C,2GAAqH;AAA5G,uKAAA,OAAO,OAAqC;AAErD,WAAW;AACX,qDAAmC;AACnC,mDAAiD;AAAxC,iHAAA,cAAc,OAAA;AAEvB,+DAAyE;AAAhE,mIAAA,OAAO,OAAmB;AACnC,kEAAgD;AAChD,uEAAiF;AAAxE,2IAAA,OAAO,OAAuB;AACvC,qDAAqE;AAA5D,iHAAA,mBAAmB,OAAA;AAAE,oGAAA,MAAM,OAAA;AAEpC,8CAAwD;AAA/C,uHAAA,OAAO,OAAa;AAC7B,mDAAiC;AAEjC,SAAS;AACT,8DAA4C;AAC5C,kEAAgD;AAEhD,+EAA6D;AAC7D,8EAA4D;AAE5D,gEAA8C;AAE9C,+CAAkD;AAAzC,kHAAA,OAAO,OAAO;AAQvB,QAAQ;AACR,kDAA4D;AAAnD,2HAAA,OAAO,OAAe;AAE/B,+DAAyE;AAAhE,uHAAA,OAAO,OAAa;AAC7B,4DAAsE;AAA7D,qHAAA,OAAO,OAAY;AAC5B,oFAA8F;AAArF,qIAAA,OAAO,OAAoB;AACpC,+DAAyE;AAAhE,uHAAA,OAAO,OAAa;AAC7B,4DAAsE;AAA7D,qHAAA,OAAO,OAAY;AAC5B,kEAA4E;AAAnE,yHAAA,OAAO,OAAc;AAE9B,6DAA2C;AAE3C,OAAO;AAEP,+CAA6B;AAC7B,kDAAgC;AAEhC,QAAQ;AAER,2DAAyC;AACzC,oDAAkC;AAElC,iDAA+B;AAE/B,gDAAgD;AAChD,sEAAgF;AAAvE,6IAAA,OAAO,OAAwB;AAE3B,QAAA,MAAM,GAAG;IAClB,EAAE,EAAE,8BAAoB,CAAC,QAAQ;IACjC,KAAK,EAAE,8BAAoB,CAAC,KAAK;CACpC,CAAC;AAGW,QAAA,OAAO,GAAG,UAAU,CAAC;AAElC,qBAAW,CAAC,YAAY,GAAG;IACvB,CAAC,EAAE,kBAAQ;IACX,EAAE,EAAE,kBAAQ;IACZ,EAAE,EAAE,0BAAgB;IACpB,EAAE,EAAE,oBAAU;CACjB,CAAC","sourcesContent":["import 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\n// TODO: Look into resolving this.\nimport ReactRaw from 'react';\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 * from '@/engines/FullPageBookingEngine/FullPageBookingEngine';\nexport * from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nexport * from '@/engines/RecentSearchesEngine/RecentSearchesEngine';\nexport * from '@/engines/BookingWizardEngine/BookingWizardEngine';\nexport * from '@/engines/CustomEngine/CustomEngine';\n\nexport { default as Icon } from '@/components/generic/Icon/Icon';\nexport * from '@/components/generic/Icon/Icon';\nexport * from '@/components/generic/Text';\nexport * from '@/components/generic/Select/index';\n\nexport { default as TextBox } from '@/components/generic/TextBox';\nexport { default as TextArea } from '@/components/generic/TextArea';\nexport { default as InputGroup } from '@/components/generic/InputGroup/InputGroup';\nexport { default as RadioFields } from '@/components/generic/radio/RadioFields';\nexport { default as Checkbox } from '@/components/generic/Checkbox/Checkbox';\n\nexport { default as LineBreak } from '@/components/generic/LineBreak';\nexport { default as AutoAutoHeight } from '@/animations/AutoAutoHeight';\nexport { default as Headline } from '@/components/generic/Headline';\n\nexport * from '@/components/generic/Alert';\nexport { default as Alert } from '@/components/generic/Alert';\nexport { default as BEButton } from '@/components/generic/BEButton';\n\nexport { BE_NO_ROOMS_FOUND_BLOCK } from '@/components/steps/room/NoRoomsFoundBlock';\nexport { default as NoRoomsFoundBlock } from '@/components/steps/room/NoRoomsFoundBlock';\n\nexport { default as StepConfirmationCountrySelector } from '@/components/steps/confirmation/StepConfirmationCountrySelector';\n\nexport * from '@/components/steps/confirmation/StepConfirmationCommentsComponent';\nexport * from '@/components/summary/BESummaryPerkBlock';\n\nexport * from '@/components/summary/BESummary';\n\nexport * from '@/components/steps/room/StepRoomBestRateAlert';\nexport { default as StepNoRoomBestRateAlert } from '@/components/steps/room/StepRoomBestRateAlert';\n\n// Loaders\nexport { default as SmallSpinner } from '@/components/generic/loader/SmallSpinner';\n\n// Providers\nexport * from '@/providers/LanguageProvider';\nexport * from '@/providers/CurrencyProvider';\nexport { default as CurrencyProvider } from '@/providers/CurrencyProvider';\nexport { default as FeatureProvider } from '@/providers/FeatureProvider';\nexport { default as RatePillProvider } from '@/providers/RatePillProvider';\nexport * from '@/providers/PromotionProvider';\n\n// Features\n\nexport { default as ConfirmationVerifyFeature } from '@/providers/feature/ConfirmationVerifyFeature';\nexport { default as DatePickerTypeFeature } from '@/providers/feature/DatePickerTypeFeature';\nexport { default as FeaturedPromoFeature } from '@/providers/feature/FeaturedPromoFeature';\nexport { default as InlineAddonStepFeature } from '@/providers/feature/InlineAddonStepFeature';\nexport { default as RoomUpsellFeature } from '@/providers/feature/RoomUpsellFeature';\nexport { default as ShowIATANumberOnCheckoutFeature } from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\nexport { default as E164PhoneNumberFieldFeature } from '@/providers/feature/E164PhoneNumberFieldFeature';\nexport { default as FullPageEngineSmallSpacingFeature } from '@/providers/feature/FullPageEngineSmallSpacingFeature';\n\n// Contexts\nexport * from '@frontend/contexts';\nexport { useFormContext } from 'react-hook-form';\n\nexport { default as SessionProvider } from '@/providers/SessionProvider';\nexport * from '@/providers/RoomstayThemeEngine';\nexport { default as RoomstayThemeEngine } from '@/providers/RoomstayThemeEngine';\nexport { registerReplacement, withDI } from '@/providers/DIProvider';\n\nexport { default as DataLayer } from '@/util/DataLayer';\nexport * from '@/util/DataLayer';\n\n// Models\nexport * from '@/models/Client/Hotel/Hotel';\nexport * from '@/models/Client/Hotel/HotelPerk';\n\nexport * from '@/models/Client/Hotel/DistanceUnitType.types';\nexport * from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\nexport * from '@/models/Client/Hotel/Company';\n\nexport { default as API } from '@/api/BookingAPI';\n\nexport { HotelOverrideDTO } from '@/models/Api/HotelOverrideDTO';\n\nexport { default as HotelDTO } from '@/models/Api/HotelDTO';\n\nexport { default as ColorProfile } from '@/models/Client/Hotel/ColorProfile';\n\n// Steps\nexport { default as StepManager } from '@/util/StepManager';\n\nexport { default as StepAddon } from '@/pages/steps/StepAddon/StepAddon';\nexport { default as StepDate } from '@/pages/steps/StepDate/StepDate';\nexport { default as StepConfirmation } from '@/pages/steps/StepConfirmation/StepConfirmation';\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';\n\nexport * from '@/translations/Translation';\n\n// Util\n\nexport * from '@/util/Color';\nexport * from '@/util/Debounce';\n\n// Hooks\n\nexport * from '@/hooks/CurrentHotelHook';\nexport * from '@/hooks/EventHook';\n\nexport * from '@/events/index';\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"]}
@@ -85,6 +85,7 @@ export declare class Addon {
85
85
  checkInDate: dayjs.Dayjs;
86
86
  checkOutDate: dayjs.Dayjs;
87
87
  nights: number;
88
+ order?: number;
88
89
  constructor(props?: IAddon);
89
90
  applyData(data: IAddon): void;
90
91
  static fromData(data: any): Addon;
@@ -1 +1 @@
1
- {"version":3,"file":"Addon.js","sourceRoot":"/","sources":["src/models/Addon/Addon.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport { Dayjs } from 'dayjs';\n\ninterface IAddon {\n code: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n ratePlanCode: string;\n\n name: string;\n\n description: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n inclusive: boolean;\n\n image?: string;\n\n url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n pricingType: AddonPricingType;\n\n hideDatePicker?: boolean;\n\n category: string;\n\n cancelPenalty?: string;\n\n guaranteeDescription?: string;\n\n availability: { [date: string]: PriceInfo };\n\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n}\n\nexport enum AddonPricingType {\n PER_STAY = 'Per stay',\n PER_NIGHT = 'Per night',\n PER_PERSON = 'Per person',\n PER_PERSON_PER_NIGHT = 'Per person per night',\n\n // Synxis Basic addon types\n PER_QUANTITY_NAME_PER_NIGHT = 'Per Quantity Name Per Night',\n PER_ROOM_QUANTITY_PER_NIGHT = 'Per Room Quantity Per Night',\n PER_PERSON_OCCUPANCY_PER_NIGHT = 'Per Person Occupancy Per Night',\n PER_ADULT_OCCUPANCY_PER_NIGHT = 'Per Adult Occupancy Per Night',\n PER_CHILD_OCCUPANCY_PER_NIGHT = 'Per Child Occupancy Per Night',\n}\n\nexport const ADDON_PER_NIGHT_TYPES = [\n AddonPricingType.PER_NIGHT,\n AddonPricingType.PER_PERSON_PER_NIGHT,\n\n AddonPricingType.PER_QUANTITY_NAME_PER_NIGHT,\n AddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT,\n AddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport class Addon {\n public code!: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n public ratePlanCode!: string;\n\n public name!: string;\n\n public description!: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n public inclusive = false;\n\n public image?: string;\n\n public url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n public pricingType!: AddonPricingType;\n\n public hideDatePicker!: false;\n\n public category!: string;\n\n public cancelPenalty?: string;\n\n public guaranteeDescription?: string;\n\n public availability: { [date: string]: PriceInfo } = {};\n\n public selected?: boolean;\n\n public selectorDates: { text: string; value: string }[] = [];\n\n public firstDate?: string;\n\n public checkInDate!: dayjs.Dayjs;\n public checkOutDate!: dayjs.Dayjs;\n\n public nights!: number;\n\n public constructor(props?: IAddon) {\n if (props) {\n this.applyData(props);\n }\n }\n\n public applyData(data: IAddon) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n\n let first = true;\n for (const date in this.availability) {\n if (!Object.prototype.hasOwnProperty.call(this.availability, date)) {\n continue;\n }\n\n const day = dayjs(date, 'YYYY-MM-DD');\n this.selectorDates.push({ text: day.format('D MMM'), value: date });\n if (first) {\n this.firstDate = date;\n first = false;\n }\n\n const priceInfo = this.availability[date];\n priceInfo.selectorTimes = [];\n priceInfo.timeSlots?.forEach((slot) => {\n const timeRegExp = /T(\\d{2}):(\\d{2}):(\\d{2})$/;\n const startTime = slot.startTime?.match(timeRegExp);\n const endTime = slot.endTime?.match(timeRegExp);\n\n if (startTime && endTime) {\n const start = dayjs().hour(parseInt(startTime[1], 10)).minute(parseInt(startTime[2], 10)).second(parseInt(startTime[3], 10));\n const end = dayjs().hour(parseInt(endTime[1], 10)).minute(parseInt(endTime[2], 10)).second(parseInt(endTime[3], 10));\n\n const [hours, minutes, seconds] = (slot.increment as string).split(':').map((it) => parseInt(it, 10));\n\n const increment = (time: Dayjs) => time.add(hours, 'hour').add(minutes, 'minute').add(seconds, 'second');\n\n for (let time = start; time.isBefore(end, 'second'); time = increment(time)) {\n (priceInfo.selectorTimes as { text: string; value: string }[]).push({ text: time.format('h:mma'), value: time.format('THH:mm:ss') });\n }\n }\n });\n }\n\n if (data.checkInDate && data.checkOutDate) {\n this.nights = data.checkOutDate.diff(data.checkInDate, 'day');\n }\n }\n\n public static fromData(data: any) {\n const addon = new this();\n\n addon.applyData(data);\n\n return addon;\n }\n}\n\nexport type PriceInfo = {\n /**\n * Number of available items for sale.\n */\n quantity: number;\n\n /**\n * Price per quantity\n */\n price?: number;\n\n adultPrice?: number;\n childPrice?: number;\n\n timeSlots?: TimeSlot[];\n\n selectorTimes?: { text: string; value: string }[];\n};\n\nexport type TimeSlot = {\n /**\n * The start date and time when the package is available.\n * If the package applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates do not\n * include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n startTime?: string;\n\n /**\n * The end date / time when the package is available.\n * If the package component applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates\n * do not include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n endTime?: string;\n\n /**\n * Used with @Start and @End. Indicates the interval when the package or service is available.\n * For example, a package with golf lessons from 7:30 am to 5:30 pm with instructions and available hourly has the TimeSpan attributes set as: @Start=\"2015-\n * 010-28T07:30:00\" and @End=\"2015-10-28T17:30:00\" and @Increment=\"00:60:00\"\n * Type: Time\n */\n increment?: string;\n};\n"]}
1
+ {"version":3,"file":"Addon.js","sourceRoot":"/","sources":["src/models/Addon/Addon.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport { Dayjs } from 'dayjs';\n\ninterface IAddon {\n code: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n ratePlanCode: string;\n\n name: string;\n\n description: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n inclusive: boolean;\n\n image?: string;\n\n url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n pricingType: AddonPricingType;\n\n hideDatePicker?: boolean;\n\n category: string;\n\n cancelPenalty?: string;\n\n guaranteeDescription?: string;\n\n availability: { [date: string]: PriceInfo };\n\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n}\n\nexport enum AddonPricingType {\n PER_STAY = 'Per stay',\n PER_NIGHT = 'Per night',\n PER_PERSON = 'Per person',\n PER_PERSON_PER_NIGHT = 'Per person per night',\n\n // Synxis Basic addon types\n PER_QUANTITY_NAME_PER_NIGHT = 'Per Quantity Name Per Night',\n PER_ROOM_QUANTITY_PER_NIGHT = 'Per Room Quantity Per Night',\n PER_PERSON_OCCUPANCY_PER_NIGHT = 'Per Person Occupancy Per Night',\n PER_ADULT_OCCUPANCY_PER_NIGHT = 'Per Adult Occupancy Per Night',\n PER_CHILD_OCCUPANCY_PER_NIGHT = 'Per Child Occupancy Per Night',\n}\n\nexport const ADDON_PER_NIGHT_TYPES = [\n AddonPricingType.PER_NIGHT,\n AddonPricingType.PER_PERSON_PER_NIGHT,\n\n AddonPricingType.PER_QUANTITY_NAME_PER_NIGHT,\n AddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT,\n AddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport class Addon {\n public code!: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n public ratePlanCode!: string;\n\n public name!: string;\n\n public description!: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n public inclusive = false;\n\n public image?: string;\n\n public url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n public pricingType!: AddonPricingType;\n\n public hideDatePicker!: false;\n\n public category!: string;\n\n public cancelPenalty?: string;\n\n public guaranteeDescription?: string;\n\n public availability: { [date: string]: PriceInfo } = {};\n\n public selected?: boolean;\n\n public selectorDates: { text: string; value: string }[] = [];\n\n public firstDate?: string;\n\n public checkInDate!: dayjs.Dayjs;\n public checkOutDate!: dayjs.Dayjs;\n\n public nights!: number;\n\n public order?: number;\n\n public constructor(props?: IAddon) {\n if (props) {\n this.applyData(props);\n }\n }\n\n public applyData(data: IAddon) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n\n let first = true;\n for (const date in this.availability) {\n if (!Object.prototype.hasOwnProperty.call(this.availability, date)) {\n continue;\n }\n\n const day = dayjs(date, 'YYYY-MM-DD');\n this.selectorDates.push({ text: day.format('D MMM'), value: date });\n if (first) {\n this.firstDate = date;\n first = false;\n }\n\n const priceInfo = this.availability[date];\n priceInfo.selectorTimes = [];\n priceInfo.timeSlots?.forEach((slot) => {\n const timeRegExp = /T(\\d{2}):(\\d{2}):(\\d{2})$/;\n const startTime = slot.startTime?.match(timeRegExp);\n const endTime = slot.endTime?.match(timeRegExp);\n\n if (startTime && endTime) {\n const start = dayjs().hour(parseInt(startTime[1], 10)).minute(parseInt(startTime[2], 10)).second(parseInt(startTime[3], 10));\n const end = dayjs().hour(parseInt(endTime[1], 10)).minute(parseInt(endTime[2], 10)).second(parseInt(endTime[3], 10));\n\n const [hours, minutes, seconds] = (slot.increment as string).split(':').map((it) => parseInt(it, 10));\n\n const increment = (time: Dayjs) => time.add(hours, 'hour').add(minutes, 'minute').add(seconds, 'second');\n\n for (let time = start; time.isBefore(end, 'second'); time = increment(time)) {\n (priceInfo.selectorTimes as { text: string; value: string }[]).push({ text: time.format('h:mma'), value: time.format('THH:mm:ss') });\n }\n }\n });\n }\n\n if (data.checkInDate && data.checkOutDate) {\n this.nights = data.checkOutDate.diff(data.checkInDate, 'day');\n }\n }\n\n public static fromData(data: any) {\n const addon = new this();\n\n addon.applyData(data);\n\n return addon;\n }\n}\n\nexport type PriceInfo = {\n /**\n * Number of available items for sale.\n */\n quantity: number;\n\n /**\n * Price per quantity\n */\n price?: number;\n\n adultPrice?: number;\n childPrice?: number;\n\n timeSlots?: TimeSlot[];\n\n selectorTimes?: { text: string; value: string }[];\n};\n\nexport type TimeSlot = {\n /**\n * The start date and time when the package is available.\n * If the package applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates do not\n * include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n startTime?: string;\n\n /**\n * The end date / time when the package is available.\n * If the package component applies during the whole stay, this node is not returned unless the time needs to be selected. In that case, the Start and End dates\n * do not include the date: @Start=\"T07:30:00\" and @End=\"T17:30:00\" and @Increment=\"00:60:00\"\n * Type: DateTime\n */\n endTime?: string;\n\n /**\n * Used with @Start and @End. Indicates the interval when the package or service is available.\n * For example, a package with golf lessons from 7:30 am to 5:30 pm with instructions and available hourly has the TimeSpan attributes set as: @Start=\"2015-\n * 010-28T07:30:00\" and @End=\"2015-10-28T17:30:00\" and @Increment=\"00:60:00\"\n * Type: Time\n */\n increment?: string;\n};\n"]}