@roomstay/frontend 2.5.11 → 2.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/468.bundle.js +1 -1
  2. package/dist/535.bundle.js +1 -1
  3. package/dist/537.bundle.js +1 -1
  4. package/dist/572.bundle.js +1 -1
  5. package/dist/736.bundle.js +1 -1
  6. package/dist/903.bundle.js +1 -1
  7. package/dist/main.bundle.js +1 -1
  8. package/dist/src/components/generic/BookingWizard/BookingWizard.js +2 -2
  9. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  10. package/dist/src/components/generic/BookingWizard/BookingWizardContent.d.ts +1 -0
  11. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js +2 -2
  12. package/dist/src/components/generic/BookingWizard/BookingWizardContent.js.map +1 -1
  13. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.d.ts +1 -0
  14. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js +2 -5
  15. package/dist/src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.js.map +1 -1
  16. package/dist/src/components/steps/room/LargeRoomCard.js +16 -8
  17. package/dist/src/components/steps/room/LargeRoomCard.js.map +1 -1
  18. package/dist/src/components/steps/room/RoomList.js +2 -2
  19. package/dist/src/components/steps/room/RoomList.js.map +1 -1
  20. package/dist/src/components/steps/room/RoomModal.js +17 -13
  21. package/dist/src/components/steps/room/RoomModal.js.map +1 -1
  22. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +2 -2
  23. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
  24. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +2 -2
  25. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
  26. package/dist/src/components/steps/room/roomDetails/RoomDetails.js +6 -10
  27. package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
  28. package/dist/src/components/steps/room/roomDetails/RoomDetailsPerkBlock.js +7 -1
  29. package/dist/src/components/steps/room/roomDetails/RoomDetailsPerkBlock.js.map +1 -1
  30. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +22 -4
  31. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  32. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +1 -0
  33. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  34. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +1 -0
  35. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
  36. package/dist/src/hooks/RoomRateAvailabilityListFromApi.d.ts +1 -0
  37. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +3 -1
  38. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  39. package/dist/src/index.d.ts +1 -0
  40. package/dist/src/index.js +4 -1
  41. package/dist/src/index.js.map +1 -1
  42. package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -2
  43. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  44. package/dist/src/models/Client/Hotel/HotelPerk.d.ts +6 -0
  45. package/dist/src/models/Client/Hotel/HotelPerk.js.map +1 -1
  46. package/dist/src/models/Client/Hotel/HotelRoomOverwrite.d.ts +3 -0
  47. package/dist/src/models/Client/Hotel/HotelRoomOverwrite.js.map +1 -1
  48. package/dist/src/models/Room/Room.d.ts +10 -1
  49. package/dist/src/models/Room/Room.js +18 -0
  50. package/dist/src/models/Room/Room.js.map +1 -1
  51. package/dist/test.bundle.js +1 -1
  52. package/dist/tests/offline/entry/OfflineEngineDefaults.d.ts +1 -0
  53. package/dist/tests/offline/entry/OfflineEngineDefaults.js +91 -1
  54. package/dist/tests/offline/entry/OfflineEngineDefaults.js.map +1 -1
  55. package/dist/vendors.bundle.js +1 -1
  56. package/package.json +1 -1
@@ -46,7 +46,7 @@ var EBookingWizardTheme;
46
46
  EBookingWizardTheme["Specific"] = "specific";
47
47
  })(EBookingWizardTheme = exports.EBookingWizardTheme || (exports.EBookingWizardTheme = {}));
48
48
  const BookingWizard = (props) => {
49
- const { layout = 'horizontal', theme = EBookingWizardTheme.Default, onSubmit, wrapperClassname, contentClassname: contentClassnameProps, selectedProperty, properties, defaultColors, disableChild, disableRoom, hideGuestSelect, hidePromocode, defaultValues, } = props;
49
+ const { layout = 'horizontal', theme = EBookingWizardTheme.Default, onSubmit, wrapperClassname, contentClassname: contentClassnameProps, selectedProperty, properties, defaultColors, disableChild, showInfants, disableRoom, hideGuestSelect, hidePromocode, defaultValues, } = props;
50
50
  const [isOpen, setIsOpen] = react_1.default.useState(false);
51
51
  const { isMobile } = (0, WindowSize_1.useWindowSize)();
52
52
  const { t } = (0, react_i18next_1.useTranslation)();
@@ -112,7 +112,7 @@ const BookingWizard = (props) => {
112
112
  react_1.default.createElement(Icon_1.default, { className: BookingWizard_module_scss_1.default.closeBtn, icon: Icon_1.IconType.Close, size: "24px", onClick: () => setIsOpen(false) })),
113
113
  react_1.default.createElement(BookingWizardContext_1.BookingWizardContext.Provider, { value: bookingWizardContext },
114
114
  react_1.default.createElement("div", { className: classes },
115
- react_1.default.createElement(BookingWizardContent_1.BookingWizardContent, { properties: properties, selectedProperty: selectedProperty, defaultColors: defaultColors, classname: contentClassname, disableChild: disableChild, disableRoom: disableRoom, defaultValues: defaultValues, hideGuestSelect: hideGuestSelect, hidePromocode: hidePromocode })))))));
115
+ react_1.default.createElement(BookingWizardContent_1.BookingWizardContent, { properties: properties, selectedProperty: selectedProperty, defaultColors: defaultColors, classname: contentClassname, disableChild: disableChild, showInfants: showInfants, disableRoom: disableRoom, defaultValues: defaultValues, hideGuestSelect: hideGuestSelect, hidePromocode: hidePromocode })))))));
116
116
  }
