@roomstay/frontend 2.3.29 → 2.3.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/975.bundle.js +1 -1
  2. package/dist/main.bundle.js +1 -1
  3. package/dist/src/components/steps/room/roomDetails/RoomDetails.js +2 -2
  4. package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
  5. package/dist/src/models/Client/Hotel/Hotel.d.ts +7 -3
  6. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  7. package/dist/src/pages/steps/Step.d.ts +3 -3
  8. package/dist/src/pages/steps/Step.js.map +1 -1
  9. package/dist/test.bundle.js +1 -1
  10. package/package.json +1 -1
  11. package/dist/tests/offline/RoomstayBestRateAlert.d.ts +0 -1
  12. package/dist/tests/offline/RoomstayBestRateAlert.js +0 -48
  13. package/dist/tests/offline/RoomstayBestRateAlert.js.map +0 -1
  14. package/dist/tests/offline/entry/OfflineEngineWrapper.d.ts +0 -1
  15. package/dist/tests/offline/entry/OfflineEngineWrapper.js +0 -102
  16. package/dist/tests/offline/entry/OfflineEngineWrapper.js.map +0 -1
  17. package/dist/tests/offline/entry/components/RoomstayDemoNavbar/index.d.ts +0 -3
  18. package/dist/tests/offline/entry/components/RoomstayDemoNavbar/index.js +0 -17
  19. package/dist/tests/offline/entry/components/RoomstayDemoNavbar/index.js.map +0 -1
  20. package/dist/tests/offline/entry/components/TestPicker.d.ts +0 -1
  21. package/dist/tests/offline/entry/components/TestPicker.js +0 -303
  22. package/dist/tests/offline/entry/components/TestPicker.js.map +0 -1
  23. package/dist/tests/offline/entry/context/EngineContext.d.ts +0 -9
  24. package/dist/tests/offline/entry/context/EngineContext.js +0 -37
  25. package/dist/tests/offline/entry/context/EngineContext.js.map +0 -1
  26. package/dist/tests/offline/entry/engineRenderer/memberPortalWidgetRenderer.d.ts +0 -1
  27. package/dist/tests/offline/entry/engineRenderer/memberPortalWidgetRenderer.js +0 -68
  28. package/dist/tests/offline/entry/engineRenderer/memberPortalWidgetRenderer.js.map +0 -1
  29. package/dist/tests/offline/entry/offline-entry.d.ts +0 -1
  30. package/dist/tests/offline/entry/offline-entry.js +0 -50
  31. package/dist/tests/offline/entry/offline-entry.js.map +0 -1
  32. package/dist/tests/offline/entry/pages/BookingWizard/index.d.ts +0 -4
  33. package/dist/tests/offline/entry/pages/BookingWizard/index.js +0 -73
  34. package/dist/tests/offline/entry/pages/BookingWizard/index.js.map +0 -1
  35. package/dist/tests/offline/entry/pages/RoomRate/index.d.ts +0 -4
  36. package/dist/tests/offline/entry/pages/RoomRate/index.js +0 -93
  37. package/dist/tests/offline/entry/pages/RoomRate/index.js.map +0 -1
@@ -142,10 +142,10 @@ function RoomDetails(props) {
142
142
  react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: (trimmedDescription === null || trimmedDescription === void 0 ? void 0 : trimmedDescription.replace(/<br(\/|)>/g, '')) || '' } })))),
143
143
  react_1.default.createElement("div", { className: "row" },
144
144
  react_1.default.createElement("div", { className: "col-md-6 u-flex u-marg-bottom@m- flex-column align-items-start" },
145
- react_1.default.createElement("div", { className: "room-details--content-perks u-marg-bottom@m-" },
145
+ !(hotel === null || hotel === void 0 ? void 0 : hotel.perksHideOnRoomRow) && (react_1.default.createElement("div", { className: "room-details--content-perks u-marg-bottom@m-" },
146
146
  isMobile && (react_1.default.createElement("div", { className: "u-marg-bottom" },
147
147
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, bold: true, color: Color_1.Color.Accent }, t(Translation_1.Translation.Misc.Perks.AndYouGetAll)))),
148
- react_1.default.createElement(RoomDetailsPerkBlock_1.RoomDetailsPerkBlock, { perks: perks })),
148
+ react_1.default.createElement(RoomDetailsPerkBlock_1.RoomDetailsPerkBlock, { perks: perks }))),
149
149
  react_1.default.createElement(BEButton_1.default, { icon: Icon_1.IconType.ArrowRight2, isText: true, primary: true, size: "tiny", iconPosition: "right", onClick: moreDetailsOnClick }, t(Translation_1.Translation.Step.Room.RoomInfo.MoreDetails))),
