@roomstay/frontend 1.5.4 → 1.5.6

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.
@@ -28,7 +28,7 @@ const RoomRatePills_1 = require("./roomRates/RoomRatePills");
28
28
  const ImageProvider_1 = require("../../../../providers/ImageProvider");
29
29
  function RoomDetails(props) {
30
30
  var _a;
31
- const [featuredRate, setFeaturedRate] = react_1.useState(null);
31
+ const [featuredRates, setFeaturedRates] = react_1.useState([]);
32
32
  const [standardRates, setStandardRates] = react_1.useState([]);
33
33
  const [viewingRates, setViewingRates] = react_1.useState(null);
34
34
  const [viewingDescription, setViewingDescription] = react_1.useState(false);
@@ -51,19 +51,19 @@ function RoomDetails(props) {
51
51
  react_1.useEffect(() => {
52
52
  var _a, _b, _c;
53
53
  let nonPromoRates = [];
54
- let toSetFeaturedRate = null;
54
+ let toSetFeaturedRate = [];
55
55
  if (FeaturedPromoFeature_1.default.isActive()) {
56
56
  for (const currentRate of room.getRates()) {
57
- if (((_a = currentRate.promoCode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_c = (_b = basketContext.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCode()) === null || _c === void 0 ? void 0 : _c.toLowerCase()) && !toSetFeaturedRate) {
58
- toSetFeaturedRate = currentRate;
57
+ if (((_a = currentRate.promoCode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_c = (_b = basketContext.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCode()) === null || _c === void 0 ? void 0 : _c.toLowerCase())) {
58
+ toSetFeaturedRate.unshift(currentRate);
59
59
  }
60
60
  else {
61
61
  nonPromoRates.push(currentRate);
62
62
  }
63
63
  }
64
- if (toSetFeaturedRate) {
64
+ if (toSetFeaturedRate.length > 0) {
65
65
  setViewingRates(true);
66
- setFeaturedRate(toSetFeaturedRate);
66
+ setFeaturedRates(toSetFeaturedRate);
67
67
  }
68
68
  }
69
69
  else {
@@ -126,8 +126,8 @@ function RoomDetails(props) {
126
126
  React.createElement("div", { className: "u-marg-top--light u-flex justify-content-end u-w-100@m-" },
127
127
  React.createElement(BEButton_1.default, { name: "ViewRatesNowButton", primary: true, primaryActive: ratesOpen, filled: true, stopIconAnimation: true, icon: ratesOpen ? Icon_1.IconType.ArrowUp2 : Icon_1.IconType.ArrowDown2, iconPosition: 'right', onClick: sendRoomClickOnClick, wide: context.screenSize <= ScreenSize_1.default.Large }, ratesOpen ? t(Translation_1.Translation.Step.Room.RoomInfo.CloseRates) : t(Translation_1.Translation.Step.Room.RoomInfo.ViewRates))))))),
128
128
  React.createElement(AutoAutoHeight_1.default, { open: ratesOpen },
129
- React.createElement(RoomRates_1.default, { roomCode: room.code, rates: standardRates, featuredRates: [featuredRate] })),
130
- React.createElement(RoomModal_1.default, { open: viewingDescription, room: props.room, rates: standardRates, featuredRates: [featuredRate], onClose: closeDescriptionOnClose }),
129
+ React.createElement(RoomRates_1.default, { roomCode: room.code, rates: standardRates, featuredRates: featuredRates })),
130
+ React.createElement(RoomModal_1.default, { open: viewingDescription, room: props.room, rates: standardRates, featuredRates: featuredRates, onClose: closeDescriptionOnClose }),
131
131
  room.getRates().map((rate) => {
132
132
  return (React.createElement("script", { key: room.code + '-' + rate.code, type: "application/ld+json" }, JSON.stringify({
133
133
  '@context': 'http://schema.org/',
@@ -1 +1 @@
1
- {"version":3,"file":"RoomDetails.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/RoomDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["import Headline from '../../../generic/Headline';\nimport Text, { TextType } from '../../../generic/Text';\nimport { Color } from '../../../../util/Color';\nimport BEButton from '../../../generic/BEButton';\nimport { IconType } from '../../../generic/Icon';\nimport { useState, useContext, useEffect } from 'react';\nimport * as classNames from 'classnames';\nimport * as React from 'react';\nimport RoomRates from './roomRates/RoomRates';\nimport RoomModal from '../RoomModal';\nimport Currency from '../../../generic/Currency';\nimport ImageGallerySlider from '../ImageGallerySlider';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from '../../../../translations/Translation';\nimport ScreenSize from '../../../../util/ScreenSize';\nimport { Room } from '../../../../models/Room/Room';\nimport AutoAutoHeight from '../../../../animations/AutoAutoHeight';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport DataLayer, { InteractionStep, InteractionType } from '../../../../util/DataLayer';\nimport { RoomDetailsPerkBlock } from './RoomDetailsPerkBlock';\nimport { RoomDetailsBedsBlock } from './RoomDetailsBedsBlock';\nimport { RoomRate, RoomRatePriceInclusion } from '../../../../models/Room/RoomRate';\nimport FeaturedPromoFeature from '../../../../providers/feature/FeaturedPromoFeature';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { CompanyContext } from '@frontend/contexts';\nimport RoomRatePills from './roomRates/RoomRatePills';\nimport { ImageSize } from '../../../../providers/ImageProvider';\n\nexport interface RoomDetailsProps {\n room: Room;\n disableMarginBottom?: boolean;\n}\n\nexport default function RoomDetails(props: RoomDetailsProps) {\n const [featuredRate, setFeaturedRate] = useState<RoomRate>(null);\n const [standardRates, setStandardRates] = useState<RoomRate[]>([]);\n\n const [viewingRates, setViewingRates] = useState<boolean>(null);\n const [viewingDescription, setViewingDescription] = useState(false);\n\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n\n const { room } = props;\n\n const classes = classNames('room-details', {\n ['+is-open']: viewingRates,\n });\n\n useEffect(() => {\n if (basketContext.selectedBasketRow?.getRoom() && basketContext.selectedBasketRow.getRoom().code === props.room.code) {\n setViewingRates(true);\n }\n\n DataLayer.instance.addRoomImpression(room);\n }, [basketContext.selectedBasketRow]);\n\n useEffect(() => {\n let nonPromoRates: RoomRate[] = [];\n let toSetFeaturedRate: RoomRate = null;\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase() && !toSetFeaturedRate) {\n toSetFeaturedRate = currentRate;\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate) {\n setViewingRates(true);\n setFeaturedRate(toSetFeaturedRate);\n }\n } else {\n nonPromoRates = room.getRates();\n }\n\n setStandardRates(nonPromoRates);\n }, [room.getRates()]);\n\n const perks = hotel.perks?.slice(0, 5);\n\n const trimmedDescription = room.getShortDescription();\n\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const ratesOpen = viewingRates || (context.screenSize <= ScreenSize.Medium && viewingRates === null);\n const moreDetailsOnClick = () => {\n DataLayer.instance.sendInteraction('More Room Details', InteractionType.LINK, InteractionStep.ROOMS);\n setViewingDescription(true);\n };\n const sendRoomClickOnClick = () => {\n if (!ratesOpen) {\n DataLayer.instance.sendRoomClick(room, basketContext.startDate, basketContext.endDate);\n }\n setViewingRates(!ratesOpen);\n };\n const closeDescriptionOnClose = () => {\n setViewingDescription(false);\n };\n\n const lowestPrice = Math.round(room.getLowestPrice(false, true));\n const currencySize = context.screenSize > ScreenSize.Medium && lowestPrice.toLocaleString().length < 7 ? 'large' : 'normal';\n\n return (\n <div className={`room-details-container ${props.disableMarginBottom ? '' : 'u-marg-bottom'}`}>\n <div className={classes}>\n <div className=\"room-details--image\">\n <ImageGallerySlider images={props.room.getImages()} imageSize={ImageSize.Medium} />\n </div>\n <div className=\"room-details--content u-pad--heavy u-pad@l-\">\n <div className=\"u-marg-bottom\">\n {context.screenSize > ScreenSize.Large && (\n <>\n <div className=\"u-marg-bottom\">\n <RoomRatePills room={room} limit={2} />\n </div>\n </>\n )}\n <div className=\"room-details--content-title u-marg-bottom--light\">\n <Headline bold={true}>{room.name}</Headline>\n </div>\n <RoomDetailsBedsBlock room={room} />\n <div className=\"room-details--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n {<span dangerouslySetInnerHTML={{ __html: trimmedDescription.replace(/<br(\\/|)>/g, '') }} />}\n </Text>\n </div>\n </div>\n\n <div className=\"row\">\n <div className=\"col-md-6 u-flex u-marg-bottom@m- flex-column align-items-start\">\n <div className=\"room-details--content-perks u-marg-bottom@m-\">\n {isMobile && (\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} bold={true} color={Color.Accent}>\n {t(Translation.Misc.Perks.AndYouGetAll)}\n </Text>\n </div>\n )}\n <RoomDetailsPerkBlock perks={perks} />\n </div>\n <BEButton icon={IconType.ArrowRight2} isText={true} primary={true} size=\"tiny\" iconPosition=\"right\" onClick={moreDetailsOnClick}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n <div className=\"col-md-6 u-flex justify-content-end flex-column align-items-start align-items-md-end\">\n <Text type={TextType.Small} color={Color.Navy} inline={true}>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-row align-items-end\">\n <Headline size={currencySize} bold={true}>\n <Currency hideDecimals={true}>{lowestPrice}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline={true}>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline={true} className=\"u-nowrap\">\n {room.getLowestPriceType() === RoomRatePriceInclusion.IncludingFeesAndTaxes\n ? t(Translation.Step.Room.RoomInfo.IncludesTaxes)\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\n name=\"ViewRatesNowButton\"\n primary={true}\n primaryActive={ratesOpen}\n filled={true}\n stopIconAnimation={true}\n icon={ratesOpen ? IconType.ArrowUp2 : IconType.ArrowDown2}\n iconPosition={'right'}\n onClick={sendRoomClickOnClick}\n wide={context.screenSize <= ScreenSize.Large}\n >\n {ratesOpen ? t(Translation.Step.Room.RoomInfo.CloseRates) : t(Translation.Step.Room.RoomInfo.ViewRates)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n <AutoAutoHeight open={ratesOpen}>\n <RoomRates roomCode={room.code} rates={standardRates} featuredRates={[featuredRate]} />\n </AutoAutoHeight>\n {<RoomModal open={viewingDescription} room={props.room} rates={standardRates} featuredRates={[featuredRate]} onClose={closeDescriptionOnClose} />}\n {room.getRates().map((rate) => {\n return (\n <script key={room.code + '-' + rate.code} type=\"application/ld+json\">\n {JSON.stringify({\n '@context': 'http://schema.org/',\n '@type': 'Offer',\n itemOffered: {\n '@type': 'HotelRoom',\n name: room.name,\n },\n name: rate.name,\n identifier: rate.code,\n priceSpecification: {\n '@type': 'UnitPriceSpecification',\n price: rate.getAveragePrice(),\n priceCurrency: ccx.currentCurrency,\n unitText: 'Nightly',\n },\n })}\n </script>\n );\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomDetails.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/RoomDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["import Headline from '../../../generic/Headline';\nimport Text, { TextType } from '../../../generic/Text';\nimport { Color } from '../../../../util/Color';\nimport BEButton from '../../../generic/BEButton';\nimport { IconType } from '../../../generic/Icon';\nimport { useState, useContext, useEffect } from 'react';\nimport * as classNames from 'classnames';\nimport * as React from 'react';\nimport RoomRates from './roomRates/RoomRates';\nimport RoomModal from '../RoomModal';\nimport Currency from '../../../generic/Currency';\nimport ImageGallerySlider from '../ImageGallerySlider';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from '../../../../translations/Translation';\nimport ScreenSize from '../../../../util/ScreenSize';\nimport { Room } from '../../../../models/Room/Room';\nimport AutoAutoHeight from '../../../../animations/AutoAutoHeight';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport DataLayer, { InteractionStep, InteractionType } from '../../../../util/DataLayer';\nimport { RoomDetailsPerkBlock } from './RoomDetailsPerkBlock';\nimport { RoomDetailsBedsBlock } from './RoomDetailsBedsBlock';\nimport { RoomRate, RoomRatePriceInclusion } from '../../../../models/Room/RoomRate';\nimport FeaturedPromoFeature from '../../../../providers/feature/FeaturedPromoFeature';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { CompanyContext } from '@frontend/contexts';\nimport RoomRatePills from './roomRates/RoomRatePills';\nimport { ImageSize } from '../../../../providers/ImageProvider';\n\nexport interface RoomDetailsProps {\n room: Room;\n disableMarginBottom?: boolean;\n}\n\nexport default function RoomDetails(props: RoomDetailsProps) {\n const [featuredRates, setFeaturedRates] = useState<RoomRate[]>([]);\n const [standardRates, setStandardRates] = useState<RoomRate[]>([]);\n\n const [viewingRates, setViewingRates] = useState<boolean>(null);\n const [viewingDescription, setViewingDescription] = useState(false);\n\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n\n const { room } = props;\n\n const classes = classNames('room-details', {\n ['+is-open']: viewingRates,\n });\n\n useEffect(() => {\n if (basketContext.selectedBasketRow?.getRoom() && basketContext.selectedBasketRow.getRoom().code === props.room.code) {\n setViewingRates(true);\n }\n\n DataLayer.instance.addRoomImpression(room);\n }, [basketContext.selectedBasketRow]);\n\n useEffect(() => {\n let nonPromoRates: RoomRate[] = [];\n let toSetFeaturedRate: RoomRate[] = [];\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n toSetFeaturedRate.unshift(currentRate);\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate.length > 0) {\n setViewingRates(true);\n setFeaturedRates(toSetFeaturedRate);\n }\n } else {\n nonPromoRates = room.getRates();\n }\n\n setStandardRates(nonPromoRates);\n }, [room.getRates()]);\n\n const perks = hotel.perks?.slice(0, 5);\n\n const trimmedDescription = room.getShortDescription();\n\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const ratesOpen = viewingRates || (context.screenSize <= ScreenSize.Medium && viewingRates === null);\n const moreDetailsOnClick = () => {\n DataLayer.instance.sendInteraction('More Room Details', InteractionType.LINK, InteractionStep.ROOMS);\n setViewingDescription(true);\n };\n const sendRoomClickOnClick = () => {\n if (!ratesOpen) {\n DataLayer.instance.sendRoomClick(room, basketContext.startDate, basketContext.endDate);\n }\n setViewingRates(!ratesOpen);\n };\n const closeDescriptionOnClose = () => {\n setViewingDescription(false);\n };\n\n const lowestPrice = Math.round(room.getLowestPrice(false, true));\n const currencySize = context.screenSize > ScreenSize.Medium && lowestPrice.toLocaleString().length < 7 ? 'large' : 'normal';\n\n return (\n <div className={`room-details-container ${props.disableMarginBottom ? '' : 'u-marg-bottom'}`}>\n <div className={classes}>\n <div className=\"room-details--image\">\n <ImageGallerySlider images={props.room.getImages()} imageSize={ImageSize.Medium} />\n </div>\n <div className=\"room-details--content u-pad--heavy u-pad@l-\">\n <div className=\"u-marg-bottom\">\n {context.screenSize > ScreenSize.Large && (\n <>\n <div className=\"u-marg-bottom\">\n <RoomRatePills room={room} limit={2} />\n </div>\n </>\n )}\n <div className=\"room-details--content-title u-marg-bottom--light\">\n <Headline bold={true}>{room.name}</Headline>\n </div>\n <RoomDetailsBedsBlock room={room} />\n <div className=\"room-details--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n {<span dangerouslySetInnerHTML={{ __html: trimmedDescription.replace(/<br(\\/|)>/g, '') }} />}\n </Text>\n </div>\n </div>\n\n <div className=\"row\">\n <div className=\"col-md-6 u-flex u-marg-bottom@m- flex-column align-items-start\">\n <div className=\"room-details--content-perks u-marg-bottom@m-\">\n {isMobile && (\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} bold={true} color={Color.Accent}>\n {t(Translation.Misc.Perks.AndYouGetAll)}\n </Text>\n </div>\n )}\n <RoomDetailsPerkBlock perks={perks} />\n </div>\n <BEButton icon={IconType.ArrowRight2} isText={true} primary={true} size=\"tiny\" iconPosition=\"right\" onClick={moreDetailsOnClick}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n <div className=\"col-md-6 u-flex justify-content-end flex-column align-items-start align-items-md-end\">\n <Text type={TextType.Small} color={Color.Navy} inline={true}>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-row align-items-end\">\n <Headline size={currencySize} bold={true}>\n <Currency hideDecimals={true}>{lowestPrice}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline={true}>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline={true} className=\"u-nowrap\">\n {room.getLowestPriceType() === RoomRatePriceInclusion.IncludingFeesAndTaxes\n ? t(Translation.Step.Room.RoomInfo.IncludesTaxes)\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\n name=\"ViewRatesNowButton\"\n primary={true}\n primaryActive={ratesOpen}\n filled={true}\n stopIconAnimation={true}\n icon={ratesOpen ? IconType.ArrowUp2 : IconType.ArrowDown2}\n iconPosition={'right'}\n onClick={sendRoomClickOnClick}\n wide={context.screenSize <= ScreenSize.Large}\n >\n {ratesOpen ? t(Translation.Step.Room.RoomInfo.CloseRates) : t(Translation.Step.Room.RoomInfo.ViewRates)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n <AutoAutoHeight open={ratesOpen}>\n <RoomRates roomCode={room.code} rates={standardRates} featuredRates={featuredRates} />\n </AutoAutoHeight>\n {<RoomModal open={viewingDescription} room={props.room} rates={standardRates} featuredRates={featuredRates} onClose={closeDescriptionOnClose} />}\n {room.getRates().map((rate) => {\n return (\n <script key={room.code + '-' + rate.code} type=\"application/ld+json\">\n {JSON.stringify({\n '@context': 'http://schema.org/',\n '@type': 'Offer',\n itemOffered: {\n '@type': 'HotelRoom',\n name: room.name,\n },\n name: rate.name,\n identifier: rate.code,\n priceSpecification: {\n '@type': 'UnitPriceSpecification',\n price: rate.getAveragePrice(),\n priceCurrency: ccx.currentCurrency,\n unitText: 'Nightly',\n },\n })}\n </script>\n );\n })}\n </div>\n );\n}\n"]}
@@ -63,12 +63,15 @@ function RoomRates(props) {
63
63
  };
64
64
  const maxRows = hasFeaturedRates && !showingMoreOpen ? featuredRates.length : numOfRatesToShowFirst;
65
65
  let rowsLeftToOpen = 0;
66
- // First we add Featured Rates to the top of the list - no limits there
67
- featuredRates === null || featuredRates === void 0 ? void 0 : featuredRates.forEach((row) => {
68
- if (row) {
69
- itemsToRender.push(renderRoomRateRow(row, true));
70
- }
71
- });
66
+ if (featuredRates && featuredRates.length) {
67
+ featuredRates.sort(RoomSortProvider_1.default.getSortByFunction(sortBy));
68
+ // First we add Featured Rates to the top of the list - no limits there
69
+ featuredRates.forEach((row) => {
70
+ if (row) {
71
+ itemsToRender.push(renderRoomRateRow(row, true));
72
+ }
73
+ });
74
+ }
72
75
  // Then we do a tricky check to see if MOD intent should be displayed
73
76
  if (!hasFeaturedRates || showingMoreOpen) {
74
77
  if (!props.hideMemberOnlyRow &&
@@ -1 +1 @@
1
- {"version":3,"file":"RoomRates.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRates.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport RoomRateRow from './RoomRateRow';\nimport { RoomRate } from '../../../../../models/Room/RoomRate';\nimport { useState, useEffect, useContext, useMemo } from 'react';\nimport { IconType } from '../../../../generic/Icon';\nimport BEButton from '../../../../generic/BEButton';\nimport { Color } from '../../../../../util/Color';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport RoomSortProvider from '../../../../../providers/RoomSortProvider';\n\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from '../../../../../translations/Translation';\nimport DataLayer from '../../../../../util/DataLayer';\nimport MembersOnlyRow from './MembersOnlyRow';\nimport ScreenSize from '../../../../../util/ScreenSize';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { CompanyContext } from '@frontend/contexts';\nexport interface RoomRatesProps {\n roomCode: string;\n rates: RoomRate[];\n\n featuredRates?: RoomRate[];\n\n classNames?: string;\n\n hideMemberOnlyRow?: boolean;\n\n // Inline Booking Widget overrides\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport default function RoomRates(props: RoomRatesProps) {\n const { t } = useTranslation();\n const [showingMoreOpen, setShowingMoreOpen] = useState(false);\n\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const { rates } = props;\n\n const numOfRatesToShowFirst = beContext.screenSize <= ScreenSize.Medium ? 2 : 3;\n\n const sortBy = beContext.currentRoomSort;\n\n useEffect(() => {\n if (basketContext.selectedBasketRow?.getRoom() && basketContext.selectedBasketRow.getRoom().code === props.roomCode) {\n setShowingMoreOpen(true);\n }\n }, [basketContext.selectedBasketRow]);\n\n useEffect(() => {\n DataLayer.instance.sendRoomImpressions();\n }, [showingMoreOpen]);\n\n return useMemo(() => {\n const featuredRates = props.featuredRates?.filter((rate) => !!rate);\n const hasFeaturedRates = !!featuredRates && featuredRates.length > 0;\n\n let sortedRates: RoomRate[];\n\n if (rates.length !== 0) {\n sortedRates = rates.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n // Need two sorts because of MOD\n sortedRates = rates.sort((a, b) => {\n if (a.isMemberOnly) {\n return -1;\n } else if (b.isMemberOnly) {\n return 1;\n } else {\n return 0;\n }\n });\n\n const showMoreOnClick = () => {\n setShowingMoreOpen(true);\n };\n\n const itemsToRender = [];\n\n const renderRoomRateRow = (rate: RoomRate, isPromo = false) => {\n return <RoomRateRow key={rate.name} rate={rate} getButtonLabel={props.getButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} isPromoRate={isPromo} />;\n };\n\n const maxRows = hasFeaturedRates && !showingMoreOpen ? featuredRates.length : numOfRatesToShowFirst;\n let rowsLeftToOpen = 0;\n\n // First we add Featured Rates to the top of the list - no limits there\n featuredRates?.forEach((row) => {\n if (row) {\n itemsToRender.push(renderRoomRateRow(row, true));\n }\n });\n\n // Then we do a tricky check to see if MOD intent should be displayed\n if (!hasFeaturedRates || showingMoreOpen) {\n if (\n !props.hideMemberOnlyRow &&\n !!hotel?.memberOnlyPromoCode &&\n (!ccx.signedInUser || hotel?.memberOnlyPromoCode === basketContext?.selectedBasketRow?.getPromoCode())\n ) {\n itemsToRender.push(<MembersOnlyRow />);\n }\n }\n\n // Then we add the remaining rates to the render list - stop adding if we hit `maxRows`\n sortedRates.forEach((rate: RoomRate) => {\n if (itemsToRender.length < maxRows || showingMoreOpen) {\n itemsToRender.push(renderRoomRateRow(rate));\n } else {\n rowsLeftToOpen++;\n }\n });\n\n return (\n <div className={props.classNames ?? ''}>\n {itemsToRender.map((item: any, index: number) => {\n return <React.Fragment key={index}>{item}</React.Fragment>;\n })}\n {rowsLeftToOpen > 0 && (\n <div className=\"room-show-more\">\n <BEButton icon={IconType.ArrowDown2} iconPosition=\"right\" stopIconAnimation={true} isText={true} textColor={Color.Navy} onClick={showMoreOnClick}>\n {t(Translation.Step.Room.RoomInfo.Show)} {rowsLeftToOpen} {t(Translation.Step.Room.RoomInfo.MoreRates)}\n </BEButton>\n </div>\n )}\n </div>\n );\n }, [props.featuredRates, rates, beContext.currentRoomSort, showingMoreOpen]);\n}\n"]}
1
+ {"version":3,"file":"RoomRates.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRates.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport RoomRateRow from './RoomRateRow';\nimport { RoomRate } from '../../../../../models/Room/RoomRate';\nimport { useState, useEffect, useContext, useMemo } from 'react';\nimport { IconType } from '../../../../generic/Icon';\nimport BEButton from '../../../../generic/BEButton';\nimport { Color } from '../../../../../util/Color';\nimport { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport RoomSortProvider from '../../../../../providers/RoomSortProvider';\n\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from '../../../../../translations/Translation';\nimport DataLayer from '../../../../../util/DataLayer';\nimport MembersOnlyRow from './MembersOnlyRow';\nimport ScreenSize from '../../../../../util/ScreenSize';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { CompanyContext } from '@frontend/contexts';\nexport interface RoomRatesProps {\n roomCode: string;\n rates: RoomRate[];\n\n featuredRates?: RoomRate[];\n\n classNames?: string;\n\n hideMemberOnlyRow?: boolean;\n\n // Inline Booking Widget overrides\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n}\n\nexport default function RoomRates(props: RoomRatesProps) {\n const { t } = useTranslation();\n const [showingMoreOpen, setShowingMoreOpen] = useState(false);\n\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const { rates } = props;\n\n const numOfRatesToShowFirst = beContext.screenSize <= ScreenSize.Medium ? 2 : 3;\n\n const sortBy = beContext.currentRoomSort;\n\n useEffect(() => {\n if (basketContext.selectedBasketRow?.getRoom() && basketContext.selectedBasketRow.getRoom().code === props.roomCode) {\n setShowingMoreOpen(true);\n }\n }, [basketContext.selectedBasketRow]);\n\n useEffect(() => {\n DataLayer.instance.sendRoomImpressions();\n }, [showingMoreOpen]);\n\n return useMemo(() => {\n const featuredRates = props.featuredRates?.filter((rate) => !!rate);\n const hasFeaturedRates = !!featuredRates && featuredRates.length > 0;\n\n let sortedRates: RoomRate[];\n\n if (rates.length !== 0) {\n sortedRates = rates.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n // Need two sorts because of MOD\n sortedRates = rates.sort((a, b) => {\n if (a.isMemberOnly) {\n return -1;\n } else if (b.isMemberOnly) {\n return 1;\n } else {\n return 0;\n }\n });\n\n const showMoreOnClick = () => {\n setShowingMoreOpen(true);\n };\n\n const itemsToRender = [];\n\n const renderRoomRateRow = (rate: RoomRate, isPromo = false) => {\n return <RoomRateRow key={rate.name} rate={rate} getButtonLabel={props.getButtonLabel} onAddToBasketOverride={props.onAddToBasketOverride} isPromoRate={isPromo} />;\n };\n\n const maxRows = hasFeaturedRates && !showingMoreOpen ? featuredRates.length : numOfRatesToShowFirst;\n let rowsLeftToOpen = 0;\n\n if (featuredRates && featuredRates.length) {\n featuredRates.sort(RoomSortProvider.getSortByFunction(sortBy));\n // First we add Featured Rates to the top of the list - no limits there\n featuredRates.forEach((row) => {\n if (row) {\n itemsToRender.push(renderRoomRateRow(row, true));\n }\n });\n }\n\n // Then we do a tricky check to see if MOD intent should be displayed\n if (!hasFeaturedRates || showingMoreOpen) {\n if (\n !props.hideMemberOnlyRow &&\n !!hotel?.memberOnlyPromoCode &&\n (!ccx.signedInUser || hotel?.memberOnlyPromoCode === basketContext?.selectedBasketRow?.getPromoCode())\n ) {\n itemsToRender.push(<MembersOnlyRow />);\n }\n }\n\n // Then we add the remaining rates to the render list - stop adding if we hit `maxRows`\n sortedRates.forEach((rate: RoomRate) => {\n if (itemsToRender.length < maxRows || showingMoreOpen) {\n itemsToRender.push(renderRoomRateRow(rate));\n } else {\n rowsLeftToOpen++;\n }\n });\n\n return (\n <div className={props.classNames ?? ''}>\n {itemsToRender.map((item: any, index: number) => {\n return <React.Fragment key={index}>{item}</React.Fragment>;\n })}\n {rowsLeftToOpen > 0 && (\n <div className=\"room-show-more\">\n <BEButton icon={IconType.ArrowDown2} iconPosition=\"right\" stopIconAnimation={true} isText={true} textColor={Color.Navy} onClick={showMoreOnClick}>\n {t(Translation.Step.Room.RoomInfo.Show)} {rowsLeftToOpen} {t(Translation.Step.Room.RoomInfo.MoreRates)}\n </BEButton>\n </div>\n )}\n </div>\n );\n }, [props.featuredRates, rates, beContext.currentRoomSort, showingMoreOpen]);\n}\n"]}
@@ -42,19 +42,25 @@ const Select_1 = require("../../components/generic/Select");
42
42
  const hooks_1 = require("@frontend/hooks");
43
43
  const BasketRow_1 = require("../../models/BasketRow");
44
44
  const contexts_1 = require("@frontend/contexts");
45
+ const FeaturedPromoFeature_1 = require("providers/feature/FeaturedPromoFeature");
46
+ const RoomListSearchEvent_1 = require("events/actions/RoomListSearchEvent");
45
47
  function InlineRoomMiniEngineElement(props) {
46
48
  var _a;
47
49
  const { hotel } = hooks_1.useCurrentHotel();
48
50
  const basketContext = react_1.useContext(contexts_1.BasketContext);
51
+ const ccx = react_1.useContext(contexts_1.CompanyContext);
49
52
  const row = basketContext.currentBasketRows[0];
50
53
  const [isLoading, setLoading] = react_1.useState(true);
51
54
  const [ranFirstLoad, setRanFirstLoad] = react_1.useState(false);
52
55
  const [rooms, setRooms] = react_1.useState([]);
53
56
  const [isPromoModalOpen, setIsPromoModalOpen] = react_1.useState(false);
57
+ const [featuredRates, setFeaturedRates] = react_1.useState([]);
58
+ const [standardRates, setStandardRates] = react_1.useState([]);
54
59
  const [promoCode, setPromoCode] = react_1.useState(row === null || row === void 0 ? void 0 : row.getPromoCode());
55
60
  const { t } = react_i18next_1.useTranslation();
56
61
  const [ref, bounds] = react_use_measure_1.default();
57
62
  const thisElement = React.useRef();
63
+ const { raise } = hooks_1.useEvent();
58
64
  let promoCodeTooltip = '';
59
65
  if ((row === null || row === void 0 ? void 0 : row.getPromoCodeStatus()) === 'new') {
60
66
  promoCodeTooltip = row.getPromoCode() ? 'Promo Code is being checked... please wait.' : 'Set a Promo Code for a possible offer!';
@@ -91,6 +97,70 @@ function InlineRoomMiniEngineElement(props) {
91
97
  findRoomsOnClick();
92
98
  }
93
99
  }, [row === null || row === void 0 ? void 0 : row.getPromoCode()]);
100
+ react_1.useEffect(() => {
101
+ var _a, _b, _c, _d, _e, _f;
102
+ if (!(rooms && rooms.length > 0))
103
+ return;
104
+ const room = rooms[0];
105
+ let nonPromoRates = [];
106
+ let toSetFeaturedRate = [];
107
+ if (FeaturedPromoFeature_1.default.isActive()) {
108
+ for (const currentRate of room.getRates()) {
109
+ if (((_a = currentRate.promoCode) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === ((_c = (_b = basketContext.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCode()) === null || _c === void 0 ? void 0 : _c.toLowerCase())) {
110
+ toSetFeaturedRate.unshift(currentRate);
111
+ }
112
+ else {
113
+ nonPromoRates.push(currentRate);
114
+ }
115
+ }
116
+ if (toSetFeaturedRate.length > 0) {
117
+ setFeaturedRates(toSetFeaturedRate);
118
+ }
119
+ }
120
+ else {
121
+ nonPromoRates = room.getRates();
122
+ }
123
+ try {
124
+ const search = {
125
+ checkInTime: (_d = row === null || row === void 0 ? void 0 : row.getStartDate()) === null || _d === void 0 ? void 0 : _d.format('YYYY-M-D'),
126
+ checkOutTime: (_e = row === null || row === void 0 ? void 0 : row.getEndDate()) === null || _e === void 0 ? void 0 : _e.format('YYYY-M-D'),
127
+ numAdults: row === null || row === void 0 ? void 0 : row.getAdults(),
128
+ numChildren: row === null || row === void 0 ? void 0 : row.getChildren(),
129
+ numRooms: 1,
130
+ promoCode: promoCode,
131
+ };
132
+ const eventRooms = (_f = rooms === null || rooms === void 0 ? void 0 : rooms.map((room) => {
133
+ var _a, _b;
134
+ const { name, code } = room;
135
+ const foundRoom = {
136
+ name,
137
+ code,
138
+ lowestPrice: room.getLowestPrice(),
139
+ highestPrice: room.getHighestPrice(),
140
+ currency: ccx.currentCurrency,
141
+ rates: (_b = (_a = room.getRates()) === null || _a === void 0 ? void 0 : _a.map((rate) => {
142
+ const { name, code } = rate;
143
+ return {
144
+ name,
145
+ code,
146
+ price: {
147
+ averagePrice: rate.getAveragePrice(),
148
+ totalPrice: rate.getTotalPrice(),
149
+ currency: ccx.currentCurrency,
150
+ },
151
+ };
152
+ })) !== null && _b !== void 0 ? _b : [],
153
+ };
154
+ return foundRoom;
155
+ })) !== null && _f !== void 0 ? _f : [];
156
+ const event = new RoomListSearchEvent_1.RoomListSearchEvent(search, eventRooms);
157
+ raise(event);
158
+ }
159
+ catch (ex) {
160
+ console.warn(ex);
161
+ }
162
+ setStandardRates(nonPromoRates);
163
+ }, [rooms]);
94
164
  react_1.useEffect(() => {
95
165
  if (hotel === null || hotel === void 0 ? void 0 : hotel.colors) {
96
166
  // Do this manually as Guide Step manages this for Fullpage.
@@ -230,7 +300,7 @@ function InlineRoomMiniEngineElement(props) {
230
300
  React.createElement("div", { className: "u-border-rounded" }, !isLoading ? (React.createElement(AutoAutoHeight_1.default, { open: !isLoading },
231
301
  React.createElement(React.Fragment, null,
232
302
  React.createElement(BookNowPayLaterInfoBlock_1.BookNowPayLaterInfoBlock, null),
233
- rooms.length > 0 ? (React.createElement(RoomRates_1.default, { rates: rooms[0].getRates(), roomCode: rooms[0].code, getButtonLabel: getButtonLabelHandler, onAddToBasketOverride: onAddToBasketOverrideHandler })) : (React.createElement(RatesNotFound_1.default, null))))) : (React.createElement(LargeLoader_1.default, null))))));
303
+ rooms.length > 0 ? (React.createElement(RoomRates_1.default, { featuredRates: featuredRates, rates: standardRates, roomCode: rooms[0].code, getButtonLabel: getButtonLabelHandler, onAddToBasketOverride: onAddToBasketOverrideHandler })) : (React.createElement(RatesNotFound_1.default, null))))) : (React.createElement(LargeLoader_1.default, null))))));
234
304
  }, [isCompact, isLoading, rooms, basketContext.currentBasketRows, isPromoModalOpen, hotel]);
235
305
  }
236
306
  exports.default = InlineRoomMiniEngineElement;
@@ -1 +1 @@
1
- {"version":3,"file":"InlineRoomMiniEngineElement.js","sourceRoot":"/","sources":["src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA+B;AAC/B,yCAAmC;AAEnC,qDAAuC;AACvC,+BAA+B;AAE/B,gEAAyD;AACzD,yFAAkF;AAClF,kEAA2D;AAC3D,0DAAmD;AACnD,gEAA6D;AAC7D,iDAA+C;AAC/C,wDAA+D;AAC/D,wDAA+D;AAC/D,4CAAyC;AACzC,oDAAmF;AACnF,2FAAoF;AACpF,6EAAsE;AACtE,uDAA8C;AAG9C,4EAAgF;AAChF,8DAAkE;AAClE,oEAA6D;AAC7D,6EAAsE;AACtE,6EAAsE;AACtE,iCAAiE;AACjE,yDAA2C;AAE3C,gGAA6F;AAC7F,0FAAmF;AAEnF,4CAA4C;AAC5C,4EAAqE;AACrE,4DAAqD;AAGrD,2CAAkD;AAElD,sDAA+C;AAE/C,iDAA6H;AAM7H,SAAwB,2BAA2B,CAAC,KAAuC;;IACvF,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAe,EAAE,CAAC;IAEpC,MAAM,aAAa,GAAG,kBAAU,CAAC,wBAAa,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,gBAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAE/C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC;IAChE,MAAM,EAAE,CAAC,EAAE,GAAG,8BAAc,EAAE,CAAC;IAE/B,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,2BAAU,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEnC,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,QAAO,KAAK,EAAE;QACrC,gBAAgB,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,wCAAwC,CAAC;KACpI;SAAM;QACH,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,QAAO,OAAO,EAAE;YACvC,gBAAgB,GAAG,+BAA+B,CAAC;SACtD;aAAM;YACH,gBAAgB,GAAG,sBAAsB,CAAC;SAC7C;KACJ;IAED,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE;YACN,aAAa,CAAC,YAAY,CAAC,IAAI,mBAAS,EAAE,CAAC,CAAC;YAC5C,OAAO;SACV;QAED,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;YAChE,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC3E,IAAI,CAAC,SAAS,EAAE;oBACZ,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAChF,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClB,eAAe,CAAC,IAAI,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAG,EAAE;YACR,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,GAAG,EAAE;YACL,gBAAgB,EAAE,CAAC;SACtB;IACL,CAAC,EAAE,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC,CAAC;IAE1B,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE;YACf,4DAA4D;YAC5D,6BAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACjD;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA8D,EAAE,EAAE;QAC5G,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,EAAE;YACtC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,YAAY,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE;YAChE,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,YAAY,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAED,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,SAAsB,EAAE,OAAoB,EAAE,EAAE;QACtE,IAAI,SAAS,IAAI,OAAO,EAAE;YACtB,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAExB,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC;IAEF,IAAI,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,GAAE,IAAI,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,GAAE,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;KAC/C;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,MAAM,gBAAgB,GAAG,GAAS,EAAE;QAChC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,CAAC,MAAM,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACxI,UAAU,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAA,CAAC;IACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CAAC,KAAU,EAAE,EAAE;QAChD,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,8BAA8B,GAAG,CAAC,KAAU,EAAE,EAAE;QAClD,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;QACrC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,UAAU,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAE5G,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACvB,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,IAAI,EAAE;gBACN,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC9B;SACJ;IACL,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CAAC,IAAc,EAAE,EAAE;QACpD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACnC,mBAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAE5G,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO;aACF,aAAa,CAAC;YACX,IAAI,EAAE,0BAAgB,CAAC,OAAO,EAAE;SACnC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;;YACP,iCAAiC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,mCAAI,YAAY,IAAI,0BAAgB,CAAC,UAAU,EAAE,YAAY,OAAO,CAAC,mBAAmB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5I,CAAC,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,YAAY,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC;QAClC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACjC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACxG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,EAAE;QACjC,eAAe,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,YAAY,SAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,mCAAI,CAAC,CAAC;IAE9C,OAAO,eAAO,CACV,GAAG,EAAE;;QAAC,OAAA,CACF;YACI,6BAAK,SAAS,EAAE,yBAAyB,SAAS,EAAE;gBAChD,6BAAK,SAAS,EAAE,8DAA8D,EAAE,GAAG,EAAE,GAAG;oBACpF,6BAAK,SAAS,EAAC,2DAA2D;wBACtE,oBAAC,4BAAkB,IACf,SAAS,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,IAC5B,mBAAmB,EAAE,gBAAgB,EACrC,SAAS,EAAC,4DAA4D;4BAEtE,oBAAC,mBAAS,IAAC,KAAK,EAAC,qDAAqD,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;gCAC9H,6BAAK,SAAS,EAAC,+EAA+E;oCAC1F,oBAAC,cAAI,IAAC,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,IAAG,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAE,CAAC,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,GAAE;wCAChI,kCAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,IAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,cAAc,CAAQ,CACzE;oCACP,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,WAAW,GAAI;oCACpC,oBAAC,cAAI,IACD,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,IAAG,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,EAC9D,SAAS,EAAC,qCAAqC,EAC/C,IAAI,EAAE,CAAC,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,GAAE;wCAE/B,kCAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,IAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAQ,CAC/E,CACL,CACE,CACK;wBACrB,oBAAC,mBAAS,IAAC,KAAK,EAAC,yBAAyB,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;4BAClG,6BAAK,SAAS,EAAC,mEAAmE;gCAC9E,oBAAC,gBAAM,IACH,QAAQ,EAAE,4BAA4B,EACtC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,IAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;wCACzG,KAAK,IAAI,CAAC,CAAC;wCACX,OAAO;4CACH,IAAI,EAAE,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;4CAChF,KAAK;yCACR,CAAC;oCACN,CAAC,CAAC,GACJ,CACA,CACE;wBACZ,oBAAC,mBAAS,IAAC,KAAK,EAAC,2BAA2B,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;4BACpG,6BAAK,SAAS,EAAC,mEAAmE;gCAC9E,oBAAC,gBAAM,IACH,QAAQ,EAAE,8BAA8B,EACxC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,IAAG,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;wCACzG,OAAO;4CACH,IAAI,EAAE,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;4CAChF,KAAK;yCACR,CAAC;oCACN,CAAC,CAAC,GACJ,CACA,CACE;wBACZ,oBAAC,mBAAS,IAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;4BAC3F,6BAAK,SAAS,EAAC,+CAA+C,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB;gCAC3G,6BAAK,SAAS,EAAC,8DAA8D;oCACzE,oBAAC,cAAI,IAAC,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,IAAG,CAAC,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,GAAG,CAAC,CAAC,aAAK,CAAC,IAAI,IACxH,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,IAAG,CAAC,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC,CAAC,YAAY,CACtD;oCACP,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,GAAI,CACtD,CACJ,CACE;wBACZ,oBAAC,cAAO,IACJ,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,6BAAmB,CAAC,eAAe,EAC9C,QAAQ,EAAE,WAAW,CAAC,OAAO,EAC7B,iBAAiB,EAAE,IAAI,EACvB,YAAY,EAAE;gCACV,QAAQ,EAAE,QAAQ;gCAClB,UAAU,EAAE,QAAQ;6BACvB,EACD,eAAe,EAAE;gCACb,QAAQ,EAAE,KAAK;gCACf,UAAU,EAAE,MAAM;6BACrB,EACD,OAAO,EAAE,mBAAmB;4BAE5B,6BAAK,SAAS,EAAC,cAAc;gCACzB;oCACI,oBAAC,wBAAc,IACX,KAAK,QAAE,aAAa,CAAC,iBAAiB,0CAAE,YAAY,IACpD,QAAQ,EAAE,eAAe,EACzB,KAAK,EACD,OAAA,aAAa,CAAC,iBAAiB,0CAAE,kBAAkB,QAAO,KAAK;4CAC3D,CAAC,CAAC,OAAA,aAAa,CAAC,iBAAiB,0CAAE,kBAAkB,QAAO,OAAO;4CACnE,CAAC,CAAC,IAAI,GAEhB,CACA;gCAEN,6BAAK,SAAS,EAAC,0DAA0D;oCACrE,oBAAC,kBAAQ,IAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,uBAAuB,aAE1D,CACT,CACJ,CACA,CACR;oBACN,6BAAK,SAAS,EAAE,kCAAkC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBACxE,oBAAC,kBAAQ,IAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,kBAEnG,CACT,CACJ;gBACN,6BAAK,SAAS,EAAC,kBAAkB,IAC5B,CAAC,SAAS,CAAC,CAAC,CAAC,CACV,oBAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,SAAS;oBAC5B;wBACI,oBAAC,mDAAwB,OAAG;wBAC3B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB,oBAAC,mBAAS,IACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAC1B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EACvB,cAAc,EAAE,qBAAqB,EACrC,qBAAqB,EAAE,4BAA4B,GACrD,CACL,CAAC,CAAC,CAAC,CACA,oBAAC,uBAAa,OAAG,CACpB,CACF,CACU,CACpB,CAAC,CAAC,CAAC,CACA,oBAAC,qBAAW,OAAG,CAClB,CACC,CACJ,CACP,CACN,CAAA;KAAA,EACD,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAC1F,CAAC;AACN,CAAC;AAlSD,8CAkSC;AAEY,QAAA,iCAAiC,GAAG,CAAC,SAAkB,EAAE,MAA4B,EAAE,EAAE;IAClG,kBAAM,CACF,oBAAC,sCAA2B,IAAC,MAAM,EAAE,MAAM;QACvC,oBAAC,6BAAU;YACP,oBAAC,gDAA0B;gBACvB,oBAAC,kCAAmB;oBAChB,oBAAC,gCAAqB,IAAC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO;wBAC5D,oBAAC,+BAAoB;4BACjB,oBAAC,2BAA2B,IAAC,MAAM,EAAE,MAAM,GAAI,CAC5B,CACH,CACN,CACG,CACpB,CACa,EAC9B,SAAS,CACZ,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport { render } from 'react-dom';\n\nimport API from '../../api/BookingAPI';\nimport * as dayjs from 'dayjs';\n\nimport BEButton from '../../components/generic/BEButton';\nimport FloatingDatePicker from '../../components/generic/date/FloatingDatePicker';\nimport BETooltip from '../../components/generic/BETooltip';\nimport StringHelper from '../../util/StringHelper';\nimport { Translation } from '../../translations/Translation';\nimport { useTranslation } from 'react-i18next';\nimport Icon, { IconType } from '../../components/generic/Icon';\nimport Text, { TextType } from '../../components/generic/Text';\nimport { Color } from '../../util/Color';\nimport DataLayer, { InteractionType, InteractionStep } from '../../util/DataLayer';\nimport RoomRates from '../../components/steps/room/roomDetails/roomRates/RoomRates';\nimport LargeLoader from '../../components/generic/loader/LargeLoader';\nimport { HashRouter } from 'react-router-dom';\nimport type { InlineRoomMiniEngine } from './InlineRoomMiniEngine';\n\nimport { NotificationContextWrapper } from '../../contexts/NotificationContext';\nimport { ErrorContextWrapper } from '../../contexts/ErrorContext';\nimport AutoAutoHeight from '../../animations/AutoAutoHeight';\nimport RoomstayThemeEngine from '../../providers/RoomstayThemeEngine';\nimport RatesNotFound from '../../components/steps/room/RatesNotFound';\nimport { useContext, useState, useEffect, useMemo } from 'react';\nimport useMeasure from 'react-use-measure';\nimport { RoomRate } from '../../models/Room/RoomRate';\nimport { BookNowPayLaterInfoBlock } from '../../components/generic/BookNowPayLaterInfoBlock';\nimport StepConfirmation from '../../pages/steps/StepConfirmation/StepConfirmation';\n\nimport { Popover } from '@material-ui/core';\nimport PromoCodeInput from '../../components/generic/PromoCodeInput';\nimport Select from '../../components/generic/Select';\nimport { Room } from '../../models/Room/Room';\n\nimport { useCurrentHotel } from '@frontend/hooks';\n\nimport BasketRow from '../../models/BasketRow';\n\nimport { BasketContext, BasketContextWrapper, BookingEngineContextWrapper, CompanyContextWrapper } from '@frontend/contexts';\n\nexport interface InlineRoomMiniEngineElementProps {\n engine: InlineRoomMiniEngine;\n}\n\nexport default function InlineRoomMiniEngineElement(props: InlineRoomMiniEngineElementProps) {\n const { hotel } = useCurrentHotel();\n\n const basketContext = useContext(BasketContext);\n\n const row = basketContext.currentBasketRows[0];\n const [isLoading, setLoading] = useState(true);\n const [ranFirstLoad, setRanFirstLoad] = useState(false);\n const [rooms, setRooms] = useState<Room[]>([]);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n const [promoCode, setPromoCode] = useState(row?.getPromoCode());\n const { t } = useTranslation();\n\n const [ref, bounds] = useMeasure();\n const thisElement = React.useRef();\n\n let promoCodeTooltip = '';\n\n if (row?.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? 'Promo Code is being checked... please wait.' : 'Set a Promo Code for a possible offer!';\n } else {\n if (row?.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = 'Successful promo code entered';\n } else {\n promoCodeTooltip = 'Error code not valid';\n }\n }\n\n useEffect(() => {\n let cancelled = false;\n\n if (!row) {\n basketContext.addBasketRow(new BasketRow());\n return;\n }\n\n if (row && row.getStartDate() && row.getEndDate() && !ranFirstLoad) {\n API.Availability.fetchAvailabilityData(row, hotel.hotelID).then((hotelRooms) => {\n if (!cancelled) {\n setRooms(hotelRooms.filter((room) => room.code === props.engine.getRoomCode()));\n setLoading(false);\n setRanFirstLoad(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row]);\n\n useEffect(() => {\n if (row) {\n findRoomsOnClick();\n }\n }, [row?.getPromoCode()]);\n\n useEffect(() => {\n if (hotel?.colors) {\n // Do this manually as Guide Step manages this for Fullpage.\n RoomstayThemeEngine.changeTheme(hotel.colors);\n }\n }, [hotel, hotel?.colors]);\n\n const updatePeopleValues = ({ adults, children }: { adults?: number; children?: number; promoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n\n basketContext.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n basketContext.updateBasketRow(row, false);\n }\n };\n\n if (!row?.getArrivalDate() && !row?.getDepartureDate()) {\n const today = Date.now();\n row?.setStartDate(dayjs(today));\n row?.setEndDate(dayjs(today).add(1, 'day'));\n }\n\n const isCompact = bounds.width < 1000 ? '--compact' : '';\n\n const findRoomsOnClick = async () => {\n setLoading(true);\n setRooms((await API.Availability.fetchAvailabilityData(row, hotel.hotelID)).filter((room) => room.code === props.engine.getRoomCode()));\n setLoading(false);\n };\n const getButtonLabelHandler = () => {\n return 'Book Now';\n };\n\n const updateNumberOfAdultsOnChange = (value: any) => {\n updatePeopleValues({ adults: value });\n };\n const updateNumberOfChildrenOnChange = (value: any) => {\n updatePeopleValues({ children: value });\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code updated', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (row) {\n row.setPromoCode(code);\n basketContext.updateBasketRow(row);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const onAddToBasketOverrideHandler = (rate: RoomRate) => {\n row.setRate(rate);\n basketContext.updateBasketRow(row);\n DataLayer.instance.sendRoomRateAddToCart(rate, row.getNumberOfDays(), row.getStartDate(), row.getEndDate());\n\n const session = props.engine.getSessionProvider();\n session\n .updateSession({\n step: StepConfirmation.getName(), // TODO:\n })\n .then(() => {\n // TODO: Remove this URL coupling\n window.open(`${hotel?.checkoutUrl ?? '/checkout/'}#${StepConfirmation.getStepUrl()}?session=${session.getCurrentSessionID()}`, '_self');\n });\n };\n const openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setPromoCode(row?.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const maxOccupancy = hotel?.maxOccupancy ?? 1;\n\n return useMemo(\n () => (\n <>\n <div className={`room-builder-progress ${isCompact}`}>\n <div className={`u-flex w-100 flex-wrap room-builder-progress--item --current`} ref={ref}>\n <div className=\"u-flex u-flex-align-center flex-wrap flex-row u-w-100@xl-\">\n <FloatingDatePicker\n startDate={row?.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- room-builder-progress--value u-marg-left--none\"\n >\n <BETooltip title=\"Select Arrival and departure dates by clicking here\" arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={row?.getArrivalDate() ? Color.Accent : Color.Graphite} className=\"u-mw-75 u-align-center\" bold={!!row?.getArrivalDate()}>\n <span>{row?.getArrivalDate() ? row.getArrivalDate() : 'Arrival Date'}</span>\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text\n color={row?.getDepartureDate() ? Color.Accent : Color.Graphite}\n className=\"u-marg-right u-mw-75 u-align-center\"\n bold={!!row?.getDepartureDate()}\n >\n <span>{row?.getDepartureDate() ? row.getDepartureDate() : 'Departure Date'}</span>\n </Text>\n </div>\n </BETooltip>\n </FloatingDatePicker>\n <BETooltip title=\"Update number of adults\" arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select\n onChange={updateNumberOfAdultsOnChange}\n items={[...Array(maxOccupancy - (row?.getChildren() ? row.getChildren() : 0))].map((v: any, value: number) => {\n value += 1;\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Adult, t),\n value,\n };\n })}\n />\n </div>\n </BETooltip>\n <BETooltip title=\"Update number of children\" arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select\n onChange={updateNumberOfChildrenOnChange}\n items={[...Array(maxOccupancy + 1 - (row?.getAdults() ? row.getAdults() : 0))].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Child, t),\n value,\n };\n })}\n />\n </div>\n </BETooltip>\n <BETooltip title={promoCodeTooltip} arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={row?.getPromoCode() ? row?.getPromoCodeColour() : Color.Navy}>\n {row?.getPromoCode() ? row?.getPromoCode() : 'Promo Code'}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </BETooltip>\n <Popover\n open={isPromoModalOpen}\n container={RoomstayThemeEngine.EngineContainer}\n anchorEl={thisElement.current}\n disableScrollLock={true}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n onClose={setPromoCodeOnClose}\n >\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={basketContext.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n basketContext.selectedBasketRow?.getPromoCodeStatus() !== 'new'\n ? basketContext.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : null\n }\n />\n </div>\n\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText={true} size=\"small\" onClick={cancelPromoPopupOnClick}>\n Cancel\n </BEButton>\n </div>\n </div>\n </Popover>\n </div>\n <div className={`u-flex flex-xl-nowrap flex-row ${isCompact ? 'w-100' : ''}`}>\n <BEButton filled={true} primary={true} isLoading={isLoading} wide={isCompact !== ''} onClick={findRoomsOnClick}>\n Check Rates\n </BEButton>\n </div>\n </div>\n <div className=\"u-border-rounded\">\n {!isLoading ? (\n <AutoAutoHeight open={!isLoading}>\n <>\n <BookNowPayLaterInfoBlock />\n {rooms.length > 0 ? (\n <RoomRates\n rates={rooms[0].getRates()}\n roomCode={rooms[0].code}\n getButtonLabel={getButtonLabelHandler}\n onAddToBasketOverride={onAddToBasketOverrideHandler}\n />\n ) : (\n <RatesNotFound />\n )}\n </>\n </AutoAutoHeight>\n ) : (\n <LargeLoader />\n )}\n </div>\n </div>\n </>\n ),\n [isCompact, isLoading, rooms, basketContext.currentBasketRows, isPromoModalOpen, hotel]\n );\n}\n\nexport const renderInlineRoomMiniEngineElement = (container: Element, engine: InlineRoomMiniEngine) => {\n render(\n <BookingEngineContextWrapper engine={engine}>\n <HashRouter>\n <NotificationContextWrapper>\n <ErrorContextWrapper>\n <CompanyContextWrapper configCompany={engine.getConfig().company}>\n <BasketContextWrapper>\n <InlineRoomMiniEngineElement engine={engine} />\n </BasketContextWrapper>\n </CompanyContextWrapper>\n </ErrorContextWrapper>\n </NotificationContextWrapper>\n </HashRouter>\n </BookingEngineContextWrapper>,\n container\n );\n};\n"]}
1
+ {"version":3,"file":"InlineRoomMiniEngineElement.js","sourceRoot":"/","sources":["src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+BAA+B;AAC/B,yCAAmC;AAEnC,qDAAuC;AACvC,+BAA+B;AAE/B,gEAAyD;AACzD,yFAAkF;AAClF,kEAA2D;AAC3D,0DAAmD;AACnD,gEAA6D;AAC7D,iDAA+C;AAC/C,wDAA+D;AAC/D,wDAA+D;AAC/D,4CAAyC;AACzC,oDAAmF;AACnF,2FAAoF;AACpF,6EAAsE;AACtE,uDAA8C;AAG9C,4EAAgF;AAChF,8DAAkE;AAClE,oEAA6D;AAC7D,6EAAsE;AACtE,6EAAsE;AACtE,iCAAiE;AACjE,yDAA2C;AAE3C,gGAA6F;AAC7F,0FAAmF;AAEnF,4CAA4C;AAC5C,4EAAqE;AACrE,4DAAqD;AAGrD,2CAA4D;AAE5D,sDAA+C;AAE/C,iDAA6I;AAC7I,iFAA0E;AAG1E,4EAAyE;AAMzE,SAAwB,2BAA2B,CAAC,KAAuC;;IACvF,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAe,EAAE,CAAC;IAEpC,MAAM,aAAa,GAAG,kBAAU,CAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,kBAAU,CAAC,yBAAc,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,gBAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,gBAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,gBAAQ,CAAS,EAAE,CAAC,CAAC;IAE/C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,gBAAQ,CAAC,KAAK,CAAC,CAAC;IAEhE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,gBAAQ,CAAa,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,gBAAQ,CAAa,EAAE,CAAC,CAAC;IAEnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,gBAAQ,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC;IAChE,MAAM,EAAE,CAAC,EAAE,GAAG,8BAAc,EAAE,CAAC;IAE/B,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,2BAAU,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEnC,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAQ,EAAE,CAAC;IAE7B,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,QAAO,KAAK,EAAE;QACrC,gBAAgB,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,wCAAwC,CAAC;KACpI;SAAM;QACH,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,QAAO,OAAO,EAAE;YACvC,gBAAgB,GAAG,+BAA+B,CAAC;SACtD;aAAM;YACH,gBAAgB,GAAG,sBAAsB,CAAC;SAC7C;KACJ;IAED,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE;YACN,aAAa,CAAC,YAAY,CAAC,IAAI,mBAAS,EAAE,CAAC,CAAC;YAC5C,OAAO;SACV;QAED,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;YAChE,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;gBAC3E,IAAI,CAAC,SAAS,EAAE;oBACZ,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBAChF,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClB,eAAe,CAAC,IAAI,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAG,EAAE;YACR,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,GAAG,EAAE;YACL,gBAAgB,EAAE,CAAC;SACtB;IACL,CAAC,EAAE,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC,CAAC;IAE1B,iBAAS,CAAC,GAAG,EAAE;;QACX,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAAE,OAAO;QAEzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,aAAa,GAAe,EAAE,CAAC;QACnC,IAAI,iBAAiB,GAAe,EAAE,CAAC;QAEvC,IAAI,8BAAoB,CAAC,QAAQ,EAAE,EAAE;YACjC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACvC,IAAI,OAAA,WAAW,CAAC,SAAS,0CAAE,WAAW,qBAAO,aAAa,CAAC,iBAAiB,0CAAE,YAAY,4CAAI,WAAW,GAAE,EAAE;oBACzG,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;iBAC1C;qBAAM;oBACH,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBACnC;aACJ;YAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;aACvC;SACJ;aAAM;YACH,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnC;QAED,IAAI;YACA,MAAM,MAAM,GAAqB;gBAC7B,WAAW,QAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,4CAAI,MAAM,CAAC,UAAU,CAAC;gBACpD,YAAY,QAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,4CAAI,MAAM,CAAC,UAAU,CAAC;gBACnD,SAAS,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE;gBAC3B,WAAW,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,EAAE;gBAC/B,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,SAAS;aACvB,CAAC;YAEF,MAAM,UAAU,SACZ,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;;gBAChB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAE5B,MAAM,SAAS,GAAmB;oBAC9B,IAAI;oBACJ,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;oBAClC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;oBACpC,QAAQ,EAAE,GAAG,CAAC,eAAe;oBAE7B,KAAK,cACD,IAAI,CAAC,QAAQ,EAAE,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBAC1B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;wBAC5B,OAAO;4BACH,IAAI;4BACJ,IAAI;4BAEJ,KAAK,EAAE;gCACH,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;gCACpC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;gCAChC,QAAQ,EAAE,GAAG,CAAC,eAAe;6BAChC;yBACJ,CAAC;oBACN,CAAC,oCAAK,EAAE;iBACf,CAAC;gBAEF,OAAO,SAAS,CAAC;YACrB,CAAC,oCAAK,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,IAAI,yCAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1D,KAAK,CAAC,KAAK,CAAC,CAAC;SAChB;QAAC,OAAO,EAAE,EAAE;YACT,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACpB;QAED,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,iBAAS,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE;YACf,4DAA4D;YAC5D,6BAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SACjD;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,CAAC;IAE3B,MAAM,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA8D,EAAE,EAAE;QAC5G,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,EAAE;YACtC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,YAAY,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE;YAChE,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,2BAAe,CAAC,YAAY,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;YAClG,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAED,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,SAAsB,EAAE,OAAoB,EAAE,EAAE;QACtE,IAAI,SAAS,IAAI,OAAO,EAAE;YACtB,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAExB,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC;IAEF,IAAI,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,GAAE,IAAI,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,GAAE,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;KAC/C;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,MAAM,gBAAgB,GAAG,GAAS,EAAE;QAChC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,CAAC,MAAM,oBAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACxI,UAAU,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAA,CAAC;IACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CAAC,KAAU,EAAE,EAAE;QAChD,kBAAkB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,8BAA8B,GAAG,CAAC,KAAU,EAAE,EAAE;QAClD,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;QACrC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,UAAU,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QAE5G,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACvB,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAEnC,IAAI,IAAI,EAAE;gBACN,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC9B;SACJ;IACL,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,CAAC,IAAc,EAAE,EAAE;QACpD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,aAAa,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACnC,mBAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAE5G,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO;aACF,aAAa,CAAC;YACX,IAAI,EAAE,0BAAgB,CAAC,OAAO,EAAE;SACnC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;;YACP,iCAAiC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,mCAAI,YAAY,IAAI,0BAAgB,CAAC,UAAU,EAAE,YAAY,OAAO,CAAC,mBAAmB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5I,CAAC,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAC/B,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,YAAY,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC;QAClC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACjC,mBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,EAAE,2BAAe,CAAC,MAAM,EAAE,2BAAe,CAAC,KAAK,CAAC,CAAC;QACxG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,EAAE;QACjC,eAAe,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,YAAY,SAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,mCAAI,CAAC,CAAC;IAE9C,OAAO,eAAO,CACV,GAAG,EAAE;;QAAC,OAAA,CACF;YACI,6BAAK,SAAS,EAAE,yBAAyB,SAAS,EAAE;gBAChD,6BAAK,SAAS,EAAE,8DAA8D,EAAE,GAAG,EAAE,GAAG;oBACpF,6BAAK,SAAS,EAAC,2DAA2D;wBACtE,oBAAC,4BAAkB,IACf,SAAS,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,IAC5B,mBAAmB,EAAE,gBAAgB,EACrC,SAAS,EAAC,4DAA4D;4BAEtE,oBAAC,mBAAS,IAAC,KAAK,EAAC,qDAAqD,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;gCAC9H,6BAAK,SAAS,EAAC,+EAA+E;oCAC1F,oBAAC,cAAI,IAAC,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,IAAG,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAE,CAAC,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,GAAE;wCAChI,kCAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,IAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,cAAc,CAAQ,CACzE;oCACP,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,WAAW,GAAI;oCACpC,oBAAC,cAAI,IACD,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,IAAG,CAAC,CAAC,aAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,EAC9D,SAAS,EAAC,qCAAqC,EAC/C,IAAI,EAAE,CAAC,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,GAAE;wCAE/B,kCAAO,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,IAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAQ,CAC/E,CACL,CACE,CACK;wBACrB,oBAAC,mBAAS,IAAC,KAAK,EAAC,yBAAyB,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;4BAClG,6BAAK,SAAS,EAAC,mEAAmE;gCAC9E,oBAAC,gBAAM,IACH,QAAQ,EAAE,4BAA4B,EACtC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,IAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;wCACzG,KAAK,IAAI,CAAC,CAAC;wCACX,OAAO;4CACH,IAAI,EAAE,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;4CAChF,KAAK;yCACR,CAAC;oCACN,CAAC,CAAC,GACJ,CACA,CACE;wBACZ,oBAAC,mBAAS,IAAC,KAAK,EAAC,2BAA2B,EAAC,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;4BACpG,6BAAK,SAAS,EAAC,mEAAmE;gCAC9E,oBAAC,gBAAM,IACH,QAAQ,EAAE,8BAA8B,EACxC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,IAAG,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,KAAa,EAAE,EAAE;wCACzG,OAAO;4CACH,IAAI,EAAE,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;4CAChF,KAAK;yCACR,CAAC;oCACN,CAAC,CAAC,GACJ,CACA,CACE;wBACZ,oBAAC,mBAAS,IAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,aAAa;4BAC3F,6BAAK,SAAS,EAAC,+CAA+C,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB;gCAC3G,6BAAK,SAAS,EAAC,8DAA8D;oCACzE,oBAAC,cAAI,IAAC,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,IAAG,CAAC,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,GAAG,CAAC,CAAC,aAAK,CAAC,IAAI,IACxH,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,IAAG,CAAC,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,YAAY,GAAG,CAAC,CAAC,YAAY,CACtD;oCACP,oBAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ,GAAI,CACtD,CACJ,CACE;wBACZ,oBAAC,cAAO,IACJ,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,6BAAmB,CAAC,eAAe,EAC9C,QAAQ,EAAE,WAAW,CAAC,OAAO,EAC7B,iBAAiB,EAAE,IAAI,EACvB,YAAY,EAAE;gCACV,QAAQ,EAAE,QAAQ;gCAClB,UAAU,EAAE,QAAQ;6BACvB,EACD,eAAe,EAAE;gCACb,QAAQ,EAAE,KAAK;gCACf,UAAU,EAAE,MAAM;6BACrB,EACD,OAAO,EAAE,mBAAmB;4BAE5B,6BAAK,SAAS,EAAC,cAAc;gCACzB;oCACI,oBAAC,wBAAc,IACX,KAAK,QAAE,aAAa,CAAC,iBAAiB,0CAAE,YAAY,IACpD,QAAQ,EAAE,eAAe,EACzB,KAAK,EACD,OAAA,aAAa,CAAC,iBAAiB,0CAAE,kBAAkB,QAAO,KAAK;4CAC3D,CAAC,CAAC,OAAA,aAAa,CAAC,iBAAiB,0CAAE,kBAAkB,QAAO,OAAO;4CACnE,CAAC,CAAC,IAAI,GAEhB,CACA;gCAEN,6BAAK,SAAS,EAAC,0DAA0D;oCACrE,oBAAC,kBAAQ,IAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAC,OAAO,EAAC,OAAO,EAAE,uBAAuB,aAE1D,CACT,CACJ,CACA,CACR;oBACN,6BAAK,SAAS,EAAE,kCAAkC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBACxE,oBAAC,kBAAQ,IAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,kBAEnG,CACT,CACJ;gBACN,6BAAK,SAAS,EAAC,kBAAkB,IAC5B,CAAC,SAAS,CAAC,CAAC,CAAC,CACV,oBAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,SAAS;oBAC5B;wBACI,oBAAC,mDAAwB,OAAG;wBAC3B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB,oBAAC,mBAAS,IACN,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EACvB,cAAc,EAAE,qBAAqB,EACrC,qBAAqB,EAAE,4BAA4B,GACrD,CACL,CAAC,CAAC,CAAC,CACA,oBAAC,uBAAa,OAAG,CACpB,CACF,CACU,CACpB,CAAC,CAAC,CAAC,CACA,oBAAC,qBAAW,OAAG,CAClB,CACC,CACJ,CACP,CACN,CAAA;KAAA,EACD,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAC1F,CAAC;AACN,CAAC;AAnXD,8CAmXC;AAEY,QAAA,iCAAiC,GAAG,CAAC,SAAkB,EAAE,MAA4B,EAAE,EAAE;IAClG,kBAAM,CACF,oBAAC,sCAA2B,IAAC,MAAM,EAAE,MAAM;QACvC,oBAAC,6BAAU;YACP,oBAAC,gDAA0B;gBACvB,oBAAC,kCAAmB;oBAChB,oBAAC,gCAAqB,IAAC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO;wBAC5D,oBAAC,+BAAoB;4BACjB,oBAAC,2BAA2B,IAAC,MAAM,EAAE,MAAM,GAAI,CAC5B,CACH,CACN,CACG,CACpB,CACa,EAC9B,SAAS,CACZ,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\nimport { render } from 'react-dom';\n\nimport API from '../../api/BookingAPI';\nimport * as dayjs from 'dayjs';\n\nimport BEButton from '../../components/generic/BEButton';\nimport FloatingDatePicker from '../../components/generic/date/FloatingDatePicker';\nimport BETooltip from '../../components/generic/BETooltip';\nimport StringHelper from '../../util/StringHelper';\nimport { Translation } from '../../translations/Translation';\nimport { useTranslation } from 'react-i18next';\nimport Icon, { IconType } from '../../components/generic/Icon';\nimport Text, { TextType } from '../../components/generic/Text';\nimport { Color } from '../../util/Color';\nimport DataLayer, { InteractionType, InteractionStep } from '../../util/DataLayer';\nimport RoomRates from '../../components/steps/room/roomDetails/roomRates/RoomRates';\nimport LargeLoader from '../../components/generic/loader/LargeLoader';\nimport { HashRouter } from 'react-router-dom';\nimport type { InlineRoomMiniEngine } from './InlineRoomMiniEngine';\n\nimport { NotificationContextWrapper } from '../../contexts/NotificationContext';\nimport { ErrorContextWrapper } from '../../contexts/ErrorContext';\nimport AutoAutoHeight from '../../animations/AutoAutoHeight';\nimport RoomstayThemeEngine from '../../providers/RoomstayThemeEngine';\nimport RatesNotFound from '../../components/steps/room/RatesNotFound';\nimport { useContext, useState, useEffect, useMemo } from 'react';\nimport useMeasure from 'react-use-measure';\nimport { RoomRate } from '../../models/Room/RoomRate';\nimport { BookNowPayLaterInfoBlock } from '../../components/generic/BookNowPayLaterInfoBlock';\nimport StepConfirmation from '../../pages/steps/StepConfirmation/StepConfirmation';\n\nimport { Popover } from '@material-ui/core';\nimport PromoCodeInput from '../../components/generic/PromoCodeInput';\nimport Select from '../../components/generic/Select';\nimport { Room } from '../../models/Room/Room';\n\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\n\nimport BasketRow from '../../models/BasketRow';\n\nimport { BasketContext, BasketContextWrapper, BookingEngineContextWrapper, CompanyContext, CompanyContextWrapper } from '@frontend/contexts';\nimport FeaturedPromoFeature from 'providers/feature/FeaturedPromoFeature';\nimport { SearchParameters } from 'models/SearchParameters';\nimport { RoomListSearch } from 'models/RoomListSearch';\nimport { RoomListSearchEvent } from 'events/actions/RoomListSearchEvent';\n\nexport interface InlineRoomMiniEngineElementProps {\n engine: InlineRoomMiniEngine;\n}\n\nexport default function InlineRoomMiniEngineElement(props: InlineRoomMiniEngineElementProps) {\n const { hotel } = useCurrentHotel();\n\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n\n const row = basketContext.currentBasketRows[0];\n const [isLoading, setLoading] = useState(true);\n const [ranFirstLoad, setRanFirstLoad] = useState(false);\n const [rooms, setRooms] = useState<Room[]>([]);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n const [featuredRates, setFeaturedRates] = useState<RoomRate[]>([]);\n const [standardRates, setStandardRates] = useState<RoomRate[]>([]);\n\n const [promoCode, setPromoCode] = useState(row?.getPromoCode());\n const { t } = useTranslation();\n\n const [ref, bounds] = useMeasure();\n const thisElement = React.useRef();\n\n const { raise } = useEvent();\n\n let promoCodeTooltip = '';\n\n if (row?.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? 'Promo Code is being checked... please wait.' : 'Set a Promo Code for a possible offer!';\n } else {\n if (row?.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = 'Successful promo code entered';\n } else {\n promoCodeTooltip = 'Error code not valid';\n }\n }\n\n useEffect(() => {\n let cancelled = false;\n\n if (!row) {\n basketContext.addBasketRow(new BasketRow());\n return;\n }\n\n if (row && row.getStartDate() && row.getEndDate() && !ranFirstLoad) {\n API.Availability.fetchAvailabilityData(row, hotel.hotelID).then((hotelRooms) => {\n if (!cancelled) {\n setRooms(hotelRooms.filter((room) => room.code === props.engine.getRoomCode()));\n setLoading(false);\n setRanFirstLoad(true);\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [row]);\n\n useEffect(() => {\n if (row) {\n findRoomsOnClick();\n }\n }, [row?.getPromoCode()]);\n\n useEffect(() => {\n if (!(rooms && rooms.length > 0)) return;\n\n const room = rooms[0];\n\n let nonPromoRates: RoomRate[] = [];\n let toSetFeaturedRate: RoomRate[] = [];\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n toSetFeaturedRate.unshift(currentRate);\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate.length > 0) {\n setFeaturedRates(toSetFeaturedRate);\n }\n } else {\n nonPromoRates = room.getRates();\n }\n\n try {\n const search: SearchParameters = {\n checkInTime: row?.getStartDate()?.format('YYYY-M-D'),\n checkOutTime: row?.getEndDate()?.format('YYYY-M-D'),\n numAdults: row?.getAdults(),\n numChildren: row?.getChildren(),\n numRooms: 1,\n promoCode: promoCode,\n };\n\n const eventRooms: RoomListSearch[] =\n rooms?.map((room) => {\n const { name, code } = room;\n\n const foundRoom: RoomListSearch = {\n name,\n code,\n lowestPrice: room.getLowestPrice(),\n highestPrice: room.getHighestPrice(),\n currency: ccx.currentCurrency,\n\n rates:\n room.getRates()?.map((rate) => {\n const { name, code } = rate;\n return {\n name,\n code,\n\n price: {\n averagePrice: rate.getAveragePrice(),\n totalPrice: rate.getTotalPrice(),\n currency: ccx.currentCurrency,\n },\n };\n }) ?? [],\n };\n\n return foundRoom;\n }) ?? [];\n\n const event = new RoomListSearchEvent(search, eventRooms);\n raise(event);\n } catch (ex) {\n console.warn(ex);\n }\n\n setStandardRates(nonPromoRates);\n }, [rooms]);\n\n useEffect(() => {\n if (hotel?.colors) {\n // Do this manually as Guide Step manages this for Fullpage.\n RoomstayThemeEngine.changeTheme(hotel.colors);\n }\n }, [hotel, hotel?.colors]);\n\n const updatePeopleValues = ({ adults, children }: { adults?: number; children?: number; promoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n\n basketContext.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n basketContext.updateBasketRow(row, false);\n }\n };\n\n if (!row?.getArrivalDate() && !row?.getDepartureDate()) {\n const today = Date.now();\n row?.setStartDate(dayjs(today));\n row?.setEndDate(dayjs(today).add(1, 'day'));\n }\n\n const isCompact = bounds.width < 1000 ? '--compact' : '';\n\n const findRoomsOnClick = async () => {\n setLoading(true);\n setRooms((await API.Availability.fetchAvailabilityData(row, hotel.hotelID)).filter((room) => room.code === props.engine.getRoomCode()));\n setLoading(false);\n };\n const getButtonLabelHandler = () => {\n return 'Book Now';\n };\n\n const updateNumberOfAdultsOnChange = (value: any) => {\n updatePeopleValues({ adults: value });\n };\n const updateNumberOfChildrenOnChange = (value: any) => {\n updatePeopleValues({ children: value });\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code updated', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (row) {\n row.setPromoCode(code);\n basketContext.updateBasketRow(row);\n\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const onAddToBasketOverrideHandler = (rate: RoomRate) => {\n row.setRate(rate);\n basketContext.updateBasketRow(row);\n DataLayer.instance.sendRoomRateAddToCart(rate, row.getNumberOfDays(), row.getStartDate(), row.getEndDate());\n\n const session = props.engine.getSessionProvider();\n session\n .updateSession({\n step: StepConfirmation.getName(), // TODO:\n })\n .then(() => {\n // TODO: Remove this URL coupling\n window.open(`${hotel?.checkoutUrl ?? '/checkout/'}#${StepConfirmation.getStepUrl()}?session=${session.getCurrentSessionID()}`, '_self');\n });\n };\n const openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setPromoCode(row?.getPromoCode());\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const maxOccupancy = hotel?.maxOccupancy ?? 1;\n\n return useMemo(\n () => (\n <>\n <div className={`room-builder-progress ${isCompact}`}>\n <div className={`u-flex w-100 flex-wrap room-builder-progress--item --current`} ref={ref}>\n <div className=\"u-flex u-flex-align-center flex-wrap flex-row u-w-100@xl-\">\n <FloatingDatePicker\n startDate={row?.getStartDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- room-builder-progress--value u-marg-left--none\"\n >\n <BETooltip title=\"Select Arrival and departure dates by clicking here\" arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={row?.getArrivalDate() ? Color.Accent : Color.Graphite} className=\"u-mw-75 u-align-center\" bold={!!row?.getArrivalDate()}>\n <span>{row?.getArrivalDate() ? row.getArrivalDate() : 'Arrival Date'}</span>\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text\n color={row?.getDepartureDate() ? Color.Accent : Color.Graphite}\n className=\"u-marg-right u-mw-75 u-align-center\"\n bold={!!row?.getDepartureDate()}\n >\n <span>{row?.getDepartureDate() ? row.getDepartureDate() : 'Departure Date'}</span>\n </Text>\n </div>\n </BETooltip>\n </FloatingDatePicker>\n <BETooltip title=\"Update number of adults\" arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select\n onChange={updateNumberOfAdultsOnChange}\n items={[...Array(maxOccupancy - (row?.getChildren() ? row.getChildren() : 0))].map((v: any, value: number) => {\n value += 1;\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Adult, t),\n value,\n };\n })}\n />\n </div>\n </BETooltip>\n <BETooltip title=\"Update number of children\" arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"room-builder-progress--value --mw-l u-flex justify-content-center\">\n <Select\n onChange={updateNumberOfChildrenOnChange}\n items={[...Array(maxOccupancy + 1 - (row?.getAdults() ? row.getAdults() : 0))].map((v: any, value: number) => {\n return {\n text: StringHelper.pluralWithDictAndCount(value, Translation.Step.Date.Child, t),\n value,\n };\n })}\n />\n </div>\n </BETooltip>\n <BETooltip title={promoCodeTooltip} arrow={true} enterDelay={500} wrapperClasses={'u-w-100@xl-'}>\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={row?.getPromoCode() ? row?.getPromoCodeColour() : Color.Navy}>\n {row?.getPromoCode() ? row?.getPromoCode() : 'Promo Code'}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </BETooltip>\n <Popover\n open={isPromoModalOpen}\n container={RoomstayThemeEngine.EngineContainer}\n anchorEl={thisElement.current}\n disableScrollLock={true}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n onClose={setPromoCodeOnClose}\n >\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={basketContext.selectedBasketRow?.getPromoCode()}\n onChange={changePromoCode}\n valid={\n basketContext.selectedBasketRow?.getPromoCodeStatus() !== 'new'\n ? basketContext.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : null\n }\n />\n </div>\n\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText={true} size=\"small\" onClick={cancelPromoPopupOnClick}>\n Cancel\n </BEButton>\n </div>\n </div>\n </Popover>\n </div>\n <div className={`u-flex flex-xl-nowrap flex-row ${isCompact ? 'w-100' : ''}`}>\n <BEButton filled={true} primary={true} isLoading={isLoading} wide={isCompact !== ''} onClick={findRoomsOnClick}>\n Check Rates\n </BEButton>\n </div>\n </div>\n <div className=\"u-border-rounded\">\n {!isLoading ? (\n <AutoAutoHeight open={!isLoading}>\n <>\n <BookNowPayLaterInfoBlock />\n {rooms.length > 0 ? (\n <RoomRates\n featuredRates={featuredRates}\n rates={standardRates}\n roomCode={rooms[0].code}\n getButtonLabel={getButtonLabelHandler}\n onAddToBasketOverride={onAddToBasketOverrideHandler}\n />\n ) : (\n <RatesNotFound />\n )}\n </>\n </AutoAutoHeight>\n ) : (\n <LargeLoader />\n )}\n </div>\n </div>\n </>\n ),\n [isCompact, isLoading, rooms, basketContext.currentBasketRows, isPromoModalOpen, hotel]\n );\n}\n\nexport const renderInlineRoomMiniEngineElement = (container: Element, engine: InlineRoomMiniEngine) => {\n render(\n <BookingEngineContextWrapper engine={engine}>\n <HashRouter>\n <NotificationContextWrapper>\n <ErrorContextWrapper>\n <CompanyContextWrapper configCompany={engine.getConfig().company}>\n <BasketContextWrapper>\n <InlineRoomMiniEngineElement engine={engine} />\n </BasketContextWrapper>\n </CompanyContextWrapper>\n </ErrorContextWrapper>\n </NotificationContextWrapper>\n </HashRouter>\n </BookingEngineContextWrapper>,\n container\n );\n};\n"]}