117
117
  return (react_1.default.createElement("div", { ref: ref, className: classes },
118
118
  react_1.default.createElement(BookingWizardContext_1.BookingWizardContext.Provider, { value: bookingWizardContext },
@@ -1 +1 @@
1
- {"version":3,"file":"BookingWizard.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useMeasure from 'react-use-measure';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { BookingWizardContent, BookingWizardContentProps } from '@/components/generic/BookingWizard/BookingWizardContent';\nimport {\n BookingWizardContext,\n BookingWizardContextType,\n BookingWizardLayout,\n BookingWizardOverlayType,\n BookingWizardTheme,\n} from '@/components/generic/BookingWizard/BookingWizardContext';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport { Translation } from '@/translations/Translation';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport styles from './BookingWizard.module.scss';\n\nexport enum EBookingWizardTheme {\n Default = 'default',\n Specific = 'specific',\n}\n\nexport interface BookingWizardProps extends BookingWizardContentProps {\n layout?: BookingWizardLayout;\n theme?: BookingWizardTheme;\n\n wrapperClassname?: string;\n contentClassname?: string;\n\n properties: TBookingWizardProperties;\n selectedProperty: BookingWizardProperty;\n defaultColors: BookingWizardProperty['colors'];\n onSubmit: BookingWizardContextType['onSubmit'];\n}\n\nconst BookingWizard: React.FC<BookingWizardProps> = (props) => {\n const {\n layout = 'horizontal',\n theme = EBookingWizardTheme.Default,\n onSubmit,\n wrapperClassname,\n contentClassname: contentClassnameProps,\n selectedProperty,\n properties,\n defaultColors,\n disableChild,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n defaultValues,\n } = props;\n const [isOpen, setIsOpen] = React.useState(false);\n\n const { isMobile } = useWindowSize();\n const { t } = useTranslation();\n const [ref, bounds] = useMeasure({ debounce: 300 });\n\n const [compOverlayType, setCompOverlayType] = useState<BookingWizardOverlayType>('popup');\n const [overlayOffset, setOverlayOffset] = useState<[number, number]>();\n const [dateSelectorOverlayOffset, setDateSelectorOverlayOffset] = useState<[number, number]>();\n const [overlayPlacement, setOverlayPlacement] = useState<Placement>();\n\n const isSmallContainer = useMemo(() => {\n if (!bounds.width) return false;\n return bounds.width <= ScreenSize.Medium;\n }, [bounds]);\n\n useEffect(() => {\n if ((layout === 'horizontal' || layout === 'horizontal-condensed') && !isMobile) {\n setOverlayOffset([0, 6]);\n setDateSelectorOverlayOffset([0, 6]);\n setCompOverlayType('popup');\n } else {\n setOverlayOffset([0, 10]);\n setDateSelectorOverlayOffset([0, -8]);\n setCompOverlayType('bottom-sheet');\n }\n }, [layout, isMobile, isSmallContainer]);\n\n useEffect(() => {\n if (!isMobile) {\n setOverlayPlacement('bottom-start');\n } else {\n setOverlayPlacement('bottom');\n }\n }, [isMobile]);\n\n const classes = classNames(\n styles.container,\n {\n [styles['--theme-specific']]: theme === EBookingWizardTheme.Specific,\n [styles['--theme-default']]: theme === EBookingWizardTheme.Default,\n [styles['--theme-condensed']]: layout === 'horizontal-condensed',\n [styles['--in-small-container']]: isSmallContainer,\n },\n wrapperClassname\n );\n\n const contentClassname = classNames(contentClassnameProps, { [styles['--in-small-container']]: isSmallContainer });\n\n const bookingWizardContext: BookingWizardContextType = {\n layout,\n theme,\n type: compOverlayType,\n className: classes,\n isMobile,\n isSmallContainer,\n\n onSubmit,\n\n overlay: {\n offset: overlayOffset,\n placement: overlayPlacement,\n fallbackPlacements: overlayPlacement,\n dateOffset: dateSelectorOverlayOffset,\n },\n };\n\n if (layout === 'button') {\n return (\n <div className={classes}>\n <BEButton className={styles.bookNowBtn} onClick={() => setIsOpen(true)}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n\n <SimpleModal className={styles.container} size={SimpleModalSize.ExtraSmall} open={isOpen} onClose={() => setIsOpen(false)} alignCenter overflowVisible>\n <div>\n <div className={styles.title}>\n <span>{t(Translation.Misc.BookAHotel)}</span>\n <Icon className={styles.closeBtn} icon={IconType.Close} size=\"24px\" onClick={() => setIsOpen(false)} />\n </div>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <div className={classes}>\n <BookingWizardContent\n properties={properties}\n selectedProperty={selectedProperty}\n defaultColors={defaultColors}\n classname={contentClassname}\n disableChild={disableChild}\n disableRoom={disableRoom}\n defaultValues={defaultValues}\n hideGuestSelect={hideGuestSelect}\n hidePromocode={hidePromocode}\n />\n </div>\n </BookingWizardContext.Provider>\n </div>\n </SimpleModal>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes}>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <BookingWizardContent {...props} classname={contentClassname} disableChild={disableChild} disableRoom={disableRoom} defaultValues={defaultValues} />\n </BookingWizardContext.Provider>\n </div>\n );\n};\n\nexport default BookingWizard;\n"]}
1
+ {"version":3,"file":"BookingWizard.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Placement } from '@popperjs/core';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useMeasure from 'react-use-measure';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { BookingWizardContent, BookingWizardContentProps } from '@/components/generic/BookingWizard/BookingWizardContent';\nimport {\n BookingWizardContext,\n BookingWizardContextType,\n BookingWizardLayout,\n BookingWizardOverlayType,\n BookingWizardTheme,\n} from '@/components/generic/BookingWizard/BookingWizardContext';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport { Translation } from '@/translations/Translation';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport styles from './BookingWizard.module.scss';\n\nexport enum EBookingWizardTheme {\n Default = 'default',\n Specific = 'specific',\n}\n\nexport interface BookingWizardProps extends BookingWizardContentProps {\n layout?: BookingWizardLayout;\n theme?: BookingWizardTheme;\n\n wrapperClassname?: string;\n contentClassname?: string;\n\n properties: TBookingWizardProperties;\n selectedProperty: BookingWizardProperty;\n defaultColors: BookingWizardProperty['colors'];\n onSubmit: BookingWizardContextType['onSubmit'];\n}\n\nconst BookingWizard: React.FC<BookingWizardProps> = (props) => {\n const {\n layout = 'horizontal',\n theme = EBookingWizardTheme.Default,\n onSubmit,\n wrapperClassname,\n contentClassname: contentClassnameProps,\n selectedProperty,\n properties,\n defaultColors,\n disableChild,\n showInfants,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n defaultValues,\n } = props;\n const [isOpen, setIsOpen] = React.useState(false);\n\n const { isMobile } = useWindowSize();\n const { t } = useTranslation();\n const [ref, bounds] = useMeasure({ debounce: 300 });\n\n const [compOverlayType, setCompOverlayType] = useState<BookingWizardOverlayType>('popup');\n const [overlayOffset, setOverlayOffset] = useState<[number, number]>();\n const [dateSelectorOverlayOffset, setDateSelectorOverlayOffset] = useState<[number, number]>();\n const [overlayPlacement, setOverlayPlacement] = useState<Placement>();\n\n const isSmallContainer = useMemo(() => {\n if (!bounds.width) return false;\n return bounds.width <= ScreenSize.Medium;\n }, [bounds]);\n\n useEffect(() => {\n if ((layout === 'horizontal' || layout === 'horizontal-condensed') && !isMobile) {\n setOverlayOffset([0, 6]);\n setDateSelectorOverlayOffset([0, 6]);\n setCompOverlayType('popup');\n } else {\n setOverlayOffset([0, 10]);\n setDateSelectorOverlayOffset([0, -8]);\n setCompOverlayType('bottom-sheet');\n }\n }, [layout, isMobile, isSmallContainer]);\n\n useEffect(() => {\n if (!isMobile) {\n setOverlayPlacement('bottom-start');\n } else {\n setOverlayPlacement('bottom');\n }\n }, [isMobile]);\n\n const classes = classNames(\n styles.container,\n {\n [styles['--theme-specific']]: theme === EBookingWizardTheme.Specific,\n [styles['--theme-default']]: theme === EBookingWizardTheme.Default,\n [styles['--theme-condensed']]: layout === 'horizontal-condensed',\n [styles['--in-small-container']]: isSmallContainer,\n },\n wrapperClassname\n );\n\n const contentClassname = classNames(contentClassnameProps, { [styles['--in-small-container']]: isSmallContainer });\n\n const bookingWizardContext: BookingWizardContextType = {\n layout,\n theme,\n type: compOverlayType,\n className: classes,\n isMobile,\n isSmallContainer,\n\n onSubmit,\n\n overlay: {\n offset: overlayOffset,\n placement: overlayPlacement,\n fallbackPlacements: overlayPlacement,\n dateOffset: dateSelectorOverlayOffset,\n },\n };\n\n if (layout === 'button') {\n return (\n <div className={classes}>\n <BEButton className={styles.bookNowBtn} onClick={() => setIsOpen(true)}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n\n <SimpleModal className={styles.container} size={SimpleModalSize.ExtraSmall} open={isOpen} onClose={() => setIsOpen(false)} alignCenter overflowVisible>\n <div>\n <div className={styles.title}>\n <span>{t(Translation.Misc.BookAHotel)}</span>\n <Icon className={styles.closeBtn} icon={IconType.Close} size=\"24px\" onClick={() => setIsOpen(false)} />\n </div>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <div className={classes}>\n <BookingWizardContent\n properties={properties}\n selectedProperty={selectedProperty}\n defaultColors={defaultColors}\n classname={contentClassname}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n defaultValues={defaultValues}\n hideGuestSelect={hideGuestSelect}\n hidePromocode={hidePromocode}\n />\n </div>\n </BookingWizardContext.Provider>\n </div>\n </SimpleModal>\n </div>\n );\n }\n\n return (\n <div ref={ref} className={classes}>\n <BookingWizardContext.Provider value={bookingWizardContext}>\n <BookingWizardContent {...props} classname={contentClassname} disableChild={disableChild} disableRoom={disableRoom} defaultValues={defaultValues} />\n </BookingWizardContext.Provider>\n </div>\n );\n};\n\nexport default BookingWizard;\n"]}
@@ -9,6 +9,7 @@ export interface BookingWizardContentProps {
9
9
  selectedProperty?: BookingWizardProperty;
10
10
  classname?: string;
11
11
  disableChild?: boolean;
12
+ showInfants?: boolean;
12
13
  disableRoom?: boolean;
13
14
  hideGuestSelect?: boolean;
14
15
  hidePromocode?: boolean;
@@ -52,7 +52,7 @@ const BookingWizardDateSelector_1 = require("./BookingWizardDateSelector/Booking
52
52
  const BookingWizardGuestSelector_1 = require("./BookingWizardGuestSelector/BookingWizardGuestSelector");
53
53
  const BookingWizardHotelSelector_1 = require("./BookingWizardHotelSelector/BookingWizardHotelSelector");
54
54
  const BookingWizardPromoCode_1 = require("./BookingWizardPromoCode/BookingWizardPromoCode");
55
- const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, defaultColors, classname, disableChild, disableRoom, hideGuestSelect, hidePromocode, defaultValues, dateFormat, }) => {
55
+ const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, defaultColors, classname, disableChild, showInfants, disableRoom, hideGuestSelect, hidePromocode, defaultValues, dateFormat, }) => {
56
56
  var _a, _b, _c, _d, _e, _f, _g, _h;
57
57
  const bwContext = (0, react_1.useContext)(BookingWizardContext_1.BookingWizardContext);
58
58
  const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
@@ -169,7 +169,7 @@ const BookingWizardContent = ({ properties, selectedProperty: defaultProperty, d
169
169
  adults,
170
170
  children,
171
171
  room,
172
- }, onChange: setGuest, disableChild: disableChild, disableRoom: disableRoom, followElement: guestsContainerRef })))),
172
+ }, onChange: setGuest, disableChild: disableChild, showInfants: showInfants, disableRoom: disableRoom, followElement: guestsContainerRef })))),
173
173
  react_1.default.createElement("div", { className: BookingWizard_module_scss_1.default.divider }),