150
150
  react_1.default.createElement("div", { className: "col-md-6 u-flex justify-content-end flex-column align-items-start align-items-md-end" },
151
151
  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)),
@@ -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 { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomDetailsBedsBlock } from '@/components/steps/room/roomDetails/RoomDetailsBedsBlock';\nimport { RoomDetailsPerkBlock } from '@/components/steps/room/roomDetails/RoomDetailsPerkBlock';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport RoomModal from '@/components/steps/room/RoomModal';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate, RoomRatePriceInclusion } from '@/models/Room/RoomRate';\nimport CurrencyProvider from '@/providers/CurrencyProvider';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color, lightOrDark } from '@/util/Color';\nimport * as currencyHelper from '@/util/CurrencyHelper';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\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 | number | null>(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 const toSetFeaturedRate: RoomRate[] = [];\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n toSetFeaturedRate.unshift(currentRate);\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate.length > 0) {\n 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 const convertCurrencyPrice = (value: number) => Math.round(currencyHelper.convertPrice(value, true, ccx.currentCurrency, hotel?.defaultCurrency as string));\n\n const { value: price, isLoading } = useCurrency({\n hideDecimals: true,\n children: lowestPrice,\n });\n\n const selectedRow = basketContext.selectedBasketRow;\n\n const { hasPricePreview } = usePlanpay();\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>{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 color={Color.Accent}>\n {t(Translation.Misc.Perks.AndYouGetAll)}\n </Text>\n </div>\n )}\n <RoomDetailsPerkBlock perks={perks as HotelPerk[]} />\n </div>\n <BEButton icon={IconType.ArrowRight2} isText primary 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>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-row align-items-end\">\n <Headline size={currencySize} bold>\n <Currency hideDecimals>{lowestPrice}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <Text type={TextType.Small} color={Color.Grey} inline 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>\n <div className=\"u-flex-direction-column u-flex u-flex-align-flex-end u-flex-align-flex-start@m- u-w-100@m-\">\n {!isLoading && hasPricePreview ? (\n <div className=\"u-marg-top--light\">\n <PlanpayPrice price={price} checkin={(selectedRow?.getStartDate() || basketContext.endDate).format('YYYY-MM-DD')} currency={ccx.currentCurrency} />\n </div>\n ) : null}\n <BEButton\n className=\"u-marg-top--light\"\n name=\"ViewRatesNowButton\"\n primary\n primaryActive={!!ratesOpen}\n filled\n stopIconAnimation\n icon={ratesOpen ? IconType.ArrowUp2 : IconType.ArrowDown2}\n iconPosition=\"right\"\n onClick={sendRoomClickOnClick}\n wide={context.screenSize <= ScreenSize.Large}\n textColor={ratesOpen ? (lightOrDark(hotel?.colors.accent3.slice(1) as string) === 'light' ? Color.Navy : Color.White) : undefined}\n >\n {ratesOpen ? t(Translation.Step.Room.RoomInfo.CloseRates) : t(Translation.Step.Room.RoomInfo.ViewRates)}\n </BEButton>\n </div>\n </div>\n </div>\n <AutoAutoHeight open={!!ratesOpen}>\n <RoomRates roomCode={room.code as string} 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: convertCurrencyPrice(rate.getAveragePrice(true)),\n basePrice: convertCurrencyPrice(rate.getTotalPrice(true)),\n totalPrice: convertCurrencyPrice(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 { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomDetailsBedsBlock } from '@/components/steps/room/roomDetails/RoomDetailsBedsBlock';\nimport { RoomDetailsPerkBlock } from '@/components/steps/room/roomDetails/RoomDetailsPerkBlock';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport RoomModal from '@/components/steps/room/RoomModal';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate, RoomRatePriceInclusion } from '@/models/Room/RoomRate';\nimport CurrencyProvider from '@/providers/CurrencyProvider';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport { ImageSize } from '@/providers/ImageProvider';\nimport { Color, lightOrDark } from '@/util/Color';\nimport * as currencyHelper from '@/util/CurrencyHelper';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\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 | number | null>(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 const toSetFeaturedRate: RoomRate[] = [];\n\n if (FeaturedPromoFeature.isActive()) {\n for (const currentRate of room.getRates()) {\n if (currentRate.promoCode?.toLowerCase() === basketContext.selectedBasketRow?.getPromoCode()?.toLowerCase()) {\n toSetFeaturedRate.unshift(currentRate);\n } else {\n nonPromoRates.push(currentRate);\n }\n }\n\n if (toSetFeaturedRate.length > 0) {\n 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 const convertCurrencyPrice = (value: number) => Math.round(currencyHelper.convertPrice(value, true, ccx.currentCurrency, hotel?.defaultCurrency as string));\n\n const { value: price, isLoading } = useCurrency({\n hideDecimals: true,\n children: lowestPrice,\n });\n\n const selectedRow = basketContext.selectedBasketRow;\n\n const { hasPricePreview } = usePlanpay();\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>{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 {!hotel?.perksHideOnRoomRow && (\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 color={Color.Accent}>\n {t(Translation.Misc.Perks.AndYouGetAll)}\n </Text>\n </div>\n )}\n <RoomDetailsPerkBlock perks={perks as HotelPerk[]} />\n </div>\n )}\n <BEButton icon={IconType.ArrowRight2} isText primary 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>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-row align-items-end\">\n <Headline size={currencySize} bold>\n <Currency hideDecimals>{lowestPrice}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <Text type={TextType.Small} color={Color.Grey} inline 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>\n <div className=\"u-flex-direction-column u-flex u-flex-align-flex-end u-flex-align-flex-start@m- u-w-100@m-\">\n {!isLoading && hasPricePreview ? (\n <div className=\"u-marg-top--light\">\n <PlanpayPrice price={price} checkin={(selectedRow?.getStartDate() || basketContext.endDate).format('YYYY-MM-DD')} currency={ccx.currentCurrency} />\n </div>\n ) : null}\n <BEButton\n className=\"u-marg-top--light\"\n name=\"ViewRatesNowButton\"\n primary\n primaryActive={!!ratesOpen}\n filled\n stopIconAnimation\n icon={ratesOpen ? IconType.ArrowUp2 : IconType.ArrowDown2}\n iconPosition=\"right\"\n onClick={sendRoomClickOnClick}\n wide={context.screenSize <= ScreenSize.Large}\n textColor={ratesOpen ? (lightOrDark(hotel?.colors.accent3.slice(1) as string) === 'light' ? Color.Navy : Color.White) : undefined}\n >\n {ratesOpen ? t(Translation.Step.Room.RoomInfo.CloseRates) : t(Translation.Step.Room.RoomInfo.ViewRates)}\n </BEButton>\n </div>\n </div>\n </div>\n <AutoAutoHeight open={!!ratesOpen}>\n <RoomRates roomCode={room.code as string} 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: convertCurrencyPrice(rate.getAveragePrice(true)),\n basePrice: convertCurrencyPrice(rate.getTotalPrice(true)),\n totalPrice: convertCurrencyPrice(rate.getAveragePrice()),\n priceCurrency: ccx.currentCurrency,\n unitText: 'Nightly',\n },\n })}\n </script>\n );\n })}\n </div>\n );\n}\n"]}
@@ -67,6 +67,9 @@ export interface AdminHotelConfig {
67
67
  transportDistances?: TransportDistances;
68
68
  roomGroups: HotelRoomGroupsDTO;
69
69
  }
