@roomstay/frontend 2.6.53 → 2.6.55

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 (47) hide show
  1. package/dist/288.bundle.js +1 -1
  2. package/dist/493.bundle.js +1 -1
  3. package/dist/839.bundle.js +1 -1
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/main.bundle.js +1 -1
  6. package/dist/src/components/generic/date/FloatingDatePicker.d.ts +1 -0
  7. package/dist/src/components/generic/date/FloatingDatePicker.js +8 -0
  8. package/dist/src/components/generic/date/FloatingDatePicker.js.map +1 -1
  9. package/dist/src/components/steps/addons/AddonCard.js +12 -6
  10. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  11. package/dist/src/components/steps/room/AvailableUpgradesModal.js +5 -0
  12. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  13. package/dist/src/components/steps/room/RoomList.js +18 -4
  14. package/dist/src/components/steps/room/RoomList.js.map +1 -1
  15. package/dist/src/components/steps/room/RoomModal.js +18 -10
  16. package/dist/src/components/steps/room/RoomModal.js.map +1 -1
  17. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +4 -1
  18. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  19. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js +1 -1
  20. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.js.map +1 -1
  21. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +7 -1
  22. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  23. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +17 -2
  24. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  25. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +1 -1
  26. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  27. package/dist/src/contexts/HotelOverridesContext.js +4 -0
  28. package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
  29. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +1 -0
  30. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
  31. package/dist/src/hooks/EventHook.d.ts +1 -1
  32. package/dist/src/hooks/EventHook.js +1 -1
  33. package/dist/src/hooks/EventHook.js.map +1 -1
  34. package/dist/src/models/Addon/Addon.d.ts +2 -0
  35. package/dist/src/models/Addon/Addon.js +3 -0
  36. package/dist/src/models/Addon/Addon.js.map +1 -1
  37. package/dist/src/models/Api/HotelOverrideDTO.d.ts +4 -0
  38. package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
  39. package/dist/src/translations/Translation.d.ts +1 -0
  40. package/dist/src/translations/Translation.js +1 -0
  41. package/dist/src/translations/Translation.js.map +1 -1
  42. package/dist/src/translations/languages/en-gb.js +2 -1
  43. package/dist/src/translations/languages/en-gb.js.map +1 -1
  44. package/dist/src/util/DerbysoftPixel.js +37 -0
  45. package/dist/src/util/DerbysoftPixel.js.map +1 -1
  46. package/dist/test.bundle.js +1 -1
  47. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RoomBuilderProgressRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport NumberOfAdultsPicker from '@/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker';\nimport NumberOfChildrenPicker from '@/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\nimport StringHelper from '@/util/StringHelper';\n\nimport NumberOfInfantsPicker from './NumberOfInfantsPicker';\n\nexport interface RoomBuilderProgressRowProps {\n row: BasketRow;\n number?: number;\n}\n\nexport default function RoomBuilderProgressRow(props: RoomBuilderProgressRowProps) {\n const context = useContext(BasketContext);\n const engineContext = useContext(BookingEngineContext);\n const { hotel } = useCurrentHotel();\n const { showChildren } = useSearchScopeHook();\n\n const { t } = useTranslation();\n\n const [isEditing, setIsEditing] = useState(false);\n\n const { row } = props;\n\n const isCurrent = useMemo(() => {\n return context.selectedBasketRow && context.selectedBasketRow?.getID() === row?.getID();\n }, [context.selectedBasketRow, context.selectedBasketRow?.getID(), row?.getID()]);\n\n const classes = classNames('room-builder-progress--item', {\n '--current': isCurrent,\n '--complete': row.isValid(),\n });\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n useEffect(() => {\n if (isEditing && !isCurrent) {\n setIsEditing(false);\n }\n }, [context.selectBasketRow]);\n\n const updatePeopleValues = ({ adults, children, infants, updatedPromoCode }: { adults?: number; children?: number; infants?: number; updatedPromoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n if ((infants || infants === 0) && infants !== row.getInfants()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setInfants(infants);\n }\n\n if ((updatedPromoCode || updatedPromoCode === '') && updatedPromoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n row.setPromoCode(updatedPromoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate) {\n row.setStartDate(startDate);\n }\n\n if (endDate) {\n row.setEndDate(endDate);\n }\n\n context.updateBasketRow(row);\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setPromoCode(code);\n context.selectedBasketRow.setManualInputPromoCode(!!code);\n context.updateBasketRow(context.selectedBasketRow);\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const isRemovable = context.currentBasketRows.length > 1;\n const removeRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Remove Room', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.removeBasketRow(row);\n };\n const removeButton = (\n <div className=\"room-builder-progress--remove\">\n <Tooltip title={isRemovable ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.'}>\n <BEButton isText icon={IconType.Close} iconPosition=\"right\" stopIconAnimation disabled={!isRemovable} onClick={removeRoomOnClick} />\n </Tooltip>\n </div>\n );\n\n const isLargerThanLarge = engineContext.screenSize > ScreenSize.ExtraLarge;\n const showEditSection = isLargerThanLarge || isCurrent;\n\n const roomLabel = useMemo(() => {\n return context.currentBasketRows.length !== 1 ? (props.number as number) + 1 : '';\n }, [context.currentBasketRows.length, props.number]);\n\n let promoCodeTooltip = '';\n\n if (row.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? t(Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation.Step.Date.PromoCodeTooltip.NoValue);\n } else {\n if (row.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Valid);\n } else {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Invalid);\n }\n }\n const openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n const saveRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Save Room Changes', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const cancelRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Room Changes', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const editRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Edit Room', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(row);\n setIsEditing(true);\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n const updateNumberOfInfantsOnChange = (value: string) => {\n updatePeopleValues({ infants: +value });\n };\n\n const promocode = row.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className={classes}>\n {isCurrent || !row.isValid() ? (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl- align-items-center\">\n <div>\n {row.isValid() ? (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.EditingRoom)} {roomLabel}\n </strong>\n </Text>\n ) : (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.SelectRoom)} {roomLabel}\n </strong>\n </Text>\n )}\n </div>\n {showEditSection ? (\n <>\n {!isLargerThanLarge && (\n <div className={'w-100 d-flex' + (showEditSection ? ' u-marg-bottom@xl-' : '')}>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Step.Room.ChooseRoomBelow)}\n </Text>\n </div>\n )}\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfAdultsPicker row={row} onChange={updateNumberOfAdultsOnChange} />\n </div>\n </Tooltip>\n {showChildren ? (\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfChildrenPicker row={row} onChange={updateNumberOfChildrenOnChange} />\n </div>\n </Tooltip>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <Tooltip title={t(Translation.Step.Date.UpdateInfants)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfInfantsPicker row={row} onChange={updateNumberOfInfantsOnChange} />\n </div>\n </Tooltip>\n ) : null}\n\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n endDate={row.getEndDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n isAboveNav\n >\n <Tooltip title={t(Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere)}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={promocode ? row.getPromoCodeColour() : Color.Navy}>\n {promocode ? promocode : t(Translation.Step.Date.PromoCode)}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </Tooltip>\n </>\n\n <Overlay open={isPromoModalOpen} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={promocode}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new' && promocode\n ? context.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : undefined\n }\n />\n </div>\n\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText size=\"small\" onClick={cancelPromoPopupOnClick}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </div>\n </Overlay>\n {!isLargerThanLarge && row.isValid() && (\n <BEButton wide primary filled onClick={saveRoomChangesOnClick}>\n {t(Translation.Misc.Save)}\n </BEButton>\n )}\n </>\n ) : (\n <div className=\"w-100\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.NextRoom)}\n </Text>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n {row.isValid() && (\n <div className=\"u-none@xl-\">\n <Tooltip title=\"Cancel changes\">\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={cancelRoomChangesOnClick}>\n {t(Translation.Misc.Cancel).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n )}\n {removeButton}\n </div>\n </div>\n ) : (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex justify-content-start\">\n <div className=\"u-flex flex-column\">\n <span>\n <Text inline={isLargerThanLarge}>\n <strong>{row.getRoom().name}</strong>\n </Text>\n <Text inline={isLargerThanLarge} type={isLargerThanLarge ? TextType.Body : TextType.Small}>\n <span className=\"u-marg-left--light@xl\">\n {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n {showChildren ? (\n <>\n ,&nbsp;\n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <>\n ,&nbsp;\n {StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t)}\n </>\n ) : null}\n </span>\n </Text>\n </span>\n <Text type={TextType.Caption} color={Color.DarkGrey}>\n <strong>{row.getStayDateRange('ddd, MMM D, YYYY', ' -')}</strong>\n </Text>\n </div>\n {promocode && row.isPromoCodeValid() && (\n <div className=\"u-marg-left d-flex align-items-center\">\n <Pill type={PillType.Success} icon={IconType.Money}>\n {promocode}\n </Pill>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n <div className=\"u-flex align-items-center room-builder-progress--edit\">\n <Tooltip title={t(Translation.Step.Room.EditThisRoom)}>\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={editRoomOnClick}>\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n {removeButton}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomBuilderProgressRow.js","sourceRoot":"/","sources":["src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport FloatingDatePicker from '@/components/generic/date/FloatingDatePicker';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Overlay } from '@/components/generic/Overlay/Overlay';\nimport Pill, { PillType } from '@/components/generic/Pill';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport NumberOfAdultsPicker from '@/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker';\nimport NumberOfChildrenPicker from '@/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker';\nimport { useSearchScopeHook } from '@/hooks/useSearchScopeHook';\nimport BasketRow from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\nimport StringHelper from '@/util/StringHelper';\n\nimport NumberOfInfantsPicker from './NumberOfInfantsPicker';\n\nexport interface RoomBuilderProgressRowProps {\n row: BasketRow;\n number?: number;\n}\n\nexport default function RoomBuilderProgressRow(props: RoomBuilderProgressRowProps) {\n const context = useContext(BasketContext);\n const engineContext = useContext(BookingEngineContext);\n const { hotel } = useCurrentHotel();\n const { showChildren } = useSearchScopeHook();\n\n const { t } = useTranslation();\n\n const [isEditing, setIsEditing] = useState(false);\n\n const { row } = props;\n\n const isCurrent = useMemo(() => {\n return context.selectedBasketRow && context.selectedBasketRow?.getID() === row?.getID();\n }, [context.selectedBasketRow, context.selectedBasketRow?.getID(), row?.getID()]);\n\n const classes = classNames('room-builder-progress--item', {\n '--current': isCurrent,\n '--complete': row.isValid(),\n });\n const thisElement = useRef<HTMLDivElement | null>(null);\n\n const [isPromoModalOpen, setIsPromoModalOpen] = useState(false);\n\n useEffect(() => {\n if (isEditing && !isCurrent) {\n setIsEditing(false);\n }\n }, [context.selectBasketRow]);\n\n const updatePeopleValues = ({ adults, children, infants, updatedPromoCode }: { adults?: number; children?: number; infants?: number; updatedPromoCode?: string }) => {\n if (adults && adults !== row.getAdults()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setAdults(adults);\n }\n\n if ((children || children === 0) && children !== row.getChildren()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setChildren(children);\n }\n if ((infants || infants === 0) && infants !== row.getInfants()) {\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.ROOMS);\n row.setInfants(infants);\n }\n\n if ((updatedPromoCode || updatedPromoCode === '') && updatedPromoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n row.setPromoCode(updatedPromoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const updateDateValues = (startDate: dayjs.Dayjs, endDate: dayjs.Dayjs) => {\n if (startDate) {\n row.setStartDate(startDate);\n }\n\n if (endDate) {\n row.setEndDate(endDate);\n }\n\n context.updateBasketRow(row);\n };\n\n const onDatePickerOpenChange = (isOpen: boolean) => {\n context.onDatePickerOpenChange(isOpen);\n };\n\n const updatePromoCode = (code: string) => {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.ROOMS);\n\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setPromoCode(code);\n context.selectedBasketRow.setManualInputPromoCode(!!code);\n context.updateBasketRow(context.selectedBasketRow);\n if (code) {\n setIsPromoModalOpen(false);\n }\n }\n };\n\n const isRemovable = context.currentBasketRows.length > 1;\n const removeRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Remove Room', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.removeBasketRow(row);\n };\n const removeButton = (\n <div className=\"room-builder-progress--remove\">\n <Tooltip title={isRemovable ? 'Remove this room' : 'Cannot remove this room as at least one must be selected.'}>\n <BEButton isText icon={IconType.Close} iconPosition=\"right\" stopIconAnimation disabled={!isRemovable} onClick={removeRoomOnClick} />\n </Tooltip>\n </div>\n );\n\n const isLargerThanLarge = engineContext.screenSize > ScreenSize.ExtraLarge;\n const showEditSection = isLargerThanLarge || isCurrent;\n\n const roomLabel = useMemo(() => {\n return context.currentBasketRows.length !== 1 ? (props.number as number) + 1 : '';\n }, [context.currentBasketRows.length, props.number]);\n\n let promoCodeTooltip = '';\n\n if (row.getPromoCodeStatus() === 'new') {\n promoCodeTooltip = row.getPromoCode() ? t(Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation.Step.Date.PromoCodeTooltip.NoValue);\n } else {\n if (row.getPromoCodeStatus() === 'valid') {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Valid);\n } else {\n promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Invalid);\n }\n }\n const openPromoModalOnClick = () => {\n setIsPromoModalOpen(true);\n };\n const setPromoCodeOnClose = () => {\n setIsPromoModalOpen(false);\n };\n const cancelPromoPopupOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Promo Popup', InteractionType.BUTTON, InteractionStep.ROOMS);\n setIsPromoModalOpen(false);\n };\n const saveRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Save Room Changes', InteractionType.BUTTON, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const cancelRoomChangesOnClick = () => {\n DataLayer.instance.sendInteraction('Cancel Room Changes', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(null);\n setIsEditing(false);\n };\n const editRoomOnClick = () => {\n DataLayer.instance.sendInteraction('Edit Room', InteractionType.LINK, InteractionStep.ROOMS);\n context.selectBasketRow(row);\n setIsEditing(true);\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n const updateNumberOfAdultsOnChange = (value: string) => {\n updatePeopleValues({ adults: +value });\n };\n const updateNumberOfChildrenOnChange = (value: string) => {\n updatePeopleValues({ children: +value });\n };\n const updateNumberOfInfantsOnChange = (value: string) => {\n updatePeopleValues({ infants: +value });\n };\n\n const promocode = row.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className={classes}>\n {isCurrent || !row.isValid() ? (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex flex-wrap flex-xl-nowrap flex-row u-w-100@xl- align-items-center\">\n <div>\n {row.isValid() ? (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.EditingRoom)} {roomLabel}\n </strong>\n </Text>\n ) : (\n <Text>\n <strong className=\"u-nowrap\">\n {t(Translation.Step.Room.SelectRoom)} {roomLabel}\n </strong>\n </Text>\n )}\n </div>\n {showEditSection ? (\n <>\n {!isLargerThanLarge && (\n <div className={'w-100 d-flex' + (showEditSection ? ' u-marg-bottom@xl-' : '')}>\n <Text type={TextType.Small} color={Color.DarkGrey} inline>\n {t(Translation.Step.Room.ChooseRoomBelow)}\n </Text>\n </div>\n )}\n <Tooltip title={t(Translation.Step.Date.UpdateAdults)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfAdultsPicker row={row} onChange={updateNumberOfAdultsOnChange} />\n </div>\n </Tooltip>\n {showChildren ? (\n <Tooltip title={t(Translation.Step.Date.UpdateChildren)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfChildrenPicker row={row} onChange={updateNumberOfChildrenOnChange} />\n </div>\n </Tooltip>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <Tooltip title={t(Translation.Step.Date.UpdateInfants)} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-flex-justify-center u-flex\">\n <NumberOfInfantsPicker row={row} onChange={updateNumberOfInfantsOnChange} />\n </div>\n </Tooltip>\n ) : null}\n\n <>\n <div className=\"room-builder-progress--value\">\n <FloatingDatePicker\n startDate={row.getStartDate()}\n endDate={row.getEndDate()}\n selectedDateChanged={updateDateValues}\n className=\"u-w-100@xl- d-flex align-items-center justify-content-center\"\n isAboveNav\n onDatePickerOpenChange={onDatePickerOpenChange}\n >\n <Tooltip title={t(Translation.Step.Date.SelectArrivalAndDepartureDatesByClickingHere)}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl- u-cursor-pointer\">\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getArrivalDate()}\n </Text>\n <Icon icon={IconType.ArrowRight2} />\n <Text color={Color.Accent} bold className=\"u-nowrap\">\n {row.getDepartureDate()}\n </Text>\n </div>\n </Tooltip>\n </FloatingDatePicker>\n </div>\n\n <Tooltip title={promoCodeTooltip} wrapperClasses=\"u-w-100@xl- d-flex\">\n <div className=\"room-builder-progress--value u-cursor-pointer\" ref={thisElement} onClick={openPromoModalOnClick}>\n <div className=\"u-flex align-items-center justify-content-center u-w-100@xl-\">\n <Text className=\"u-pad-right--light\" type={TextType.Body} color={promocode ? row.getPromoCodeColour() : Color.Navy}>\n {promocode ? promocode : t(Translation.Step.Date.PromoCode)}\n </Text>\n <Icon icon={IconType.Dropdown} color={Color.DarkGrey} />\n </div>\n </div>\n </Tooltip>\n </>\n\n <Overlay open={isPromoModalOpen} followElement={thisElement.current} onClose={setPromoCodeOnClose}>\n <div className=\"u-pad--heavy\">\n <div>\n <PromoCodeInput\n value={promocode}\n onChange={changePromoCode}\n valid={\n context.selectedBasketRow?.getPromoCodeStatus() !== 'new' && promocode\n ? context.selectedBasketRow?.getPromoCodeStatus() === 'valid'\n : undefined\n }\n />\n </div>\n\n <div className=\"u-flex justify-content-end align-items-center u-marg-top\">\n <BEButton isText size=\"small\" onClick={cancelPromoPopupOnClick}>\n {t(Translation.Misc.Cancel)}\n </BEButton>\n </div>\n </div>\n </Overlay>\n {!isLargerThanLarge && row.isValid() && (\n <BEButton wide primary filled onClick={saveRoomChangesOnClick}>\n {t(Translation.Misc.Save)}\n </BEButton>\n )}\n </>\n ) : (\n <div className=\"w-100\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Step.Room.NextRoom)}\n </Text>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n {row.isValid() && (\n <div className=\"u-none@xl-\">\n <Tooltip title=\"Cancel changes\">\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={cancelRoomChangesOnClick}>\n {t(Translation.Misc.Cancel).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n )}\n {removeButton}\n </div>\n </div>\n ) : (\n <div className=\"u-flex w-100\">\n <div className=\"u-flex justify-content-start\">\n <div className=\"u-flex flex-column\">\n <span>\n <Text inline={isLargerThanLarge}>\n <strong>{row.getRoom().name}</strong>\n </Text>\n <Text inline={isLargerThanLarge} type={isLargerThanLarge ? TextType.Body : TextType.Small}>\n <span className=\"u-marg-left--light@xl\">\n {StringHelper.pluralWithDictAndCount(row.getAdults(), Translation.Step.Date.Adult, t)}\n {showChildren ? (\n <>\n ,&nbsp;\n {StringHelper.pluralWithDictAndCount(row.getChildren(), Translation.Step.Date.Child, t)}\n </>\n ) : null}\n {hotel?.childConfiguration?.supportInfants ? (\n <>\n ,&nbsp;\n {StringHelper.pluralWithDictAndCount(row.getInfants(), Translation.Step.Date.Infant, t)}\n </>\n ) : null}\n </span>\n </Text>\n </span>\n <Text type={TextType.Caption} color={Color.DarkGrey}>\n <strong>{row.getStayDateRange('ddd, MMM D, YYYY', ' -')}</strong>\n </Text>\n </div>\n {promocode && row.isPromoCodeValid() && (\n <div className=\"u-marg-left d-flex align-items-center\">\n <Pill type={PillType.Success} icon={IconType.Money}>\n {promocode}\n </Pill>\n </div>\n )}\n </div>\n <div className=\"u-flex align-items-center\">\n <div className=\"u-flex align-items-center room-builder-progress--edit\">\n <Tooltip title={t(Translation.Step.Room.EditThisRoom)}>\n <div className=\"u-flex align-items-center\">\n <BEButton isText size=\"tiny\" onClick={editRoomOnClick}>\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </div>\n </Tooltip>\n </div>\n {removeButton}\n </div>\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -47,7 +47,7 @@ function RoomDetailsBedsBlock(props) {
47
47
  if ((_k = extraRoomData === null || extraRoomData === void 0 ? void 0 : extraRoomData.bedTypeOverride) === null || _k === void 0 ? void 0 : _k.trim()) {
48
48
  bedType = extraRoomData.bedTypeOverride;
49
49
  }
50
- return (react_1.default.createElement("ul", { className: "u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom" },
50
+ return (react_1.default.createElement("ul", { className: "u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom rs-room-details-beds-block" },
51
51
  react_1.default.createElement("li", { className: "u-flex align-items-center" },
52
52
  react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.People, size: "24px", color: Color_1.Color.Navy }),
53
53
  react_1.default.createElement("div", { className: "u-pad-left--light" },
@@ -1 +1 @@
1
- {"version":3,"file":"RoomDetailsBedsBlock.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/RoomDetailsBedsBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Text, TextType } from '@/components/generic/Text';\nimport { Room } from '@/models/Room/Room';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ninterface RoomDetailsBedsBlockProps {\n room: Room;\n\n textColor?: Color;\n}\n\nexport function RoomDetailsBedsBlock(props: RoomDetailsBedsBlockProps) {\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n\n const extraRoomData = hotel?.rooms?.[props.room?.code as string];\n const adminRoomSize = hotel?.rooms?.[props.room?.code as string]?.roomSize;\n const overrideRoomSize = hotel?.overwrites?.[props.room?.code as string]?.RoomDimensions;\n const roomSize = overrideRoomSize ?? (adminRoomSize ? `${adminRoomSize} m²` : undefined);\n\n const textColor = props.textColor ?? Color.DarkGrey;\n\n let bedType = `${(extraRoomData?.bedQuantity as number) > 0 ? extraRoomData?.bedQuantity : ''} ${extraRoomData?.bedType}`;\n if (extraRoomData?.bedTypeOverride?.trim()) {\n bedType = extraRoomData.bedTypeOverride;\n }\n\n return (\n <ul className=\"u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom\">\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.People} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: extraRoomData?.maxOccupancy,\n })}\n </Text>\n </div>\n </li>\n {extraRoomData?.showBedType !== false && (\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.Bed} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {bedType}\n </Text>\n </div>\n </li>\n )}\n {!!roomSize && (\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.RoomSize} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {roomSize}\n </Text>\n </div>\n </li>\n )}\n </ul>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomDetailsBedsBlock.js","sourceRoot":"/","sources":["src/components/steps/room/roomDetails/RoomDetailsBedsBlock.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCurrentHotel } from '@frontend/hooks';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport { Text, TextType } from '@/components/generic/Text';\nimport { Room } from '@/models/Room/Room';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ninterface RoomDetailsBedsBlockProps {\n room: Room;\n\n textColor?: Color;\n}\n\nexport function RoomDetailsBedsBlock(props: RoomDetailsBedsBlockProps) {\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n\n const extraRoomData = hotel?.rooms?.[props.room?.code as string];\n const adminRoomSize = hotel?.rooms?.[props.room?.code as string]?.roomSize;\n const overrideRoomSize = hotel?.overwrites?.[props.room?.code as string]?.RoomDimensions;\n const roomSize = overrideRoomSize ?? (adminRoomSize ? `${adminRoomSize} m²` : undefined);\n\n const textColor = props.textColor ?? Color.DarkGrey;\n\n let bedType = `${(extraRoomData?.bedQuantity as number) > 0 ? extraRoomData?.bedQuantity : ''} ${extraRoomData?.bedType}`;\n if (extraRoomData?.bedTypeOverride?.trim()) {\n bedType = extraRoomData.bedTypeOverride;\n }\n\n return (\n <ul className=\"u-inline-flex u-flex-gap u-flex-wrap u-marg-bottom rs-room-details-beds-block\">\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.People} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {t(Translation.Step.Room.Sleeps, {\n maxOccupancy: extraRoomData?.maxOccupancy,\n })}\n </Text>\n </div>\n </li>\n {extraRoomData?.showBedType !== false && (\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.Bed} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {bedType}\n </Text>\n </div>\n </li>\n )}\n {!!roomSize && (\n <li className=\"u-flex align-items-center\">\n <Icon icon={IconType.RoomSize} size=\"24px\" color={Color.Navy} />\n <div className=\"u-pad-left--light\">\n <Text type={TextType.Small} inline color={textColor}>\n {roomSize}\n </Text>\n </div>\n </li>\n )}\n </ul>\n );\n}\n"]}
@@ -32,7 +32,11 @@ export interface BasketContextType {
32
32
  selectBasketRow: (row: BasketRow | null) => void;
33
33
  setStartDate: (date: dayjs.Dayjs) => void;
34
34
  setEndDate: (date: dayjs.Dayjs) => void;
35
- getBasketQuoteDetails: (confirmationStepIsActive: () => boolean) => void;
35
+ /**
36
+ * @param preventApplyingOutcome a callback to check if calling function has decided that it no longer wants to apply the deposit
37
+ * @returns
38
+ */
39
+ getBasketQuoteDetails: (preventApplyingOutcome: () => boolean) => void;
36
40
  hasCheckedOut: boolean;
37
41
  reservationData: ReservationsDTO;
38
42
  booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;
@@ -49,4 +53,6 @@ export interface BasketContextType {
49
53
  removeBasketAddonRow: (row: BasketAddonRow) => void;
50
54
  attemptSelectUnfilledRow: () => BasketRow | undefined;
51
55
  initBasketRows: (basketRows: BasketRow[]) => void;
56
+ onDatePickerOpenChange: (isOpen: boolean) => void;
57
+ isDatePickerOpen: boolean;
52
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BasketContextType.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextType.ts"],"names":[],"mappings":"","sourcesContent":["import type dayjs from 'dayjs';\n\nimport type { Addon } from '@/models/Addon/Addon';\nimport type ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport type BasketAddonRow from '@/models/BasketAddonRow';\nimport type BasketRow from '@/models/BasketRow';\nimport type { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\n\nexport interface BasketContextType {\n selectedBasketRow: BasketRow;\n currentBasketRows: BasketRow[];\n basketAddonRows: BasketAddonRow[];\n loadedPromotion: IPromotion | null;\n\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n\n isLoadingPriceQuote: boolean;\n\n addBasketRow: (row: BasketRow) => void;\n addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;\n\n getAllValidRows: () => BasketRow[];\n getAllDatelessRows: () => BasketRow[];\n\n getNumberOfAdults: (withTranslation: boolean) => number | string;\n getNumberOfChildren: (withTranslation: boolean) => number | string;\n getNumberOfInfants: (withTranslation: boolean) => number | string;\n getNumberOfRooms: (withTranslation: boolean) => number | string;\n\n getTotalPrice: () => any;\n getTotalDeposit: () => number;\n getTotalFees: () => number;\n getTotalPayNow: () => number;\n\n updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;\n removeBasketRow: (row: BasketRow) => void;\n\n clearBasketRows: (confirm: boolean) => void;\n selectBasketRow: (row: BasketRow | null) => void;\n\n setStartDate: (date: dayjs.Dayjs) => void;\n setEndDate: (date: dayjs.Dayjs) => void;\n getBasketQuoteDetails: (confirmationStepIsActive: () => boolean) => void;\n\n hasCheckedOut: boolean;\n reservationData: ReservationsDTO;\n booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;\n rollback: () => void;\n checkedOut: (data: ReservationsDTO) => void;\n clearSelectedRates: () => void;\n finish: () => void;\n\n getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => void;\n\n removeBasketAddonRow: (row: BasketAddonRow) => void;\n attemptSelectUnfilledRow: () => BasketRow | undefined;\n\n initBasketRows: (basketRows: BasketRow[]) => void;\n}\n"]}
1
+ {"version":3,"file":"BasketContextType.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextType.ts"],"names":[],"mappings":"","sourcesContent":["import type dayjs from 'dayjs';\n\nimport type { Addon } from '@/models/Addon/Addon';\nimport type ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport type BasketAddonRow from '@/models/BasketAddonRow';\nimport type BasketRow from '@/models/BasketRow';\nimport type { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\n\nexport interface BasketContextType {\n selectedBasketRow: BasketRow;\n currentBasketRows: BasketRow[];\n basketAddonRows: BasketAddonRow[];\n loadedPromotion: IPromotion | null;\n\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n\n isLoadingPriceQuote: boolean;\n\n addBasketRow: (row: BasketRow) => void;\n addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;\n\n getAllValidRows: () => BasketRow[];\n getAllDatelessRows: () => BasketRow[];\n\n getNumberOfAdults: (withTranslation: boolean) => number | string;\n getNumberOfChildren: (withTranslation: boolean) => number | string;\n getNumberOfInfants: (withTranslation: boolean) => number | string;\n getNumberOfRooms: (withTranslation: boolean) => number | string;\n\n getTotalPrice: () => any;\n getTotalDeposit: () => number;\n getTotalFees: () => number;\n getTotalPayNow: () => number;\n\n updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;\n removeBasketRow: (row: BasketRow) => void;\n\n clearBasketRows: (confirm: boolean) => void;\n selectBasketRow: (row: BasketRow | null) => void;\n\n setStartDate: (date: dayjs.Dayjs) => void;\n setEndDate: (date: dayjs.Dayjs) => void;\n /**\n * @param preventApplyingOutcome a callback to check if calling function has decided that it no longer wants to apply the deposit\n * @returns\n */\n getBasketQuoteDetails: (preventApplyingOutcome: () => boolean) => void;\n\n hasCheckedOut: boolean;\n reservationData: ReservationsDTO;\n booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;\n rollback: () => void;\n checkedOut: (data: ReservationsDTO) => void;\n clearSelectedRates: () => void;\n finish: () => void;\n\n getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => void;\n\n removeBasketAddonRow: (row: BasketAddonRow) => void;\n attemptSelectUnfilledRow: () => BasketRow | undefined;\n\n initBasketRows: (basketRows: BasketRow[]) => void;\n\n onDatePickerOpenChange: (isOpen: boolean) => void;\n isDatePickerOpen: boolean;\n}\n"]}
@@ -99,6 +99,7 @@ function BasketContextWrapper(props) {
99
99
  loadedEndDate = initialSession.endDate;
100
100
  }
101
101
  }
102
+ const [isDatePickerOpen, setIsDatePickerOpen] = (0, react_1.useState)(false);
102
103
  const [startDate, setStartDate] = (0, react_1.useState)(loadedStartDate !== null && loadedStartDate !== void 0 ? loadedStartDate : null);
103
104
  const [endDate, setEndDate] = (0, react_1.useState)(loadedEndDate !== null && loadedEndDate !== void 0 ? loadedEndDate : null);
104
105
  const [hasCheckedOut, setHasCheckedOut] = (0, react_1.useState)(false);
@@ -407,7 +408,7 @@ function BasketContextWrapper(props) {
407
408
  }
408
409
  }
409
410
  }),
410
- getBasketQuoteDetails: (confirmationStepIsActive) => {
411
+ getBasketQuoteDetails: (preventApplyingOutcome) => {
411
412
  const maxRetryAttempts = 5;
412
413
  if (!hotel || !(hotel === null || hotel === void 0 ? void 0 : hotel.requireDeposit)) {
413
414
  return false;
@@ -428,7 +429,7 @@ function BasketContextWrapper(props) {
428
429
  retryableObservable.subscribe((quote) => {
429
430
  if (quote === null)
430
431
  return;
431
- if (!confirmationStepIsActive()) {
432
+ if (!preventApplyingOutcome()) {
432
433
  // User has left the Confirmation step before the quote was ready, we'll stop here instead of updating the basket.
433
434
  // If we don't stop here, the user will be redirected back to the Confirmation step.
434
435
  setIsLoadingPriceQuote(false);
@@ -631,6 +632,14 @@ function BasketContextWrapper(props) {
631
632
  addonRow.setChildQuantity(basketRow.getChildren());
632
633
  }
633
634
  }
635
+ // TODO: More hackyness to handle RMS Per Person Fee requirements
636
+ if (addon.pricingType === Addon_1.AddonPricingType.PER_ALL_PERSONS || addon.pricingType === Addon_1.AddonPricingType.PER_ALL_PERSONS_PER_NIGHT) {
637
+ const basketRow = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows[0];
638
+ if (basketRow) {
639
+ addonRow.setAdultQuantity(basketRow.getAdults());
640
+ addonRow.setChildQuantity(basketRow.getChildren());
641
+ }
642
+ }
634
643
  setBasketAddonRows([...basketAddonRows]);
635
644
  },
636
645
  removeBasketAddonRow: (row) => {
@@ -652,6 +661,12 @@ function BasketContextWrapper(props) {
652
661
  }
653
662
  // No available unfilled row found, return undefined
654
663
  },
664
+ // Callback triggered when the DatePicker open state changes.
665
+ onDatePickerOpenChange: (isOpen) => {
666
+ setIsDatePickerOpen(isOpen);
667
+ },
668
+ // Indicates whether the DatePicker is currently open.
669
+ isDatePickerOpen: isDatePickerOpen,
655
670
  };
656
671
  return (react_1.default.createElement(contexts_1.BasketContext.Provider, { value: workingContext },
657
672
  react_1.default.createElement(contexts_1.AuthenticationContextProvider, null,
@@ -1 +1 @@
1
- {"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAQ4B;AAC5B,2CAAkD;AAClD,yCAA8C;AAC9C,kDAAqC;AACrC,kFAA+E;AAC/E,uEAAuE;AACvE,uEAAuE;AACvE,kEAAgE;AAChE,+CAAwF;AACxF,iDAA+C;AAC/C,uDAA+C;AAC/C,0DAAuD;AACvD,+BAA4D;AAC5D,8CAA+D;AAC/D,0DAAuD;AAEvD,kEAAmC;AACnC,yDAA0D;AAC1D,qEAA6C;AAC7C,0FAAuF;AACvF,qHAAkH;AAClH,iEAA8D;AAC9D,gDAA+D;AAE/D,6EAAqD;AACrD,mEAA2C;AAG3C,kFAA0D;AAC1D,qFAA6D;AAC7D,wGAAgF;AAChF,qEAAsE;AACtE,iEAAyC;AACzC,8CAA2C;AAC3C,qEAA6C;AAC7C,qEAA6C;AAC7C,uEAA+C;AAK/C,SAAgB,oBAAoB,CAAC,KAAgC;;IACjE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,iBAAiB,GAAG,IAAA,gDAAwB,GAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,qBAAqB,GAAG,IAAA,gDAAwB,GAAE,CAAC;IACzD,MAAM,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,wBAAwB,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAE5G,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,8BAAmB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,+BAAoB,CAAC,CAAC;IAEnD,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAEjE,MAAM,cAAc,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,0CAAE,iBAAiB,EAAE,CAAC;IAE9D,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GAAG,IAAA,kBAAU,EAAC,6BAAa,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,mCAAI,EAAE,CAAC,CAAC;IAE1G,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,IAAI,CAAC,CAAC;IACnF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAmB,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAEtE,IAAI,eAAe,GAAuB,IAAI,CAAC;IAC/C,IAAI,aAAa,GAAuB,IAAI,CAAC;IAE7C,IAAI,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,0CAAE,MAAM,EAAE;QACpC,eAAe,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;QAC9D,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;KAC7D;SAAM;QACH,IAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,SAAS,EAAE;YAC3B,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;SAC9C;QAED,IAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,EAAE;YACzB,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC;SAC1C;KACJ;IAED,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAqB,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,IAAI,CAAC,CAAC;IACxF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAqB,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,IAAI,CAAC,CAAC;IAElF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAyB,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,KAAI,IAAI,CAAC,CAAC;IAEpH,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,IAAA,gBAAQ,EAAW,EAAE,CAAC,CAAC;IAE/E,qDAAyB,CAAC,0BAA0B,GAAG,CAAC,QAAkB,EAAE,EAAE;QAC1E,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACrB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;gBACxD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAErC,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC9B,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,EAAE;wBAC9D,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBAClC,cAAc,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;qBAC9C;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE;oBACzD,uBAAuB,CAAC,CAAC,QAAQ,EAAE,EAAE;wBACjC,OAAO,CAAC,GAAG,QAAQ,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;oBAClD,CAAC,CAAC,CAAC;iBACN;aACJ;iBAAM;gBACH,uBAAY,CAAC,GAAG,CAAC;oBACb,OAAO,EAAE,OAAO;iBACnB,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,qDAAyB,CAAC,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE;QAC7D,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,GAAG,CAAC,YAAY,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,kBAAkB,EAAE,KAAK,OAAO,EAAE;gBAC5F,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAChC,cAAc,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAC9C;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EACjC,IAAA,mBAAQ,EAAC,GAAG,EAAE;;QACV,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;YACxB,OAAO;SACV;QAED,mBAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjC,SAAS;YACT,OAAO;YACP,KAAK,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,SAAS,EAAE;YACrC,QAAQ,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW,EAAE;YAC1C,MAAM,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,UAAU,EAAE;SAC1C,CAAC,CAAC;QAEH,MAAA,SAAS,CAAC,eAAe,0CAAE,aAAa,CAAC;YACrC,SAAS;YACT,OAAO;SACV,CAAC,CAAC;QAEH,6EAA6E;QAC7E,cAAc,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC,GAAc,EAAE,EAAE;YAC3D,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAExB,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,gLAAgL;QAChL,iCAAiC;QACjC,IAAI,iBAAiB,EAAE;YACnB,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC1C,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEtC,cAAc,CAAC,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;SAC5D;aAAM,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YACvC,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC3C,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACtC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAElC,cAAc,CAAC,eAAe,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;SACxD;IACL,CAAC,EAAE,GAAG,CAAC,EACP,CAAC,SAAS,EAAE,OAAO,CAAC,CACvB,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,iBAAiB,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,YAAY,EAAE;YACd,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,KAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAA8B,CAAA,CAAC;YAEnF,mBAAmB;YACnB,IAAI,SAAS,IAAI,CAAC,CAAA,wBAAwB,aAAxB,wBAAwB,uBAAxB,wBAAwB,CAAE,6BAA6B,CAAA,EAAE;gBACvE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC/B,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC5B,eAAe,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;aACN;SACJ;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACX,MAAA,SAAS,CAAC,eAAe,0CAAE,aAAa,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAChF,CAAC,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE3C,MAAM,4BAA4B,GAAG,CAAC,GAAc,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;QACxE,IAAI,GAAG,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAA,IAAI,YAAY,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE;YAC1E,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAE5C,IAAI,CAAC,UAAU,EAAE;gBACb,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;aACvC;SACJ;IACL,CAAC,CAAC;IAEF,MAAM,+BAA+B,GAAG,CAAC,SAAgD,EAAE,WAAoB,EAAE,EAAE;QAC/G,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9H,IAAI,WAAW,EAAE;YACb,OAAO,sBAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;SACrE;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,CAAC,gBAA4B,EAAoB,EAAE;QACjF,IAAI,CAAC,iBAAiB,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC3C,iDAAiD;QACjD,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAExI,wDAAwD;QACxD,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhE,uCAAuC;QACvC,0DAA0D;QAC1D,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,GAAqB,EAAE,EAAE;QACpD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,eAAe,GAA2B,EAAE,CAAC;QACnD,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE;YAClB,IAAI,SAAS,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,YAAY,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,EAAE;gBACZ,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;aAClC;YACD,eAAe,CAAC,wCAAmB,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,yBAAe,CAAC,CAAC;YAChF,eAAe,CAAC,wCAAmB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,yBAAe,CAAC,CAAC;SAC1F;QACD,IAAI,GAAG,CAAC,YAAY,EAAE;YAAE,eAAe,CAAC,wCAAmB,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5F,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,SAAS;YAAE,eAAe,CAAC,wCAAmB,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClH,IAAI,GAAG,CAAC,SAAS,EAAE,KAAK,SAAS;YAAE,eAAe,CAAC,wCAAmB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC;QAE5G,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAc,EAAE,iBAAiB,GAAG,IAAI,EAAE,EAAE;QACjE,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAE3B,IAAI,iBAAiB,IAAI,GAAG,CAAC,KAAK,EAAE,MAAK,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,EAAE,CAAA,EAAE;YACjE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YACjC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;SAChC;QAED,yHAAyH;QACzH,kDAAkD;QAClD,4BAA4B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAExC,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,GAAe,EAAE,EAAE;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,SAAS,IAAI,OAAO,EAAE;YACpE,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC3B;aAAM,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE;YACzE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;YACjC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;SAChC;IACL,CAAC,CAAC;IAEF,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,yCAAqB,EAAC,EAAE,iBAAiB,EAAE,iBAA8B,EAAE,eAAe,EAAE,CAAC,CAAC;IAE1H,MAAM,oBAAoB,GACtB,CAAC,EACG,gBAAgB,GAAG,CAAC,EACpB,eAAe,GAAG,CAAC,MAInB,EAAE,EAAE,EAAE,CACV,CAAC,QAAyB,EAAE,EAAE;QAC1B,OAAO,QAAQ,CAAC,IAAI,CAChB,IAAA,oBAAQ,EAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAClB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,YAAY,GAAG,gBAAgB,EAAE;gBACjC,OAAO,IAAA,iBAAU,EAAC,KAAK,CAAC,CAAC;aAC5B;YACD,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,iBAAiB,eAAe,IAAI,CAAC,CAAC;YACzE,OAAO,IAAA,YAAK,EAAC,eAAe,CAAC,CAAC;QAClC,CAAC,CAAC,EACF,IAAA,oBAAQ,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAC9C,CAAC;IACN,CAAC,CAAC;IAEN,MAAM,cAAc,GAAsB;QACtC,SAAS,EAAE,SAAkB;QAC7B,OAAO,EAAE,OAAgB;QAEzB,iBAAiB,EAAE,iBAA8B;QACjD,iBAAiB;QACjB,eAAe;QAEf,aAAa;QACb,eAAe,EAAE,eAAkC;QACnD,mBAAmB;QAEnB,eAAe;QAEf;;;;;;;;;;;;;;WAcG;QACH,YAAY,EAAE,CAAC,GAAc,EAAE,EAAE;YAC7B,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC3B,4BAA4B,CAAC,GAAG,CAAC,CAAC;YAElC,6CAA6C;YAC7C,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC9C,IAAI,WAAW,EAAE;gBACb,+DAA+D;gBAC/D,oBAAoB,CAAC,GAAG,CAAC,CAAC;aAC7B;iBAAM;gBACH,IAAI,iBAAiB,EAAE;oBACnB,+DAA+D;oBAC/D,MAAM,yBAAyB,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBACnF,IAAI,yBAAyB,EAAE;wBAC3B,sEAAsE;wBACtE,oBAAoB,CAAC,GAAG,CAAC,CAAC;qBAC7B;iBACJ;qBAAM;oBACH,8EAA8E;oBAC9E,oBAAoB,CAAC,GAAG,CAAC,CAAC;iBAC7B;aACJ;YACD,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,cAAc,EAAE,CAAC,IAAiB,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAChC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC/B,gBAAgB,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;QACP,CAAC;QAED,4IAA4I;QAC5I,OAAO,EAAE,CAAO,IAAc,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE;YAC7C,IAAI,SAAS,GAAqB,IAAI,CAAC;YACvC,IAAI,iBAAyB,CAAC;YAE9B,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,iBAAiB,EAAE;gBACnB,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;gBACtC,SAAS,GAAG,iBAAiB,CAAC;gBAC9B,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE;oBAC7B,iBAAiB,GAAG,yBAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC;iBAChE;qBAAM;oBACH,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,IAAI,iBAAiB,CAAC,UAAU,EAAE,EAAE;wBACrE,iBAAiB,CAAC,YAAY,CAAC,SAAkB,CAAC,CAAC;wBACnD,iBAAiB,CAAC,UAAU,CAAC,OAAgB,CAAC,CAAC;qBAClD;oBAED,iBAAiB,GAAG,yBAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC;iBAC9D;aACJ;iBAAM;gBACH,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;oBACxB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACpD,OAAO;iBACV;gBAED,SAAS,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,CAAC;gBAEhC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAClC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAE9B,iBAAiB,GAAG,yBAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC;aAC9D;YAED,IAAI,gCAAsB,CAAC,QAAQ,EAAE,EAAE;gBACnC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,+CAA+C;gBACxE,MAAM,GAAG,MAAM,oBAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,CAAC,CAAC;aAC/E;YAED,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAClE,SAAS,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;YAE3C,gBAAgB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YAE9D,IAAI;gBACA,mBAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,SAAS,CAAC,YAAY,EAAE,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;aACzJ;YAAC,OAAO,EAAE,EAAE;gBACT,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;aACpD;YAED,IAAI,MAAM,EAAE;gBACR,aAAa,CAAC,eAAe,CAAC;oBAC1B,IAAI,EAAE,eAAQ,CAAC,GAAG;oBAClB,QAAQ,EAAE,CACN,8BAAC,cAAI,IAAC,MAAM;wBACP,CAAC,CAAC,iBAAiB,CAAC;;wBAAE,0CAAQ,SAAS,EAAC,oBAAoB,IAAE,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAU,CACzF,CACV;iBACJ,CAAC,CAAC;aACN;YAED,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAC;YAClD,IAAI,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,EAAE,CAAA,EAAE;gBAC3B,2DAA2D;gBAC3D,8DAA8D;gBAC9D,oBAAoB,CAAC,aAAa,CAAC,CAAC;aACvC;iBAAM;gBACH,2CAA2C;gBAC3C,qFAAqF;gBACrF,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAE3B,+DAA+D;gBAC/D,MAAM,eAAe,GAAG,qBAAW,CAAC,cAAc,CAAC,IAAA,qBAAW,GAAE,CAAC,KAAK,mBAAS,CAAC,UAAU,EAAE,CAAC;gBAE7F,IAAI,eAAe,EAAE;oBACjB,IAAI,MAAM,CAAC,MAAM,EAAE;wBACf,qBAAqB,CAAC,mBAAS,CAAC,UAAU,EAAE,CAAC,CAAC;qBACjD;yBAAM;wBACH,qBAAqB,CAAC,qBAAW,CAAC,cAAc,CAAC,mBAAS,CAAC,CAAC,CAAC;qBAChE;iBACJ;qBAAM;oBACH,qBAAqB,CAAC,qBAAW,CAAC,cAAc,CAAC,IAAA,qBAAW,GAAE,CAAC,CAAC,CAAC;iBACpE;aACJ;QACL,CAAC,CAAA;QAED,qBAAqB,EAAE,CAAC,wBAAwB,EAAE,EAAE;YAChD,MAAM,gBAAgB,GAAG,CAAC,CAAC;YAE3B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAA,EAAE;gBAClC,OAAO,KAAK,CAAC;aAChB;YAED,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAE7B,yCAAyC;YACzC,0FAA0F;YAC1F,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,GAAG,CAAC,YAAY,EAAE;oBAClB,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;oBAC7B,eAAe,CAAC,GAAG,CAAC,CAAC;iBACxB;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,GAAG,EAAE,CACjB,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,oBAAG,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAC/H,IAAA,qBAAS,EACL,oBAAoB,CAAC;gBACjB,gBAAgB,EAAE,gBAAgB;aACrC,CAAC,CACL,CACJ,CAAC;YAEN,MAAM,mBAAmB,GAAG,OAAO,EAAE,CAAC;YAEtC,mBAAmB,CAAC,SAAS,CACzB,CAAC,KAAK,EAAE,EAAE;gBACN,IAAI,KAAK,KAAK,IAAI;oBAAE,OAAO;gBAE3B,IAAI,CAAC,wBAAwB,EAAE,EAAE;oBAC7B,kHAAkH;oBAClH,oFAAoF;oBACpF,sBAAsB,CAAC,KAAK,CAAC,CAAC;oBAC9B,OAAO;iBACV;gBAED,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;oBAC/B,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAElF,IAAI,CAAC,SAAS,EAAE;wBACZ,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAC/D,SAAS;qBACZ;oBAED,SAAS,CAAC,YAAY,GAAG,QAAQ,CAAC;oBAClC,eAAe,CAAC,SAAS,CAAC,CAAC;iBAC9B;YACL,CAAC,EACD,CAAC,KAAU,EAAE,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,gBAAgB,mBAAmB,CAAC,CAAC;YACzE,CAAC,EACD,GAAG,EAAE;gBACD,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC,CACJ,CAAC;QACN,CAAC;QAED;;;;WAIG;QACH,eAAe,EAAE,GAAG,EAAE;YAClB,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,kBAAkB,EAAE,GAAG,EAAE;YACrB,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,iBAAiB,EAAE,CAAC,eAAe,GAAG,KAAK,EAAE,EAAE;YAC3C,OAAO,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChI,CAAC;QAED,mBAAmB,EAAE,CAAC,eAAe,GAAG,KAAK,EAAE,EAAE;YAC7C,OAAO,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClI,CAAC;QAED,kBAAkB,EAAE,CAAC,eAAe,GAAG,KAAK,EAAE,EAAE;YAC5C,OAAO,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClI,CAAC;QAED,gBAAgB,EAAE,CAAC,eAAe,GAAG,KAAK,EAAE,EAAE;YAC1C,OAAO,+BAA+B,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/H,CAAC;QAED,aAAa,EAAE,GAAG,EAAE;YAChB,IAAI,UAAU,GAAG,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAE,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,aAAa,EAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAW,CAAC;YAEtI,8HAA8H;YAC9H,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,KAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,yBAAyB,CAAA,EAAE;gBAC5D,MAAM,WAAW,GAAG,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAE,MAAA,GAAG,CAAC,YAAY,0CAAE,SAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAW,CAAC;gBACzI,UAAU,IAAI,WAAW,CAAC;aAC7B;YAED,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,UAAU,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,eAAe,EAAE,GAAG,EAAE;YAClB,MAAM,YAAY,GAAG,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAE,MAAA,GAAG,CAAC,YAAY,0CAAE,YAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAW,CAAC;YAC7I,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,YAAY,EAAE,GAAG,EAAE;YACf,IAAI,SAAS,GAAG,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAE,MAAA,GAAG,CAAC,OAAO,EAAE,0CAAE,YAAY,EAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAW,CAAC;YAEpI,IAAI,SAAS,IAAI,CAAC,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAA,EAAE;gBACzC,2GAA2G;gBAC3G,SAAS,GAAG,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAE,MAAA,GAAG,CAAC,YAAY,0CAAE,SAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAW,CAAC;aACpI;YAED,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5B,SAAS,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,cAAc,EAAE,GAAG,EAAE;YACjB,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE;gBACvB,MAAM,WAAW,GAAG,+BAA+B,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAE,MAAA,GAAG,CAAC,YAAY,0CAAE,SAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAW,CAAC;gBACzI,OAAO,cAAc,CAAC,eAAe,EAAE,GAAG,WAAW,CAAC;aACzD;YAED,OAAO,cAAc,CAAC,aAAa,EAAE,CAAC;QAC1C,CAAC;QAED;;WAEG;QACH,eAAe,EAAE,CAAC,GAAc,EAAE,EAAE;YAChC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAEnD,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAE5C,IAAI,iBAAiB,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,iBAAiB,CAAC,KAAK,EAAE,EAAE;gBAChE,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;gBAC1D,IAAI,kBAAkB,EAAE;oBACpB,YAAY,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC;oBAChD,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC;iBAC/C;gBACD,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;aAC5C;YAED,IAAI,iBAAiB,KAAK,CAAC,EAAE;gBACzB,cAAc,CAAC,YAAY,CAAC,IAAI,mBAAS,EAAE,CAAC,CAAC;aAChD;QACL,CAAC;QAED,eAAe,EAAE,CAAC,OAAgB,EAAE,EAAE;YAClC,IAAI,OAAO,EAAE;gBACT,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;aACzC;QACL,CAAC;QAED,eAAe;QAEf;;;;;;;WAOG;QACH,eAAe,EAAE,CAAO,GAAqB,EAAE,EAAE;YAC7C,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;gBACtB,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;gBACjC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC7B,iCAAiC;gBACjC,oBAAoB,CAAC,GAAG,CAAC,CAAC;aAC7B;iBAAM;gBACH,sEAAsE;gBACtE,oBAAoB,CAAC,yBAAyB,EAAE,CAAC,CAAC;aACrD;QACL,CAAC,CAAA;QAED,YAAY;QACZ,UAAU;QAEV,MAAM,EAAE,CAAO,IAAqB,EAAE,WAAkD,EAAE,EAAE;;YACxF,MAAM,YAAY,GAA6B,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAErE,IAAI,WAAW,EAAE;gBACb,YAAY,CAAC,kBAAkB,GAAG,WAAW,CAAC;aACjD;YAED,MAAM,CAAA,MAAA,SAAS,CAAC,eAAe,0CAAE,kBAAkB,CAAC,YAAY,CAAC,CAAA,CAAC;YAClE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAA;QAED,QAAQ,EAAE,GAAG,EAAE;;YACX,MAAA,SAAS,CAAC,eAAe,0CAAE,aAAa,CAAC;gBACrC,WAAW,EAAE,SAAS;aACzB,CAAC,CAAC;YACH,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,UAAU,EAAE,CAAC,IAAqB,EAAE,EAAE;;YAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAEtC,MAAM,GAAG,GAAG,IAAI,mBAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,YAAY,CAAC,IAAA,eAAK,GAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACxC,GAAG,CAAC,UAAU,CAAC,IAAA,eAAK,GAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAEtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAEvB,MAAM,eAAe,GAAG,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,0CAAE,kBAAkB,EAAE,CAAC;YAChE,eAAe,CAAC,aAAa,EAAE,CAAC;YAChC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,UAAU,CAAC,SAAS,EAAE,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,0CAAE,SAAS,EAAE,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;YAC7E,QAAQ,CAAC,oBAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,EAAE,GAAG,EAAE;YACT,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED;;WAEG;QACH,kBAAkB,EAAE,GAAG,EAAE;YACrB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,cAAc,EAAE,CAAC,aAAa,EAAE,EAAE;YAC9B,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC7B,OAAO;aACV;YACD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,QAAQ,EAAE,0CAAE,IAAI,OAAK,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAA,CAAA,EAAA,CAAC,CAAC;QACnF,CAAC;QAED,kBAAkB,EAAE,CAAC,KAAY,EAAE,UAA8D,EAAE,YAAoB,EAAE,YAAoB,EAAE,EAAE;;YAC7I,IAAI,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,QAAQ,EAAE,0CAAE,IAAI,MAAK,KAAK,CAAC,IAAI,CAAA,EAAA,CAAC,CAAC;YAC9E,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACxB,QAAQ,GAAG,IAAI,wBAAc,CAAC,KAAK,CAAC,CAAC;gBACrC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAClC;YAED,QAAQ,CAAC,WAAW,CAAC,MAAA,UAAU,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC;YAC/C,QAAQ,CAAC,gBAAgB,CAAC,MAAA,UAAU,CAAC,KAAK,mCAAI,CAAC,CAAC,CAAC;YACjD,QAAQ,CAAC,gBAAgB,CAAC,MAAA,UAAU,CAAC,KAAK,mCAAI,CAAC,CAAC,CAAC;YACjD,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACvC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAEpG,yDAAyD;YACzD,IAAI,KAAK,CAAC,WAAW,KAAK,wBAAgB,CAAC,6BAA6B,EAAE;gBACtE,0FAA0F;gBAC1F,MAAM,SAAS,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,SAAS,EAAE;oBACX,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;iBACpD;aACJ;YAED,IAAI,KAAK,CAAC,WAAW,KAAK,wBAAgB,CAAC,6BAA6B,EAAE;gBACtE,0FAA0F;gBAC1F,MAAM,SAAS,GAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,SAAS,EAAE;oBACX,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;iBACtD;aACJ;YAED,kBAAkB,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,oBAAoB,EAAE,CAAC,GAAmB,EAAE,EAAE;YAC1C,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED;;;;;;WAMG;QACH,wBAAwB,EAAE,GAA0B,EAAE;YAClD,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC;YACxC,IAAI,GAAG,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,EAAE,CAAA,EAAE;gBACxB,mFAAmF;gBACnF,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,GAAG,CAAC;aACd;YACD,oDAAoD;QACxD,CAAC;KACJ,CAAC;IAEF,OAAO,CACH,8BAAC,wBAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,cAAc;QACzC,8BAAC,wCAA6B;YACzB,KAAK,CAAC,QAAQ;YACf,8BAAC,qCAAiB,OAAG;YACpB,kBAAkB,IAAI,8BAAC,uDAA0B,IAAC,iBAAiB,EAAE,iBAAiB,GAAI,CAC/D,CACX,CAC5B,CAAC;AACN,CAAC;AArsBD,oDAqsBC","sourcesContent":["import {\n AuthenticationContextProvider,\n BasketContext,\n BasketContextType,\n BookingEngineContext,\n ErrorHandler,\n HotelOverridesContext,\n NotificationContext,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { API_DATE_FORMAT } from 'api/BaseAPI';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport { useUpdateQueryParameters } from 'hooks/UpdateQueryParameters';\nimport { EAppQueryParameters } from 'models/AppQueryParameters';\nimport React, { useCallback, useContext, useEffect, useReducer, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport { defer, Observable, throwError, timer } from 'rxjs';\nimport { finalize, mergeMap, retryWhen } from 'rxjs/operators';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text from '@/components/generic/Text';\nimport { MemberSignInModal } from '@/components/members/SignInModal/MemberSignInModal';\nimport { PromoCodeVerificationAlert } from '@/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport { Addon, AddonPricingType } from '@/models/Addon/Addon';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport StepAddon from '@/pages/steps/StepAddon/StepAddon';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport { usePromotionContainer } from '@/providers/PromotionProvider';\nimport DataLayer from '@/util/DataLayer';\nimport { debounce } from '@/util/Debounce';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StepManager from '@/util/StepManager';\nimport StringHelper from '@/util/StringHelper';\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const updateQueryParams = useUpdateQueryParameters();\n const navigate = useNavigate();\n const historyConsistentPush = useHistoryConsistentPush();\n const { signedInUser, isExternalMemberHotel, memberNumber, memberOnlyModalPromotion } = useSignedInMember();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n\n const { showPromoCodeAlert } = useContext(HotelOverridesContext);\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow | null>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n const [isLoadingPriceQuote, setIsLoadingPriceQuote] = useState(false);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(initialSession?.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n const debounceUseEffect = useCallback(\n debounce(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n DataLayer.instance.sendDateSelection({\n startDate,\n endDate,\n adult: selectedBasketRow?.getAdults(),\n children: selectedBasketRow?.getChildren(),\n infant: selectedBasketRow?.getInfants(),\n });\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n //When trying to call row.discardGuestsState() in somewhere, we got conflicted here with BasketRow.setStartDate& BasketRow.setEndDate, it set back to previous startDate/endDate\n //Use debounceUseEffect to fix it\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, 500),\n [startDate, endDate]\n );\n\n useEffect(() => {\n debounceUseEffect();\n }, [debounceUseEffect]);\n\n useEffect(() => {\n if (signedInUser) {\n const promoCode = signedInUser.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n updateBasketRow(row);\n });\n }\n }\n }, [signedInUser]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow, skipUpdate = false) => {\n if (row && hotel?.memberOnlyPromoCode && signedInUser && !row.getPromoCode()) {\n row.setPromoCode(hotel.memberOnlyPromoCode);\n\n if (!skipUpdate) {\n workingContext.updateBasketRow(row);\n }\n }\n };\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (deletedBasketRow?: BasketRow): BasketRow | null => {\n if (!currentBasketRows.length) return null;\n // Filter out the excluded basket row if provided\n const filteredRows = deletedBasketRow ? currentBasketRows.filter((row) => row.getID() !== deletedBasketRow.getID()) : currentBasketRows;\n\n // Find the first row that does not have a rate assigned\n const availableRow = filteredRows.find((row) => !row.getRate());\n\n // Return a row without a rate if found\n // If no such row exists , return the last row in the list\n return availableRow ?? filteredRows[filteredRows.length - 1];\n };\n\n const updateQueryParameters = (row: BasketRow | null) => {\n if (!row) return;\n const queryParameters: Record<string, string> = {};\n if (row.getEndDate()) {\n let startDate = selectedBasketRow?.getStartDate();\n if (!startDate) {\n startDate = row.getStartDate();\n }\n queryParameters[EAppQueryParameters.Arrive] = startDate.format(API_DATE_FORMAT);\n queryParameters[EAppQueryParameters.Depart] = row.getEndDate().format(API_DATE_FORMAT);\n }\n if (row.getPromoCode()) queryParameters[EAppQueryParameters.PromoCode] = row.getPromoCode();\n if (row.getChildren() !== undefined) queryParameters[EAppQueryParameters.Children] = row.getChildren().toString();\n if (row.getAdults() !== undefined) queryParameters[EAppQueryParameters.Adults] = row.getAdults().toString();\n\n updateQueryParams(queryParameters);\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n updateQueryParameters(row);\n\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n // Here we check if there is no promocode on the row. If there isn't this function will check for existing member details\n // and automatically apply a member only promocode\n checkAndApplyMemberOnlyPromo(row, true);\n\n basketRowReducer({ method: 'Update', row });\n };\n\n const syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const genericRetryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 0,\n }: {\n maxRetryAttempts?: number;\n scalingDuration?: number;\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n if (retryAttempt > maxRetryAttempts) {\n return throwError(error);\n }\n console.log(`Attempt ${retryAttempt}: retrying in ${scalingDuration}ms`);\n return timer(scalingDuration);\n }),\n finalize(() => console.log('We are done!'))\n );\n };\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\n isLoadingPriceQuote,\n\n loadedPromotion,\n\n /**\n * Adds a new basket row and applies relevant updates:\n * - Synchronizes the selected date range.\n * - Applies any applicable member-only promotions.\n * - Ensures proper selection logic for the basket row.\n *\n * Selection logic:\n * - If the basket is empty, the newly added row is automatically selected.\n * - If a row is already selected:\n * - If the selected row has an assigned rate, update the selection to the new row.\n * - Otherwise, keep the current selection (allowing continued editing of the existing row).\n * - If no row is selected, set the new row as the selected row.\n *\n * @param {BasketRow} row - The basket row to add.\n */\n addBasketRow: (row: BasketRow) => {\n syncSelectedDateRange(row);\n checkAndApplyMemberOnlyPromo(row);\n\n // Determine if the basket is currently empty\n const isEmptyRows = !currentBasketRows.length;\n if (isEmptyRows) {\n // If empty, set the newly added row as the selected basket row\n setSelectedBasketRow(row);\n } else {\n if (selectedBasketRow) {\n // Determine if the currently selected row has an assigned rate\n const isSelectedRowAssignedRate = selectedBasketRow && selectedBasketRow.getRate();\n if (isSelectedRowAssignedRate) {\n // If the selected row has a rate, update the selection to the new row\n setSelectedBasketRow(row);\n }\n } else {\n // If no row is currently selected, set the new row as the selected basket row\n setSelectedBasketRow(row);\n }\n }\n basketRowReducer({ method: 'Add', row });\n },\n\n initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow | null = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n selectedBasketRow.setPreGuestsState();\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel?.hotelID as string);\n }\n\n basketRow.setAuxiliaryFilter(beContext.currentGroupedRoomFilters);\n beContext.setCurrentGroupedRoomFilters({});\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate ?? basketRow.getStartDate(), endDate ?? basketRow.getEndDate());\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow();\n if (!nextAvailable?.getRate()) {\n // If the next available row does not have a rate assigned,\n // set it as the selected basket row to allow rate assignment.\n setSelectedBasketRow(nextAvailable);\n } else {\n // If all rows already have a rate assigned\n // Set the selected basket row to null, ensuring that no row is selected for editing.\n setSelectedBasketRow(null);\n\n // Determine whether the next step is an add-on selection step.\n const isNextStepAddon = StepManager.getNextStepUrl(getStepRoom()) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n historyConsistentPush(StepAddon.getStepUrl());\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(getStepRoom()));\n }\n }\n },\n\n getBasketQuoteDetails: (confirmationStepIsActive) => {\n const maxRetryAttempts = 5;\n\n if (!hotel || !hotel?.requireDeposit) {\n return false;\n }\n\n setIsLoadingPriceQuote(true);\n\n // Clear currently assigned quote details\n // If we're fetching basket row information the currently held info should be disregarded.\n currentBasketRows.forEach((row) => {\n if (row.quoteDetails) {\n row.quoteDetails = undefined;\n updateBasketRow(row);\n }\n });\n\n const getData = () =>\n defer(() => API.Reservation.getPriceQuote(hotel.hotelID, currentBasketRows, isExternalMemberHotel ? memberNumber : undefined)).pipe(\n retryWhen(\n genericRetryStrategy({\n maxRetryAttempts: maxRetryAttempts,\n })\n )\n );\n\n const retryableObservable = getData();\n\n retryableObservable.subscribe(\n (quote) => {\n if (quote === null) return;\n\n if (!confirmationStepIsActive()) {\n // User has left the Confirmation step before the quote was ready, we'll stop here instead of updating the basket.\n // If we don't stop here, the user will be redirected back to the Confirmation step.\n setIsLoadingPriceQuote(false);\n return;\n }\n\n for (const quoteRow of quote.rows) {\n const basketRow = currentBasketRows.find((row) => row.getID() === quoteRow.rowId);\n\n if (!basketRow) {\n console.warn('API Returned unfamiliar row ID', quoteRow.rowId);\n continue;\n }\n\n basketRow.quoteDetails = quoteRow;\n updateBasketRow(basketRow);\n }\n },\n (error: any) => {\n console.log(error);\n console.log(`Error!: Retried ${maxRetryAttempts} times then quit!`);\n },\n () => {\n setIsLoadingPriceQuote(false);\n }\n );\n },\n\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfInfants: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getInfants(), withTranslation ? Translation.Step.Date.Infant : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 0)) as number;\n\n // If the hotel requires a deposit, and enableCreditCardSurchase is false, we need to add the deposit fees to the total price.\n if (hotel?.requireDeposit && !hotel?.enableCreditCardSurcharge) {\n const depositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n totalPrice += depositFees;\n }\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n\n return totalPrice;\n },\n\n getTotalDeposit: () => {\n const totalDeposit = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalDeposit as number) : 0)) as number;\n return totalDeposit;\n },\n\n getTotalFees: () => {\n let totalFees = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalFees() as number) : 0)) as number;\n\n if (totalFees == 0 && hotel?.requireDeposit) {\n // Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.\n totalFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n }\n\n basketAddonRows.forEach((row) => {\n totalFees += row.getTotalFees();\n });\n\n return totalFees;\n },\n\n getTotalPayNow: () => {\n if (hotel?.requireDeposit) {\n const depositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return workingContext.getTotalDeposit() + depositFees;\n }\n\n return workingContext.getTotalPrice();\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n const availableBasketRow = getNextAvailableBasketRow(row);\n if (availableBasketRow) {\n setStartDate(availableBasketRow.getStartDate());\n setEndDate(availableBasketRow.getEndDate());\n }\n setSelectedBasketRow(availableBasketRow);\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow());\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Selects the given basket row and updates all relevant inputs (e.g., start date and end date).\n * - If the provided row is valid, it updates the selected row and sets the corresponding dates.\n * - If the row is null or invalid, it attempts to select the next available basket row.\n *\n * @param {BasketRow | null} row - The basket row to be selected.\n * @returns {Promise<void>} A promise that resolves when the selection is complete.\n */\n selectBasketRow: async (row: BasketRow | null) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n // Update the selected basket row\n setSelectedBasketRow(row);\n } else {\n // If the row is invalid or null, select the next available basket row\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: async (data: ReservationsDTO, requestData: RoomstaySession['reservationRequest']) => {\n const updateObject: Partial<RoomstaySession> = { reservation: data };\n\n if (requestData) {\n updateObject.reservationRequest = requestData;\n }\n\n await beContext.sessionProvider?.updateSessionAsync(updateObject);\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: undefined,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n navigate(StepThanks.getStepUrl());\n },\n\n finish: () => {\n setReservationData(null);\n setHasCheckedOut(false);\n },\n\n /**\n * Set the selected basket row to null, ensuring that no row is selected for editing.\n */\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n /**\n * Attempts to select the next available basket row that does not have a rate assigned.\n * If such a row is found, it updates the selected basket row and returns it.\n * Otherwise, it does nothing.\n *\n * @returns {BasketRow | undefined} The selected basket row without a rate, or undefined if none is found.\n */\n attemptSelectUnfilledRow: (): BasketRow | undefined => {\n const row = getNextAvailableBasketRow();\n if (row && !row?.getRate()) {\n // Select the first available row without a rate and update the selected basket row\n setSelectedBasketRow(row);\n return row;\n }\n // No available unfilled row found, return undefined\n },\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n <AuthenticationContextProvider>\n {props.children}\n <MemberSignInModal />\n {showPromoCodeAlert && <PromoCodeVerificationAlert selectedBasketRow={selectedBasketRow} />}\n </AuthenticationContextProvider>\n </BasketContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"BasketContextWrapper.js","sourceRoot":"/","sources":["src/contexts/BasketContext/BasketContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n AuthenticationContextProvider,\n BasketContext,\n BasketContextType,\n BookingEngineContext,\n ErrorHandler,\n HotelOverridesContext,\n NotificationContext,\n} from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { API_DATE_FORMAT } from 'api/BaseAPI';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport { useUpdateQueryParameters } from 'hooks/UpdateQueryParameters';\nimport { EAppQueryParameters } from 'models/AppQueryParameters';\nimport React, { useCallback, useContext, useEffect, useReducer, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { BasketReducer } from 'reducers/BasketReducer';\nimport { defer, Observable, throwError, timer } from 'rxjs';\nimport { finalize, mergeMap, retryWhen } from 'rxjs/operators';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text from '@/components/generic/Text';\nimport { MemberSignInModal } from '@/components/members/SignInModal/MemberSignInModal';\nimport { PromoCodeVerificationAlert } from '@/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport { Addon, AddonPricingType } from '@/models/Addon/Addon';\nimport ReservationsDTO from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession } from '@/models/RoomstaySession';\nimport StepAddon from '@/pages/steps/StepAddon/StepAddon';\nimport StepThanks from '@/pages/steps/StepThanks/StepThanks';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport { usePromotionContainer } from '@/providers/PromotionProvider';\nimport DataLayer from '@/util/DataLayer';\nimport { debounce } from '@/util/Debounce';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StepManager from '@/util/StepManager';\nimport StringHelper from '@/util/StringHelper';\nexport interface BasketContextWrapperProps {\n children: React.ReactNode;\n}\n\nexport function BasketContextWrapper(props: BasketContextWrapperProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const updateQueryParams = useUpdateQueryParameters();\n const navigate = useNavigate();\n const historyConsistentPush = useHistoryConsistentPush();\n const { signedInUser, isExternalMemberHotel, memberNumber, memberOnlyModalPromotion } = useSignedInMember();\n\n const notifications = useContext(NotificationContext);\n const beContext = useContext(BookingEngineContext);\n\n const { showPromoCodeAlert } = useContext(HotelOverridesContext);\n\n const initialSession = beContext?.engine?.getInitialSession();\n\n const [currentBasketRows, basketRowReducer] = useReducer(BasketReducer, initialSession?.basketRows ?? []);\n\n const [selectedBasketRow, setSelectedBasketRow] = useState<BasketRow | null>(null);\n const [basketAddonRows, setBasketAddonRows] = useState<BasketAddonRow[]>([]);\n const [isLoadingPriceQuote, setIsLoadingPriceQuote] = useState(false);\n\n let loadedStartDate: dayjs.Dayjs | null = null;\n let loadedEndDate: dayjs.Dayjs | null = null;\n\n if (initialSession?.basketRows?.length) {\n loadedStartDate = initialSession.basketRows[0].getStartDate();\n loadedEndDate = initialSession.basketRows[0].getEndDate();\n } else {\n if (initialSession?.startDate) {\n loadedStartDate = initialSession.startDate;\n }\n\n if (initialSession?.endDate) {\n loadedEndDate = initialSession.endDate;\n }\n }\n\n const [isDatePickerOpen, setIsDatePickerOpen] = useState<boolean>(false);\n const [startDate, setStartDate] = useState<dayjs.Dayjs | null>(loadedStartDate ?? null);\n const [endDate, setEndDate] = useState<dayjs.Dayjs | null>(loadedEndDate ?? null);\n\n const [hasCheckedOut, setHasCheckedOut] = useState(false);\n const [reservationData, setReservationData] = useState<ReservationsDTO | null>(initialSession?.reservation || null);\n\n const [knownErrorPromoCodes, setKnownErrorPromoCodes] = useState<string[]>([]);\n\n BasketContextErrorHandler.handleAvailabilityWarnings = (warnings: string[]) => {\n warnings.map((warning) => {\n if (warning.toLowerCase().startsWith('invalid promo code')) {\n const promoCode = warning.substr(20);\n\n currentBasketRows.forEach((row) => {\n if (promoCode.toLowerCase() === row.getPromoCode().toLowerCase()) {\n row.setPromoCodeStatus('invalid');\n workingContext.updateBasketRow(row, false);\n }\n });\n\n if (!knownErrorPromoCodes.includes(promoCode.toUpperCase())) {\n setKnownErrorPromoCodes((oldCodes) => {\n return [...oldCodes, promoCode.toUpperCase()];\n });\n }\n } else {\n ErrorHandler.add({\n message: warning,\n });\n }\n });\n };\n\n BasketContextErrorHandler.handlePromoSuccess = (promo: string) => {\n currentBasketRows.forEach((row) => {\n if (row.getPromoCode() === promo && row.getPromoCode() && row.getPromoCodeStatus() !== 'valid') {\n row.setPromoCodeStatus('valid');\n workingContext.updateBasketRow(row, false);\n }\n });\n };\n\n const debounceUseEffect = useCallback(\n debounce(() => {\n if (!startDate || !endDate) {\n return;\n }\n\n DataLayer.instance.sendDateSelection({\n startDate,\n endDate,\n adult: selectedBasketRow?.getAdults(),\n children: selectedBasketRow?.getChildren(),\n infant: selectedBasketRow?.getInfants(),\n });\n\n beContext.sessionProvider?.updateSession({\n startDate,\n endDate,\n });\n\n // TODO re-visit this as we don't want to set dates for everything constantly\n workingContext.getAllDatelessRows().forEach((row: BasketRow) => {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n\n workingContext.updateBasketRow(row);\n });\n\n //When trying to call row.discardGuestsState() in somewhere, we got conflicted here with BasketRow.setStartDate& BasketRow.setEndDate, it set back to previous startDate/endDate\n //Use debounceUseEffect to fix it\n if (selectedBasketRow) {\n selectedBasketRow.setStartDate(startDate);\n selectedBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(selectedBasketRow, false);\n } else if (currentBasketRows.length === 1) {\n const onlyBasketRow = currentBasketRows[0];\n onlyBasketRow.setStartDate(startDate);\n onlyBasketRow.setEndDate(endDate);\n\n workingContext.updateBasketRow(onlyBasketRow, false);\n }\n }, 500),\n [startDate, endDate]\n );\n\n useEffect(() => {\n debounceUseEffect();\n }, [debounceUseEffect]);\n\n useEffect(() => {\n if (signedInUser) {\n const promoCode = signedInUser.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n updateBasketRow(row);\n });\n }\n }\n }, [signedInUser]);\n\n useEffect(() => {\n beContext.sessionProvider?.updateSession({ basketRows: currentBasketRows });\n }, [currentBasketRows, selectedBasketRow]);\n\n const checkAndApplyMemberOnlyPromo = (row: BasketRow, skipUpdate = false) => {\n if (row && hotel?.memberOnlyPromoCode && signedInUser && !row.getPromoCode()) {\n row.setPromoCode(hotel.memberOnlyPromoCode);\n\n if (!skipUpdate) {\n workingContext.updateBasketRow(row);\n }\n }\n };\n\n const returnAggregationAndTranslation = (reduction: ((row: BasketRow) => number) | number, translation?: string) => {\n const count = typeof reduction === 'number' ? reduction : currentBasketRows.reduce((total, row) => total + reduction(row), 0);\n\n if (translation) {\n return StringHelper.pluralWithDictAndCount(count, translation, t);\n } else {\n return count;\n }\n };\n\n const getNextAvailableBasketRow = (deletedBasketRow?: BasketRow): BasketRow | null => {\n if (!currentBasketRows.length) return null;\n // Filter out the excluded basket row if provided\n const filteredRows = deletedBasketRow ? currentBasketRows.filter((row) => row.getID() !== deletedBasketRow.getID()) : currentBasketRows;\n\n // Find the first row that does not have a rate assigned\n const availableRow = filteredRows.find((row) => !row.getRate());\n\n // Return a row without a rate if found\n // If no such row exists , return the last row in the list\n return availableRow ?? filteredRows[filteredRows.length - 1];\n };\n\n const updateQueryParameters = (row: BasketRow | null) => {\n if (!row) return;\n const queryParameters: Record<string, string> = {};\n if (row.getEndDate()) {\n let startDate = selectedBasketRow?.getStartDate();\n if (!startDate) {\n startDate = row.getStartDate();\n }\n queryParameters[EAppQueryParameters.Arrive] = startDate.format(API_DATE_FORMAT);\n queryParameters[EAppQueryParameters.Depart] = row.getEndDate().format(API_DATE_FORMAT);\n }\n if (row.getPromoCode()) queryParameters[EAppQueryParameters.PromoCode] = row.getPromoCode();\n if (row.getChildren() !== undefined) queryParameters[EAppQueryParameters.Children] = row.getChildren().toString();\n if (row.getAdults() !== undefined) queryParameters[EAppQueryParameters.Adults] = row.getAdults().toString();\n\n updateQueryParams(queryParameters);\n };\n\n const updateBasketRow = (row: BasketRow, updateGlobalDates = true) => {\n updateQueryParameters(row);\n\n if (updateGlobalDates && row.getID() === selectedBasketRow?.getID()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n\n // Here we check if there is no promocode on the row. If there isn't this function will check for existing member details\n // and automatically apply a member only promocode\n checkAndApplyMemberOnlyPromo(row, true);\n\n basketRowReducer({ method: 'Update', row });\n };\n\n const syncSelectedDateRange = (row?: BasketRow) => {\n if (!row) return;\n if ((!row.getStartDate() || !row.getEndDate()) && startDate && endDate) {\n row.setStartDate(startDate);\n row.setEndDate(endDate);\n } else if (!startDate && !endDate && row.getStartDate() && row.getEndDate()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n }\n };\n\n const { loadedPromotion } = usePromotionContainer({ selectedBasketRow: selectedBasketRow as BasketRow, updateBasketRow });\n\n const genericRetryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 0,\n }: {\n maxRetryAttempts?: number;\n scalingDuration?: number;\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1;\n if (retryAttempt > maxRetryAttempts) {\n return throwError(error);\n }\n console.log(`Attempt ${retryAttempt}: retrying in ${scalingDuration}ms`);\n return timer(scalingDuration);\n }),\n finalize(() => console.log('We are done!'))\n );\n };\n\n const workingContext: BasketContextType = {\n startDate: startDate as Dayjs,\n endDate: endDate as Dayjs,\n\n selectedBasketRow: selectedBasketRow as BasketRow,\n currentBasketRows,\n basketAddonRows,\n\n hasCheckedOut,\n reservationData: reservationData as ReservationsDTO,\n isLoadingPriceQuote,\n\n loadedPromotion,\n\n /**\n * Adds a new basket row and applies relevant updates:\n * - Synchronizes the selected date range.\n * - Applies any applicable member-only promotions.\n * - Ensures proper selection logic for the basket row.\n *\n * Selection logic:\n * - If the basket is empty, the newly added row is automatically selected.\n * - If a row is already selected:\n * - If the selected row has an assigned rate, update the selection to the new row.\n * - Otherwise, keep the current selection (allowing continued editing of the existing row).\n * - If no row is selected, set the new row as the selected row.\n *\n * @param {BasketRow} row - The basket row to add.\n */\n addBasketRow: (row: BasketRow) => {\n syncSelectedDateRange(row);\n checkAndApplyMemberOnlyPromo(row);\n\n // Determine if the basket is currently empty\n const isEmptyRows = !currentBasketRows.length;\n if (isEmptyRows) {\n // If empty, set the newly added row as the selected basket row\n setSelectedBasketRow(row);\n } else {\n if (selectedBasketRow) {\n // Determine if the currently selected row has an assigned rate\n const isSelectedRowAssignedRate = selectedBasketRow && selectedBasketRow.getRate();\n if (isSelectedRowAssignedRate) {\n // If the selected row has a rate, update the selection to the new row\n setSelectedBasketRow(row);\n }\n } else {\n // If no row is currently selected, set the new row as the selected basket row\n setSelectedBasketRow(row);\n }\n }\n basketRowReducer({ method: 'Add', row });\n },\n\n initBasketRows: (rows: BasketRow[]) => {\n const firstRow = rows[0];\n syncSelectedDateRange(firstRow);\n setSelectedBasketRow(firstRow);\n basketRowReducer({\n method: 'Init',\n rows: rows,\n });\n },\n\n //TODO: This function needs to be refactored to simplify a lot of this logic, and move notification raising to use the Event Manager instead\n addRate: async (rate: RoomRate, notify = true) => {\n let basketRow: BasketRow | null = null;\n let translationString: string;\n\n let addons = [];\n\n if (selectedBasketRow) {\n selectedBasketRow.setPreGuestsState();\n basketRow = selectedBasketRow;\n if (selectedBasketRow.getRate()) {\n translationString = Translation.Misc.RoomUpdatedNotification;\n } else {\n if (!selectedBasketRow.getStartDate() && selectedBasketRow.getEndDate()) {\n selectedBasketRow.setStartDate(startDate as Dayjs);\n selectedBasketRow.setEndDate(endDate as Dayjs);\n }\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n } else {\n if (!startDate || !endDate) {\n console.error('room selected with no date values.');\n return;\n }\n\n basketRow = new BasketRow(rate);\n\n basketRow.setStartDate(startDate);\n basketRow.setEndDate(endDate);\n\n translationString = Translation.Misc.RoomAddedNotification;\n }\n\n if (InlineAddonStepFeature.isActive()) {\n basketRow.setRate(rate); // TODO: Fix quick hack to make the Addons load\n addons = await API.Addons.findAddons([basketRow], hotel?.hotelID as string);\n }\n\n basketRow.setAuxiliaryFilter(beContext.currentGroupedRoomFilters);\n beContext.setCurrentGroupedRoomFilters({});\n\n basketRowReducer({ method: 'AddRate', rate, row: basketRow });\n\n try {\n DataLayer.instance.sendRoomRateAddToCart(rate, basketRow.getNumberOfDays(), startDate ?? basketRow.getStartDate(), endDate ?? basketRow.getEndDate());\n } catch (ex) {\n console.log('Failed recording basket Add event');\n }\n\n if (notify) {\n notifications.addNotification({\n icon: IconType.Bed,\n children: (\n <Text inline>\n {t(translationString)} <strong className=\"u-marg-left--light\">{rate.getRoom().name}</strong>\n </Text>\n ),\n });\n }\n\n const nextAvailable = getNextAvailableBasketRow();\n if (!nextAvailable?.getRate()) {\n // If the next available row does not have a rate assigned,\n // set it as the selected basket row to allow rate assignment.\n setSelectedBasketRow(nextAvailable);\n } else {\n // If all rows already have a rate assigned\n // Set the selected basket row to null, ensuring that no row is selected for editing.\n setSelectedBasketRow(null);\n\n // Determine whether the next step is an add-on selection step.\n const isNextStepAddon = StepManager.getNextStepUrl(getStepRoom()) === StepAddon.getStepUrl();\n\n if (isNextStepAddon) {\n if (addons.length) {\n historyConsistentPush(StepAddon.getStepUrl());\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(StepAddon));\n }\n } else {\n historyConsistentPush(StepManager.getNextStepUrl(getStepRoom()));\n }\n }\n },\n\n getBasketQuoteDetails: (preventApplyingOutcome) => {\n const maxRetryAttempts = 5;\n\n if (!hotel || !hotel?.requireDeposit) {\n return false;\n }\n\n setIsLoadingPriceQuote(true);\n\n // Clear currently assigned quote details\n // If we're fetching basket row information the currently held info should be disregarded.\n currentBasketRows.forEach((row) => {\n if (row.quoteDetails) {\n row.quoteDetails = undefined;\n updateBasketRow(row);\n }\n });\n\n const getData = () =>\n defer(() => API.Reservation.getPriceQuote(hotel.hotelID, currentBasketRows, isExternalMemberHotel ? memberNumber : undefined)).pipe(\n retryWhen(\n genericRetryStrategy({\n maxRetryAttempts: maxRetryAttempts,\n })\n )\n );\n\n const retryableObservable = getData();\n\n retryableObservable.subscribe(\n (quote) => {\n if (quote === null) return;\n\n if (!preventApplyingOutcome()) {\n // User has left the Confirmation step before the quote was ready, we'll stop here instead of updating the basket.\n // If we don't stop here, the user will be redirected back to the Confirmation step.\n setIsLoadingPriceQuote(false);\n return;\n }\n\n for (const quoteRow of quote.rows) {\n const basketRow = currentBasketRows.find((row) => row.getID() === quoteRow.rowId);\n\n if (!basketRow) {\n console.warn('API Returned unfamiliar row ID', quoteRow.rowId);\n continue;\n }\n\n basketRow.quoteDetails = quoteRow;\n updateBasketRow(basketRow);\n }\n },\n (error: any) => {\n console.log(error);\n console.log(`Error!: Retried ${maxRetryAttempts} times then quit!`);\n },\n () => {\n setIsLoadingPriceQuote(false);\n }\n );\n },\n\n /**\n * Filter global list of rooms based on their validity.\n *\n * Useful for getting a complete summary of all the rooms.\n */\n getAllValidRows: () => {\n return currentBasketRows.filter((item) => item.isValid());\n },\n\n getAllDatelessRows: () => {\n return currentBasketRows.filter((item) => !item.getStartDate() || !item.getEndDate());\n },\n\n getNumberOfAdults: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getAdults(), withTranslation ? Translation.Step.Date.Adult : undefined);\n },\n\n getNumberOfChildren: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getChildren(), withTranslation ? Translation.Step.Date.Child : undefined);\n },\n\n getNumberOfInfants: (withTranslation = false) => {\n return returnAggregationAndTranslation((row) => row.getInfants(), withTranslation ? Translation.Step.Date.Infant : undefined);\n },\n\n getNumberOfRooms: (withTranslation = false) => {\n return returnAggregationAndTranslation(currentBasketRows.length, withTranslation ? Translation.Step.Date.Room : undefined);\n },\n\n getTotalPrice: () => {\n let totalPrice = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalPrice() as number) : 0)) as number;\n\n // If the hotel requires a deposit, and enableCreditCardSurchase is false, we need to add the deposit fees to the total price.\n if (hotel?.requireDeposit && !hotel?.enableCreditCardSurcharge) {\n const depositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n totalPrice += depositFees;\n }\n\n basketAddonRows.forEach((row) => {\n totalPrice += row.getTotalPrice();\n });\n\n return totalPrice;\n },\n\n getTotalDeposit: () => {\n const totalDeposit = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalDeposit as number) : 0)) as number;\n return totalDeposit;\n },\n\n getTotalFees: () => {\n let totalFees = returnAggregationAndTranslation((row) => (row.isValid() ? (row.getRate()?.getTotalFees() as number) : 0)) as number;\n\n if (totalFees == 0 && hotel?.requireDeposit) {\n // Hotel may have credit card surcharges disabled, but they could still be included as a part of the quote.\n totalFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n }\n\n basketAddonRows.forEach((row) => {\n totalFees += row.getTotalFees();\n });\n\n return totalFees;\n },\n\n getTotalPayNow: () => {\n if (hotel?.requireDeposit) {\n const depositFees = returnAggregationAndTranslation((row) => (row.quoteDetails ? (row.quoteDetails?.totalFees as number) : 0)) as number;\n return workingContext.getTotalDeposit() + depositFees;\n }\n\n return workingContext.getTotalPrice();\n },\n\n /**\n * Pops the provided row from the current basket array\n */\n removeBasketRow: (row: BasketRow) => {\n const rowsBeforeRemoval = currentBasketRows.length;\n\n basketRowReducer({ method: 'Remove', row });\n\n if (selectedBasketRow && row.getID() === selectedBasketRow.getID()) {\n const availableBasketRow = getNextAvailableBasketRow(row);\n if (availableBasketRow) {\n setStartDate(availableBasketRow.getStartDate());\n setEndDate(availableBasketRow.getEndDate());\n }\n setSelectedBasketRow(availableBasketRow);\n }\n\n if (rowsBeforeRemoval === 1) {\n workingContext.addBasketRow(new BasketRow());\n }\n },\n\n clearBasketRows: (confirm: boolean) => {\n if (confirm) {\n basketRowReducer({ method: 'Clear' });\n }\n },\n\n updateBasketRow,\n\n /**\n * Selects the given basket row and updates all relevant inputs (e.g., start date and end date).\n * - If the provided row is valid, it updates the selected row and sets the corresponding dates.\n * - If the row is null or invalid, it attempts to select the next available basket row.\n *\n * @param {BasketRow | null} row - The basket row to be selected.\n * @returns {Promise<void>} A promise that resolves when the selection is complete.\n */\n selectBasketRow: async (row: BasketRow | null) => {\n if (row && row.isValid()) {\n setStartDate(row.getStartDate());\n setEndDate(row.getEndDate());\n // Update the selected basket row\n setSelectedBasketRow(row);\n } else {\n // If the row is invalid or null, select the next available basket row\n setSelectedBasketRow(getNextAvailableBasketRow());\n }\n },\n\n setStartDate,\n setEndDate,\n\n booked: async (data: ReservationsDTO, requestData: RoomstaySession['reservationRequest']) => {\n const updateObject: Partial<RoomstaySession> = { reservation: data };\n\n if (requestData) {\n updateObject.reservationRequest = requestData;\n }\n\n await beContext.sessionProvider?.updateSessionAsync(updateObject);\n setReservationData(data);\n },\n\n rollback: () => {\n beContext.sessionProvider?.updateSession({\n reservation: undefined,\n });\n setReservationData(null);\n },\n\n checkedOut: (data: ReservationsDTO) => {\n setHasCheckedOut(true);\n setReservationData(data);\n setSelectedBasketRow(null);\n basketRowReducer({ method: 'Clear' });\n\n const row = new BasketRow();\n row.setStartDate(dayjs().add(1, 'day'));\n row.setEndDate(dayjs().add(2, 'day'));\n\n basketRowReducer({ method: 'Add', row });\n setBasketAddonRows([]);\n\n const sessionProvider = beContext?.engine?.getSessionProvider();\n sessionProvider.deleteSession();\n sessionProvider?.initialize(undefined, beContext?.engine?.getSource());\n const params = new URLSearchParams(window.location.search);\n params.delete('planpay_checkout_id');\n window.history.replaceState({}, '', `${window.location.pathname}?${params}`);\n navigate(StepThanks.getStepUrl());\n },\n\n finish: () => {\n setReservationData(null);\n setHasCheckedOut(false);\n },\n\n /**\n * Set the selected basket row to null, ensuring that no row is selected for editing.\n */\n clearSelectedRates: () => {\n setSelectedBasketRow(null);\n },\n\n getRowForAddon: (selectedAddon) => {\n if (selectedAddon === undefined) {\n return;\n }\n return basketAddonRows.find((r) => r.getAddon()?.code === selectedAddon?.code);\n },\n\n setAddonQuantities: (addon: Addon, quantities: { quantity: number; adult: number; child: number }, selectedDate: string, selectedTime: string) => {\n let addonRow = basketAddonRows.find((r) => r.getAddon()?.code === addon.code);\n if (addonRow === undefined) {\n addonRow = new BasketAddonRow(addon);\n basketAddonRows.push(addonRow);\n }\n\n addonRow.setQuantity(quantities.quantity ?? 0);\n addonRow.setAdultQuantity(quantities.adult ?? 0);\n addonRow.setChildQuantity(quantities.child ?? 0);\n addonRow.setSelectedDate(selectedDate);\n addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);\n\n // TODO: Quick hack to fix Synxis Basic Addon quantities.\n if (addon.pricingType === AddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n }\n }\n\n if (addon.pricingType === AddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n // TODO: Because all addons only apply to first room, we can select the 0th from the list.\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n // TODO: More hackyness to handle RMS Per Person Fee requirements\n if (addon.pricingType === AddonPricingType.PER_ALL_PERSONS || addon.pricingType === AddonPricingType.PER_ALL_PERSONS_PER_NIGHT) {\n const basketRow = currentBasketRows?.[0];\n if (basketRow) {\n addonRow.setAdultQuantity(basketRow.getAdults());\n addonRow.setChildQuantity(basketRow.getChildren());\n }\n }\n\n setBasketAddonRows([...basketAddonRows]);\n },\n\n removeBasketAddonRow: (row: BasketAddonRow) => {\n setBasketAddonRows((oldRows) => oldRows.filter((item) => item.getID() !== row.getID()));\n },\n\n /**\n * Attempts to select the next available basket row that does not have a rate assigned.\n * If such a row is found, it updates the selected basket row and returns it.\n * Otherwise, it does nothing.\n *\n * @returns {BasketRow | undefined} The selected basket row without a rate, or undefined if none is found.\n */\n attemptSelectUnfilledRow: (): BasketRow | undefined => {\n const row = getNextAvailableBasketRow();\n if (row && !row?.getRate()) {\n // Select the first available row without a rate and update the selected basket row\n setSelectedBasketRow(row);\n return row;\n }\n // No available unfilled row found, return undefined\n },\n // Callback triggered when the DatePicker open state changes.\n onDatePickerOpenChange: (isOpen: boolean) => {\n setIsDatePickerOpen(isOpen);\n },\n // Indicates whether the DatePicker is currently open.\n isDatePickerOpen: isDatePickerOpen,\n };\n\n return (\n <BasketContext.Provider value={workingContext}>\n <AuthenticationContextProvider>\n {props.children}\n <MemberSignInModal />\n {showPromoCodeAlert && <PromoCodeVerificationAlert selectedBasketRow={selectedBasketRow} />}\n </AuthenticationContextProvider>\n </BasketContext.Provider>\n );\n}\n"]}
@@ -221,7 +221,7 @@ const ConfirmationStepContextWrapper = ({ children }) => {
221
221
  });
222
222
  const onSubmitSuccess = (data, paymentMethod) => __awaiter(void 0, void 0, void 0, function* () {
223
223
  var _a, _b, _c, _d;
224
- raise(new PlacedBookingEvent_1.PlacedBookingEvent(data, basketContext.currentBasketRows, hotel));
224
+ yield raise(new PlacedBookingEvent_1.PlacedBookingEvent(data, basketContext.currentBasketRows, hotel));
225
225
  // If this is a planpay booking, we don't need to do anything else.
226
226
  if (paymentMethod === core_1.EBookingPaymentMethod.Planpay) {
227
227
  return;