174
174
  hidePromocode || bwContext.layout === 'horizontal-condensed' ? null : (react_1.default.createElement("div", { className: BookingWizard_module_scss_1.default.item },
175
175
  react_1.default.createElement("label", { className: BookingWizard_module_scss_1.default.label }, "Promocode"),
@@ -1 +1 @@
1
- {"version":3,"file":"BookingWizardContent.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import 'react-spring-bottom-sheet/dist/style.css';\n\nimport { BookingEngineContext } from '@frontend/contexts';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { BookingWizardEngineConfig } from '@/engines/BookingWizardEngine/BookingWizardEngine';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\n\nimport BEButton from '../BEButton';\nimport styles from './BookingWizard.module.scss';\nimport { BookingWizardContext, BookingWizardOnBooking } from './BookingWizardContext';\nimport { BookingWizardDateSelector } from './BookingWizardDateSelector/BookingWizardDateSelector';\nimport { BookingWizardGuestSelector } from './BookingWizardGuestSelector/BookingWizardGuestSelector';\nimport { BookingWizardHotelSelector } from './BookingWizardHotelSelector/BookingWizardHotelSelector';\nimport { BookingWizardPromoCode } from './BookingWizardPromoCode/BookingWizardPromoCode';\n\nexport interface BookingWizardContentProps {\n defaultColors: BookingWizardProperty['colors'];\n properties: TBookingWizardProperties;\n selectedProperty?: BookingWizardProperty;\n classname?: string;\n disableChild?: boolean;\n disableRoom?: boolean;\n hideGuestSelect?: boolean;\n hidePromocode?: boolean;\n defaultValues?: Partial<Omit<BookingWizardOnBooking, 'id' | 'checkIn' | 'checkout'>> & { checkIn?: string; checkout?: string };\n dateFormat?: string;\n}\n\nexport const BookingWizardContent: React.FC<BookingWizardContentProps> = ({\n properties,\n selectedProperty: defaultProperty,\n defaultColors,\n classname,\n disableChild,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n defaultValues,\n dateFormat,\n}) => {\n const bwContext = useContext(BookingWizardContext);\n const beContext = useContext(BookingEngineContext);\n\n const { t } = useTranslation();\n\n const [checkInDate, setCheckInDate] = useState<Dayjs | null>(defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : dayjs());\n const [checkOutDate, setCheckOutDate] = useState<Dayjs | null>(defaultValues?.checkout ? dayjs(defaultValues?.checkout) : dayjs().add(1, 'days'));\n const [adults, setAdults] = useState<number>(defaultValues?.guests?.adults ?? 1);\n const [children, setChildren] = useState<number>(defaultValues?.guests?.children ?? 0);\n const [infants, setInfants] = useState<number>(defaultValues?.guests?.infants ?? 0);\n const [room, setRoom] = useState<number>(defaultValues?.guests?.room ?? 1);\n const [promoCode, setPromoCode] = useState<string>(defaultValues?.promoCode || '');\n const [promoCodeValid, setPromoCodeValid] = useState<boolean>();\n const [selectedProperty, setSelectedProperty] = useState<BookingWizardProperty | undefined>(defaultProperty);\n const [hotelContainerRef, setHotelContainerRef] = useState<HTMLDivElement | null>(null);\n const [guestsContainerRef, setGuestContainerRef] = useState<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (selectedProperty?.colors) {\n RoomstayThemeEngine.changeTheme(selectedProperty.colors);\n } else if (defaultColors) {\n RoomstayThemeEngine.changeTheme(defaultColors);\n }\n }, [selectedProperty]);\n\n const yearDisplayOption = useMemo(() => {\n const engineConfig = beContext.engine.getConfig() as BookingWizardEngineConfig;\n\n return selectedProperty?.yearDisplayOption ?? engineConfig.yearDisplayOption ?? '';\n }, [selectedProperty]);\n\n const showYearOnCalendar = useMemo(() => {\n const engineConfig = beContext.engine.getConfig() as BookingWizardEngineConfig;\n\n return !!(selectedProperty?.showYearOnCalendar ?? engineConfig.showYearOnCalendar ?? '');\n }, [selectedProperty]);\n\n const setGuest = (guests: BookingWizardOnBooking['guests']) => {\n setAdults(guests.adults);\n setChildren(guests.children);\n setInfants(guests.infants);\n setRoom(guests.room);\n };\n\n const setDate = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n setCheckInDate(startDate);\n setCheckOutDate(endDate);\n };\n\n const isValid = () => {\n if (!selectedProperty) return false;\n if (!checkInDate) return false;\n if (!checkOutDate) return false;\n if (adults + children <= 0) return false;\n\n return true;\n };\n\n const _onSubmit = () => {\n if (!isValid()) return false;\n\n // After passing validation, we pass the function up the chain for the engine\n // Implementor to decide where the user should be redirected to\n // This is to give the hotel team a chance to add tracking, or modify the request on their end.\n bwContext.onSubmit?.({\n id: selectedProperty?.id as string,\n checkIn: checkInDate as Dayjs,\n checkout: checkOutDate as Dayjs,\n promoCode,\n guests: {\n adults,\n children,\n infants,\n room,\n },\n });\n };\n\n const _onPromoCodeChange = async (value?: string) => {\n setPromoCode?.(value || '');\n if (!value) {\n setPromoCodeValid(undefined);\n } else if (isValid() && selectedProperty && checkInDate && checkOutDate) {\n const result = await new AvailabilityAPI().fetchAvailability({\n fromDate: checkInDate,\n toDate: checkOutDate,\n adults,\n children,\n infants,\n promoCode: value,\n hotelId: selectedProperty?.id,\n promoOnly: true,\n });\n\n const rate = Object.values(result.ratePlans).find((rate: any) => rate.promoCode === value);\n setPromoCodeValid(!!rate);\n }\n };\n\n const submitButton = (\n <BEButton disabled={!isValid()} className={styles.bookNowBtn} onClick={_onSubmit}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n );\n\n return (\n <>\n <div\n className={classNames(\n styles.content,\n styles[`--${bwContext.layout}`],\n {\n [styles['--vertical']]: bwContext.layout === 'button',\n [styles.inline]: bwContext.type === 'inline',\n },\n classname\n )}\n >\n <>\n <div ref={setHotelContainerRef} className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.ChooseHotel)}</label>\n <BookingWizardHotelSelector\n followElement={hotelContainerRef}\n onChange={(value) => {\n setSelectedProperty(value || undefined);\n }}\n properties={properties}\n selectedProperty={selectedProperty}\n contentClassName={classname}\n />\n </div>\n <div className={styles.divider} />\n </>\n <BookingWizardDateSelector\n onChange={setDate}\n defaultStartDate={defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : undefined}\n defaultEndDate={defaultValues?.checkout ? dayjs(defaultValues?.checkout) : undefined}\n dateFormat={dateFormat}\n showYearOnCalendar={showYearOnCalendar}\n yearDisplayOption={yearDisplayOption}\n />\n\n {hideGuestSelect ? null : (\n <>\n <div className={styles.divider} />\n <div ref={setGuestContainerRef} className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.Guests)}</label>\n <BookingWizardGuestSelector\n defaultValue={{\n adults,\n children,\n room,\n }}\n onChange={setGuest}\n disableChild={disableChild}\n disableRoom={disableRoom}\n followElement={guestsContainerRef}\n />\n </div>\n </>\n )}\n <div className={styles.divider} />\n {hidePromocode || bwContext.layout === 'horizontal-condensed' ? null : (\n <div className={styles.item}>\n <label className={styles.label}>Promocode</label>\n <BookingWizardPromoCode promoCode={promoCode} onChange={_onPromoCodeChange} valid={promoCodeValid} />\n </div>\n )}\n {!(bwContext.layout === 'horizontal-condensed') ? <div className={styles.action}>{submitButton}</div> : null}\n </div>\n\n {bwContext.layout === 'horizontal-condensed' ? (\n <div className={classNames(styles.content, classname)}>\n <div className={classNames(styles.action, styles.centerItems, 'u-marg-top u-marg-top--light@l-')}>{submitButton}</div>\n </div>\n ) : null}\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"BookingWizardContent.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import 'react-spring-bottom-sheet/dist/style.css';\n\nimport { BookingEngineContext } from '@frontend/contexts';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AvailabilityAPI from '@/api/AvailabilityAPI';\nimport { BookingWizardEngineConfig } from '@/engines/BookingWizardEngine/BookingWizardEngine';\nimport { BookingWizardProperty } from '@/models/BookingWizard/BookingWizardProperty';\nimport { TBookingWizardProperties } from '@/models/BookingWizard/BookingWizardTypes';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\n\nimport BEButton from '../BEButton';\nimport styles from './BookingWizard.module.scss';\nimport { BookingWizardContext, BookingWizardOnBooking } from './BookingWizardContext';\nimport { BookingWizardDateSelector } from './BookingWizardDateSelector/BookingWizardDateSelector';\nimport { BookingWizardGuestSelector } from './BookingWizardGuestSelector/BookingWizardGuestSelector';\nimport { BookingWizardHotelSelector } from './BookingWizardHotelSelector/BookingWizardHotelSelector';\nimport { BookingWizardPromoCode } from './BookingWizardPromoCode/BookingWizardPromoCode';\n\nexport interface BookingWizardContentProps {\n defaultColors: BookingWizardProperty['colors'];\n properties: TBookingWizardProperties;\n selectedProperty?: BookingWizardProperty;\n classname?: string;\n disableChild?: boolean;\n showInfants?: boolean;\n disableRoom?: boolean;\n hideGuestSelect?: boolean;\n hidePromocode?: boolean;\n defaultValues?: Partial<Omit<BookingWizardOnBooking, 'id' | 'checkIn' | 'checkout'>> & { checkIn?: string; checkout?: string };\n dateFormat?: string;\n}\n\nexport const BookingWizardContent: React.FC<BookingWizardContentProps> = ({\n properties,\n selectedProperty: defaultProperty,\n defaultColors,\n classname,\n disableChild,\n showInfants,\n disableRoom,\n hideGuestSelect,\n hidePromocode,\n defaultValues,\n dateFormat,\n}) => {\n const bwContext = useContext(BookingWizardContext);\n const beContext = useContext(BookingEngineContext);\n\n const { t } = useTranslation();\n\n const [checkInDate, setCheckInDate] = useState<Dayjs | null>(defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : dayjs());\n const [checkOutDate, setCheckOutDate] = useState<Dayjs | null>(defaultValues?.checkout ? dayjs(defaultValues?.checkout) : dayjs().add(1, 'days'));\n const [adults, setAdults] = useState<number>(defaultValues?.guests?.adults ?? 1);\n const [children, setChildren] = useState<number>(defaultValues?.guests?.children ?? 0);\n const [infants, setInfants] = useState<number>(defaultValues?.guests?.infants ?? 0);\n const [room, setRoom] = useState<number>(defaultValues?.guests?.room ?? 1);\n const [promoCode, setPromoCode] = useState<string>(defaultValues?.promoCode || '');\n const [promoCodeValid, setPromoCodeValid] = useState<boolean>();\n const [selectedProperty, setSelectedProperty] = useState<BookingWizardProperty | undefined>(defaultProperty);\n const [hotelContainerRef, setHotelContainerRef] = useState<HTMLDivElement | null>(null);\n const [guestsContainerRef, setGuestContainerRef] = useState<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (selectedProperty?.colors) {\n RoomstayThemeEngine.changeTheme(selectedProperty.colors);\n } else if (defaultColors) {\n RoomstayThemeEngine.changeTheme(defaultColors);\n }\n }, [selectedProperty]);\n\n const yearDisplayOption = useMemo(() => {\n const engineConfig = beContext.engine.getConfig() as BookingWizardEngineConfig;\n\n return selectedProperty?.yearDisplayOption ?? engineConfig.yearDisplayOption ?? '';\n }, [selectedProperty]);\n\n const showYearOnCalendar = useMemo(() => {\n const engineConfig = beContext.engine.getConfig() as BookingWizardEngineConfig;\n\n return !!(selectedProperty?.showYearOnCalendar ?? engineConfig.showYearOnCalendar ?? '');\n }, [selectedProperty]);\n\n const setGuest = (guests: BookingWizardOnBooking['guests']) => {\n setAdults(guests.adults);\n setChildren(guests.children);\n setInfants(guests.infants);\n setRoom(guests.room);\n };\n\n const setDate = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n setCheckInDate(startDate);\n setCheckOutDate(endDate);\n };\n\n const isValid = () => {\n if (!selectedProperty) return false;\n if (!checkInDate) return false;\n if (!checkOutDate) return false;\n if (adults + children <= 0) return false;\n\n return true;\n };\n\n const _onSubmit = () => {\n if (!isValid()) return false;\n\n // After passing validation, we pass the function up the chain for the engine\n // Implementor to decide where the user should be redirected to\n // This is to give the hotel team a chance to add tracking, or modify the request on their end.\n bwContext.onSubmit?.({\n id: selectedProperty?.id as string,\n checkIn: checkInDate as Dayjs,\n checkout: checkOutDate as Dayjs,\n promoCode,\n guests: {\n adults,\n children,\n infants,\n room,\n },\n });\n };\n\n const _onPromoCodeChange = async (value?: string) => {\n setPromoCode?.(value || '');\n if (!value) {\n setPromoCodeValid(undefined);\n } else if (isValid() && selectedProperty && checkInDate && checkOutDate) {\n const result = await new AvailabilityAPI().fetchAvailability({\n fromDate: checkInDate,\n toDate: checkOutDate,\n adults,\n children,\n infants,\n promoCode: value,\n hotelId: selectedProperty?.id,\n promoOnly: true,\n });\n\n const rate = Object.values(result.ratePlans).find((rate: any) => rate.promoCode === value);\n setPromoCodeValid(!!rate);\n }\n };\n\n const submitButton = (\n <BEButton disabled={!isValid()} className={styles.bookNowBtn} onClick={_onSubmit}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n );\n\n return (\n <>\n <div\n className={classNames(\n styles.content,\n styles[`--${bwContext.layout}`],\n {\n [styles['--vertical']]: bwContext.layout === 'button',\n [styles.inline]: bwContext.type === 'inline',\n },\n classname\n )}\n >\n <>\n <div ref={setHotelContainerRef} className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.ChooseHotel)}</label>\n <BookingWizardHotelSelector\n followElement={hotelContainerRef}\n onChange={(value) => {\n setSelectedProperty(value || undefined);\n }}\n properties={properties}\n selectedProperty={selectedProperty}\n contentClassName={classname}\n />\n </div>\n <div className={styles.divider} />\n </>\n <BookingWizardDateSelector\n onChange={setDate}\n defaultStartDate={defaultValues?.checkIn ? dayjs(defaultValues?.checkIn) : undefined}\n defaultEndDate={defaultValues?.checkout ? dayjs(defaultValues?.checkout) : undefined}\n dateFormat={dateFormat}\n showYearOnCalendar={showYearOnCalendar}\n yearDisplayOption={yearDisplayOption}\n />\n\n {hideGuestSelect ? null : (\n <>\n <div className={styles.divider} />\n <div ref={setGuestContainerRef} className={styles.item}>\n <label className={styles.label}>{t(Translation.Misc.Guests)}</label>\n <BookingWizardGuestSelector\n defaultValue={{\n adults,\n children,\n room,\n }}\n onChange={setGuest}\n disableChild={disableChild}\n showInfants={showInfants}\n disableRoom={disableRoom}\n followElement={guestsContainerRef}\n />\n </div>\n </>\n )}\n <div className={styles.divider} />\n {hidePromocode || bwContext.layout === 'horizontal-condensed' ? null : (\n <div className={styles.item}>\n <label className={styles.label}>Promocode</label>\n <BookingWizardPromoCode promoCode={promoCode} onChange={_onPromoCodeChange} valid={promoCodeValid} />\n </div>\n )}\n {!(bwContext.layout === 'horizontal-condensed') ? <div className={styles.action}>{submitButton}</div> : null}\n </div>\n\n {bwContext.layout === 'horizontal-condensed' ? (\n <div className={classNames(styles.content, classname)}>\n <div className={classNames(styles.action, styles.centerItems, 'u-marg-top u-marg-top--light@l-')}>{submitButton}</div>\n </div>\n ) : null}\n </>\n );\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  import { FC } from 'react';
2
2
  export interface BookingWizardGuestSelectorProps {
3
3
  disableChild?: boolean;
4
+ showInfants?: boolean;
4
5
  disableRoom?: boolean;
5
6
  defaultValue?: {
6
7
  adults?: number;
@@ -38,15 +38,13 @@ const Overlay_1 = require("../../Overlay/Overlay");
38
38
  const Text_1 = __importStar(require("../../Text"));
39
39
  const Translation_1 = require("../../../../translations/Translation");
40
40
  const StringHelper_1 = __importDefault(require("../../../../util/StringHelper"));
41
- const hooks_1 = require("../../../../hooks");
42
41
  const BookingWizardBottomSheet_1 = __importDefault(require("../BookingWizardBottomSheet/BookingWizardBottomSheet"));
43
42
  const BookingWizardContext_1 = require("../BookingWizardContext");
44
43
  const BookingWizardGuestSelector_module_scss_1 = __importDefault(require("./BookingWizardGuestSelector.module.scss"));
45
- const BookingWizardGuestSelector = ({ disableChild, disableRoom, defaultValue, followElement, onChange }) => {
44
+ const BookingWizardGuestSelector = ({ disableChild, showInfants, disableRoom, defaultValue, followElement, onChange }) => {
46
45
  var _a, _b, _c, _d;
47
46
  const { overlay, type: overlayType, layout, isSmallContainer } = (0, BookingWizardContext_1.useBookingWizard)();
48
47
  const { t } = (0, react_i18next_1.useTranslation)();
49
- const { hotel } = (0, hooks_1.useCurrentHotel)();
50
48
  const ref = (0, react_1.useRef)(null);
51
49
  const targetRef = (0, react_1.useRef)(null);
52
50
  const [adults, setAdults] = (0, react_1.useState)((_a = defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.adults) !== null && _a !== void 0 ? _a : 1);
@@ -92,7 +90,6 @@ const BookingWizardGuestSelector = ({ disableChild, disableRoom, defaultValue, f
92
90
  return parts.join(' - ');
93
91
  };
94
92
  const inner = (applyButton = true) => {
95
- var _a;
96
93
  return (react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default['popper--box'] },
97
94
  react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default['popper--content'], ref: ref },
98
95
  react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default.row },
@@ -101,7 +98,7 @@ const BookingWizardGuestSelector = ({ disableChild, disableRoom, defaultValue, f
101
98
  disableChild ? null : (react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default.row },
102
99
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, StringHelper_1.default.plural(editingChildren, 'Child', t)),
103
100
  react_1.default.createElement(NumberIncrement_1.default, { number: editingChildren, min: 0, max: 10, onChange: applyButton ? setEditingChildren : setChildren, textSize: Text_1.TextType.Small }))),
104
- ((_a = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _a === void 0 ? void 0 : _a.supportInfants) ? (react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default.row },
101
+ showInfants ? (react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default.row },
105
102
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, StringHelper_1.default.plural(editingInfants, 'Infant', t)),
106
103
  react_1.default.createElement(NumberIncrement_1.default, { number: editingInfants, min: 0, max: 10, onChange: applyButton ? setEditingInfants : setInfants, textSize: Text_1.TextType.Small }))) : null,
107
104
  disableRoom ? null : (react_1.default.createElement("div", { className: BookingWizardGuestSelector_module_scss_1.default.row },
@@ -1 +1 @@
1
- {"version":3,"file":"BookingWizardGuestSelector.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA+D;AAC/D,iDAA+C;AAE/C,iFAAyD;AACzD,6EAAqD;AACrD,uEAAgE;AAChE,2FAAmE;AACnE,kEAA+D;AAC/D,kEAA2D;AAC3D,4DAAyD;AACzD,uEAA+C;AAE/C,6CAAoD;AACpD,oHAA4F;AAC5F,kEAA2D;AAC3D,sHAA8D;AAUvD,MAAM,0BAA0B,GAAwC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE;;IACpJ,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAA,uCAAgB,GAAE,CAAC;IACpF,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,GAAG,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,mCAAI,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,mCAAI,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,mCAAI,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,mCAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAErD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAExC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7B,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,CAAC;QACf,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACjH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,IAAI,MAAM,KAAK,sBAAsB,EAAE;YACnC,OAAO,MAAM,GAAG,QAAQ,CAAC;SAC5B;QAED,IAAI,MAAM,KAAK,iBAAiB,EAAE;YAC9B,OAAO,sBAAY,CAAC,eAAe,CAAC,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;SAChF;QAED,MAAM,KAAK,GAAG,CAAC,sBAAY,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,KAAK,CAAC,IAAI,CAAC,sBAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;SAClE;QAED,IAAI,OAAO,GAAG,CAAC,EAAE;YACb,KAAK,CAAC,IAAI,CAAC,sBAAY,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;SAClE;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,IAAI,EAAE,EAAE;;QACjC,OAAO,CACH,uCAAK,SAAS,EAAE,gDAAM,CAAC,aAAa,CAAC;YACjC,uCAAK,SAAS,EAAE,gDAAM,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG;gBAC/C,uCAAK,SAAS,EAAE,gDAAM,CAAC,GAAG;oBACtB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,sBAAY,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,CAAQ;oBACnF,8BAAC,yBAAe,IAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAQ,CAAC,KAAK,GAAI,CACzI;gBACL,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnB,uCAAK,SAAS,EAAE,gDAAM,CAAC,GAAG;oBACtB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,sBAAY,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAQ;oBACrF,8BAAC,yBAAe,IAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,eAAQ,CAAC,KAAK,GAAI,CAC/I,CACT;gBACA,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,cAAc,EAAC,CAAC,CAAC,CACzC,uCAAK,SAAS,EAAE,gDAAM,CAAC,GAAG;oBACtB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,sBAAY,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAQ;oBACrF,8BAAC,yBAAe,IAAC,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAQ,CAAC,KAAK,GAAI,CAC5I,CACT,CAAC,CAAC,CAAC,IAAI;gBACP,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClB,uCAAK,SAAS,EAAE,gDAAM,CAAC,GAAG;oBACtB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,sBAAY,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAQ;oBAChF,8BAAC,yBAAe,IAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAQ,CAAC,KAAK,GAAI,CACnI,CACT;gBACA,WAAW,CAAC,CAAC,CAAC,CACX,uCAAK,SAAS,EAAE,gDAAM,CAAC,gBAAgB,CAAC;oBACpC,8BAAC,kBAAQ,IACL,IAAI,EAAE,WAAW,KAAK,cAAc,EACpC,SAAS,EAAE,IAAA,oBAAU,EAAC,gDAAM,CAAC,QAAQ,EAAE;4BACnC,CAAC,gDAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,KAAK,iBAAiB;yBAC9D,CAAC,EACF,OAAO,EAAE,OAAO,IAEf,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CACnB,CACT,CACT,CAAC,CAAC,CAAC,IAAI,CACN,CACJ,CACT,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC1B,OAAO,CACH,uCAAK,SAAS,EAAE,gDAAM,CAAC,MAAM;gBACzB,8BAAC,wBAAc,IAAC,IAAI,EAAE,IAAI,IAAG,KAAK,CAAC,KAAK,CAAC,CAAkB,CACzD,CACT,CAAC;SACL;QAED,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACrD,OAAO,CACH,8BAAC,kCAAwB,kBACrB,SAAS,EAAE,IAAA,oBAAU,EAAC,gDAAM,CAAC,SAAS,EAAE,gDAAM,CAAC,gBAAgB,CAAC,CAAC,EACjE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC/B,MAAM,EACF,uCAAK,SAAS,EAAE,gDAAM,CAAC,MAAM;oBACzB,8BAAC,cAAI,QAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAQ;;oBAAC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAI,CAC5G,IAEN,CAAC,WAAW,KAAK,WAAW,IAAI;gBAChC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;aAC7C,CAAC;gBAEF,uCAAK,SAAS,EAAE,gDAAM,CAAC,MAAM;oBAAG,KAAK,EAAE;wBAAQ,CACxB,CAC9B,CAAC;SACL;QAED,OAAO,CACH,8BAAC,iBAAO,IACJ,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EACvB,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,IAAI,SAAS,CAAC,OAAO,EACjD,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAC7B,kBAAkB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,EAC/C,QAAQ,EAAC,UAAU,EACnB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,CAAC,IAAI,CAAC,EAC/B,SAAS,EAAE,gDAAM,CAAC,MAAM,EACxB,kBAAkB,EAAE,IAAA,oBAAU,EAAC,gDAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,gDAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAC3G,UAAU,UAET,KAAK,EAAE,CACF,CACb,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,CACH,uCACI,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,IAAA,oBAAU,EAAC,gDAAM,CAAC,SAAS,EAAE;YACpC,CAAC,gDAAM,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,KAAK,QAAQ;YAC9C,CAAC,gDAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI;SAC3B,CAAC;QAEF,uCAAK,SAAS,EAAE,IAAA,oBAAU,EAAC,gDAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,CAAC,IAAI,CAAC;YACpF,8BAAC,cAAI,IACD,SAAS,EAAE,IAAA,oBAAU,EAAC,gDAAM,CAAC,cAAc,CAAC,EAAE;oBAC1C,CAAC,gDAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,KAAK,sBAAsB;oBACvD,CAAC,gDAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,KAAK,iBAAiB;iBACnE,CAAC,EACF,IAAI,UAEH,cAAc,EAAE,CACd;YAEN,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,QAAQ,GAAI,CACtG;QAEL,OAAO,EAAE,CACR,CACT,CAAC;AACN,CAAC,CAAC;AAnLW,QAAA,0BAA0B,8BAmLrC","sourcesContent":["import classNames from 'classnames';\nimport React, { FC, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport BEButton from '@/components/generic/BEButton';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport StringHelper from '@/util/StringHelper';\n\nimport { useCurrentHotel } from '../../../../hooks';\nimport BookingWizardBottomSheet from '../BookingWizardBottomSheet/BookingWizardBottomSheet';\nimport { useBookingWizard } from '../BookingWizardContext';\nimport styles from './BookingWizardGuestSelector.module.scss';\n\nexport interface BookingWizardGuestSelectorProps {\n disableChild?: boolean;\n disableRoom?: boolean;\n defaultValue?: { adults?: number; children?: number; infants?: number; room?: number };\n onChange?: ({ adults, children, room }: { adults: number; children: number; infants: number; room: number }) => void;\n followElement?: HTMLElement | null;\n}\n\nexport const BookingWizardGuestSelector: FC<BookingWizardGuestSelectorProps> = ({ disableChild, disableRoom, defaultValue, followElement, onChange }) => {\n const { overlay, type: overlayType, layout, isSmallContainer } = useBookingWizard();\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n\n const ref = useRef(null);\n const targetRef = useRef(null);\n\n const [adults, setAdults] = useState(defaultValue?.adults ?? 1);\n const [children, setChildren] = useState(defaultValue?.children ?? 0);\n const [infants, setInfants] = useState(defaultValue?.infants ?? 0);\n const [room, setRoom] = useState(defaultValue?.room ?? 1);\n const [editingAdults, setEditingAdults] = useState(adults);\n const [editingChildren, setEditingChildren] = useState(children);\n const [editingInfants, setEditingInfants] = useState(infants);\n const [editingRoom, setEditingRoom] = useState(room);\n\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n setEditingAdults(adults);\n }, [adults]);\n\n useEffect(() => {\n setEditingChildren(children);\n }, [children]);\n\n useEffect(() => {\n setEditingInfants(infants);\n }, [infants]);\n\n const onApply = () => {\n setAdults(editingAdults);\n setChildren(editingChildren);\n setInfants(editingInfants);\n setRoom(editingRoom);\n setOpen(false);\n onChange?.({ adults: editingAdults, children: editingChildren, infants: editingInfants, room: editingRoom });\n };\n\n const getValueAsText = () => {\n if (layout === 'horizontal-condensed') {\n return adults + children;\n }\n\n if (layout === 'booking-summary') {\n return StringHelper.pluralWithCount(adults + children + infants, 'Guest', t);\n }\n\n const parts = [StringHelper.pluralWithCount(adults, 'Adult', t)];\n\n if (children > 0) {\n parts.push(StringHelper.pluralWithCount(children, 'Child', t));\n }\n\n if (infants > 0) {\n parts.push(StringHelper.pluralWithCount(infants, 'Infant', t));\n }\n\n return parts.join(' - ');\n };\n\n const inner = (applyButton = true) => {\n return (\n <div className={styles['popper--box']}>\n <div className={styles['popper--content']} ref={ref}>\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingAdults, 'Adult', t)}</Text>\n <NumberIncrement number={editingAdults} min={1} max={10} onChange={applyButton ? setEditingAdults : setAdults} textSize={TextType.Small} />\n </div>\n {disableChild ? null : (\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingChildren, 'Child', t)}</Text>\n <NumberIncrement number={editingChildren} min={0} max={10} onChange={applyButton ? setEditingChildren : setChildren} textSize={TextType.Small} />\n </div>\n )}\n {hotel?.childConfiguration?.supportInfants ? (\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingInfants, 'Infant', t)}</Text>\n <NumberIncrement number={editingInfants} min={0} max={10} onChange={applyButton ? setEditingInfants : setInfants} textSize={TextType.Small} />\n </div>\n ) : null}\n {disableRoom ? null : (\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingRoom, 'Room', t)}</Text>\n <NumberIncrement number={editingRoom} min={1} max={10} onChange={applyButton ? setEditingRoom : setRoom} textSize={TextType.Small} />\n </div>\n )}\n {applyButton ? (\n <div className={styles['popper--action']}>\n <BEButton\n wide={overlayType === 'bottom-sheet'}\n className={classNames(styles.applyBtn, {\n [styles['--booking-summary']]: layout === 'booking-summary',\n })}\n onClick={onApply}\n >\n {t(Translation.Misc.Apply)}\n </BEButton>\n </div>\n ) : null}\n </div>\n </div>\n );\n };\n\n const content = () => {\n if (overlayType === 'inline') {\n return (\n <div className={styles.popper}>\n <AutoAutoHeight open={open}>{inner(false)}</AutoAutoHeight>\n </div>\n );\n }\n\n if (['bottom-sheet', 'top-sheet'].includes(overlayType)) {\n return (\n <BookingWizardBottomSheet\n className={classNames(styles.container, styles['--bottom-sheet'])}\n open={open}\n onDismiss={() => setOpen(false)}\n header={\n <div className={styles.header}>\n <Text>{t(Translation.Misc.HowManyGuests)}</Text> <Icon icon={IconType.Close} onClick={() => setOpen(false)} />\n </div>\n }\n {...('top-sheet' === overlayType && {\n snapPoints: ({ maxHeight }) => [maxHeight],\n })}\n >\n <div className={styles.popper}>{inner()} </div>\n </BookingWizardBottomSheet>\n );\n }\n\n return (\n <Overlay\n offset={overlay?.offset}\n usePortal={false}\n followElement={followElement || targetRef.current}\n placement={overlay?.placement}\n fallbackPlacements={overlay?.fallbackPlacements}\n strategy=\"absolute\"\n open={open}\n onClose={() => setOpen?.(!open)}\n className={styles.popper}\n containerClassName={classNames(styles['custom-overlay'], { [styles['small-container']]: isSmallContainer })}\n hideStyles\n >\n {inner()}\n </Overlay>\n );\n };\n\n return (\n <div\n ref={targetRef}\n className={classNames(styles.container, {\n [styles['--inline']]: overlayType === 'inline',\n [styles['--open']]: open,\n })}\n >\n <div className={classNames(styles['container--search'])} onClick={() => setOpen?.(!open)}>\n <Text\n className={classNames(styles['text-display'], {\n [styles['--line-1']]: layout === 'horizontal-condensed',\n [styles['--line-booking-summary']]: layout === 'booking-summary',\n })}\n bold\n >\n {getValueAsText()}\n </Text>\n\n {['horizontal-condensed', 'booking-summary'].includes(layout) ? null : <Icon icon={IconType.Dropdown} />}\n </div>\n\n {content()}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"BookingWizardGuestSelector.js","sourceRoot":"/","sources":["src/components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import classNames from 'classnames';\nimport React, { FC, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport BEButton from '@/components/generic/BEButton';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Translation } from '@/translations/Translation';\nimport StringHelper from '@/util/StringHelper';\n\nimport BookingWizardBottomSheet from '../BookingWizardBottomSheet/BookingWizardBottomSheet';\nimport { useBookingWizard } from '../BookingWizardContext';\nimport styles from './BookingWizardGuestSelector.module.scss';\n\nexport interface BookingWizardGuestSelectorProps {\n disableChild?: boolean;\n showInfants?: boolean;\n\n disableRoom?: boolean;\n defaultValue?: { adults?: number; children?: number; infants?: number; room?: number };\n onChange?: ({ adults, children, room }: { adults: number; children: number; infants: number; room: number }) => void;\n followElement?: HTMLElement | null;\n}\n\nexport const BookingWizardGuestSelector: FC<BookingWizardGuestSelectorProps> = ({ disableChild, showInfants, disableRoom, defaultValue, followElement, onChange }) => {\n const { overlay, type: overlayType, layout, isSmallContainer } = useBookingWizard();\n const { t } = useTranslation();\n\n const ref = useRef(null);\n const targetRef = useRef(null);\n\n const [adults, setAdults] = useState(defaultValue?.adults ?? 1);\n const [children, setChildren] = useState(defaultValue?.children ?? 0);\n const [infants, setInfants] = useState(defaultValue?.infants ?? 0);\n const [room, setRoom] = useState(defaultValue?.room ?? 1);\n const [editingAdults, setEditingAdults] = useState(adults);\n const [editingChildren, setEditingChildren] = useState(children);\n const [editingInfants, setEditingInfants] = useState(infants);\n const [editingRoom, setEditingRoom] = useState(room);\n\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n setEditingAdults(adults);\n }, [adults]);\n\n useEffect(() => {\n setEditingChildren(children);\n }, [children]);\n\n useEffect(() => {\n setEditingInfants(infants);\n }, [infants]);\n\n const onApply = () => {\n setAdults(editingAdults);\n setChildren(editingChildren);\n setInfants(editingInfants);\n setRoom(editingRoom);\n setOpen(false);\n onChange?.({ adults: editingAdults, children: editingChildren, infants: editingInfants, room: editingRoom });\n };\n\n const getValueAsText = () => {\n if (layout === 'horizontal-condensed') {\n return adults + children;\n }\n\n if (layout === 'booking-summary') {\n return StringHelper.pluralWithCount(adults + children + infants, 'Guest', t);\n }\n\n const parts = [StringHelper.pluralWithCount(adults, 'Adult', t)];\n\n if (children > 0) {\n parts.push(StringHelper.pluralWithCount(children, 'Child', t));\n }\n\n if (infants > 0) {\n parts.push(StringHelper.pluralWithCount(infants, 'Infant', t));\n }\n\n return parts.join(' - ');\n };\n\n const inner = (applyButton = true) => {\n return (\n <div className={styles['popper--box']}>\n <div className={styles['popper--content']} ref={ref}>\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingAdults, 'Adult', t)}</Text>\n <NumberIncrement number={editingAdults} min={1} max={10} onChange={applyButton ? setEditingAdults : setAdults} textSize={TextType.Small} />\n </div>\n {disableChild ? null : (\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingChildren, 'Child', t)}</Text>\n <NumberIncrement number={editingChildren} min={0} max={10} onChange={applyButton ? setEditingChildren : setChildren} textSize={TextType.Small} />\n </div>\n )}\n {showInfants ? (\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingInfants, 'Infant', t)}</Text>\n <NumberIncrement number={editingInfants} min={0} max={10} onChange={applyButton ? setEditingInfants : setInfants} textSize={TextType.Small} />\n </div>\n ) : null}\n {disableRoom ? null : (\n <div className={styles.row}>\n <Text type={TextType.Small}>{StringHelper.plural(editingRoom, 'Room', t)}</Text>\n <NumberIncrement number={editingRoom} min={1} max={10} onChange={applyButton ? setEditingRoom : setRoom} textSize={TextType.Small} />\n </div>\n )}\n {applyButton ? (\n <div className={styles['popper--action']}>\n <BEButton\n wide={overlayType === 'bottom-sheet'}\n className={classNames(styles.applyBtn, {\n [styles['--booking-summary']]: layout === 'booking-summary',\n })}\n onClick={onApply}\n >\n {t(Translation.Misc.Apply)}\n </BEButton>\n </div>\n ) : null}\n </div>\n </div>\n );\n };\n\n const content = () => {\n if (overlayType === 'inline') {\n return (\n <div className={styles.popper}>\n <AutoAutoHeight open={open}>{inner(false)}</AutoAutoHeight>\n </div>\n );\n }\n\n if (['bottom-sheet', 'top-sheet'].includes(overlayType)) {\n return (\n <BookingWizardBottomSheet\n className={classNames(styles.container, styles['--bottom-sheet'])}\n open={open}\n onDismiss={() => setOpen(false)}\n header={\n <div className={styles.header}>\n <Text>{t(Translation.Misc.HowManyGuests)}</Text> <Icon icon={IconType.Close} onClick={() => setOpen(false)} />\n </div>\n }\n {...('top-sheet' === overlayType && {\n snapPoints: ({ maxHeight }) => [maxHeight],\n })}\n >\n <div className={styles.popper}>{inner()} </div>\n </BookingWizardBottomSheet>\n );\n }\n\n return (\n <Overlay\n offset={overlay?.offset}\n usePortal={false}\n followElement={followElement || targetRef.current}\n placement={overlay?.placement}\n fallbackPlacements={overlay?.fallbackPlacements}\n strategy=\"absolute\"\n open={open}\n onClose={() => setOpen?.(!open)}\n className={styles.popper}\n containerClassName={classNames(styles['custom-overlay'], { [styles['small-container']]: isSmallContainer })}\n hideStyles\n >\n {inner()}\n </Overlay>\n );\n };\n\n return (\n <div\n ref={targetRef}\n className={classNames(styles.container, {\n [styles['--inline']]: overlayType === 'inline',\n [styles['--open']]: open,\n })}\n >\n <div className={classNames(styles['container--search'])} onClick={() => setOpen?.(!open)}>\n <Text\n className={classNames(styles['text-display'], {\n [styles['--line-1']]: layout === 'horizontal-condensed',\n [styles['--line-booking-summary']]: layout === 'booking-summary',\n })}\n bold\n >\n {getValueAsText()}\n </Text>\n\n {['horizontal-condensed', 'booking-summary'].includes(layout) ? null : <Icon icon={IconType.Dropdown} />}\n </div>\n\n {content()}\n </div>\n );\n};\n"]}
@@ -41,16 +41,19 @@ const ImageGallerySlider_1 = __importDefault(require("./ImageGallerySlider"));
41
41
  const Color_1 = require("../../../util/Color");