70
+ /**
71
+ * This config comes from hard static local file
72
+ */
70
73
  export interface ClientHotelConfig {
71
74
  providerHotelID: string;
72
75
  shortName?: string;
@@ -81,13 +84,14 @@ export interface ClientHotelConfig {
81
84
  memberOnlySignupInputs?: MemberOnlyModalInputs;
82
85
  googleMapsImage?: string;
83
86
  /**
84
- * Wether to show the Breakfast / Lunch / Dinner included
87
+ * Whether to show the Breakfast / Lunch / Dinner included
85
88
  */
86
89
  showMealPill?: boolean;
90
+ perks: HotelPerk[];
87
91
  /**
88
- * Distances for the Summary, and Hotel Info pages
92
+ * Hide perks on room row
89
93
  */
90
- perks: HotelPerk[];
94
+ perksHideOnRoomRow: boolean;
91
95
  /** @deprecated Use the vgs.vaultNames.standard property now */
92
96
  vgsVaultName?: string;
93
97
  vgs?: {
@@ -1 +1 @@
1
- {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAgBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport { EBookingPaymentMethod, IHotelColorScheme } from '@roomstay/core';\nimport type { ReactChild } from 'react';\n\nimport type { MemberOnlyModalInputs } from '@/components/steps/room/MemberSignInModal/MemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { Language } from '@/providers/LanguageProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n\n roomGroups: HotelRoomGroupsDTO;\n}\n\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlySignupInputs?: MemberOnlyModalInputs;\n googleMapsImage?: string;\n /**\n * Wether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n /**\n * Distances for the Summary, and Hotel Info pages\n */\n perks: HotelPerk[];\n\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
1
+ {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAgBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import type { EnvironmentName } from '@planpay/web';\nimport { EBookingPaymentMethod, IHotelColorScheme } from '@roomstay/core';\nimport type { ReactChild } from 'react';\n\nimport type { MemberOnlyModalInputs } from '@/components/steps/room/MemberSignInModal/MemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport type { Language } from '@/providers/LanguageProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlySignupInputs?: MemberOnlyModalInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks: HotelPerk[];\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
@@ -1,12 +1,12 @@
1
1
  import { IHotelColorScheme } from '@roomstay/core';
2
- import { ReactFragment } from 'react';
2
+ import { FC } from 'react';
3
3
  import type { Company } from '../../models/Client/Hotel/Company';
4
4
  import type { Hotel } from '../../models/Client/Hotel/Hotel';
5
5
  import StepValidator from './StepValidator';
6
6
  export default abstract class Step {
7
7
  protected name: string;
8
8
  protected showOnNavigation: boolean;
9
- constructor(name: string);
9
+ protected constructor(name: string);
10
10
  getName(): string;
11
11
  getStepUrl(): string;
12
12
  getStepTranslation(): string | null;
@@ -16,7 +16,7 @@ export default abstract class Step {
16
16
  * to automatically set theme when step is loaded
17
17
  */
18
18
  getColorProfile(company: Company, hotel?: Hotel): IHotelColorScheme | undefined;
19
- abstract getComponent(): ReactFragment | JSX.Element;
19
+ abstract getComponent(): FC;
20
20
  abstract getValidator(): StepValidator;
21
21
  protected getUrlFragment(): string;
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Step.js","sourceRoot":"/","sources":["src/pages/steps/Step.ts"],"names":[],"mappings":";;AAOA,MAA8B,IAAI;IAI9B,YAAmB,IAAY;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,UAAU;QACb,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;IAClD,CAAC;IAEM,kBAAkB;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,OAAgB,EAAE,KAAa;QAClD,OAAO;IACX,CAAC;IAMS,cAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;CACJ;AAxCD,uBAwCC","sourcesContent":["import { IHotelColorScheme } from '@roomstay/core';\nimport { ReactFragment } from 'react';\n\nimport type { Company } from '@/models/Client/Hotel/Company';\nimport type { Hotel } from '@/models/Client/Hotel/Hotel';\nimport StepValidator from '@/pages/steps/StepValidator';\n\nexport default abstract class Step {\n protected name: string;\n protected showOnNavigation: boolean;\n\n public constructor(name: string) {\n this.name = name;\n this.showOnNavigation = true;\n }\n\n public getName() {\n return this.name;\n }\n\n public getStepUrl() {\n return `${'/step/'}${this.getUrlFragment()}/`;\n }\n\n public getStepTranslation(): string | null {\n return null;\n }\n\n public shouldShowOnNavigation() {\n return this.showOnNavigation;\n }\n\n /**\n * Method gets called when Step is activated. Return a @type ColorProfile\n * to automatically set theme when step is loaded\n */\n public getColorProfile(company: Company, hotel?: Hotel): IHotelColorScheme | undefined {\n return;\n }\n\n public abstract getComponent(): ReactFragment | JSX.Element;\n\n public abstract getValidator(): StepValidator;\n\n protected getUrlFragment() {\n return this.name.toLocaleLowerCase();\n }\n}\n"]}
1
+ {"version":3,"file":"Step.js","sourceRoot":"/","sources":["src/pages/steps/Step.ts"],"names":[],"mappings":";;AAOA,MAA8B,IAAI;IAI9B,YAAsB,IAAY;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,UAAU;QACb,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;IAClD,CAAC;IAEM,kBAAkB;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,OAAgB,EAAE,KAAa;QAClD,OAAO;IACX,CAAC;IAMS,cAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACzC,CAAC;CACJ;AAxCD,uBAwCC","sourcesContent":["import { IHotelColorScheme } from '@roomstay/core';\nimport { FC } from 'react';\n\nimport type { Company } from '@/models/Client/Hotel/Company';\nimport type { Hotel } from '@/models/Client/Hotel/Hotel';\nimport StepValidator from '@/pages/steps/StepValidator';\n\nexport default abstract class Step {\n protected name: string;\n protected showOnNavigation: boolean;\n\n protected constructor(name: string) {\n this.name = name;\n this.showOnNavigation = true;\n }\n\n public getName() {\n return this.name;\n }\n\n public getStepUrl() {\n return `${'/step/'}${this.getUrlFragment()}/`;\n }\n\n public getStepTranslation(): string | null {\n return null;\n }\n\n public shouldShowOnNavigation() {\n return this.showOnNavigation;\n }\n\n /**\n * Method gets called when Step is activated. Return a @type ColorProfile\n * to automatically set theme when step is loaded\n */\n public getColorProfile(company: Company, hotel?: Hotel): IHotelColorScheme | undefined {\n return;\n }\n\n public abstract getComponent(): FC;\n\n public abstract getValidator(): StepValidator;\n\n protected getUrlFragment() {\n return this.name.toLocaleLowerCase();\n }\n}\n"]}