@roomstay/frontend 2.6.100 → 2.6.101
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.
- package/dist/177.bundle.js +1 -1
- package/dist/288.bundle.js +1 -1
- package/dist/570.bundle.js +1 -0
- package/dist/main.bundle.js +1 -1
- package/dist/src/components/generic/PromotionalCodeInput.d.ts +2 -0
- package/dist/src/components/generic/PromotionalCodeInput.js +142 -0
- package/dist/src/components/generic/PromotionalCodeInput.js.map +1 -0
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js +3 -0
- package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
- package/dist/src/components/steps/room/RoomList.js +1 -1
- package/dist/src/components/steps/room/RoomList.js.map +1 -1
- package/dist/src/components/steps/room/RoomModal.js.map +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +1 -1
- package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +1 -1
- package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +6 -0
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js +4 -0
- package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
- package/dist/src/contexts/ErrorContext.js +15 -13
- package/dist/src/contexts/ErrorContext.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextTypes.d.ts +0 -8
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextTypes.js.map +1 -1
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +1 -3
- package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +17 -8
- package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
- package/dist/src/models/Client/Hotel/Hotel.d.ts +1 -1
- package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js +2 -1
- package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js.map +1 -1
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.js +2 -2
- package/dist/src/pages/steps/StepRoom/StepRoomComponent.js.map +1 -1
- package/dist/src/translations/Translation.d.ts +7 -0
- package/dist/src/translations/Translation.js +7 -0
- package/dist/src/translations/Translation.js.map +1 -1
- package/dist/src/translations/languages/en-gb.js +7 -0
- package/dist/src/translations/languages/en-gb.js.map +1 -1
- package/dist/test.bundle.js +1 -1
- package/package.json +1 -1
- package/dist/434.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomRateRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRateRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport RoomRateDetailsAndPriceBreakdownModal, {\n RoomRateDetailsAndPriceBreakdownModalTabs,\n} from '@/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport { InlineRoomMiniEngineConfig } from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { useRateDetails } from '@/hooks/useRateDetails';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './RoomRateRow.module.scss';\nexport interface RoomRateRowProps extends Pick<InlineRoomMiniEngineConfig, 'policy' | 'priceDescription'> {\n rate: RoomRate;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n\n isPromoRate?: boolean;\n isCardLayout?: boolean;\n bookNowButtonDisabledReason?: string;\n}\n\nexport default function RoomRateRow(props: RoomRateRowProps) {\n const { roomRateCalendarInteractivity, setRoomRateCalendarInteractivity } = useContext(FullPageEngineContext);\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n\n const [viewingModal, setViewingModal] = useState({\n open: false,\n currentTab: RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails,\n });\n\n const { t } = useTranslation();\n const { isAccent2ColorDark } = useCurrentHotel();\n const { isMobile } = useWindowSize();\n const { rate, isCardLayout } = props;\n const selectedRow = basketContext.selectedBasketRow;\n const isRoomSelectedAndEditing = selectedRow?.isValid();\n\n const isThisSelectedRow = selectedRow && rate.name === selectedRow.getRate()?.name && rate.getRoom()?.name === selectedRow.getRoom()?.name;\n\n const currentRow = useRef<HTMLDivElement | null>(null);\n\n const classes = classNames('room-info', {\n '--default': !rate.isMemberOnly,\n '--locked': rate.isMemberOnly,\n '--current': isThisSelectedRow && isRoomSelectedAndEditing,\n '--is-promo': props.isPromoRate,\n });\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n useEffect(() => {\n if (!isLocked) {\n const basketRow = basketContext.selectedBasketRow;\n if (!basketRow) {\n return;\n }\n\n DataLayer.instance.addRoomRateImpression(rate.getRoom(), rate, { to: basketRow.getStartDate(), from: basketRow.getEndDate() }, basketRow.getPromoCode());\n }\n }, [isThisSelectedRow]);\n\n const { rateName, shortDescription } = useRateDetails(rate, isLocked);\n\n const openTab = (tab: RoomRateDetailsAndPriceBreakdownModalTabs) => {\n setViewingModal({ open: true, currentTab: tab });\n };\n\n let bookNowLabel = '';\n if (props.getButtonLabel) {\n bookNowLabel = props.getButtonLabel(isRoomSelectedAndEditing, isThisSelectedRow);\n } else {\n if (isRoomSelectedAndEditing) {\n bookNowLabel = isThisSelectedRow ? t(Translation.Step.Room.RoomInfo.Selected) : (bookNowLabel = t(Translation.Step.Room.RoomInfo.Update));\n } else if (props.bookNowButtonDisabledReason) {\n bookNowLabel = props.bookNowButtonDisabledReason;\n } else {\n bookNowLabel = t(Translation.Misc.BookNow);\n }\n }\n\n const openMemberSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const rateDetailsOnClick = () => {\n DataLayer.instance.sendInteraction('More Rate Details', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails);\n };\n\n useEffect(() => {\n const roomCode = props.rate.getRoom().code;\n if (roomRateCalendarInteractivity?.roomCode === roomCode && props.rate.code === roomRateCalendarInteractivity?.rateCode) {\n //Provided the API response still includes that rate => still open the modal\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails);\n }\n }, [props.rate, roomRateCalendarInteractivity]);\n\n const updateModalOnClose = () => {\n // Clear the modal state\n setRoomRateCalendarInteractivity(null);\n setViewingModal((old) => {\n old.open = false;\n return { ...old };\n });\n };\n\n const openTabOnClick = () => {\n DataLayer.instance.sendInteraction('Rate Breakdown', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.PriceBreakdown);\n };\n\n const shouldTextBeWhite = isAccent2ColorDark && ((isThisSelectedRow && isRoomSelectedAndEditing) || props.isPromoRate);\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n const { value: price, isLoading } = useCurrency({\n disableLoading: true,\n hideDecimals: true,\n children: rate.getAveragePrice(true),\n });\n\n const { hasPricePreview } = usePlanpay();\n\n const RoomDetailsPriceBlockSection = () => (\n <div className=\"u-flex flex-column align-items-start align-items-lg-end\">\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getAveragePriceBeforeDiscount(true)}\n averagePrice={rate.getAveragePrice(true)}\n isMemberOnly={props.rate.isMemberOnly}\n useLightText={shouldTextBeWhite}\n />\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)} align={isMobile ? TextAlign.Left : TextAlign.Right}>\n <TaxInclusionNotice rate={rate} />\n </Text>\n </div>\n );\n\n const RateTitle = () => {\n if (isLocked) {\n return (\n <Text type={TextType.Body} color={Color.Success}>\n <strong>{t(Translation.Step.Room.RoomInfo.MemberOnlyDeal)}</strong>\n </Text>\n );\n }\n return (\n <div className={classNames(styles['card-layout-rate-title'])}>\n {props.isPromoRate && isCardLayout ? <Icon icon={IconType.Star} /> : null}\n <Text type={TextType.Body} color={textWhiteOr()} bold>\n {rateName}\n </Text>\n </div>\n );\n };\n\n return (\n <div className={classes} ref={currentRow}>\n <div className=\"row\">\n <div\n className={classNames({\n 'col-lg-6': hasPricePreview && !isCardLayout,\n 'col-lg-8': !hasPricePreview && !isCardLayout,\n 'col-lg-12': isCardLayout,\n })}\n >\n <div className=\"u-flex flex-column h-100\">\n <div>\n <div className=\"u-marg-bottom-half\">\n <RateTitle />\n </div>\n <div className=\"u-marg-bottom u-h-ml-5 text-small u-clear-font-weight rdcaf\" style={{ color: textWhiteOr() }}>\n <div dangerouslySetInnerHTML={{ __html: shortDescription ?? '' }} />\n </div>\n {isLocked && (\n <div className=\"u-marg\">\n <span onClick={openMemberSignupModalOnClick}>\n <Pill icon={IconType.Money} type={PillType.Success}>\n {t(Translation.Step.Room.RoomInfo.SignUpToSee)}\n </Pill>\n </span>\n </div>\n )}\n {!isCardLayout ? <RoomRatePills rate={props.rate} rateDescription /> : null}\n </div>\n\n {isCardLayout ? (\n <div className={classNames(styles['card-layout-price-wrapper'])}>\n {props.policy ? (\n <div className={classNames(styles['card-layout-price-policy'])}>\n <Icon icon={IconType.Info} />\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {props.policy}\n </Text>\n </div>\n ) : null}\n <div className={classNames(styles['card-layout-price-row'])}>\n {props.priceDescription ? (\n <div className={classNames(styles['card-layout-price-notes'])}>\n <Text type={TextType.Small} color={Color.Accent}>\n {props.priceDescription}\n </Text>\n </div>\n ) : null}\n <div className={classNames(styles['card-layout-price-info'])}>\n <RoomDetailsPriceBlockSection />\n </div>\n </div>\n </div>\n ) : null}\n\n <div\n className={classNames('u-flex justify-content-start u-marg-top-bottom@l- room-rate-row-navigation-button', {\n [styles['room-rate-row-navigation-button']]: isCardLayout,\n })}\n >\n <div className=\"u-marg-right u-inline-flex\">\n <BEButton\n icon={isCardLayout ? undefined : IconType.ArrowRight2}\n isText\n primary\n size=\"small\"\n iconPosition=\"right\"\n onClick={rateDetailsOnClick}\n textColor={isCardLayout ? Color.Accent : textWhiteOr(Color.Accent)}\n >\n {t(Translation.Step.Room.ReadMore)}\n </BEButton>\n </div>\n <BEButton\n icon={isCardLayout ? undefined : IconType.ArrowRight2}\n isText\n textColor={isCardLayout ? Color.Accent : textWhiteOr(Color.Navy)}\n size=\"small\"\n iconPosition=\"right\"\n onClick={openTabOnClick}\n disabled={isLocked}\n >\n {t(Translation.Step.Room.RoomInfo.ViewPriceBreakdown)}\n </BEButton>\n </div>\n </div>\n </div>\n <div\n className={classNames(\n {\n 'col-lg-6': hasPricePreview && !isCardLayout,\n 'col-lg-4': !hasPricePreview && !isCardLayout,\n 'col-lg-12': isCardLayout,\n },\n 'u-flex flex-column align-items-start align-items-md-start align-items-lg-end justify-content-start'\n )}\n >\n {!isCardLayout ? <RoomDetailsPriceBlockSection /> : null}\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 <div\n className={classNames('u-marg-top--light', {\n [styles['room-rate-row-booknow-button']]: isCardLayout,\n })}\n >\n {isLocked ? (\n <BEButton filled success wide onClick={openMemberSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton\n rate={rate}\n buttonLabel={bookNowLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n isFilled={!isThisSelectedRow}\n disabled={!!props.bookNowButtonDisabledReason}\n />\n )}\n </div>\n </div>\n </div>\n <RoomRateDetailsAndPriceBreakdownModal\n isOpen={viewingModal.open}\n currentTab={viewingModal.currentTab}\n rate={props.rate}\n getButtonLabel={props.getButtonLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n onClose={updateModalOnClose}\n />\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RoomRateRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/roomRates/RoomRateRow.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, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport { PlanpayPrice } from '@/components/generic/PlanpayPrice/PlanpayPrice';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomDetailsPriceBlock from '@/components/steps/room/roomDetails/RoomDetailsPriceBlock';\nimport BookNowButton from '@/components/steps/room/roomDetails/roomRates/BookNowButton';\nimport RoomRateDetailsAndPriceBreakdownModal, {\n RoomRateDetailsAndPriceBreakdownModalTabs,\n} from '@/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal';\nimport RoomRatePills from '@/components/steps/room/roomDetails/roomRates/RoomRatePills';\nimport { InlineRoomMiniEngineConfig } from '@/engines/InlineRoomMiniEngine/InlineRoomMiniEngine';\nimport useCurrency from '@/hooks/Currency';\nimport usePlanpay from '@/hooks/Planpay';\nimport { useRateDetails } from '@/hooks/useRateDetails';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './RoomRateRow.module.scss';\nexport interface RoomRateRowProps extends Pick<InlineRoomMiniEngineConfig, 'policy' | 'priceDescription'> {\n rate: RoomRate;\n\n getButtonLabel?: (isRoomSelectedAndEditing: boolean, isThisSelectedRow: boolean) => string;\n onAddToBasketOverride?: (rate: RoomRate) => void;\n\n isPromoRate?: boolean;\n isCardLayout?: boolean;\n bookNowButtonDisabledReason?: string;\n}\n\nexport default function RoomRateRow(props: RoomRateRowProps) {\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n const { roomRateCalendarInteractivity, setRoomRateCalendarInteractivity } = useContext(BookingEngineContext);\n\n const [viewingModal, setViewingModal] = useState({\n open: false,\n currentTab: RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails,\n });\n\n const { t } = useTranslation();\n const { isAccent2ColorDark } = useCurrentHotel();\n const { isMobile } = useWindowSize();\n const { rate, isCardLayout } = props;\n const selectedRow = basketContext.selectedBasketRow;\n const isRoomSelectedAndEditing = selectedRow?.isValid();\n\n const isThisSelectedRow = selectedRow && rate.name === selectedRow.getRate()?.name && rate.getRoom()?.name === selectedRow.getRoom()?.name;\n\n const currentRow = useRef<HTMLDivElement | null>(null);\n\n const classes = classNames('room-info', {\n '--default': !rate.isMemberOnly,\n '--locked': rate.isMemberOnly,\n '--current': isThisSelectedRow && isRoomSelectedAndEditing,\n '--is-promo': props.isPromoRate,\n });\n\n let isLocked = false;\n\n if (rate.isMemberOnly && !ccx.signedInUser) {\n isLocked = true;\n }\n\n useEffect(() => {\n if (!isLocked) {\n const basketRow = basketContext.selectedBasketRow;\n if (!basketRow) {\n return;\n }\n\n DataLayer.instance.addRoomRateImpression(rate.getRoom(), rate, { to: basketRow.getStartDate(), from: basketRow.getEndDate() }, basketRow.getPromoCode());\n }\n }, [isThisSelectedRow]);\n\n const { rateName, shortDescription } = useRateDetails(rate, isLocked);\n\n const openTab = (tab: RoomRateDetailsAndPriceBreakdownModalTabs) => {\n setViewingModal({ open: true, currentTab: tab });\n };\n\n let bookNowLabel = '';\n if (props.getButtonLabel) {\n bookNowLabel = props.getButtonLabel(isRoomSelectedAndEditing, isThisSelectedRow);\n } else {\n if (isRoomSelectedAndEditing) {\n bookNowLabel = isThisSelectedRow ? t(Translation.Step.Room.RoomInfo.Selected) : (bookNowLabel = t(Translation.Step.Room.RoomInfo.Update));\n } else if (props.bookNowButtonDisabledReason) {\n bookNowLabel = props.bookNowButtonDisabledReason;\n } else {\n bookNowLabel = t(Translation.Misc.BookNow);\n }\n }\n\n const openMemberSignupModalOnClick = () => {\n DataLayer.instance.sendInteraction('Member Signup Modal', InteractionType.LINK, InteractionStep.ROOMS);\n ccx.openMemberSignupModal();\n };\n\n const rateDetailsOnClick = () => {\n DataLayer.instance.sendInteraction('More Rate Details', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails);\n };\n\n useEffect(() => {\n const roomCode = props.rate.getRoom().code;\n if (roomRateCalendarInteractivity?.roomCode === roomCode && props.rate.code === roomRateCalendarInteractivity?.rateCode) {\n //Provided the API response still includes that rate => still open the modal\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.RoomDetails);\n }\n }, [props.rate, roomRateCalendarInteractivity]);\n\n const updateModalOnClose = () => {\n // Clear the modal state\n setRoomRateCalendarInteractivity(null);\n setViewingModal((old) => {\n old.open = false;\n return { ...old };\n });\n };\n\n const openTabOnClick = () => {\n DataLayer.instance.sendInteraction('Rate Breakdown', InteractionType.LINK, InteractionStep.ROOMS);\n openTab(RoomRateDetailsAndPriceBreakdownModalTabs.PriceBreakdown);\n };\n\n const shouldTextBeWhite = isAccent2ColorDark && ((isThisSelectedRow && isRoomSelectedAndEditing) || props.isPromoRate);\n const textWhiteOr = (color = Color.Graphite) => {\n return shouldTextBeWhite ? Color.White : color;\n };\n\n const { value: price, isLoading } = useCurrency({\n disableLoading: true,\n hideDecimals: true,\n children: rate.getAveragePrice(true),\n });\n\n const { hasPricePreview } = usePlanpay();\n\n const RoomDetailsPriceBlockSection = () => (\n <div className=\"u-flex flex-column align-items-start align-items-lg-end\">\n <RoomDetailsPriceBlock\n isLocked={isLocked}\n averagePreDiscount={rate.getAveragePriceBeforeDiscount(true)}\n averagePrice={rate.getAveragePrice(true)}\n isMemberOnly={props.rate.isMemberOnly}\n useLightText={shouldTextBeWhite}\n />\n <Text type={TextType.Label} color={textWhiteOr(Color.DarkGrey)} align={isMobile ? TextAlign.Left : TextAlign.Right}>\n <TaxInclusionNotice rate={rate} />\n </Text>\n </div>\n );\n\n const RateTitle = () => {\n if (isLocked) {\n return (\n <Text type={TextType.Body} color={Color.Success}>\n <strong>{t(Translation.Step.Room.RoomInfo.MemberOnlyDeal)}</strong>\n </Text>\n );\n }\n return (\n <div className={classNames(styles['card-layout-rate-title'])}>\n {props.isPromoRate && isCardLayout ? <Icon icon={IconType.Star} /> : null}\n <Text type={TextType.Body} color={textWhiteOr()} bold>\n {rateName}\n </Text>\n </div>\n );\n };\n\n return (\n <div className={classes} ref={currentRow}>\n <div className=\"row\">\n <div\n className={classNames({\n 'col-lg-6': hasPricePreview && !isCardLayout,\n 'col-lg-8': !hasPricePreview && !isCardLayout,\n 'col-lg-12': isCardLayout,\n })}\n >\n <div className=\"u-flex flex-column h-100\">\n <div>\n <div className=\"u-marg-bottom-half\">\n <RateTitle />\n </div>\n <div className=\"u-marg-bottom u-h-ml-5 text-small u-clear-font-weight rdcaf\" style={{ color: textWhiteOr() }}>\n <div dangerouslySetInnerHTML={{ __html: shortDescription ?? '' }} />\n </div>\n {isLocked && (\n <div className=\"u-marg\">\n <span onClick={openMemberSignupModalOnClick}>\n <Pill icon={IconType.Money} type={PillType.Success}>\n {t(Translation.Step.Room.RoomInfo.SignUpToSee)}\n </Pill>\n </span>\n </div>\n )}\n {!isCardLayout ? <RoomRatePills rate={props.rate} rateDescription /> : null}\n </div>\n\n {isCardLayout ? (\n <div className={classNames(styles['card-layout-price-wrapper'])}>\n {props.policy ? (\n <div className={classNames(styles['card-layout-price-policy'])}>\n <Icon icon={IconType.Info} />\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {props.policy}\n </Text>\n </div>\n ) : null}\n <div className={classNames(styles['card-layout-price-row'])}>\n {props.priceDescription ? (\n <div className={classNames(styles['card-layout-price-notes'])}>\n <Text type={TextType.Small} color={Color.Accent}>\n {props.priceDescription}\n </Text>\n </div>\n ) : null}\n <div className={classNames(styles['card-layout-price-info'])}>\n <RoomDetailsPriceBlockSection />\n </div>\n </div>\n </div>\n ) : null}\n\n <div\n className={classNames('u-flex justify-content-start u-marg-top-bottom@l- room-rate-row-navigation-button', {\n [styles['room-rate-row-navigation-button']]: isCardLayout,\n })}\n >\n <div className=\"u-marg-right u-inline-flex\">\n <BEButton\n icon={isCardLayout ? undefined : IconType.ArrowRight2}\n isText\n primary\n size=\"small\"\n iconPosition=\"right\"\n onClick={rateDetailsOnClick}\n textColor={isCardLayout ? Color.Accent : textWhiteOr(Color.Accent)}\n >\n {t(Translation.Step.Room.ReadMore)}\n </BEButton>\n </div>\n <BEButton\n icon={isCardLayout ? undefined : IconType.ArrowRight2}\n isText\n textColor={isCardLayout ? Color.Accent : textWhiteOr(Color.Navy)}\n size=\"small\"\n iconPosition=\"right\"\n onClick={openTabOnClick}\n disabled={isLocked}\n >\n {t(Translation.Step.Room.RoomInfo.ViewPriceBreakdown)}\n </BEButton>\n </div>\n </div>\n </div>\n <div\n className={classNames(\n {\n 'col-lg-6': hasPricePreview && !isCardLayout,\n 'col-lg-4': !hasPricePreview && !isCardLayout,\n 'col-lg-12': isCardLayout,\n },\n 'u-flex flex-column align-items-start align-items-md-start align-items-lg-end justify-content-start'\n )}\n >\n {!isCardLayout ? <RoomDetailsPriceBlockSection /> : null}\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 <div\n className={classNames('u-marg-top--light', {\n [styles['room-rate-row-booknow-button']]: isCardLayout,\n })}\n >\n {isLocked ? (\n <BEButton filled success wide onClick={openMemberSignupModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.RevealPrice)}\n </BEButton>\n ) : (\n <BookNowButton\n rate={rate}\n buttonLabel={bookNowLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n isFilled={!isThisSelectedRow}\n disabled={!!props.bookNowButtonDisabledReason}\n />\n )}\n </div>\n </div>\n </div>\n <RoomRateDetailsAndPriceBreakdownModal\n isOpen={viewingModal.open}\n currentTab={viewingModal.currentTab}\n rate={props.rate}\n getButtonLabel={props.getButtonLabel}\n onAddToBasketOverride={props.onAddToBasketOverride}\n onClose={updateModalOnClose}\n />\n </div>\n );\n}\n"]}
|
|
@@ -4,6 +4,10 @@ import type { RoomSort } from '../../providers/RoomSortProvider';
|
|
|
4
4
|
import type LocalStorageProvider from '../../providers/storage/LocalStorageProvider';
|
|
5
5
|
import type SessionProvider from '../../providers/storage/SessionProvider';
|
|
6
6
|
import type ScreenSize from '../../util/ScreenSize';
|
|
7
|
+
export interface RoomRateCalendarInteractivity {
|
|
8
|
+
roomCode: string;
|
|
9
|
+
rateCode: string;
|
|
10
|
+
}
|
|
7
11
|
export type BookingEngineContextType = {
|
|
8
12
|
currentRoomSort: RoomSort;
|
|
9
13
|
currentRoomRateSort?: RoomSort | undefined;
|
|
@@ -17,6 +21,8 @@ export type BookingEngineContextType = {
|
|
|
17
21
|
setCurrentRoomRateSort: (sort: RoomSort | undefined) => void;
|
|
18
22
|
setCurrentFilters: (filters: EngineFilterType) => void;
|
|
19
23
|
setCurrentGroupedRoomFilters: (filters: GroupedRoomFilters) => void;
|
|
24
|
+
roomRateCalendarInteractivity: RoomRateCalendarInteractivity | null;
|
|
25
|
+
setRoomRateCalendarInteractivity: React.Dispatch<React.SetStateAction<RoomRateCalendarInteractivity | null>>;
|
|
20
26
|
};
|
|
21
27
|
export type EngineFilterType = {
|
|
22
28
|
[code: string]: Filter | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookingEngineContextType.types.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextType.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport type Filter from '@/models/Room/Filters/Filter';\nimport type { RoomSort } from '@/providers/RoomSortProvider';\nimport type LocalStorageProvider from '@/providers/storage/LocalStorageProvider';\nimport type SessionProvider from '@/providers/storage/SessionProvider';\nimport type ScreenSize from '@/util/ScreenSize';\n\n// TODO: Re-factor to a general Engine / UI Context, to leave the FullPageBookingEngine Logic separate i.e the filters & room sort values\nexport type BookingEngineContextType = {\n currentRoomSort: RoomSort;\n currentRoomRateSort?: RoomSort | undefined;\n currentFilters: EngineFilterType;\n currentGroupedRoomFilters: EngineFilterType;\n\n screenSize: ScreenSize;\n\n engine: BaseEngine<BaseEngineConfig>;\n sessionProvider: SessionProvider;\n storageProvider: LocalStorageProvider;\n\n setCurrentRoomSort: (sort: RoomSort) => void;\n setCurrentRoomRateSort: (sort: RoomSort | undefined) => void;\n setCurrentFilters: (filters: EngineFilterType) => void;\n setCurrentGroupedRoomFilters: (filters: GroupedRoomFilters) => void;\n};\n\nexport type EngineFilterType = { [code: string]: Filter | null };\nexport type GroupedRoomFilters = { [id: string]: any };\n"]}
|
|
1
|
+
{"version":3,"file":"BookingEngineContextType.types.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextType.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport type Filter from '@/models/Room/Filters/Filter';\nimport type { RoomSort } from '@/providers/RoomSortProvider';\nimport type LocalStorageProvider from '@/providers/storage/LocalStorageProvider';\nimport type SessionProvider from '@/providers/storage/SessionProvider';\nimport type ScreenSize from '@/util/ScreenSize';\n\nexport interface RoomRateCalendarInteractivity {\n roomCode: string;\n rateCode: string;\n}\n\n// TODO: Re-factor to a general Engine / UI Context, to leave the FullPageBookingEngine Logic separate i.e the filters & room sort values\nexport type BookingEngineContextType = {\n currentRoomSort: RoomSort;\n currentRoomRateSort?: RoomSort | undefined;\n currentFilters: EngineFilterType;\n currentGroupedRoomFilters: EngineFilterType;\n\n screenSize: ScreenSize;\n\n engine: BaseEngine<BaseEngineConfig>;\n sessionProvider: SessionProvider;\n storageProvider: LocalStorageProvider;\n\n setCurrentRoomSort: (sort: RoomSort) => void;\n setCurrentRoomRateSort: (sort: RoomSort | undefined) => void;\n setCurrentFilters: (filters: EngineFilterType) => void;\n setCurrentGroupedRoomFilters: (filters: GroupedRoomFilters) => void;\n\n // Persists state for RoomRateDetailsAndPriceBreakdownModal\n roomRateCalendarInteractivity: RoomRateCalendarInteractivity | null;\n setRoomRateCalendarInteractivity: React.Dispatch<React.SetStateAction<RoomRateCalendarInteractivity | null>>;\n};\n\nexport type EngineFilterType = { [code: string]: Filter | null };\nexport type GroupedRoomFilters = { [id: string]: any };\n"]}
|
|
@@ -49,6 +49,8 @@ function BookingEngineContextWrapper({ engine, children }) {
|
|
|
49
49
|
const [currentRoomRateSort, setCurrentRoomRateSort] = (0, react_1.useState)(undefined);
|
|
50
50
|
const [currentFilters, setCurrentFilters] = (0, react_1.useState)({});
|
|
51
51
|
const [currentGroupedRoomFilters, setCurrentGroupedRoomFilters] = (0, react_1.useState)({});
|
|
52
|
+
// Persists state for RoomRateDetailsAndPriceBreakdownModal
|
|
53
|
+
const [roomRateCalendarInteractivity, setRoomRateCalendarInteractivity] = (0, react_1.useState)(null);
|
|
52
54
|
(0, react_1.useEffect)(() => {
|
|
53
55
|
let isCancelled = false;
|
|
54
56
|
const onResize = () => {
|
|
@@ -82,6 +84,8 @@ function BookingEngineContextWrapper({ engine, children }) {
|
|
|
82
84
|
engine,
|
|
83
85
|
sessionProvider,
|
|
84
86
|
storageProvider,
|
|
87
|
+
roomRateCalendarInteractivity,
|
|
88
|
+
setRoomRateCalendarInteractivity,
|
|
85
89
|
};
|
|
86
90
|
return react_1.default.createElement(contexts_1.BookingEngineContext.Provider, { value: bookingEngineContext }, children);
|
|
87
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookingEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextWrapper.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,
|
|
1
|
+
{"version":3,"file":"BookingEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BookingEngineContext/BookingEngineContextWrapper.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,kEA8DC;AA1ED,iDAAyJ;AACzJ,+CAAmD;AAGnD,mEAAwD;AACxD,mEAA2C;AAO3C,SAAgB,2BAA2B,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAoC;IAC9F,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAEpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAoB,IAAI,CAAC,CAAC;IAEtE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAW,2BAAQ,CAAC,QAAQ,CAAC,CAAC;IACpF,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAuB,SAAS,CAAC,CAAC;IAChG,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,IAAA,gBAAQ,EAAqB,EAAE,CAAC,CAAC;IAEnG,2DAA2D;IAC3D,MAAM,CAAC,6BAA6B,EAAE,gCAAgC,CAAC,GAAG,IAAA,gBAAQ,EAAuC,IAAI,CAAC,CAAC;IAE/H,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,KAAK,MAAM,IAAI,IAAI,oBAAU,EAAE,CAAC;oBAC5B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC5B,MAAM;oBACV,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE;YACR,WAAW,GAAG,IAAI,CAAC;YAEnB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAA6B;QACnD,eAAe;QACf,mBAAmB;QACnB,cAAc;QACd,yBAAyB;QAEzB,UAAU,EAAE,UAAwB;QAEpC,UAAU;QACV,kBAAkB;QAClB,sBAAsB;QACtB,iBAAiB;QACjB,4BAA4B;QAE5B,MAAM;QACN,eAAe;QACf,eAAe;QAEf,6BAA6B;QAC7B,gCAAgC;KACnC,CAAC;IAEF,OAAO,8BAAC,+BAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,IAAG,QAAQ,CAAiC,CAAC;AAClH,CAAC","sourcesContent":["import { BookingEngineContext, BookingEngineContextType, EngineFilterType, GroupedRoomFilters, RoomRateCalendarInteractivity } from '@frontend/contexts';\nimport React, { useEffect, useState } from 'react';\n\nimport type { BaseEngine, BaseEngineConfig } from '@/engines/BaseEngine';\nimport { RoomSort } from '@/providers/RoomSortProvider';\nimport ScreenSize from '@/util/ScreenSize';\n\nexport interface BookingEngineContextWrapperProps {\n children: React.ReactNode;\n engine: BaseEngine<BaseEngineConfig>;\n}\n\nexport function BookingEngineContextWrapper({ engine, children }: BookingEngineContextWrapperProps) {\n const sessionProvider = engine.getSessionProvider();\n const storageProvider = engine.getStorageProvider();\n\n const [screenSize, setScreenSize] = useState<ScreenSize | null>(null);\n\n const [currentRoomSort, setCurrentRoomSort] = useState<RoomSort>(RoomSort.PriceLow);\n const [currentRoomRateSort, setCurrentRoomRateSort] = useState<RoomSort | undefined>(undefined);\n const [currentFilters, setCurrentFilters] = useState<EngineFilterType>({});\n const [currentGroupedRoomFilters, setCurrentGroupedRoomFilters] = useState<GroupedRoomFilters>({});\n\n // Persists state for RoomRateDetailsAndPriceBreakdownModal\n const [roomRateCalendarInteractivity, setRoomRateCalendarInteractivity] = useState<RoomRateCalendarInteractivity | null>(null);\n\n useEffect(() => {\n let isCancelled = false;\n\n const onResize = () => {\n if (!isCancelled) {\n for (const size in ScreenSize) {\n if (window.innerWidth <= Number(size)) {\n setScreenSize(Number(size));\n break;\n }\n }\n }\n };\n\n onResize();\n\n window.addEventListener('resize', onResize);\n\n return () => {\n isCancelled = true;\n\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n const bookingEngineContext: BookingEngineContextType = {\n currentRoomSort,\n currentRoomRateSort,\n currentFilters,\n currentGroupedRoomFilters,\n\n screenSize: screenSize as ScreenSize,\n\n // Setters\n setCurrentRoomSort,\n setCurrentRoomRateSort,\n setCurrentFilters,\n setCurrentGroupedRoomFilters,\n\n engine,\n sessionProvider,\n storageProvider,\n\n roomRateCalendarInteractivity,\n setRoomRateCalendarInteractivity,\n };\n\n return <BookingEngineContext.Provider value={bookingEngineContext}>{children}</BookingEngineContext.Provider>;\n}\n"]}
|
|
@@ -47,21 +47,23 @@ exports.ErrorHandler = {};
|
|
|
47
47
|
function ErrorContextWrapper(props) {
|
|
48
48
|
var _a, _b, _c;
|
|
49
49
|
const [errors, setErrors] = (0, react_1.useState)([]);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
setErrors((
|
|
54
|
-
|
|
50
|
+
// Improve ErrorHandler
|
|
51
|
+
const pushError = (error) => {
|
|
52
|
+
if (!!(error === null || error === void 0 ? void 0 : error.message)) {
|
|
53
|
+
setErrors((currentErrors) => {
|
|
54
|
+
const exists = currentErrors.some((it) => it.title === error.title && it.message === error.message);
|
|
55
|
+
if (!exists) {
|
|
56
|
+
error.id = Math.random();
|
|
57
|
+
return [...currentErrors, error];
|
|
58
|
+
}
|
|
59
|
+
return currentErrors;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
55
62
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (!currentErrors.some((it) => it.title === error.title && it.message === error.message)) {
|
|
59
|
-
error.id = Math.random();
|
|
60
|
-
return [...currentErrors, error];
|
|
61
|
-
}
|
|
62
|
-
return currentErrors;
|
|
63
|
-
});
|
|
63
|
+
const context = {
|
|
64
|
+
addError: pushError,
|
|
64
65
|
};
|
|
66
|
+
exports.ErrorHandler.add = pushError;
|
|
65
67
|
const onCloseModalHandler = () => {
|
|
66
68
|
if (errors[0].retry) {
|
|
67
69
|
errors[0].retry();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorContext.js","sourceRoot":"/","sources":["src/contexts/ErrorContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,
|
|
1
|
+
{"version":3,"file":"ErrorContext.js","sourceRoot":"/","sources":["src/contexts/ErrorContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,kDAiDC;AA9ED,+CAAwD;AAExD,qEAA6C;AAE7C,MAAM,UAAU,GAAG,IAAA,YAAI,EAAC,GAAG,EAAE,mDAAQ,uCAAuC,GAAC,CAAC,CAAC;AAgB/E,MAAM,YAAY,GAAG,eAAK,CAAC,aAAa,CAA0B,IAAI,CAAC,CAAC;AACxE,kBAAe,YAAY,CAAC;AAMf,QAAA,YAAY,GAA8C,EAAE,CAAC;AAE1E,SAAgB,mBAAmB,CAAC,KAA+B;;IAC/D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAc,EAAE,CAAC,CAAC;IAEtD,uBAAuB;IACvB,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAE,EAAE;QACnC,IAAI,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAA,EAAE,CAAC;YACnB,SAAS,CAAC,CAAC,aAAa,EAAE,EAAE;gBACxB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEpG,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,CAAC;gBACrC,CAAC;gBAED,OAAO,aAAa,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,OAAO,GAAqB;QAC9B,QAAQ,EAAE,SAAS;KACtB,CAAC;IAEF,oBAAY,CAAC,GAAG,GAAG,SAAS,CAAC;IAE7B,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,0CAAE,UAAU,mCAAI,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,CAAC,CAAC,0CAAE,KAAK,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAErF,OAAO,CACH;QACI,8BAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO;YAChC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAChB,8BAAC,gBAAQ,IAAC,QAAQ,EAAC,EAAE;gBACjB,8BAAC,UAAU,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,QAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;oBACpH,8BAAC,cAAI,QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAQ,CACvB,CACN,CACd;YACA,KAAK,CAAC,QAAQ,CACK,CACzB,CACN,CAAC;AACN,CAAC","sourcesContent":["import { IconType } from '@roomstay/ui';\nimport React, { lazy, Suspense, useState } from 'react';\n\nimport Text from '@/components/generic/Text';\n\nconst ErrorModal = lazy(() => import('@/components/generic/modal/ErrorModal'));\n\ninterface ErrorContextType {\n addError: (error: ErrorType) => void;\n}\n\ninterface ErrorType {\n id?: number;\n retry?: () => void;\n message: string;\n title?: string;\n icon?: IconType;\n\n buttonText?: string;\n}\n\nconst ErrorContext = React.createContext<ErrorContextType | null>(null);\nexport default ErrorContext;\n\ninterface ErrorContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport const ErrorHandler: { add: (error: ErrorType) => void } | any = {};\n\nexport function ErrorContextWrapper(props: ErrorContextWrapperProps) {\n const [errors, setErrors] = useState<ErrorType[]>([]);\n\n // Improve ErrorHandler\n const pushError = (error: ErrorType) => {\n if (!!error?.message) {\n setErrors((currentErrors) => {\n const exists = currentErrors.some((it) => it.title === error.title && it.message === error.message);\n\n if (!exists) {\n error.id = Math.random();\n return [...currentErrors, error];\n }\n\n return currentErrors;\n });\n }\n };\n\n const context: ErrorContextType = {\n addError: pushError,\n };\n\n ErrorHandler.add = pushError;\n\n const onCloseModalHandler = () => {\n if (errors[0].retry) {\n errors[0].retry();\n }\n errors.shift();\n setErrors(() => [...errors]);\n };\n\n const buttonText = errors?.[0]?.buttonText ?? errors?.[0]?.retry ? 'Retry' : 'Close';\n\n return (\n <>\n <ErrorContext.Provider value={context}>\n {!!errors.length && (\n <Suspense fallback=\"\">\n <ErrorModal title={errors[0].title} closeButtonText={buttonText} open onClose={onCloseModalHandler} icon={errors[0].icon}>\n <Text>{errors[0].message}</Text>\n </ErrorModal>\n </Suspense>\n )}\n {props.children}\n </ErrorContext.Provider>\n </>\n );\n}\n"]}
|
|
@@ -18,12 +18,4 @@ export interface FullPageEngineContextType {
|
|
|
18
18
|
urlParameters: FullPageBookingEngineUrlParameters;
|
|
19
19
|
currentStep: Step;
|
|
20
20
|
setCurrentStep: (step: Step) => void;
|
|
21
|
-
roomRateCalendarInteractivity: {
|
|
22
|
-
roomCode: string;
|
|
23
|
-
rateCode: string;
|
|
24
|
-
} | null;
|
|
25
|
-
setRoomRateCalendarInteractivity: React.Dispatch<React.SetStateAction<{
|
|
26
|
-
roomCode: string;
|
|
27
|
-
rateCode: string;
|
|
28
|
-
} | null>>;
|
|
29
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullPageEngineContextTypes.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextTypes.ts"],"names":[],"mappings":"","sourcesContent":["import dayjs from 'dayjs';\n\nimport type Step from '@/pages/steps/Step';\n\nexport interface FullPageBookingEngineUrlParameters {\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n hotelId?: string;\n\n defaultCity?: string;\n\n promoCode?: string;\n promoOnly?: boolean;\n\n promoFeatured?: boolean;\n\n rooms?: {\n adults?: number;\n children?: number;\n infants?: number;\n }[];\n}\n\nexport interface FullPageEngineContextType {\n urlParameters: FullPageBookingEngineUrlParameters;\n\n currentStep: Step;\n setCurrentStep: (step: Step) => void;\n
|
|
1
|
+
{"version":3,"file":"FullPageEngineContextTypes.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextTypes.ts"],"names":[],"mappings":"","sourcesContent":["import dayjs from 'dayjs';\n\nimport type Step from '@/pages/steps/Step';\n\nexport interface FullPageBookingEngineUrlParameters {\n startDate?: dayjs.Dayjs;\n endDate?: dayjs.Dayjs;\n\n hotelId?: string;\n\n defaultCity?: string;\n\n promoCode?: string;\n promoOnly?: boolean;\n\n promoFeatured?: boolean;\n\n rooms?: {\n adults?: number;\n children?: number;\n infants?: number;\n }[];\n}\n\nexport interface FullPageEngineContextType {\n urlParameters: FullPageBookingEngineUrlParameters;\n\n currentStep: Step;\n setCurrentStep: (step: Step) => void;\n}\n"]}
|
|
@@ -83,8 +83,6 @@ function FullPageEngineContextWrapper() {
|
|
|
83
83
|
const [urlParameters, setUrlParameters] = (0, react_1.useState)({});
|
|
84
84
|
const [currentStep, setCurrentStep] = (0, react_1.useState)((_b = StepManager_1.default.getStepFromName((_a = beContext.engine.getInitialSession()) === null || _a === void 0 ? void 0 : _a.step)) !== null && _b !== void 0 ? _b : StepManager_1.default.getFirstStep());
|
|
85
85
|
const [initialStep, setInitialStep] = (0, react_1.useState)(StepManager_1.default.getFirstStep());
|
|
86
|
-
// Persists state for RoomRateDetailsAndPriceBreakdownModal
|
|
87
|
-
const [roomRateCalendarInteractivity, setRoomRateCalendarInteractivity] = (0, react_1.useState)(null);
|
|
88
86
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
89
87
|
const location = (0, react_router_dom_1.useLocation)();
|
|
90
88
|
const historyConsistentPush = (0, HistoryConsistentPush_1.useHistoryConsistentPush)();
|
|
@@ -292,7 +290,7 @@ function FullPageEngineContextWrapper() {
|
|
|
292
290
|
}
|
|
293
291
|
}
|
|
294
292
|
}, [hotel === null || hotel === void 0 ? void 0 : hotel.currentRoomSort, hotel === null || hotel === void 0 ? void 0 : hotel.currentRoomRateSort]);
|
|
295
|
-
const workingContext = { urlParameters, currentStep, setCurrentStep
|
|
293
|
+
const workingContext = { urlParameters, currentStep, setCurrentStep };
|
|
296
294
|
return (react_1.default.createElement(contexts_1.FullPageEngineContext.Provider, { value: workingContext },
|
|
297
295
|
react_1.default.createElement(contexts_1.ModalContextWrapper, null,
|
|
298
296
|
react_1.default.createElement(ScrollToTop_1.default, null),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullPageEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n BasketContext,\n BookingEngineContext,\n CompanyContext,\n FullPageBookingEngineUrlParameters,\n FullPageEngineContext,\n FullPageEngineContextType,\n ModalContextWrapper,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { PurchaseGiftCardEngine } from '@roomstay/gc-frontend';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Navigate, Route, Routes, useLocation, useMatch, useNavigate } from 'react-router-dom';\nimport StepRoute from 'routes/NaturallyProgressedStepRoute';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { RoomstayMark } from '@/components/generic/RoomstayMark';\nimport ScrollToTop from '@/components/generic/ScrollToTop';\nimport Header from '@/components/navigation/Header';\nimport { PrivateRoute } from '@/containers/PrivateRoute';\nimport { useHistoryConsistentPush } from '@/hooks/HistoryConsistentPush';\nimport { EAppQueryParameters } from '@/models/AppQueryParameters';\nimport BasketRow from '@/models/BasketRow';\nimport RateTypeFilter from '@/models/Room/Filters/RateTypeFilter';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport FindReservation, { EFindReservationPath } from '@/pages/findReservation/FindReservation';\nimport FindReservationResults from '@/pages/findReservation/FindReservationResults';\nimport HotelInfo from '@/pages/hotel/HotelInfo';\nimport HotelInfoPlaceholder from '@/pages/hotel/HotelInfoPlaceholder';\nimport Step from '@/pages/steps/Step';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport DerbysoftClickTrackingFeature from '@/providers/feature/DerbysoftClickTrackingFeature';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport GiftCardFeature from '@/providers/feature/GiftCardFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport FeatureProvider from '@/providers/FeatureProvider';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { ROUTES } from '@/util/RouteManager';\nimport StepManager from '@/util/StepManager';\n\nimport { EngineBodyLayout } from './EngineBodyLayout';\nimport { EnginePageLayout } from './EnginePageLayout';\n\nconst AccountRouter = React.lazy(() =>\n import('@/pages/account/AccountRouter').then(({ AccountRouter }) => ({\n default: AccountRouter,\n }))\n);\n\ndeclare const GIFT_CARD_API_URL: string;\ndeclare const GIFT_CARD_ASSET_URL: string;\n\nexport function FullPageEngineContextWrapper() {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const beContext = useContext(BookingEngineContext);\n\n const [engineReady, setEngineReady] = useState(false);\n const [urlFlagsParsed, setUrlFlagsParsed] = useState(false);\n const [urlParameters, setUrlParameters] = useState<FullPageBookingEngineUrlParameters>({});\n\n const [currentStep, setCurrentStep] = useState<Step>(StepManager.getStepFromName(beContext.engine.getInitialSession()?.step as string) ?? StepManager.getFirstStep());\n const [initialStep, setInitialStep] = useState<Step>(StepManager.getFirstStep());\n // Persists state for RoomRateDetailsAndPriceBreakdownModal\n const [roomRateCalendarInteractivity, setRoomRateCalendarInteractivity] = useState<{ roomCode: string; rateCode: string } | null>(null);\n\n const { hotel } = useCurrentHotel();\n\n const location = useLocation();\n const historyConsistentPush = useHistoryConsistentPush();\n const navigate = useNavigate();\n\n const isInStepRoot = useMatch(StepManager.STEP_BASE);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ step: currentStep.getName() });\n\n if (currentStep === StepHotel) {\n ccx.changeHotel(null);\n }\n }, [currentStep]);\n\n useEffect(() => {\n if (hotel?.company?.enableDerbysoftFeed) {\n FeatureProvider.load(DerbysoftClickTrackingFeature);\n }\n }, [hotel?.company?.enableDerbysoftFeed]);\n\n useEffect(() => {\n const currentBasketRows = basketContext.currentBasketRows;\n\n let addXRooms = 1;\n\n // TODO: this probably needs to be the only place this is set, and listen for URL changes\n if (currentBasketRows.length === 0) {\n const urlParameterBuilder: FullPageBookingEngineUrlParameters = {};\n // The Choose Hotel step should not apply the room filter\n const shouldEnableRoomCodeFilter = currentStep.getName() !== StepHotel.getName();\n\n if (location.search) {\n const query = new URLSearchParams(location.search);\n\n const format = API_DATE_FORMAT;\n\n let start = dayjs(query.get(EAppQueryParameters.Arrive), format);\n let end = dayjs(query.get(EAppQueryParameters.Depart), format);\n\n const promoCode = query.get(EAppQueryParameters.PromoCode);\n const promoOnly = query.get(EAppQueryParameters.PromoOnly);\n\n const promoFeatured = query.get(EAppQueryParameters.PromoFeatured);\n\n if (promoCode) {\n urlParameterBuilder.promoCode = promoCode;\n }\n\n if (promoOnly && promoOnly.toLowerCase() !== 'false') {\n urlParameterBuilder.promoOnly = Boolean(promoOnly);\n }\n\n if (promoFeatured && promoFeatured.toLowerCase() !== 'false') {\n FeatureProvider.load(FeaturedPromoFeature);\n urlParameterBuilder.promoFeatured = true;\n }\n\n const updatedCurrentFilters = { ...beContext.currentFilters };\n const roomCode = query.get(EAppQueryParameters.Room);\n\n if (roomCode && shouldEnableRoomCodeFilter) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RoomType'] = new RoomTypeFilter([roomCode]);\n }\n\n const rateCode = query.get(EAppQueryParameters.Rate);\n if (rateCode) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RateType'] = new RateTypeFilter([rateCode]);\n }\n beContext.setCurrentFilters(updatedCurrentFilters);\n\n const hotelId = query.get(EAppQueryParameters.Hotel);\n\n if (hotelId) {\n if (ccx.changeHotel(hotelId)) {\n if (!start.isValid()) {\n start = dayjs().add(1, 'day');\n }\n\n if (!end.isValid()) {\n end = start.add(1, 'day');\n }\n\n setInitialStep(getStepRoom());\n }\n\n urlParameterBuilder.hotelId = hotelId;\n }\n\n const defaultCity = query.get(EAppQueryParameters.DefaultCity);\n if (defaultCity) {\n urlParameterBuilder.defaultCity = defaultCity;\n }\n\n // We're doing dates last, as other properties, like hotelID might change them if they're not already set\n if (start.isValid() && end.isValid()) {\n const today = dayjs().startOf('day');\n\n if (start.isBefore(today)) {\n start = today;\n }\n\n if (end.isBefore(start) || end.isSame(start)) {\n end = start.add(1, 'day');\n } else if (end.isBefore(today.add(1, 'day')) || end.isSame(today)) {\n end = today.add(1, 'day');\n }\n\n urlParameterBuilder.startDate = start;\n urlParameterBuilder.endDate = end;\n }\n\n const parseQueryInt = (key: string, min = 0): number | undefined => {\n const value = Number.parseInt(query.get(key) ?? '', 10);\n return Number.isNaN(value) || value < min ? undefined : value;\n };\n\n addXRooms = parseQueryInt(EAppQueryParameters.Rooms, 1) ?? 1;\n const globalAdults = parseQueryInt(EAppQueryParameters.Adults, 1);\n const globalChildren = parseQueryInt(EAppQueryParameters.Children);\n const globalInfants = parseQueryInt(EAppQueryParameters.Infants);\n\n urlParameterBuilder.rooms = [];\n\n for (let i = 0; i < addXRooms; i++) {\n let roomOccupancy = 1;\n\n let adults = parseQueryInt(`adults-${i + 1}`, 1) ?? globalAdults;\n query.delete(`adults-${i + 1}`);\n\n if (adults && hotel?.maxOccupancy && (roomOccupancy = adults) > hotel.maxOccupancy) {\n adults = undefined;\n }\n\n let children = parseQueryInt(`children-${i + 1}`) ?? globalChildren;\n query.delete(`children-${i + 1}`);\n\n if (children && hotel?.maxOccupancy && (roomOccupancy += children) > hotel.maxOccupancy) {\n children = undefined;\n }\n\n let infants = parseQueryInt(`infants-${i + 1}`) ?? globalInfants;\n query.delete(`infants-${i + 1}`);\n\n if (infants && hotel?.maxOccupancy && hotel.countInfantsInOccupancy && (roomOccupancy += infants) > hotel.maxOccupancy) {\n infants = undefined;\n }\n\n urlParameterBuilder.rooms[i] = { adults, children, infants };\n }\n\n navigate({ search: query.toString() }, { replace: true });\n setUrlParameters(urlParameterBuilder);\n }\n\n let firstBasketRow: BasketRow | undefined = undefined;\n const { startDate, endDate, promoCode, promoOnly, rooms } = urlParameterBuilder;\n for (let i = 0; i < addXRooms; i++) {\n const { adults, children, infants } = rooms?.[i] ?? {};\n const basketRow = new BasketRow(undefined, undefined, shouldEnableRoomCodeFilter);\n\n if (startDate) {\n basketRow.setStartDate(startDate);\n }\n\n if (endDate) {\n basketRow.setEndDate(endDate);\n }\n\n if (promoCode) {\n basketRow.setPromoCode(promoCode);\n }\n\n if (promoOnly) {\n basketRow.setPromoOnly(promoOnly);\n }\n\n if (adults) {\n basketRow.setAdults(adults);\n }\n\n if (children) {\n basketRow.setChildren(children);\n }\n\n if (infants) {\n basketRow.setInfants(infants);\n }\n\n basketContext.addBasketRow(basketRow);\n\n if (i === 0) {\n firstBasketRow = basketRow;\n }\n }\n\n if (firstBasketRow?.getStartDate() && firstBasketRow.getEndDate() && StepManager.getFirstStep() !== StepHotel) {\n basketContext.selectBasketRow(firstBasketRow);\n setInitialStep(getStepRoom());\n }\n } else {\n const initialSession = beContext.engine.getInitialSession();\n if (initialSession) {\n setInitialStep(StepManager.getStepFromName(initialSession.step) as Step);\n }\n }\n\n setUrlFlagsParsed(true);\n }, []);\n\n /**\n * Engine Ready useEffect, used to deffer loading the UI until everything engine wise is set up properly\n */\n useEffect(() => {\n if (!engineReady) {\n if (ccx.hotels.length > 0 && urlFlagsParsed) {\n setEngineReady(true);\n }\n }\n }, [ccx.hotels, urlFlagsParsed]);\n\n useEffect(() => {\n if (engineReady) {\n if (isInStepRoot && initialStep) {\n // We want to respect the browsers pathname, and only redirect to a defined step if\n // the pathname isn't set, or matches an unknown page.\n\n // Is the current location in the path? i.e does the user want to be somewhere specific\n let pathInLoadedSteps = false;\n for (const step of StepManager.getSteps()) {\n // Using match instead of equals as some clients have skipped the trailing slash\n // We also want to make sure to only match the start of the path, in case step contains nested paths.\n if (location.pathname.match(new RegExp(`${step.getStepUrl()}.+`, 'ig'))) {\n pathInLoadedSteps = true;\n break;\n }\n }\n\n // We're in /step/ but on a not recognized one.\n if (!pathInLoadedSteps) {\n historyConsistentPush(initialStep.getStepUrl());\n }\n }\n }\n }, [engineReady]);\n\n useEffect(() => {\n if (hotel) {\n if (hotel.currentRoomSort) {\n beContext.setCurrentRoomSort(hotel.currentRoomSort);\n }\n if (hotel.currentRoomRateSort) {\n beContext.setCurrentRoomRateSort(hotel.currentRoomRateSort);\n }\n }\n }, [hotel?.currentRoomSort, hotel?.currentRoomRateSort]);\n\n const workingContext: FullPageEngineContextType = { urlParameters, currentStep, setCurrentStep, roomRateCalendarInteractivity, setRoomRateCalendarInteractivity };\n\n return (\n <FullPageEngineContext.Provider value={workingContext}>\n <ModalContextWrapper>\n <ScrollToTop />\n <header className=\"engine-header\">\n <Header />\n </header>\n\n {engineReady && (\n <Routes>\n <Route path=\"/\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n\n <Route path=\"/step\" element={<EngineBodyLayout />}>\n {StepManager.getSteps().map((step: Step) => (\n <Route key={step.getName()} path={`${step.getStepUrl()}*`} element={<StepRoute step={step} />} />\n ))}\n </Route>\n\n {/**\n * We aren't on a /step/ path, or the root path, so it's probably one of the engine-page paths.\n * If no matching path is found, we'll redirect back to the first step.\n */}\n <Route path=\"/*\" element={<EnginePageLayout />}>\n {/* TODO: This startsWith('/') check should be temporary. We should update the Route in client config after this is merged. */}\n <Route\n path={ROUTES.HOTEL_INFO.startsWith('/') ? ROUTES.HOTEL_INFO.substring(1) : ROUTES.HOTEL_INFO}\n element={\n <React.Suspense fallback={<HotelInfoPlaceholder />}>\n <HotelInfo />\n </React.Suspense>\n }\n />\n\n {Object.values(EFindReservationPath)\n .filter((path) => MemberPortalFeature.isActive() || path === EFindReservationPath.FindReservation)\n .map((path) => (\n <Route\n key={path}\n path={path}\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservation />\n </React.Suspense>\n }\n />\n ))}\n\n <Route\n path=\"find-reservation/:ref/:email\"\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservationResults />\n </React.Suspense>\n }\n />\n\n <Route\n path=\"account/*\"\n element={\n <PrivateRoute>\n {MemberPortalFeature.isActive() && (\n <React.Suspense\n fallback={\n <div>\n <LargeLoader />\n </div>\n }\n >\n <AccountRouter />\n </React.Suspense>\n )}\n </PrivateRoute>\n }\n />\n\n {GiftCardFeature.isActive() && GiftCardFeature.config && (\n <Route\n path=\"gift-cards/purchase\"\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <PurchaseGiftCardEngine\n companyId={GiftCardFeature.config.companyId}\n companyName={hotel?.name ?? ''}\n logoUrl={GiftCardFeature.config.logoUrl ?? hotel?.logo.toString() ?? ''}\n homeUrl={hotel?.hotelUrl ?? ''}\n apiUrl={GIFT_CARD_API_URL}\n assetUrl={GIFT_CARD_ASSET_URL}\n />\n </React.Suspense>\n }\n />\n )}\n\n {/* We haven't found a matching path, so just redirect to the first step. */}\n <Route path=\"*\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n </Route>\n </Routes>\n )}\n\n <RoomstayMark />\n </ModalContextWrapper>\n </FullPageEngineContext.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FullPageEngineContextWrapper.js","sourceRoot":"/","sources":["src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n BasketContext,\n BookingEngineContext,\n CompanyContext,\n FullPageBookingEngineUrlParameters,\n FullPageEngineContext,\n FullPageEngineContextType,\n ModalContextWrapper,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { PurchaseGiftCardEngine } from '@roomstay/gc-frontend';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { Navigate, Route, Routes, useLocation, useMatch, useNavigate } from 'react-router-dom';\nimport StepRoute from 'routes/NaturallyProgressedStepRoute';\n\nimport { API_DATE_FORMAT } from '@/api/BaseAPI';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { RoomstayMark } from '@/components/generic/RoomstayMark';\nimport ScrollToTop from '@/components/generic/ScrollToTop';\nimport Header from '@/components/navigation/Header';\nimport { PrivateRoute } from '@/containers/PrivateRoute';\nimport { useHistoryConsistentPush } from '@/hooks/HistoryConsistentPush';\nimport { EAppQueryParameters } from '@/models/AppQueryParameters';\nimport BasketRow from '@/models/BasketRow';\nimport RateTypeFilter from '@/models/Room/Filters/RateTypeFilter';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport FindReservation, { EFindReservationPath } from '@/pages/findReservation/FindReservation';\nimport FindReservationResults from '@/pages/findReservation/FindReservationResults';\nimport HotelInfo from '@/pages/hotel/HotelInfo';\nimport HotelInfoPlaceholder from '@/pages/hotel/HotelInfoPlaceholder';\nimport Step from '@/pages/steps/Step';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport DerbysoftClickTrackingFeature from '@/providers/feature/DerbysoftClickTrackingFeature';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport GiftCardFeature from '@/providers/feature/GiftCardFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport FeatureProvider from '@/providers/FeatureProvider';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { ROUTES } from '@/util/RouteManager';\nimport StepManager from '@/util/StepManager';\n\nimport { EngineBodyLayout } from './EngineBodyLayout';\nimport { EnginePageLayout } from './EnginePageLayout';\n\nconst AccountRouter = React.lazy(() =>\n import('@/pages/account/AccountRouter').then(({ AccountRouter }) => ({\n default: AccountRouter,\n }))\n);\n\ndeclare const GIFT_CARD_API_URL: string;\ndeclare const GIFT_CARD_ASSET_URL: string;\n\nexport function FullPageEngineContextWrapper() {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const beContext = useContext(BookingEngineContext);\n\n const [engineReady, setEngineReady] = useState(false);\n const [urlFlagsParsed, setUrlFlagsParsed] = useState(false);\n const [urlParameters, setUrlParameters] = useState<FullPageBookingEngineUrlParameters>({});\n\n const [currentStep, setCurrentStep] = useState<Step>(StepManager.getStepFromName(beContext.engine.getInitialSession()?.step as string) ?? StepManager.getFirstStep());\n const [initialStep, setInitialStep] = useState<Step>(StepManager.getFirstStep());\n\n const { hotel } = useCurrentHotel();\n\n const location = useLocation();\n const historyConsistentPush = useHistoryConsistentPush();\n const navigate = useNavigate();\n\n const isInStepRoot = useMatch(StepManager.STEP_BASE);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ step: currentStep.getName() });\n\n if (currentStep === StepHotel) {\n ccx.changeHotel(null);\n }\n }, [currentStep]);\n\n useEffect(() => {\n if (hotel?.company?.enableDerbysoftFeed) {\n FeatureProvider.load(DerbysoftClickTrackingFeature);\n }\n }, [hotel?.company?.enableDerbysoftFeed]);\n\n useEffect(() => {\n const currentBasketRows = basketContext.currentBasketRows;\n\n let addXRooms = 1;\n\n // TODO: this probably needs to be the only place this is set, and listen for URL changes\n if (currentBasketRows.length === 0) {\n const urlParameterBuilder: FullPageBookingEngineUrlParameters = {};\n // The Choose Hotel step should not apply the room filter\n const shouldEnableRoomCodeFilter = currentStep.getName() !== StepHotel.getName();\n\n if (location.search) {\n const query = new URLSearchParams(location.search);\n\n const format = API_DATE_FORMAT;\n\n let start = dayjs(query.get(EAppQueryParameters.Arrive), format);\n let end = dayjs(query.get(EAppQueryParameters.Depart), format);\n\n const promoCode = query.get(EAppQueryParameters.PromoCode);\n const promoOnly = query.get(EAppQueryParameters.PromoOnly);\n\n const promoFeatured = query.get(EAppQueryParameters.PromoFeatured);\n\n if (promoCode) {\n urlParameterBuilder.promoCode = promoCode;\n }\n\n if (promoOnly && promoOnly.toLowerCase() !== 'false') {\n urlParameterBuilder.promoOnly = Boolean(promoOnly);\n }\n\n if (promoFeatured && promoFeatured.toLowerCase() !== 'false') {\n FeatureProvider.load(FeaturedPromoFeature);\n urlParameterBuilder.promoFeatured = true;\n }\n\n const updatedCurrentFilters = { ...beContext.currentFilters };\n const roomCode = query.get(EAppQueryParameters.Room);\n\n if (roomCode && shouldEnableRoomCodeFilter) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RoomType'] = new RoomTypeFilter([roomCode]);\n }\n\n const rateCode = query.get(EAppQueryParameters.Rate);\n if (rateCode) {\n // TODO: Refactor this to come from this context instead.\n updatedCurrentFilters['RateType'] = new RateTypeFilter([rateCode]);\n }\n beContext.setCurrentFilters(updatedCurrentFilters);\n\n const hotelId = query.get(EAppQueryParameters.Hotel);\n\n if (hotelId) {\n if (ccx.changeHotel(hotelId)) {\n if (!start.isValid()) {\n start = dayjs().add(1, 'day');\n }\n\n if (!end.isValid()) {\n end = start.add(1, 'day');\n }\n\n setInitialStep(getStepRoom());\n }\n\n urlParameterBuilder.hotelId = hotelId;\n }\n\n const defaultCity = query.get(EAppQueryParameters.DefaultCity);\n if (defaultCity) {\n urlParameterBuilder.defaultCity = defaultCity;\n }\n\n // We're doing dates last, as other properties, like hotelID might change them if they're not already set\n if (start.isValid() && end.isValid()) {\n const today = dayjs().startOf('day');\n\n if (start.isBefore(today)) {\n start = today;\n }\n\n if (end.isBefore(start) || end.isSame(start)) {\n end = start.add(1, 'day');\n } else if (end.isBefore(today.add(1, 'day')) || end.isSame(today)) {\n end = today.add(1, 'day');\n }\n\n urlParameterBuilder.startDate = start;\n urlParameterBuilder.endDate = end;\n }\n\n const parseQueryInt = (key: string, min = 0): number | undefined => {\n const value = Number.parseInt(query.get(key) ?? '', 10);\n return Number.isNaN(value) || value < min ? undefined : value;\n };\n\n addXRooms = parseQueryInt(EAppQueryParameters.Rooms, 1) ?? 1;\n const globalAdults = parseQueryInt(EAppQueryParameters.Adults, 1);\n const globalChildren = parseQueryInt(EAppQueryParameters.Children);\n const globalInfants = parseQueryInt(EAppQueryParameters.Infants);\n\n urlParameterBuilder.rooms = [];\n\n for (let i = 0; i < addXRooms; i++) {\n let roomOccupancy = 1;\n\n let adults = parseQueryInt(`adults-${i + 1}`, 1) ?? globalAdults;\n query.delete(`adults-${i + 1}`);\n\n if (adults && hotel?.maxOccupancy && (roomOccupancy = adults) > hotel.maxOccupancy) {\n adults = undefined;\n }\n\n let children = parseQueryInt(`children-${i + 1}`) ?? globalChildren;\n query.delete(`children-${i + 1}`);\n\n if (children && hotel?.maxOccupancy && (roomOccupancy += children) > hotel.maxOccupancy) {\n children = undefined;\n }\n\n let infants = parseQueryInt(`infants-${i + 1}`) ?? globalInfants;\n query.delete(`infants-${i + 1}`);\n\n if (infants && hotel?.maxOccupancy && hotel.countInfantsInOccupancy && (roomOccupancy += infants) > hotel.maxOccupancy) {\n infants = undefined;\n }\n\n urlParameterBuilder.rooms[i] = { adults, children, infants };\n }\n\n navigate({ search: query.toString() }, { replace: true });\n setUrlParameters(urlParameterBuilder);\n }\n\n let firstBasketRow: BasketRow | undefined = undefined;\n const { startDate, endDate, promoCode, promoOnly, rooms } = urlParameterBuilder;\n for (let i = 0; i < addXRooms; i++) {\n const { adults, children, infants } = rooms?.[i] ?? {};\n const basketRow = new BasketRow(undefined, undefined, shouldEnableRoomCodeFilter);\n\n if (startDate) {\n basketRow.setStartDate(startDate);\n }\n\n if (endDate) {\n basketRow.setEndDate(endDate);\n }\n\n if (promoCode) {\n basketRow.setPromoCode(promoCode);\n }\n\n if (promoOnly) {\n basketRow.setPromoOnly(promoOnly);\n }\n\n if (adults) {\n basketRow.setAdults(adults);\n }\n\n if (children) {\n basketRow.setChildren(children);\n }\n\n if (infants) {\n basketRow.setInfants(infants);\n }\n\n basketContext.addBasketRow(basketRow);\n\n if (i === 0) {\n firstBasketRow = basketRow;\n }\n }\n\n if (firstBasketRow?.getStartDate() && firstBasketRow.getEndDate() && StepManager.getFirstStep() !== StepHotel) {\n basketContext.selectBasketRow(firstBasketRow);\n setInitialStep(getStepRoom());\n }\n } else {\n const initialSession = beContext.engine.getInitialSession();\n if (initialSession) {\n setInitialStep(StepManager.getStepFromName(initialSession.step) as Step);\n }\n }\n\n setUrlFlagsParsed(true);\n }, []);\n\n /**\n * Engine Ready useEffect, used to deffer loading the UI until everything engine wise is set up properly\n */\n useEffect(() => {\n if (!engineReady) {\n if (ccx.hotels.length > 0 && urlFlagsParsed) {\n setEngineReady(true);\n }\n }\n }, [ccx.hotels, urlFlagsParsed]);\n\n useEffect(() => {\n if (engineReady) {\n if (isInStepRoot && initialStep) {\n // We want to respect the browsers pathname, and only redirect to a defined step if\n // the pathname isn't set, or matches an unknown page.\n\n // Is the current location in the path? i.e does the user want to be somewhere specific\n let pathInLoadedSteps = false;\n for (const step of StepManager.getSteps()) {\n // Using match instead of equals as some clients have skipped the trailing slash\n // We also want to make sure to only match the start of the path, in case step contains nested paths.\n if (location.pathname.match(new RegExp(`${step.getStepUrl()}.+`, 'ig'))) {\n pathInLoadedSteps = true;\n break;\n }\n }\n\n // We're in /step/ but on a not recognized one.\n if (!pathInLoadedSteps) {\n historyConsistentPush(initialStep.getStepUrl());\n }\n }\n }\n }, [engineReady]);\n\n useEffect(() => {\n if (hotel) {\n if (hotel.currentRoomSort) {\n beContext.setCurrentRoomSort(hotel.currentRoomSort);\n }\n if (hotel.currentRoomRateSort) {\n beContext.setCurrentRoomRateSort(hotel.currentRoomRateSort);\n }\n }\n }, [hotel?.currentRoomSort, hotel?.currentRoomRateSort]);\n\n const workingContext: FullPageEngineContextType = { urlParameters, currentStep, setCurrentStep };\n\n return (\n <FullPageEngineContext.Provider value={workingContext}>\n <ModalContextWrapper>\n <ScrollToTop />\n <header className=\"engine-header\">\n <Header />\n </header>\n\n {engineReady && (\n <Routes>\n <Route path=\"/\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n\n <Route path=\"/step\" element={<EngineBodyLayout />}>\n {StepManager.getSteps().map((step: Step) => (\n <Route key={step.getName()} path={`${step.getStepUrl()}*`} element={<StepRoute step={step} />} />\n ))}\n </Route>\n\n {/**\n * We aren't on a /step/ path, or the root path, so it's probably one of the engine-page paths.\n * If no matching path is found, we'll redirect back to the first step.\n */}\n <Route path=\"/*\" element={<EnginePageLayout />}>\n {/* TODO: This startsWith('/') check should be temporary. We should update the Route in client config after this is merged. */}\n <Route\n path={ROUTES.HOTEL_INFO.startsWith('/') ? ROUTES.HOTEL_INFO.substring(1) : ROUTES.HOTEL_INFO}\n element={\n <React.Suspense fallback={<HotelInfoPlaceholder />}>\n <HotelInfo />\n </React.Suspense>\n }\n />\n\n {Object.values(EFindReservationPath)\n .filter((path) => MemberPortalFeature.isActive() || path === EFindReservationPath.FindReservation)\n .map((path) => (\n <Route\n key={path}\n path={path}\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservation />\n </React.Suspense>\n }\n />\n ))}\n\n <Route\n path=\"find-reservation/:ref/:email\"\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <FindReservationResults />\n </React.Suspense>\n }\n />\n\n <Route\n path=\"account/*\"\n element={\n <PrivateRoute>\n {MemberPortalFeature.isActive() && (\n <React.Suspense\n fallback={\n <div>\n <LargeLoader />\n </div>\n }\n >\n <AccountRouter />\n </React.Suspense>\n )}\n </PrivateRoute>\n }\n />\n\n {GiftCardFeature.isActive() && GiftCardFeature.config && (\n <Route\n path=\"gift-cards/purchase\"\n element={\n <React.Suspense fallback={<div>Loading...</div>}>\n <PurchaseGiftCardEngine\n companyId={GiftCardFeature.config.companyId}\n companyName={hotel?.name ?? ''}\n logoUrl={GiftCardFeature.config.logoUrl ?? hotel?.logo.toString() ?? ''}\n homeUrl={hotel?.hotelUrl ?? ''}\n apiUrl={GIFT_CARD_API_URL}\n assetUrl={GIFT_CARD_ASSET_URL}\n />\n </React.Suspense>\n }\n />\n )}\n\n {/* We haven't found a matching path, so just redirect to the first step. */}\n <Route path=\"*\" element={<Navigate to={StepManager.getFirstStep().getStepUrl()} replace />} />\n </Route>\n </Routes>\n )}\n\n <RoomstayMark />\n </ModalContextWrapper>\n </FullPageEngineContext.Provider>\n );\n}\n"]}
|
|
@@ -85,12 +85,13 @@ const DataLayer_1 = __importStar(require("../../util/DataLayer"));
|
|
|
85
85
|
const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
|
|
86
86
|
const InlineRoomMiniEngine_module_scss_1 = __importDefault(require("./InlineRoomMiniEngine.module.scss"));
|
|
87
87
|
function InlineRoomMiniEngineElement(props) {
|
|
88
|
-
var _a, _b, _c;
|
|
88
|
+
var _a, _b, _c, _d, _e;
|
|
89
89
|
const { layout = 'default', policy, priceDescription } = props.engine.getConfig();
|
|
90
90
|
const isCardLayout = layout === 'card';
|
|
91
91
|
const { hotel } = (0, hooks_1.useCurrentHotel)();
|
|
92
92
|
const { memberNumber } = (0, useSignedInMember_1.useSignedInMember)();
|
|
93
93
|
const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
|
|
94
|
+
const { roomRateCalendarInteractivity } = (0, react_1.useContext)(contexts_1.BookingEngineContext);
|
|
94
95
|
const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
|
|
95
96
|
const row = basketContext.currentBasketRows[0];
|
|
96
97
|
const [isLoading, setLoading] = (0, react_1.useState)(true);
|
|
@@ -129,9 +130,15 @@ function InlineRoomMiniEngineElement(props) {
|
|
|
129
130
|
}, [row, memberNumber]);
|
|
130
131
|
(0, react_1.useEffect)(() => {
|
|
131
132
|
if (row) {
|
|
132
|
-
|
|
133
|
+
fetchAvailability();
|
|
133
134
|
}
|
|
134
135
|
}, [row === null || row === void 0 ? void 0 : row.getPromoCode()]);
|
|
136
|
+
// Re-fetch availability when dates change from the calendar in the Room Rate Details modal
|
|
137
|
+
(0, react_1.useEffect)(() => {
|
|
138
|
+
if (row && ranFirstLoad && roomRateCalendarInteractivity) {
|
|
139
|
+
fetchAvailability(false);
|
|
140
|
+
}
|
|
141
|
+
}, [(_a = row === null || row === void 0 ? void 0 : row.getStartDate()) === null || _a === void 0 ? void 0 : _a.format('YYYY-MM-DD'), (_b = row === null || row === void 0 ? void 0 : row.getEndDate()) === null || _b === void 0 ? void 0 : _b.format('YYYY-MM-DD')]);
|
|
135
142
|
(0, react_1.useEffect)(() => {
|
|
136
143
|
var _a, _b, _c, _d, _e, _f;
|
|
137
144
|
if (!(rooms && rooms.length > 0))
|
|
@@ -228,12 +235,14 @@ function InlineRoomMiniEngineElement(props) {
|
|
|
228
235
|
row === null || row === void 0 ? void 0 : row.setEndDate((0, dayjs_1.default)().add(8, 'day'));
|
|
229
236
|
}
|
|
230
237
|
const isCompact = bounds.width < 1000 ? '--compact' : '';
|
|
231
|
-
const
|
|
238
|
+
const fetchAvailability = (...args_1) => __awaiter(this, [...args_1], void 0, function* (showLoading = true) {
|
|
232
239
|
var _a;
|
|
233
240
|
if (isCardLayout) {
|
|
234
241
|
basketContext.updateBasketRow(row);
|
|
235
242
|
}
|
|
236
|
-
|
|
243
|
+
if (showLoading) {
|
|
244
|
+
setLoading(true);
|
|
245
|
+
}
|
|
237
246
|
setRooms((_a = (yield BookingAPI_1.default.Availability.fetchAvailabilityData(row, hotel === null || hotel === void 0 ? void 0 : hotel.hotelID, memberNumber, false))) === null || _a === void 0 ? void 0 : _a.filter((room) => room.code === props.engine.getRoomCode()));
|
|
238
247
|
setLoading(false);
|
|
239
248
|
});
|
|
@@ -247,8 +256,8 @@ function InlineRoomMiniEngineElement(props) {
|
|
|
247
256
|
updatePeopleValues({ children: +value });
|
|
248
257
|
};
|
|
249
258
|
const defaultGuestValue = {
|
|
250
|
-
adults: (
|
|
251
|
-
children: (
|
|
259
|
+
adults: (_c = row === null || row === void 0 ? void 0 : row.getAdults()) !== null && _c !== void 0 ? _c : 1,
|
|
260
|
+
children: (_d = row === null || row === void 0 ? void 0 : row.getChildren()) !== null && _d !== void 0 ? _d : 0,
|
|
252
261
|
infants: 0,
|
|
253
262
|
room: 1,
|
|
254
263
|
};
|
|
@@ -293,7 +302,7 @@ function InlineRoomMiniEngineElement(props) {
|
|
|
293
302
|
const changePromoCode = (val) => {
|
|
294
303
|
updatePromoCode(val);
|
|
295
304
|
};
|
|
296
|
-
const maxOccupancy = (
|
|
305
|
+
const maxOccupancy = (_e = hotel === null || hotel === void 0 ? void 0 : hotel.maxOccupancy) !== null && _e !== void 0 ? _e : 1;
|
|
297
306
|
const DatePickerSelector = () => {
|
|
298
307
|
const inner = () => {
|
|
299
308
|
if (isCardLayout) {
|
|
@@ -401,7 +410,7 @@ function InlineRoomMiniEngineElement(props) {
|
|
|
401
410
|
'w-100': isCompact,
|
|
402
411
|
[InlineRoomMiniEngine_module_scss_1.default['rs-inline-filter-button']]: isCardLayout,
|
|
403
412
|
}) },
|
|
404
|
-
react_1.default.createElement(BEButton_1.default, { filled: true, primary: true, isLoading: isLoading, wide: isCompact !== '', onClick:
|
|
413
|
+
react_1.default.createElement(BEButton_1.default, { filled: true, primary: true, isLoading: isLoading, wide: isCompact !== '', onClick: () => fetchAvailability() }, t(Translation_1.Translation.Misc.CheckRates)))),
|
|
405
414
|
react_1.default.createElement("div", { className: (0, classnames_1.default)('u-border-rounded rs-inline-content', {
|
|
406
415
|
[InlineRoomMiniEngine_module_scss_1.default['rs-inline-content']]: isCardLayout,
|
|
407
416
|
}) }, !isLoading ? (react_1.default.createElement(AutoAutoHeight_1.default, { open: !isLoading },
|