42
42
  const ScreenSize_1 = __importDefault(require("../../../util/ScreenSize"));
43
43
  const LargeRoomCard = (props) => {
44
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
44
+ var _a, _b, _c, _d, _e, _f, _g, _h;
45
45
  const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
46
46
  const { hotel } = (0, hooks_1.useCurrentHotel)();
47
47
  const { t } = (0, react_i18next_1.useTranslation)();
48
48
  const extraRoomData = hotel === null || hotel === void 0 ? void 0 : hotel.rooms[(_a = props.rate) === null || _a === void 0 ? void 0 : _a.getRoom().code];
49
49
  const roomSize = (_b = hotel === null || hotel === void 0 ? void 0 : hotel.overwrites) === null || _b === void 0 ? void 0 : _b[(_c = props.rate) === null || _c === void 0 ? void 0 : _c.getRoom().code];
50
50
  const trimmedDescription = (_d = props.rate) === null || _d === void 0 ? void 0 : _d.getRoom().getShortDescription();
51
- const roomOverride = (_e = hotel === null || hotel === void 0 ? void 0 : hotel.overwrites) === null || _e === void 0 ? void 0 : _e[(_f = props.rate) === null || _f === void 0 ? void 0 : _f.getRoom().code];
52
- const roomPerks = ((_g = roomOverride === null || roomOverride === void 0 ? void 0 : roomOverride.perks) === null || _g === void 0 ? void 0 : _g.length) ? roomOverride === null || roomOverride === void 0 ? void 0 : roomOverride.perks.slice(0, 4) : hotel === null || hotel === void 0 ? void 0 : hotel.perks.slice(0, 4);
53
- const prePerkDisclaimer = (roomOverride === null || roomOverride === void 0 ? void 0 : roomOverride.prePerkDisclaimer) ? roomOverride.prePerkDisclaimer : extraRoomData === null || extraRoomData === void 0 ? void 0 : extraRoomData.prePerkDisclaimer;
51
+ const room = props.rate.getRoom();
52
+ const { roomPerks, prePerkDisclaimer } = room.getRoomPerks({
53
+ hotel: hotel,
54
+ room: room,
55
+ perksLimitNumber: 4,
56
+ });
54
57
  const updateRate = () => {
55
58
  props.onSelectRate();
56
59
  };
@@ -72,9 +75,9 @@ const LargeRoomCard = (props) => {
72
75
  ];
73
76
  return (react_1.default.createElement("div", { className: "large-room-card u-border-rounded" },
74
77
  react_1.default.createElement("div", { className: "large-room-card --image" },
75
- react_1.default.createElement(ImageGallerySlider_1.default, { images: (_h = props.rate) === null || _h === void 0 ? void 0 : _h.getRoom().getImages() })),
78
+ react_1.default.createElement(ImageGallerySlider_1.default, { images: (_e = props.rate) === null || _e === void 0 ? void 0 : _e.getRoom().getImages() })),
76
79
  react_1.default.createElement("div", { className: "u-pad container" },
77
- react_1.default.createElement(Text_1.default, { bold: true }, (_j = props.rate) === null || _j === void 0 ? void 0 : _j.getRoom().name),
80
+ react_1.default.createElement(Text_1.default, { bold: true }, (_f = props.rate) === null || _f === void 0 ? void 0 : _f.getRoom().name),
78
81
  react_1.default.createElement("div", { className: "u-flex u-marg-top-bottom" }, roomInfo.map((item, index) => {
79
82
  return (react_1.default.createElement("div", { className: "u-flex", key: index },
80
83
  react_1.default.createElement(Icon_1.default, { icon: item.icon }),
@@ -96,7 +99,12 @@ const LargeRoomCard = (props) => {
96
99
  react_1.default.createElement(Tooltip_1.default, { title: perk.name },
97
100
  react_1.default.createElement("div", null, perk.iconElement ? perk.iconElement : react_1.default.createElement(Icon_1.default, { icon: perk.icon, backgroundColor: Color_1.Color.Snow }))),
98
101
  react_1.default.createElement("div", { className: `u-marg-left u-marg-right ${isAllPerksOpened ? '' : 'u-none'}` },
99
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, perk.name))));
102
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, (perk === null || perk === void 0 ? void 0 : perk.perkNameRenderer)
103
+ ? perk.perkNameRenderer({
104
+ hotel,
105
+ room,
106
+ })
107
+ : perk.name))));
100
108
  }))),
101
109
  react_1.default.createElement("div", { className: "u-flex flex-column no-gutters" },
102
110
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Navy, inline: true }, t(Translation_1.Translation.Misc.From)),
@@ -104,7 +112,7 @@ const LargeRoomCard = (props) => {
104
112
  react_1.default.createElement(Headline_1.default, { bold: true },
105
113
  react_1.default.createElement("span", { className: "u-flex align-items-center" },
106
114
  "+",
107
- react_1.default.createElement(Currency_1.default, { hideDecimals: true }, ((_k = props.rate) === null || _k === void 0 ? void 0 : _k.getAveragePrice()) - ((_l = props.selectedRate) === null || _l === void 0 ? void 0 : _l.getAveragePrice())))),
115
+ react_1.default.createElement(Currency_1.default, { hideDecimals: true }, ((_g = props.rate) === null || _g === void 0 ? void 0 : _g.getAveragePrice()) - ((_h = props.selectedRate) === null || _h === void 0 ? void 0 : _h.getAveragePrice())))),
108
116
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, inline: true },
109
117
  "/",
110
118
  t(Translation_1.Translation.Misc.Night))),
@@ -1 +1 @@
1
- {"version":3,"file":"LargeRoomCard.js","sourceRoot":"/","sources":["src/components/steps/room/LargeRoomCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\ninterface Props {\n rate: RoomRate;\n selectedRate: RoomRate;\n\n onSelectRate: () => void;\n}\n\nconst LargeRoomCard = (props: Props) => {\n const beContext = useContext(BookingEngineContext);\n const { hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n\n const extraRoomData = hotel?.rooms[props.rate?.getRoom().code as string];\n const roomSize = hotel?.overwrites?.[props.rate?.getRoom().code as string];\n const trimmedDescription = props.rate?.getRoom().getShortDescription();\n\n const roomOverride = hotel?.overwrites?.[props.rate?.getRoom().code as string];\n const roomPerks = roomOverride?.perks?.length ? roomOverride?.perks.slice(0, 4) : hotel?.perks.slice(0, 4);\n const prePerkDisclaimer = roomOverride?.prePerkDisclaimer ? roomOverride.prePerkDisclaimer : extraRoomData?.prePerkDisclaimer;\n\n const updateRate = () => {\n props.onSelectRate();\n };\n\n const roomInfo = [\n {\n icon: IconType.People,\n text: t(Translation.Step.Room.Sleeps, {\n maxOccupancy: extraRoomData?.maxOccupancy,\n }),\n },\n {\n icon: IconType.Bed,\n text: extraRoomData?.bedTypeOverride ? extraRoomData?.bedTypeOverride : `${extraRoomData?.bedType} ${extraRoomData?.bedQuantity}`,\n },\n {\n icon: IconType.RoomSize,\n text: roomSize?.RoomDimensions,\n },\n ];\n\n return (\n <div className=\"large-room-card u-border-rounded\">\n <div className=\"large-room-card --image\">\n <ImageGallerySlider images={props.rate?.getRoom().getImages()} />\n </div>\n <div className=\"u-pad container\">\n <Text bold>{props.rate?.getRoom().name}</Text>\n <div className=\"u-flex u-marg-top-bottom\">\n {roomInfo.map((item, index) => {\n return (\n <div className=\"u-flex\" key={index}>\n <Icon icon={item.icon} />\n <Text className=\"u-marg-left--light\" type={TextType.Label}>\n {item.text}\n </Text>\n </div>\n );\n })}\n </div>\n <div className=\"u-marg-bottom--light description\">\n <Text className=\"text\" type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: trimmedDescription?.replace(/<br(\\/|)>/g, '') || '' }} />\n </Text>\n </div>\n\n {prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') && (\n <div className=\"u-marg-bottom--heavy\">\n <Text color={Color.Accent} type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.Disclaimer)}</strong>\n </Text>\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <span className=\"u-text-overflow-ellipsis-2\" dangerouslySetInnerHTML={{ __html: prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') || '' }} />\n </Text>\n </div>\n )}\n\n <Text className=\"u-marg-bottom\" bold type={TextType.Label} color={Color.Accent}>\n {t(Translation.Step.Room.YouWillGetThisAllForFree)}\n </Text>\n <div className=\"u-flex u-flex-align-center row justify-content-center\">\n <div className=\"u-flex col-md-12 flex-wrap justify-content-start\">\n {roomPerks?.map((perk) => {\n const isAllPerksOpened = beContext.screenSize < ScreenSize.ExtraLarge;\n\n return (\n <div className=\"u-flex justify-content-start u-flex-align-center u-marg-bottom u-w-48@l- u-pad-left--light u-pad-right--light\" key={perk.name}>\n <Tooltip title={perk.name}>\n <div>{perk.iconElement ? perk.iconElement : <Icon icon={perk.icon as IconType} backgroundColor={Color.Snow} />}</div>\n </Tooltip>\n <div className={`u-marg-left u-marg-right ${isAllPerksOpened ? '' : 'u-none'}`}>\n <Text type={TextType.Small}>{perk.name}</Text>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n <div className=\"u-flex flex-column no-gutters\">\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"u-flex u-flex-flex-start u-flex-align-center flex-row\">\n <Headline bold>\n <span className=\"u-flex align-items-center\">\n +<Currency hideDecimals>{props.rate?.getAveragePrice() - props.selectedRate?.getAveragePrice()}</Currency>\n </span>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@m-\">\n <BEButton onClick={updateRate} name=\"ViewRatesNowButton\" primary filled wide>\n {t(Translation.Step.Room.Upgrade)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default LargeRoomCard;\n"]}
1
+ {"version":3,"file":"LargeRoomCard.js","sourceRoot":"/","sources":["src/components/steps/room/LargeRoomCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\n\ninterface Props {\n rate: RoomRate;\n selectedRate: RoomRate;\n\n onSelectRate: () => void;\n}\n\nconst LargeRoomCard = (props: Props) => {\n const beContext = useContext(BookingEngineContext);\n const { hotel } = useCurrentHotel();\n\n const { t } = useTranslation();\n\n const extraRoomData = hotel?.rooms[props.rate?.getRoom().code as string];\n const roomSize = hotel?.overwrites?.[props.rate?.getRoom().code as string];\n const trimmedDescription = props.rate?.getRoom().getShortDescription();\n\n const room = props.rate.getRoom();\n const { roomPerks, prePerkDisclaimer } = room.getRoomPerks({\n hotel: hotel,\n room: room,\n perksLimitNumber: 4,\n });\n\n const updateRate = () => {\n props.onSelectRate();\n };\n\n const roomInfo = [\n {\n icon: IconType.People,\n text: t(Translation.Step.Room.Sleeps, {\n maxOccupancy: extraRoomData?.maxOccupancy,\n }),\n },\n {\n icon: IconType.Bed,\n text: extraRoomData?.bedTypeOverride ? extraRoomData?.bedTypeOverride : `${extraRoomData?.bedType} ${extraRoomData?.bedQuantity}`,\n },\n {\n icon: IconType.RoomSize,\n text: roomSize?.RoomDimensions,\n },\n ];\n\n return (\n <div className=\"large-room-card u-border-rounded\">\n <div className=\"large-room-card --image\">\n <ImageGallerySlider images={props.rate?.getRoom().getImages()} />\n </div>\n <div className=\"u-pad container\">\n <Text bold>{props.rate?.getRoom().name}</Text>\n <div className=\"u-flex u-marg-top-bottom\">\n {roomInfo.map((item, index) => {\n return (\n <div className=\"u-flex\" key={index}>\n <Icon icon={item.icon} />\n <Text className=\"u-marg-left--light\" type={TextType.Label}>\n {item.text}\n </Text>\n </div>\n );\n })}\n </div>\n <div className=\"u-marg-bottom--light description\">\n <Text className=\"text\" type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: trimmedDescription?.replace(/<br(\\/|)>/g, '') || '' }} />\n </Text>\n </div>\n\n {prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') && (\n <div className=\"u-marg-bottom--heavy\">\n <Text color={Color.Accent} type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.Disclaimer)}</strong>\n </Text>\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <span className=\"u-text-overflow-ellipsis-2\" dangerouslySetInnerHTML={{ __html: prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') || '' }} />\n </Text>\n </div>\n )}\n\n <Text className=\"u-marg-bottom\" bold type={TextType.Label} color={Color.Accent}>\n {t(Translation.Step.Room.YouWillGetThisAllForFree)}\n </Text>\n <div className=\"u-flex u-flex-align-center row justify-content-center\">\n <div className=\"u-flex col-md-12 flex-wrap justify-content-start\">\n {roomPerks?.map((perk) => {\n const isAllPerksOpened = beContext.screenSize < ScreenSize.ExtraLarge;\n\n return (\n <div className=\"u-flex justify-content-start u-flex-align-center u-marg-bottom u-w-48@l- u-pad-left--light u-pad-right--light\" key={perk.name}>\n <Tooltip title={perk.name}>\n <div>{perk.iconElement ? perk.iconElement : <Icon icon={perk.icon as IconType} backgroundColor={Color.Snow} />}</div>\n </Tooltip>\n <div className={`u-marg-left u-marg-right ${isAllPerksOpened ? '' : 'u-none'}`}>\n <Text type={TextType.Small}>\n {perk?.perkNameRenderer\n ? perk.perkNameRenderer({\n hotel,\n room,\n })\n : perk.name}\n </Text>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n <div className=\"u-flex flex-column no-gutters\">\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"u-flex u-flex-flex-start u-flex-align-center flex-row\">\n <Headline bold>\n <span className=\"u-flex align-items-center\">\n +<Currency hideDecimals>{props.rate?.getAveragePrice() - props.selectedRate?.getAveragePrice()}</Currency>\n </span>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@m-\">\n <BEButton onClick={updateRate} name=\"ViewRatesNowButton\" primary filled wide>\n {t(Translation.Step.Room.Upgrade)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default LargeRoomCard;\n"]}
@@ -44,7 +44,7 @@ function RoomList() {
44
44
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
45
45
  const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
46
46
  const { hotel } = (0, hooks_1.useCurrentHotel)();
47
- const { rooms, isLoading, openRoom, apiHasError, retargetingRoom } = (0, RoomRateAvailabilityListFromApi_1.useRoomRateAvailabilityListFromApi)();
47
+ const { rooms, loadingAttempted, isLoading, openRoom, apiHasError, retargetingRoom } = (0, RoomRateAvailabilityListFromApi_1.useRoomRateAvailabilityListFromApi)();
48
48
  const roomListRef = (0, react_1.useRef)(null);
49
49
  const sortBy = beContext.currentRoomSort;
50
50
  let listWhenLastScrolled = null;
@@ -67,7 +67,7 @@ function RoomList() {
67
67
  setTimeout(() => {
68
68
  scrollIntoView();
69
69
  }, 100);
70
- 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,
70
+ const elements = (react_1.default.createElement("div", { ref: roomListRef }, isLoading || !loadingAttempted ? (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,
71
71
  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 :
72
72
  _a.map((hotelId) => (react_1.default.createElement(RoomListCrossSellBlock_1.default, { key: hotelId, hotelId: hotelId })))))));
73
73
  DataLayer_1.default.instance.sendRoomImpressions();
@@ -1 +1 @@
1
- {"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useMemo, useRef } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\n\nexport default function RoomList() {\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const { hotel } = useCurrentHotel();\n const { rooms, isLoading, openRoom, apiHasError, retargetingRoom } = useRoomRateAvailabilityListFromApi();\n const roomListRef = useRef<HTMLDivElement | null>(null);\n const sortBy = beContext.currentRoomSort;\n let listWhenLastScrolled: Room[] | null = null;\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 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 { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useMemo, useRef } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\n\nexport default function RoomList() {\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const { hotel } = useCurrentHotel();\n const { rooms, loadingAttempted, isLoading, openRoom, apiHasError, retargetingRoom } = useRoomRateAvailabilityListFromApi();\n const roomListRef = useRef<HTMLDivElement | null>(null);\n const sortBy = beContext.currentRoomSort;\n let listWhenLastScrolled: Room[] | null = null;\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 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 || !loadingAttempted ? (\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"]}
@@ -40,21 +40,20 @@ const RoomDetailsBedsBlock_1 = require("./roomDetails/RoomDetailsBedsBlock");
40
40
  const RoomRates_1 = __importDefault(require("./roomDetails/roomRates/RoomRates"));
41
41
  const Color_1 = require("../../../util/Color");
42
42
  function RoomModal(props) {
43
- var _a, _b, _c, _d;
43
+ var _a;
44
44
  const { t } = (0, react_i18next_1.useTranslation)();
45
45
  const { hotel } = (0, hooks_1.useCurrentHotel)();
46
46
  const { rooms } = hotel;
47
- const roomOverride = (_a = hotel === null || hotel === void 0 ? void 0 : hotel.overwrites) === null || _a === void 0 ? void 0 : _a[props.room.code];
48
- const roomPerks = ((_b = roomOverride === null || roomOverride === void 0 ? void 0 : roomOverride.perks) === null || _b === void 0 ? void 0 : _b.length) ? roomOverride === null || roomOverride === void 0 ? void 0 : roomOverride.perks : hotel === null || hotel === void 0 ? void 0 : hotel.perks;
49
- const prePerkDisclaimer = (roomOverride === null || roomOverride === void 0 ? void 0 : roomOverride.prePerkDisclaimer) ? roomOverride.prePerkDisclaimer : (_c = props.room) === null || _c === void 0 ? void 0 : _c.prePerkDisclaimer;
47
+ const { roomPerks, prePerkDisclaimer } = props.room.getRoomPerks({ hotel: hotel, room: props.room });
50
48
  const extraRoomData = rooms === null || rooms === void 0 ? void 0 : rooms[props.room.code];
51
49
  // Explode otherwise original data gets overwritten.
52
50
  const amenities = (extraRoomData === null || extraRoomData === void 0 ? void 0 : extraRoomData.amenities) ? [...extraRoomData.amenities] : [];
53
- if ((_d = extraRoomData === null || extraRoomData === void 0 ? void 0 : extraRoomData.features) === null || _d === void 0 ? void 0 : _d.length) {
51
+ if ((_a = extraRoomData === null || extraRoomData === void 0 ? void 0 : extraRoomData.features) === null || _a === void 0 ? void 0 : _a.length) {
54
52
  extraRoomData.features.forEach((feature) => {
55
53
  amenities.push(feature);
56
54
  });
57
55
  }
56
+ const cleanPerkDisclaimer = (prePerkDisclaimer === null || prePerkDisclaimer === void 0 ? void 0 : prePerkDisclaimer.replace(/<br(\/|)>/g, '')) || '';
58
57
  return (react_1.default.createElement(SimpleModal_1.default, { title: props.room.name + ' ' + t(Translation_1.Translation.Step.Room.RoomInfo.Information), open: props.open, size: SimpleModal_1.SimpleModalSize.Small, onClose: props.onClose },
59
58
  react_1.default.createElement("div", null,
60
59
  react_1.default.createElement("div", { style: { height: '350px' } },
@@ -65,18 +64,18 @@ function RoomModal(props) {
65
64
  react_1.default.createElement(RoomDetailsBedsBlock_1.RoomDetailsBedsBlock, { room: props.room }),
66
65
  react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
67
66
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small },
68
- react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getShortDescription(false) || '' } })),
69
- (prePerkDisclaimer === null || prePerkDisclaimer === void 0 ? void 0 : prePerkDisclaimer.replace(/<br(\/|)>/g, '')) && (react_1.default.createElement("div", { className: "u-marg-top" },
70
- react_1.default.createElement(Text_1.default, { color: Color_1.Color.Accent, type: Text_1.TextType.Small },
71
- react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.RoomInfo.Disclaimer))),
72
- react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small },
73
- react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: (prePerkDisclaimer === null || prePerkDisclaimer === void 0 ? void 0 : prePerkDisclaimer.replace(/<br(\/|)>/g, '')) || '' } }))))),
67
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getShortDescription(false) || '' } }))),
74
68
  !(hotel === null || hotel === void 0 ? void 0 : hotel.perksHideOnRoomDetail) && roomPerks && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
75
69
  react_1.default.createElement("div", { className: "row" }, roomPerks.map((perk, index) => {
76
70
  return (react_1.default.createElement("div", { key: index, className: "u-marg-bottom col-6 col-md-4 u-flex align-items-center justify-content-start" },
77
71
  react_1.default.createElement("div", { className: "room-perk-icon --has-bg" }, perk.iconElement ? perk.iconElement : react_1.default.createElement(Icon_1.default, { icon: perk.icon })),
78
72
  react_1.default.createElement("div", { className: "u-marg-left--light" },
79
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, perk.name))));
73
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, (perk === null || perk === void 0 ? void 0 : perk.perkNameRenderer)
74
+ ? perk.perkNameRenderer({
75
+ hotel,
76
+ room: props.room,
77
+ })
78
+ : perk.name))));
80
79
  })),
81
80
  (hotel === null || hotel === void 0 ? void 0 : hotel.perksShowDisclaimer) && (react_1.default.createElement("div", { className: "row u-marg-top--lighter" },
82
81
  react_1.default.createElement("small", { className: "col-12" }, t(Translation_1.Translation.Misc.PerksDisclaimer)))))),
@@ -93,7 +92,12 @@ function RoomModal(props) {
93
92
  react_1.default.createElement(LineBreak_1.default, null),
94
93
  react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
95
94
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Graphite },
96
- react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getLongDescription() || '' } })))),
95
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: props.room.getLongDescription() || '' } }))),
96
+ !!cleanPerkDisclaimer && (react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
97
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
98
+ react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Room.RoomInfo.Disclaimer))),
99
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
100
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: cleanPerkDisclaimer } }))))),
97
101
  react_1.default.createElement(RoomRates_1.default, { featuredRates: props.featuredRates, rates: props.rates, roomCode: props.room.code }))));
98
102
  }
99
103
  exports.default = RoomModal;