@roomstay/frontend 2.6.99-0 → 2.6.99

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 (50) hide show
  1. package/dist/288.bundle.js +1 -1
  2. package/dist/328.bundle.js +1 -1
  3. package/dist/370.bundle.js +1 -1
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/main.bundle.js +1 -1
  6. package/dist/src/api/AvailabilityAPI.d.ts +3 -2
  7. package/dist/src/api/AvailabilityAPI.js +9 -5
  8. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  9. package/dist/src/components/generic/PromoCodeInput.js +0 -5
  10. package/dist/src/components/generic/PromoCodeInput.js.map +1 -1
  11. package/dist/src/components/steps/addons/AddonCard.js +114 -9
  12. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  13. package/dist/src/components/steps/date/PeoplePicker.js +3 -5
  14. package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
  15. package/dist/src/components/steps/room/RoomList.js.map +1 -1
  16. package/dist/src/components/steps/room/RoomModal.js +1 -1
  17. package/dist/src/components/steps/room/RoomModal.js.map +1 -1
  18. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
  19. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +1 -3
  20. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  21. package/dist/src/components/summary/BEMobileSummaryModal.js +4 -3
  22. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  23. package/dist/src/components/summary/BESummary.js +4 -3
  24. package/dist/src/components/summary/BESummary.js.map +1 -1
  25. package/dist/src/components/summary/BESummaryAddonRow.d.ts +3 -0
  26. package/dist/src/components/summary/BESummaryAddonRow.js +16 -4
  27. package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
  28. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  29. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +3 -1
  30. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  31. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +51 -21
  32. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  33. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +1 -1
  34. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  35. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +6 -5
  36. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  37. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +5 -3
  38. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  39. package/dist/src/models/BasketAddonRow.d.ts +27 -0
  40. package/dist/src/models/BasketAddonRow.js +50 -0
  41. package/dist/src/models/BasketAddonRow.js.map +1 -1
  42. package/dist/src/models/BasketRow.d.ts +0 -2
  43. package/dist/src/models/BasketRow.js +0 -21
  44. package/dist/src/models/BasketRow.js.map +1 -1
  45. package/dist/src/utils/AddonDiscountCalculator.d.ts +79 -0
  46. package/dist/src/utils/AddonDiscountCalculator.js +142 -0
  47. package/dist/src/utils/AddonDiscountCalculator.js.map +1 -0
  48. package/dist/test.bundle.js +1 -1
  49. package/dist/vendors.bundle.js +1 -1
  50. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AddonCard.js","sourceRoot":"/","sources":["src/components/steps/addons/AddonCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { EAddonPricingType } from '@roomstay/core';\nimport classNames from 'classnames';\nimport Check from 'icons/Check';\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\n\ninterface Props {\n addon: Addon;\n className?: string;\n}\n\nconst AddonCard = ({ addon, className }: Props) => {\n const { t } = useTranslation();\n\n const { hotel } = useCurrentHotel();\n const basketContext = React.useContext(BasketContext);\n\n const addonBasketRow = basketContext.getRowForAddon(addon);\n\n const [quantity, setQuantity] = useState(1);\n const [adultQuantity, setAdultQuantity] = useState(addonBasketRow ? addonBasketRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(addonBasketRow ? addonBasketRow.getChildQuantity() : 0);\n\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n\n const [selectedDate, setSelectedDate] = useState(addonBasketRow ? addonBasketRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState(addonBasketRow ? addonBasketRow.getSelectedTime() : '');\n\n useEffect(() => {\n if (addonBasketRow) {\n setPriceInfo(addon.availability[addonBasketRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(addonBasketRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(addonBasketRow.getSelectedTime() ?? '');\n setQuantity(addonBasketRow.getQuantity());\n setAdultQuantity(addonBasketRow.getAdultQuantity());\n setChildQuantity(addonBasketRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string] ?? ([] as any));\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n }, []);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n const basketAddonRow = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n const selectedBasketRow = basketContext.currentBasketRows[0];\n if (basketAddonRow && selectedBasketRow) {\n DataLayer.instance.sendRoomAddonAddToCart(basketAddonRow, quantity, selectedBasketRow.getStartDate(), selectedBasketRow.getStartDate());\n }\n };\n\n const classes = classNames({\n '--active': !!basketContext.getRowForAddon(addon),\n });\n\n const onClickRemove = () => {\n const selectedAddon = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n if (selectedAddon) basketContext.removeBasketAddonRow(selectedAddon);\n };\n\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: string) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n // Pricing type checks\n const isPerPerson = [EAddonPricingType.PER_PERSON, EAddonPricingType.PER_PERSON_PER_NIGHT].includes(addon.pricingType);\n const isPerAllPersons = [EAddonPricingType.PER_ALL_PERSONS, EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT].includes(addon.pricingType);\n\n // Hide quantity if admin enabled and addon is per-person type\n const hidePerPersonQuantity = isPerPerson && addon.hideQuantity;\n\n // Default quantities when addon is per person\n useEffect(() => {\n if (!isPerPerson) return;\n const rows = basketContext.currentBasketRows;\n if (!rows || rows.length === 0) return;\n\n // Sum all adults & children from all reservations\n const totalAdults = rows.reduce((sum, r) => sum + r.getAdults(), 0);\n const totalChildren = rows.reduce((sum, r) => sum + r.getChildren(), 0);\n\n // Set adults qty always\n setAdultQuantity(totalAdults);\n\n // If child pricing exists → set children qty\n if (priceInfo?.childPrice) {\n setChildQuantity(totalChildren);\n } else {\n // Otherwise fallback to set quantity qty\n setQuantity(totalAdults);\n }\n }, [addon.code, isPerPerson, priceInfo?.childPrice, basketContext.currentBasketRows]);\n\n // --- Enable/Disable Helpers -------------------------------------------------\n const enableDateInput = (): boolean => {\n return (addonBasketRow?.getNumberOfAvailableNights?.() as number) > 1 && !addonBasketRow?.getAddon().hideDatePicker;\n };\n const enableQuantityInput = (): boolean => {\n return !!priceInfo?.price && priceInfo?.quantity > 1 && !hidePerPersonQuantity;\n };\n\n const enableAdultInput = (): boolean => !isPerAllPersons && !!priceInfo?.adultPrice && !hidePerPersonQuantity;\n const enableChildInput = (): boolean => !isPerAllPersons && !!priceInfo?.childPrice && !hidePerPersonQuantity;\n\n // --- Addon Configuration ----------------------------------------------------\n const addonConfigurations = [\n {\n name: 'Date',\n enabled: enableDateInput(),\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: 'Time',\n enabled: priceInfo?.selectorTimes?.length !== 0,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: Translation.Step.Addon.Quantity,\n enabled: enableQuantityInput(),\n element: <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Adult_plural,\n enabled: enableAdultInput(),\n element: <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Child_plural,\n enabled: enableChildInput(),\n element: <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />,\n },\n ];\n\n const pricingTypeSuffix = (() => {\n switch (addon.pricingType) {\n case EAddonPricingType.PER_STAY:\n return t(Translation.Misc.QTY);\n case EAddonPricingType.PER_PERSON:\n return t(Translation.Misc.Person);\n case EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_PERSON_PER_NIGHT:\n return t(Translation.Misc.PersonPerNight);\n case EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT:\n return t(Translation.Misc.AdultPerNight);\n case EAddonPricingType.PER_NIGHT:\n case EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT:\n return t(Translation.Misc.Night);\n case EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT:\n return t(Translation.Misc.PerRoomDay);\n }\n })();\n\n const addonCardImageStyle: any = {};\n if (addon.image) {\n addonCardImageStyle.backgroundImage = `url('${ImageProvider.resizeImage(addon.image, ImageSize.Original)}')`;\n } else {\n addonCardImageStyle.backgroundImage = `url('${hotel?.logo && ImageProvider.resizeImage(hotel?.logo as string, ImageSize.Original)}')`;\n addonCardImageStyle.backgroundSize = '50%';\n addonCardImageStyle.backgroundRepeat = 'no-repeat';\n }\n\n const hasFees = hotel?.fees && hotel.fees.filter((fee) => fee.appliesToAddons).length > 0;\n\n return (\n <div className={classNames('u-flex u-flex-flex-start u-rounded addon-card-wrapper', className, classes)} style={{ backgroundColor: Color.White }}>\n <div className=\"addon-card-image\" style={addonCardImageStyle} />\n <div className=\"u-marg-heavy u-marg@m- u-w-100@xl\">\n <div className=\"u-flex\">\n <Headline bold>{addon.name}</Headline>\n {addonBasketRow ? <Check /> : <></>}\n </div>\n <Text color={Color.DarkGrey} type={TextType.Small} asDiv>\n <HtmlContentViewer content={addon.description} />\n </Text>\n <div className=\"addon-card-wrapper--price u-flex u-flex-align-flex-end\">\n <div className=\"u-w-100\">\n {addonConfigurations.map((input) => {\n if (!input.enabled) {\n return;\n }\n\n return (\n <div key={input.name} className=\"u-flex justify-content-start u-marg-bot u-marg-top\">\n <Text className=\"u-mw-100\" bold>\n {t(input.name)}\n </Text>\n {input.element}\n </div>\n );\n })}\n\n {/* {addon.guaranteeDescription && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Guarantee</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.guaranteeDescription}</Text>\n </div>\n </>\n )}\n {addon.cancelPenalty && (\n <>\n <h4 className=\"u-marg-bottom--light u-marg-top\">Cancellation Policy</h4>\n <div className=\"u-marg-bot--heavy\">\n <Text type={TextType.Small}>{addon.cancelPenalty}</Text>\n </div>\n </>\n )} */}\n </div>\n <div className=\"addon-card-wrapper--price-action\">\n <div className=\"u-flex u-flex-direction-column u-flex-align-flex-end\" style={{ alignSelf: 'flex-end' }}>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-align-items-baseline flex-row\">\n {priceInfo?.price && (\n <>\n <div className=\"u-flex align-items-end\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency hideDecimals>{priceInfo.price}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n / {pricingTypeSuffix}\n </Text>\n </div>\n </>\n )}\n {(!!priceInfo?.adultPrice || !!priceInfo?.childPrice) && (\n <h2 className=\"u-marg-none d-flex flex-wrap justify-content-end\">\n {!!priceInfo.adultPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.adultPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.AdultPerNight)\n : t(Translation.Step.Date.Adult)}\n </Text>\n </div>\n )}\n {!!priceInfo.adultPrice && !!priceInfo.childPrice && <br />}\n {!!priceInfo.childPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{priceInfo.childPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.ChildPerNight)\n : t(Translation.Step.Date.Child)}\n </Text>\n </div>\n )}\n </h2>\n )}\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n <TaxInclusionNotice hasTax={!!hotel?.enableCreditCardSurcharge || !!hasFees} />\n </Text>\n </div>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@l- flex-column flex-lg-row\">\n {addonBasketRow ? (\n <div className=\"u-marg-right--light@l u-marg-bottom--light@l-\">\n <BEButton onClick={onClickRemove} textColor={Color.White} backgroundColor={Color.Navy} wide>\n {t(Translation.Step.Addon.Remove)}\n </BEButton>\n </div>\n ) : (\n <></>\n )}\n <BEButton onClick={onClickAddToCartHandler} primary filled wide>\n {addonBasketRow ? t(Translation.Step.Addon.UpdateCart) : t(Translation.Step.Addon.AddToCart)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default AddonCard;\n"]}
1
+ {"version":3,"file":"AddonCard.js","sourceRoot":"/","sources":["src/components/steps/addons/AddonCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { ADDON_PER_NIGHT_TYPES, BasketAddonDTO, EAddonPricingType, EPromoCodeDiscountType, TotalCalculator } from '@roomstay/core';\nimport classNames from 'classnames';\nimport Check from 'icons/Check';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport NumberIncrement from '@/components/generic/NumberIncrement';\nimport { IDefaultSelectOption, Select } from '@/components/generic/Select/Select';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport { AddonDiscountCalculator } from '@/utils/AddonDiscountCalculator';\n\ninterface Props {\n addon: Addon;\n className?: string;\n}\n\nconst AddonCard = ({ addon, className }: Props) => {\n const { t } = useTranslation();\n\n const { hotel } = useCurrentHotel();\n const basketContext = React.useContext(BasketContext);\n\n const addonBasketRow = basketContext.getRowForAddon(addon);\n\n const [quantity, setQuantity] = useState(1);\n const [adultQuantity, setAdultQuantity] = useState(addonBasketRow ? addonBasketRow.getAdultQuantity() : 1);\n const [childQuantity, setChildQuantity] = useState(addonBasketRow ? addonBasketRow.getChildQuantity() : 0);\n\n const [priceInfo, setPriceInfo] = useState<PriceInfo>({ quantity: 1 });\n\n const [selectedDate, setSelectedDate] = useState(addonBasketRow ? addonBasketRow.getSelectedDate() : '');\n const [selectedTime, setSelectedTime] = useState(addonBasketRow ? addonBasketRow.getSelectedTime() : '');\n\n useEffect(() => {\n if (addonBasketRow) {\n setPriceInfo(addon.availability[addonBasketRow.getSelectedDate()] ?? addon.availability[addon.firstDate as string]);\n setSelectedDate(addonBasketRow.getSelectedDate() ?? addon.firstDate);\n setSelectedTime(addonBasketRow.getSelectedTime() ?? '');\n setQuantity(addonBasketRow.getQuantity());\n setAdultQuantity(addonBasketRow.getAdultQuantity());\n setChildQuantity(addonBasketRow.getChildQuantity());\n } else {\n setPriceInfo(addon.availability[addon.firstDate as string] ?? ([] as any));\n setSelectedDate(addon.firstDate as string);\n setSelectedTime(addon.availability[addon.firstDate as string]?.selectorTimes?.[0]?.value || '');\n }\n }, []);\n\n const setDate = (date: any) => {\n setPriceInfo(addon.availability[date]);\n setSelectedDate(date);\n setSelectedTime(addon.availability[date]?.selectorTimes?.[0]?.value || '');\n if (addon.availability[date].quantity < quantity) {\n setQuantity(addon.availability[date].quantity);\n }\n };\n\n const onClickAddToCartHandler = () => {\n basketContext.setAddonQuantities(\n addon,\n {\n quantity,\n adult: adultQuantity,\n child: childQuantity,\n },\n selectedDate,\n selectedTime\n );\n const basketAddonRow = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n const selectedBasketRow = basketContext.currentBasketRows[0];\n if (basketAddonRow && selectedBasketRow) {\n DataLayer.instance.sendRoomAddonAddToCart(basketAddonRow, quantity, selectedBasketRow.getStartDate(), selectedBasketRow.getStartDate());\n }\n };\n\n const classes = classNames({\n '--active': !!basketContext.getRowForAddon(addon),\n });\n\n const onClickRemove = () => {\n const selectedAddon = basketContext.basketAddonRows.find((row) => {\n return row.getAddon().code === addon.code;\n });\n if (selectedAddon) basketContext.removeBasketAddonRow(selectedAddon);\n };\n\n const setQuantityOnChange = (val: any) => {\n setQuantity(val);\n };\n const setAdultsQuantityOnChange = (val: any) => {\n setAdultQuantity(val);\n };\n const setChildQuantityOnChange = (val: any) => {\n setChildQuantity(val);\n };\n const setDateOnChange = (selected: string) => {\n setDate(selected);\n };\n const setSelectedTimeOnChange = (selected: any) => {\n setSelectedTime(selected);\n };\n\n // Pricing type checks\n const isPerPerson = [EAddonPricingType.PER_PERSON, EAddonPricingType.PER_PERSON_PER_NIGHT].includes(addon.pricingType);\n const isPerAllPersons = [EAddonPricingType.PER_ALL_PERSONS, EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT].includes(addon.pricingType);\n\n // Hide quantity if admin enabled and addon is per-person type\n const hidePerPersonQuantity = isPerPerson && addon.hideQuantity;\n\n // Default quantities when addon is per person\n useEffect(() => {\n if (!isPerPerson) return;\n const rows = basketContext.currentBasketRows;\n if (!rows || rows.length === 0) return;\n\n // Sum all adults & children from all reservations\n const totalAdults = rows.reduce((sum, r) => sum + r.getAdults(), 0);\n const totalChildren = rows.reduce((sum, r) => sum + r.getChildren(), 0);\n\n // Set adults qty always\n setAdultQuantity(totalAdults);\n\n // If child pricing exists → set children qty\n if (priceInfo?.childPrice) {\n setChildQuantity(totalChildren);\n } else {\n // Otherwise fallback to set quantity qty\n setQuantity(totalAdults);\n }\n }, [addon.code, isPerPerson, priceInfo?.childPrice, basketContext.currentBasketRows]);\n\n // --- Enable/Disable Helpers -------------------------------------------------\n const enableDateInput = (): boolean => {\n return (addonBasketRow?.getNumberOfAvailableNights?.() as number) > 1 && !addonBasketRow?.getAddon().hideDatePicker;\n };\n const enableQuantityInput = (): boolean => {\n return !!priceInfo?.price && priceInfo?.quantity > 1 && !hidePerPersonQuantity;\n };\n\n const enableAdultInput = (): boolean => !isPerAllPersons && !!priceInfo?.adultPrice && !hidePerPersonQuantity;\n const enableChildInput = (): boolean => !isPerAllPersons && !!priceInfo?.childPrice && !hidePerPersonQuantity;\n\n // --- Addon Configuration ----------------------------------------------------\n const addonConfigurations = [\n {\n name: 'Date',\n enabled: enableDateInput(),\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={addon.selectorDates}\n value={selectedDate}\n onChange={setDateOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: 'Time',\n enabled: priceInfo?.selectorTimes?.length !== 0,\n element: (\n <Select<IDefaultSelectOption, 'value'>\n nativeOnMobile\n options={priceInfo?.selectorTimes || []}\n value={selectedTime}\n onChange={setSelectedTimeOnChange}\n keyName=\"value\"\n labelName=\"text\"\n className=\"u-flex align-items-center\"\n />\n ),\n },\n {\n name: Translation.Step.Addon.Quantity,\n enabled: enableQuantityInput(),\n element: <NumberIncrement number={quantity} min={1} max={priceInfo.quantity} onChange={setQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Adult_plural,\n enabled: enableAdultInput(),\n element: <NumberIncrement number={adultQuantity} min={0} max={priceInfo.quantity - childQuantity} onChange={setAdultsQuantityOnChange} />,\n },\n {\n name: Translation.Step.Date.Child_plural,\n enabled: enableChildInput(),\n element: <NumberIncrement number={childQuantity} min={0} max={priceInfo.quantity - adultQuantity} onChange={setChildQuantityOnChange} />,\n },\n ];\n\n const pricingTypeSuffix = (() => {\n switch (addon.pricingType) {\n case EAddonPricingType.PER_STAY:\n return t(Translation.Misc.QTY);\n case EAddonPricingType.PER_PERSON:\n return t(Translation.Misc.Person);\n case EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_PERSON_PER_NIGHT:\n return t(Translation.Misc.PersonPerNight);\n case EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT:\n case EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT:\n return t(Translation.Misc.AdultPerNight);\n case EAddonPricingType.PER_NIGHT:\n case EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT:\n return t(Translation.Misc.Night);\n case EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT:\n return t(Translation.Misc.PerRoomDay);\n }\n })();\n\n const addonCardImageStyle: any = {};\n if (addon.image) {\n addonCardImageStyle.backgroundImage = `url('${ImageProvider.resizeImage(addon.image, ImageSize.Original)}')`;\n } else {\n addonCardImageStyle.backgroundImage = `url('${hotel?.logo && ImageProvider.resizeImage(hotel?.logo as string, ImageSize.Original)}')`;\n addonCardImageStyle.backgroundSize = '50%';\n addonCardImageStyle.backgroundRepeat = 'no-repeat';\n }\n\n const hasFees = hotel?.fees && hotel.fees.filter((fee) => fee.appliesToAddons).length > 0;\n\n // Calculate promo code discount for this addon\n const { discountAmount, discountedUnitPrice, discountedAdultPrice, discountedChildPrice } = useMemo(() => {\n // Use TotalCalculator to get base price (without fees or discounts)\n const addonDto: Partial<BasketAddonDTO> = {\n code: addon.code,\n pricingType: addon.pricingType,\n price: priceInfo?.price ?? 0,\n adultPrice: priceInfo?.adultPrice,\n childPrice: priceInfo?.childPrice,\n quantity,\n adultQuantity,\n childQuantity,\n nights: addon.nights || 1,\n };\n\n const { addonTotal } = TotalCalculator.calculateBaseAddonTotal(addonDto, false);\n\n // For per-unit price preview, calculate what the total would be with at least 1 adult and 1 child.\n // This lets us show \"A$0 / Child\" when children=0 to indicate adding a child would be free.\n const previewAddonDto: Partial<BasketAddonDTO> = {\n ...addonDto,\n adultQuantity: Math.max(1, adultQuantity),\n childQuantity: Math.max(1, childQuantity),\n };\n const { addonTotal: previewAddonTotal } = TotalCalculator.calculateBaseAddonTotal(previewAddonDto, false);\n\n // When addon is already in basket, exclude it from the calculation to avoid double-counting.\n const otherAddonsInBasket = addonBasketRow ? basketContext.basketAddonRows.filter((row) => row.getID() !== addonBasketRow.getID()) : basketContext.basketAddonRows;\n\n // Calculate actual discount based on current UI state (for totals and actual discount amount).\n const discount = AddonDiscountCalculator.calculatePreviewDiscount(addonTotal, otherAddonsInBasket, basketContext.currentBasketRows, basketContext.promoCodeDetails);\n\n // Calculate preview discount with at least 1 of each person type (for per-unit price display).\n const previewDiscount = AddonDiscountCalculator.calculatePreviewDiscount(\n previewAddonTotal,\n otherAddonsInBasket,\n basketContext.currentBasketRows,\n basketContext.promoCodeDetails\n );\n\n // Helper to calculate discounted unit price\n const calcDiscountedPrice = (unitPrice: number | undefined, totalCost: number, availableDiscount: number): { price: number; discountUsed: number } => {\n if (!unitPrice || availableDiscount <= 0) {\n return { price: unitPrice ?? 0, discountUsed: 0 };\n }\n\n const promoDetails = basketContext.promoCodeDetails;\n if (promoDetails?.discountType === EPromoCodeDiscountType.FlatPercent) {\n const percentOff = promoDetails.discountAmount / 100;\n return {\n price: Math.round(unitPrice * (1 - percentOff) * 100) / 100,\n discountUsed: 0,\n };\n }\n\n // Fixed discount\n const discountUsed = Math.min(availableDiscount, totalCost);\n const perUnitDiscount = totalCost > 0 ? (discountUsed / totalCost) * unitPrice : 0;\n return {\n price: Math.max(0, unitPrice - perUnitDiscount),\n discountUsed,\n };\n };\n\n // Calculate discounted per-unit prices\n let discUnitPrice = priceInfo?.price ?? 0;\n let discAdultPrice = priceInfo?.adultPrice ?? 0;\n let discChildPrice = priceInfo?.childPrice ?? 0;\n\n if (previewDiscount > 0 && previewAddonTotal > 0) {\n const isPerNight = ADDON_PER_NIGHT_TYPES.includes(addon.pricingType);\n const nightsMultiplier = isPerNight ? addon.nights || 1 : 1;\n\n // Simple unit price (Per Person, Per Night, etc.)\n if (priceInfo?.price) {\n const effectiveQty = Math.max(1, quantity);\n const previewCost = priceInfo.price * effectiveQty * nightsMultiplier;\n const result = calcDiscountedPrice(priceInfo.price, previewCost, previewDiscount);\n discUnitPrice = result.price;\n }\n\n // Adult/child prices - sequential allocation (adults first, then children)\n const effectiveAdultQty = Math.max(1, adultQuantity);\n const effectiveChildQty = Math.max(1, childQuantity);\n const previewAdultCost = priceInfo?.adultPrice ? priceInfo.adultPrice * effectiveAdultQty * nightsMultiplier : 0;\n const previewChildCost = priceInfo?.childPrice ? priceInfo.childPrice * effectiveChildQty * nightsMultiplier : 0;\n\n // Allocate discount sequentially: adults first, then remaining to children\n const adultDiscountUsed = Math.min(previewDiscount, previewAdultCost);\n const remainingForChild = Math.max(0, previewDiscount - adultDiscountUsed);\n\n if (priceInfo?.adultPrice) {\n const result = calcDiscountedPrice(priceInfo.adultPrice, previewAdultCost, adultDiscountUsed);\n discAdultPrice = result.price;\n }\n if (priceInfo?.childPrice) {\n const result = calcDiscountedPrice(priceInfo.childPrice, previewChildCost, remainingForChild);\n discChildPrice = result.price;\n }\n }\n\n return {\n discountAmount: discount,\n discountedPrice: addonTotal - discount,\n discountedUnitPrice: discUnitPrice,\n discountedAdultPrice: discAdultPrice,\n discountedChildPrice: discChildPrice,\n };\n }, [\n priceInfo,\n quantity,\n adultQuantity,\n childQuantity,\n addon.pricingType,\n addon.code,\n addon.nights,\n basketContext.promoCodeDetails,\n basketContext.currentBasketRows,\n basketContext.basketAddonRows,\n addonBasketRow,\n ]);\n\n const hasDiscount = discountAmount > 0;\n\n return (\n <div className={classNames('u-flex u-flex-flex-start u-rounded addon-card-wrapper', className, classes)} style={{ backgroundColor: Color.White }}>\n <div className=\"addon-card-image\" style={addonCardImageStyle} />\n <div className=\"u-marg-heavy u-marg@m- u-w-100@xl\">\n <div className=\"u-flex\">\n <Headline bold>{addon.name}</Headline>\n {addonBasketRow ? <Check /> : <></>}\n </div>\n <Text color={Color.DarkGrey} type={TextType.Small} asDiv>\n <HtmlContentViewer content={addon.description} />\n </Text>\n <div className=\"addon-card-wrapper--price u-flex u-flex-align-flex-end\">\n <div className=\"u-w-100\">\n {addonConfigurations.map((input) => {\n if (!input.enabled) {\n return;\n }\n\n return (\n <div key={input.name} className=\"u-flex justify-content-start u-marg-bot u-marg-top\">\n <Text className=\"u-mw-100\" bold>\n {t(input.name)}\n </Text>\n {input.element}\n </div>\n );\n })}\n </div>\n <div className=\"addon-card-wrapper--price-action\">\n <div className=\"u-flex u-flex-direction-column u-flex-align-flex-end\" style={{ alignSelf: 'flex-end' }}>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-align-items-baseline flex-row\">\n {priceInfo?.price && (\n <div className=\"d-flex align-items-end flex-row\">\n {/* Show original price strikethrough if discounted */}\n {hasDiscount && (\n <Text type={TextType.Small} color={Color.DarkGrey} inline style={{ textDecoration: 'line-through' }} className=\"u-marg-right--light\">\n <Currency hideDecimals>{priceInfo.price}</Currency>\n </Text>\n )}\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency hideDecimals>{hasDiscount ? discountedUnitPrice : priceInfo.price}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n / {pricingTypeSuffix}\n </Text>\n </div>\n )}\n {(!!priceInfo?.adultPrice || !!priceInfo?.childPrice) && (\n <h2 className=\"u-marg-none d-flex flex-wrap justify-content-end\">\n {!!priceInfo.adultPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n {/* Show original price strikethrough if discounted */}\n {hasDiscount && discountedAdultPrice < priceInfo.adultPrice && (\n <Text\n type={TextType.Small}\n color={Color.DarkGrey}\n inline\n style={{ textDecoration: 'line-through' }}\n className=\"u-marg-right--light\"\n >\n <Currency>{priceInfo.adultPrice}</Currency>\n </Text>\n )}\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{hasDiscount ? discountedAdultPrice : priceInfo.adultPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.AdultPerNight)\n : t(Translation.Step.Date.Adult)}\n </Text>\n </div>\n )}\n {!!priceInfo.adultPrice && !!priceInfo.childPrice && <br />}\n {!!priceInfo.childPrice && (\n <div className=\"d-flex align-items-end flex-row\">\n {/* Show original price strikethrough if discounted */}\n {hasDiscount && discountedChildPrice < priceInfo.childPrice && (\n <Text\n type={TextType.Small}\n color={Color.DarkGrey}\n inline\n style={{ textDecoration: 'line-through' }}\n className=\"u-marg-right--light\"\n >\n <Currency>{priceInfo.childPrice}</Currency>\n </Text>\n )}\n <Headline size=\"large\" bold lineHeight=\"1em\">\n <Currency>{hasDiscount ? discountedChildPrice : priceInfo.childPrice}</Currency>\n </Headline>\n <Text type={TextType.Small} color={Color.DarkGrey} inline className=\"u-marg-left--light u-clear-font-weight\">\n /{' '}\n {addon.pricingType === EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT\n ? t(Translation.Misc.ChildPerNight)\n : t(Translation.Step.Date.Child)}\n </Text>\n </div>\n )}\n </h2>\n )}\n </div>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n <TaxInclusionNotice hasTax={!!hotel?.enableCreditCardSurcharge || !!hasFees} />\n </Text>\n </div>\n </div>\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@l- flex-column flex-lg-row\">\n {addonBasketRow ? (\n <div className=\"u-marg-right--light@l u-marg-bottom--light@l-\">\n <BEButton onClick={onClickRemove} textColor={Color.White} backgroundColor={Color.Navy} wide>\n {t(Translation.Step.Addon.Remove)}\n </BEButton>\n </div>\n ) : (\n <></>\n )}\n <BEButton onClick={onClickAddToCartHandler} primary filled wide>\n {addonBasketRow ? t(Translation.Step.Addon.UpdateCart) : t(Translation.Step.Addon.AddToCart)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default AddonCard;\n"]}
@@ -47,14 +47,12 @@ const Icon_1 = require("../../generic/Icon/Icon");
47
47
  const PromoCodeInput_1 = __importDefault(require("../../generic/PromoCodeInput"));
48
48
  const OccupancyWarningBlock_1 = __importDefault(require("./OccupancyWarningBlock"));
49
49
  const PeoplePickerRow_1 = __importDefault(require("./PeoplePickerRow"));
50
- const useSignedInMember_1 = require("../../../hooks/useSignedInMember");
51
50
  const BasketRow_1 = __importStar(require("../../../models/BasketRow"));
52
51
  const DataLayer_1 = __importStar(require("../../../util/DataLayer"));
53
52
  function PeoplePicker() {
54
- var _a;
53
+ var _a, _b;
55
54
  const context = (0, react_1.useContext)(contexts_1.BasketContext);
56
55
  const { hotel } = (0, hooks_1.useCurrentHotel)();
57
- const { signedInUser } = (0, useSignedInMember_1.useSignedInMember)();
58
56
  const updateRoomValues = (row, values) => {
59
57
  const { adults, children, infants, promoCode } = values;
60
58
  if (adults !== row.getAdults()) {
@@ -96,7 +94,7 @@ function PeoplePicker() {
96
94
  const changePromoCode = (val) => {
97
95
  updatePromoCode(val);
98
96
  };
99
- const promocode = selectedRow === null || selectedRow === void 0 ? void 0 : selectedRow.getDefaultInputPromoCode(signedInUser, hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyPromoCode);
97
+ const promocode = (_b = context.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCode(hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyPromoCode);
100
98
  return (react_1.default.createElement("div", { className: "people-picker--items" },
101
99
  basketRows.map((item, index) => {
102
100
  const changeRoomValues = (val) => {
@@ -115,7 +113,7 @@ function PeoplePicker() {
115
113
  }, onChange: changeRoomValues, onRemove: removeBasketRowHandler })));
116
114
  }),
117
115
  react_1.default.createElement("div", { className: "u-marg-bottom" },
118
- react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: !promocode || promoCodeStatus === null || promoCodeStatus === BasketRow_1.EPromoCodeStatus.New ? undefined : promoCodeStatus === BasketRow_1.EPromoCodeStatus.Valid, variant: "outlined", row: selectedRow })),
116
+ react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: !promocode || promoCodeStatus === null || promoCodeStatus === BasketRow_1.EPromoCodeStatus.New ? undefined : promoCodeStatus === BasketRow_1.EPromoCodeStatus.Valid, variant: "outlined", row: context.selectedBasketRow })),
119
117
  react_1.default.createElement(BEButton_1.default, { isText: true, primary: true, icon: Icon_1.IconType.Add, stopIconAnimation: true, onClick: addAnotherRoomOnClickHandler }, t(Translation_1.Translation.Misc.AddAnotherRoom)),
120
118
  react_1.default.createElement(OccupancyWarningBlock_1.default, null)));
121
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PeoplePicker.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport OccupancyWarningBlock from '@/components/steps/date/OccupancyWarningBlock';\nimport PeoplePickerRow, { PeoplePickerDetails } from '@/components/steps/date/PeoplePickerRow';\nimport { useSignedInMember } from '@/hooks/useSignedInMember';\nimport BasketRow, { EPromoCodeStatus } from '@/models/BasketRow';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function PeoplePicker() {\n const context = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n const { signedInUser } = useSignedInMember();\n const updateRoomValues = (row: BasketRow, values: PeoplePickerDetails) => {\n const { adults, children, infants, promoCode } = values;\n\n if (adults !== row.getAdults()) {\n row.setAdults(adults);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n if (children !== row.getChildren()) {\n row.setChildren(children);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (infants !== row.getInfants()) {\n row.setInfants(infants);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (promoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.DATES);\n row.setPromoCode(promoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const basketRows = context.currentBasketRows;\n const { t } = useTranslation();\n\n const addNewBasketRow = () => {\n context.addBasketRow(new BasketRow());\n };\n\n const updatePromoCode = (code: string) => {\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setManualInputPromoCode(!!true);\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n }\n };\n\n const selectedRow = context.selectedBasketRow;\n\n const promoCodeStatus = selectedRow?.getPromoCodeStatus() ?? null;\n const addAnotherRoomOnClickHandler = () => {\n DataLayer.instance.sendInteraction('Add Another Room', InteractionType.BUTTON, InteractionStep.DATES);\n addNewBasketRow();\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const promocode = selectedRow?.getDefaultInputPromoCode(signedInUser, hotel?.memberOnlyPromoCode);\n\n return (\n <div className=\"people-picker--items\">\n {basketRows.map((item, index) => {\n const changeRoomValues = (val: any) => {\n updateRoomValues(item, val);\n };\n const removeBasketRowHandler = () => {\n context.removeBasketRow(item);\n };\n return (\n <div key={item.getID()}>\n <PeoplePickerRow\n number={index}\n details={{\n adults: item.getAdults(),\n children: item.getChildren(),\n infants: item.getInfants(),\n promoCode: item.getPromoCode(),\n roomCode: item.getRoomCode(),\n }}\n onChange={changeRoomValues}\n onRemove={removeBasketRowHandler}\n />\n </div>\n );\n })}\n <div className=\"u-marg-bottom\">\n <PromoCodeInput\n value={promocode}\n onChange={changePromoCode}\n valid={!promocode || promoCodeStatus === null || promoCodeStatus === EPromoCodeStatus.New ? undefined : promoCodeStatus === EPromoCodeStatus.Valid}\n variant=\"outlined\"\n row={selectedRow}\n />\n </div>\n\n <BEButton isText primary icon={IconType.Add} stopIconAnimation onClick={addAnotherRoomOnClickHandler}>\n {t(Translation.Misc.AddAnotherRoom)}\n </BEButton>\n <OccupancyWarningBlock />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"PeoplePicker.js","sourceRoot":"/","sources":["src/components/steps/date/PeoplePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport PromoCodeInput from '@/components/generic/PromoCodeInput';\nimport OccupancyWarningBlock from '@/components/steps/date/OccupancyWarningBlock';\nimport PeoplePickerRow, { PeoplePickerDetails } from '@/components/steps/date/PeoplePickerRow';\nimport BasketRow, { EPromoCodeStatus } from '@/models/BasketRow';\nimport DataLayer, { InteractionStep, InteractionType } from '@/util/DataLayer';\n\nexport default function PeoplePicker() {\n const context = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const updateRoomValues = (row: BasketRow, values: PeoplePickerDetails) => {\n const { adults, children, infants, promoCode } = values;\n\n if (adults !== row.getAdults()) {\n row.setAdults(adults);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n if (children !== row.getChildren()) {\n row.setChildren(children);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (infants !== row.getInfants()) {\n row.setInfants(infants);\n DataLayer.instance.sendInteraction('Guests', InteractionType.NUMBER_INPUT, InteractionStep.DATES);\n }\n\n if (promoCode !== row.getPromoCode()) {\n DataLayer.instance.sendInteraction('Promo Code', InteractionType.FORM_FIELD, InteractionStep.DATES);\n row.setPromoCode(promoCode);\n }\n\n context.updateBasketRow(row);\n };\n\n const basketRows = context.currentBasketRows;\n const { t } = useTranslation();\n\n const addNewBasketRow = () => {\n context.addBasketRow(new BasketRow());\n };\n\n const updatePromoCode = (code: string) => {\n if (context.selectedBasketRow) {\n context.selectedBasketRow.setManualInputPromoCode(!!true);\n context.selectedBasketRow.setPromoCode(code);\n context.updateBasketRow(context.selectedBasketRow);\n }\n };\n\n const selectedRow = context.selectedBasketRow;\n\n const promoCodeStatus = selectedRow?.getPromoCodeStatus() ?? null;\n const addAnotherRoomOnClickHandler = () => {\n DataLayer.instance.sendInteraction('Add Another Room', InteractionType.BUTTON, InteractionStep.DATES);\n addNewBasketRow();\n };\n const changePromoCode = (val: any) => {\n updatePromoCode(val);\n };\n\n const promocode = context.selectedBasketRow?.getPromoCode(hotel?.memberOnlyPromoCode);\n\n return (\n <div className=\"people-picker--items\">\n {basketRows.map((item, index) => {\n const changeRoomValues = (val: any) => {\n updateRoomValues(item, val);\n };\n const removeBasketRowHandler = () => {\n context.removeBasketRow(item);\n };\n return (\n <div key={item.getID()}>\n <PeoplePickerRow\n number={index}\n details={{\n adults: item.getAdults(),\n children: item.getChildren(),\n infants: item.getInfants(),\n promoCode: item.getPromoCode(),\n roomCode: item.getRoomCode(),\n }}\n onChange={changeRoomValues}\n onRemove={removeBasketRowHandler}\n />\n </div>\n );\n })}\n <div className=\"u-marg-bottom\">\n <PromoCodeInput\n value={promocode}\n onChange={changePromoCode}\n valid={!promocode || promoCodeStatus === null || promoCodeStatus === EPromoCodeStatus.New ? undefined : promoCodeStatus === EPromoCodeStatus.Valid}\n variant=\"outlined\"\n row={context.selectedBasketRow}\n />\n </div>\n\n <BEButton isText primary icon={IconType.Add} stopIconAnimation onClick={addAnotherRoomOnClickHandler}>\n {t(Translation.Misc.AddAnotherRoom)}\n </BEButton>\n <OccupancyWarningBlock />\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useRef } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\n\nexport default function RoomList() {\n const { roomRateCalendarInteractivity } = useContext(FullPageEngineContext);\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n const { orderUnavailableRoomsLast } = useContext(HotelOverridesContext);\n\n const { hotel } = useCurrentHotel();\n const { rooms, loadingAttempted, isLoading, openRoom, apiHasError, retargetingRoom } = useRoomRateAvailabilityListFromApi();\n const roomListRef = useRef<HTMLDivElement | null>(null);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const sortBy = beContext.currentRoomSort;\n const listWhenLastScrolledRef = useRef<Room[] | null>(null);\n\n const scrollIntoView = () => {\n if (roomListRef.current && listWhenLastScrolledRef.current !== rooms) {\n listWhenLastScrolledRef.current = rooms;\n const offset = beContext.screenSize <= ScreenSize.Medium ? 185 : 350;\n\n window.scrollTo({\n top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset),\n behavior: 'smooth',\n });\n }\n };\n\n useEffect(() => {\n return () => {\n // Clear timeout on unmount or before next effect\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n if (hotel?.showUnavailableRooms) {\n if (orderUnavailableRoomsLast) {\n sortedRooms.sort((a, b) => {\n if (a.isAvailable() && !b.isAvailable()) return -1;\n if (!a.isAvailable() && b.isAvailable()) return 1;\n return 0;\n });\n }\n }\n\n const hasRoomRateModalOpening: boolean = !!(roomRateCalendarInteractivity?.rateCode && roomRateCalendarInteractivity?.roomCode);\n const hasLoading: boolean = isLoading || !loadingAttempted;\n\n if (hasRoomRateModalOpening) {\n listWhenLastScrolledRef.current = rooms;\n }\n\n if (!basketContext.isDatePickerOpen && !isLoading && sortedRooms.length > 0) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n if (!hasRoomRateModalOpening) {\n scrollIntoView();\n }\n }, 100);\n }\n\n const elements = (\n <div ref={roomListRef} className=\"room-list\">\n {hasLoading && !hasRoomRateModalOpening ? (\n <LargeLoader />\n ) : sortedRooms.length ? (\n <div className=\"room-list__container\">\n {hasLoading && hasRoomRateModalOpening ? <LargeLoader /> : <></>}\n {sortedRooms.map((room, index) => (\n <RoomDetails key={room.code} room={room} disableMarginBottom={index === sortedRooms.length - 1} />\n ))}\n </div>\n ) : (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n )}\n </div>\n );\n\n DataLayer.instance.sendRoomImpressions();\n\n return (\n <>\n <RoomListAlert>{!isLoading && retargetingRoom ? <RoomDetailsRetargeting key={retargetingRoom.code} room={retargetingRoom} /> : null}</RoomListAlert>\n {elements}\n </>\n );\n }, [\n rooms,\n isLoading,\n loadingAttempted,\n openRoom,\n sortBy,\n beContext.currentFilters,\n basketContext.loadedPromotion,\n basketContext.isDatePickerOpen,\n orderUnavailableRoomsLast,\n roomRateCalendarInteractivity,\n ]);\n}\n"]}
1
+ {"version":3,"file":"RoomList.js","sourceRoot":"/","sources":["src/components/steps/room/RoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useEffect, useMemo, useRef } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport RoomDetails from '@/components/steps/room/roomDetails/RoomDetails';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport DataLayer from '@/util/DataLayer';\nimport ScreenSize from '@/util/ScreenSize';\n\nimport NoRoomsFoundBlock from './NoRoomsFoundBlock';\nimport { RoomDetailsRetargeting } from './roomDetails/RoomDetailsRetargeting';\nimport { RoomListAlert } from './RoomListAlert';\nimport { StepRoomErrorForm } from './StepRoomErrorForm';\n\nexport default function RoomList() {\n const { roomRateCalendarInteractivity } = useContext(FullPageEngineContext);\n const basketContext = useContext(BasketContext);\n const beContext = useContext(BookingEngineContext);\n const { orderUnavailableRoomsLast } = useContext(HotelOverridesContext);\n\n const { hotel } = useCurrentHotel();\n const { rooms, loadingAttempted, isLoading, openRoom, apiHasError, retargetingRoom } = useRoomRateAvailabilityListFromApi();\n const roomListRef = useRef<HTMLDivElement | null>(null);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const sortBy = beContext.currentRoomSort;\n const listWhenLastScrolledRef = useRef<Room[] | null>(null);\n\n const scrollIntoView = () => {\n if (roomListRef.current && listWhenLastScrolledRef.current !== rooms) {\n listWhenLastScrolledRef.current = rooms;\n const offset = beContext.screenSize <= ScreenSize.Medium ? 185 : 350;\n\n window.scrollTo({\n top: window.scrollY + (roomListRef.current.getBoundingClientRect().top - offset),\n behavior: 'smooth',\n });\n }\n };\n\n useEffect(() => {\n return () => {\n // Clear timeout on unmount or before next effect\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n if (hotel?.showUnavailableRooms) {\n if (orderUnavailableRoomsLast) {\n sortedRooms.sort((a, b) => {\n if (a.isAvailable() && !b.isAvailable()) return -1;\n if (!a.isAvailable() && b.isAvailable()) return 1;\n return 0;\n });\n }\n }\n\n const hasRoomRateModalOpening = !!(roomRateCalendarInteractivity?.rateCode && roomRateCalendarInteractivity?.roomCode);\n const hasLoading: boolean = isLoading || !loadingAttempted;\n\n if (hasRoomRateModalOpening) {\n listWhenLastScrolledRef.current = rooms;\n }\n\n if (!basketContext.isDatePickerOpen && !isLoading && sortedRooms.length > 0) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n if (!hasRoomRateModalOpening) {\n scrollIntoView();\n }\n }, 100);\n }\n\n const elements = (\n <div ref={roomListRef} className=\"room-list\">\n {hasLoading && !hasRoomRateModalOpening ? (\n <LargeLoader />\n ) : sortedRooms.length ? (\n <div className=\"room-list__container\">\n {hasLoading && hasRoomRateModalOpening ? <LargeLoader /> : <></>}\n {sortedRooms.map((room, index) => (\n <RoomDetails key={room.code} room={room} disableMarginBottom={index === sortedRooms.length - 1} />\n ))}\n </div>\n ) : (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n )}\n </div>\n );\n\n DataLayer.instance.sendRoomImpressions();\n\n return (\n <>\n <RoomListAlert>{!isLoading && retargetingRoom ? <RoomDetailsRetargeting key={retargetingRoom.code} room={retargetingRoom} /> : null}</RoomListAlert>\n {elements}\n </>\n );\n }, [\n rooms,\n isLoading,\n loadingAttempted,\n openRoom,\n sortBy,\n beContext.currentFilters,\n basketContext.loadedPromotion,\n basketContext.isDatePickerOpen,\n orderUnavailableRoomsLast,\n roomRateCalendarInteractivity,\n ]);\n}\n"]}
@@ -43,6 +43,7 @@ const react_1 = __importStar(require("react"));
43
43
  const react_i18next_1 = require("react-i18next");
44
44
  const Translation_1 = require("translations/Translation");
45
45
  const Headline_1 = __importDefault(require("../../generic/Headline"));
46
+ const HtmlContentViewer_1 = require("../../generic/HtmlContentViewer");
46
47
  const Icon_1 = __importStar(require("../../generic/Icon/Icon"));
47
48
  const LineBreak_1 = __importDefault(require("../../generic/LineBreak"));
48
49
  const SimpleModal_1 = __importStar(require("../../generic/modal/SimpleModal"));
@@ -51,7 +52,6 @@ const ImageGallerySlider_1 = __importDefault(require("./ImageGallerySlider"));
51
52
  const RoomDetailsBedsBlock_1 = require("./roomDetails/RoomDetailsBedsBlock");
52
53
  const RoomRates_1 = __importDefault(require("./roomDetails/roomRates/RoomRates"));
53
54
  const Color_1 = require("../../../util/Color");
54
- const HtmlContentViewer_1 = require("../../generic/HtmlContentViewer");
55
55
  const RoomModalPerkRow_1 = __importDefault(require("./RoomModalPerkRow"));
56
56
  function RoomModal(props) {
57
57
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"RoomModal.js","sourceRoot":"/","sources":["src/components/steps/room/RoomModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Hotel } from 'models/Client/Hotel/Hotel';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomDetailsBedsBlock } from '@/components/steps/room/roomDetails/RoomDetailsBedsBlock';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\n\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport RoomModalPerkRow from './RoomModalPerkRow';\n\ninterface RoomModalProps {\n room: Room;\n\n rates: RoomRate[];\n featuredRates: RoomRate[];\n\n open: boolean;\n onClose?: () => void;\n}\n\nexport default function RoomModal(props: RoomModalProps) {\n const { roomModalDescSideBySide } = useContext(HotelOverridesContext);\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { rooms } = hotel as Hotel;\n\n const { roomPerks, prePerkDisclaimer } = props.room.getRoomPerks({ hotel: hotel, room: props.room });\n\n const extraRoomData = rooms?.[props.room.code as string];\n\n // Explode otherwise original data gets overwritten.\n const amenities = extraRoomData?.amenities ? [...extraRoomData.amenities] : [];\n\n if (extraRoomData?.features?.length) {\n extraRoomData.features.forEach((feature) => {\n amenities.push(feature);\n });\n }\n\n const cleanPerkDisclaimer = prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') || '';\n\n const LongDescription = () => {\n return (\n <div className=\"u-marg-bottom--heavy rs-room-modal-long-description\">\n <Text type={TextType.Small} color={Color.Graphite} asDiv>\n <HtmlContentViewer content={props.room.getLongDescription() || ''} />\n </Text>\n </div>\n );\n };\n return (\n <SimpleModal title={props.room.name + ' ' + t(Translation.Step.Room.RoomInfo.Information)} open={props.open} size={SimpleModalSize.Small} onClose={props.onClose}>\n <div className=\"rs-room-modal\">\n <div style={{ height: '350px' }}>\n <ImageGallerySlider images={props.room.getImages()} />\n </div>\n\n <div className=\"u-marg-heavy u-marg@m- rs-room-modal-container\">\n <div className=\"u-marg-bottom--light rs-room-modal-headline\">\n <Headline bold size=\"large\">\n {props.room.name}\n </Headline>\n </div>\n <RoomDetailsBedsBlock room={props.room} />\n <div className=\"u-marg-bottom--heavy rs-room-modal-short-description\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: props.room.getShortDescription(false) || '' }} />\n </Text>\n </div>\n\n {roomModalDescSideBySide ? (\n <>\n <LongDescription />\n <LineBreak />\n </>\n ) : null}\n\n {!hotel?.perksHideOnRoomDetail && roomPerks && (\n <div className=\"u-marg-bottom--heavy rs-room-modal-perks\">\n <div className=\"row\">\n <RoomModalPerkRow hotel={hotel} room={props.room} roomPerks={roomPerks} />\n </div>\n {hotel?.perksShowDisclaimer && (\n <div className=\"row u-marg-top--lighter\">\n <small className=\"col-12\">{t(Translation.Misc.PerksDisclaimer)}</small>\n </div>\n )}\n </div>\n )}\n {!!amenities?.length && (\n <>\n <div className=\"u-marg-bottom\">\n <Text color={Color.Accent} type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.RoomAmenities)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n {amenities.map((amenity) => {\n return (\n <div key={amenity.description} className=\"col-sm-6 u-marg-bottom--light u-flex justify-content-start\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" noPadding size=\"16px\" />\n <div className=\"u-marg-left--light u-flex\">\n <Text type={TextType.Small} inline>\n {amenity.description}\n </Text>\n </div>\n </div>\n );\n })}\n </div>\n </>\n )}\n <LineBreak />\n {!roomModalDescSideBySide ? <LongDescription /> : null}\n\n {!!cleanPerkDisclaimer && (\n <div className=\"u-marg-bottom--heavy rs-room-modal-disclaimer\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.Disclaimer)}</strong>\n </Text>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: cleanPerkDisclaimer }} />\n </Text>\n </div>\n )}\n </div>\n\n <RoomRates featuredRates={props.featuredRates} rates={props.rates} roomCode={props.room.code as string} />\n </div>\n </SimpleModal>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomModal.js","sourceRoot":"/","sources":["src/components/steps/room/RoomModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport { Hotel } from 'models/Client/Hotel/Hotel';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { RoomDetailsBedsBlock } from '@/components/steps/room/roomDetails/RoomDetailsBedsBlock';\nimport RoomRates from '@/components/steps/room/roomDetails/roomRates/RoomRates';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport { Color } from '@/util/Color';\n\nimport RoomModalPerkRow from './RoomModalPerkRow';\n\ninterface RoomModalProps {\n room: Room;\n\n rates: RoomRate[];\n featuredRates: RoomRate[];\n\n open: boolean;\n onClose?: () => void;\n}\n\nexport default function RoomModal(props: RoomModalProps) {\n const { roomModalDescSideBySide } = useContext(HotelOverridesContext);\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { rooms } = hotel as Hotel;\n\n const { roomPerks, prePerkDisclaimer } = props.room.getRoomPerks({ hotel: hotel, room: props.room });\n\n const extraRoomData = rooms?.[props.room.code as string];\n\n // Explode otherwise original data gets overwritten.\n const amenities = extraRoomData?.amenities ? [...extraRoomData.amenities] : [];\n\n if (extraRoomData?.features?.length) {\n extraRoomData.features.forEach((feature) => {\n amenities.push(feature);\n });\n }\n\n const cleanPerkDisclaimer = prePerkDisclaimer?.replace(/<br(\\/|)>/g, '') || '';\n\n const LongDescription = () => {\n return (\n <div className=\"u-marg-bottom--heavy rs-room-modal-long-description\">\n <Text type={TextType.Small} color={Color.Graphite} asDiv>\n <HtmlContentViewer content={props.room.getLongDescription() || ''} />\n </Text>\n </div>\n );\n };\n return (\n <SimpleModal title={props.room.name + ' ' + t(Translation.Step.Room.RoomInfo.Information)} open={props.open} size={SimpleModalSize.Small} onClose={props.onClose}>\n <div className=\"rs-room-modal\">\n <div style={{ height: '350px' }}>\n <ImageGallerySlider images={props.room.getImages()} />\n </div>\n\n <div className=\"u-marg-heavy u-marg@m- rs-room-modal-container\">\n <div className=\"u-marg-bottom--light rs-room-modal-headline\">\n <Headline bold size=\"large\">\n {props.room.name}\n </Headline>\n </div>\n <RoomDetailsBedsBlock room={props.room} />\n <div className=\"u-marg-bottom--heavy rs-room-modal-short-description\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: props.room.getShortDescription(false) || '' }} />\n </Text>\n </div>\n\n {roomModalDescSideBySide ? (\n <>\n <LongDescription />\n <LineBreak />\n </>\n ) : null}\n\n {!hotel?.perksHideOnRoomDetail && roomPerks && (\n <div className=\"u-marg-bottom--heavy rs-room-modal-perks\">\n <div className=\"row\">\n <RoomModalPerkRow hotel={hotel} room={props.room} roomPerks={roomPerks} />\n </div>\n {hotel?.perksShowDisclaimer && (\n <div className=\"row u-marg-top--lighter\">\n <small className=\"col-12\">{t(Translation.Misc.PerksDisclaimer)}</small>\n </div>\n )}\n </div>\n )}\n {!!amenities?.length && (\n <>\n <div className=\"u-marg-bottom\">\n <Text color={Color.Accent} type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.RoomAmenities)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n {amenities.map((amenity) => {\n return (\n <div key={amenity.description} className=\"col-sm-6 u-marg-bottom--light u-flex justify-content-start\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Navy} borderRadius=\"round\" noPadding size=\"16px\" />\n <div className=\"u-marg-left--light u-flex\">\n <Text type={TextType.Small} inline>\n {amenity.description}\n </Text>\n </div>\n </div>\n );\n })}\n </div>\n </>\n )}\n <LineBreak />\n {!roomModalDescSideBySide ? <LongDescription /> : null}\n\n {!!cleanPerkDisclaimer && (\n <div className=\"u-marg-bottom--heavy rs-room-modal-disclaimer\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Room.RoomInfo.Disclaimer)}</strong>\n </Text>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: cleanPerkDisclaimer }} />\n </Text>\n </div>\n )}\n </div>\n\n <RoomRates featuredRates={props.featuredRates} rates={props.rates} roomCode={props.room.code as string} />\n </div>\n </SimpleModal>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TabGroupedRooms.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRooms.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useMemo } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { Tab } from '@/components/generic/Tabs/Tab';\nimport Tabs from '@/components/generic/Tabs/Tabs';\nimport NoRoomsFoundBlock from '@/components/steps/room/NoRoomsFoundBlock';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { StepRoomErrorForm } from '@/components/steps/room/StepRoomErrorForm';\nimport { TabGroupedRoomList } from '@/components/steps/room/TabGroupedRooms/TabGroupedRoomList';\nimport { useHashQuery } from '@/hooks/Query';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport DataLayer from '@/util/DataLayer';\n\nexport const TabGroupedRooms = () => {\n const { hotel } = useCurrentHotel();\n const { roomRateCalendarInteractivity } = useContext(FullPageEngineContext);\n const { disableGroupRoomsAllTab } = useContext(HotelOverridesContext);\n const { rooms, isLoading, loadingAttempted, apiHasError } = useRoomRateAvailabilityListFromApi();\n const params = useHashQuery();\n\n const groupedRooms: (HotelRoomGroupsDTO[number] & { rooms: Room[] })[] = useMemo(() => {\n if (!hotel) {\n return [];\n }\n\n const sortingGroup: { [id: string]: HotelRoomGroupsDTO[number] & { rooms: Room[] } } = {\n 'list-all': {\n id: 'list-all',\n groupName: 'All Accommodations',\n filters: {},\n rooms: [],\n },\n };\n\n for (const roomGroup of hotel?.roomGroups ?? []) {\n sortingGroup[roomGroup.id] = {\n ...roomGroup,\n rooms: [],\n };\n }\n\n for (const room of rooms) {\n let groupId = !!room.roomGroupId ? room.roomGroupId : 'list-all';\n\n if (!sortingGroup[groupId]) {\n const foundGroup = hotel?.roomGroups?.find((group) => group.id === groupId);\n\n if (foundGroup) {\n sortingGroup[groupId] = {\n ...foundGroup,\n rooms: [],\n };\n } else {\n // Can't find the specific room, defaulting to \"unsorted\" rooms\n groupId = 'list-all';\n }\n }\n\n // Actual bit that puts the right room in the right location\n sortingGroup[groupId].rooms.push(room);\n }\n\n for (const sortedGroupKey of Object.keys(sortingGroup)) {\n if (sortingGroup[sortedGroupKey]?.rooms?.length === 0 && sortedGroupKey !== 'list-all') {\n delete sortingGroup[sortedGroupKey];\n }\n }\n\n // Sort the rooms by the display order\n const valuedSortedGroups = Object.values(sortingGroup).filter((item) => !!item);\n\n if (valuedSortedGroups.length === 1 && valuedSortedGroups[0].rooms.length === 0) {\n valuedSortedGroups.splice(0, 1);\n }\n\n DataLayer.instance.sendRoomImpressions();\n\n return valuedSortedGroups;\n }, [rooms, hotel?.roomGroups]);\n\n const defaultTab = useMemo(() => {\n return params.get('defaultTab') ?? undefined;\n }, []);\n\n const hasRoomRateModalOpening: boolean = !!(roomRateCalendarInteractivity?.rateCode && roomRateCalendarInteractivity?.roomCode);\n const hasLoading: boolean = isLoading || !loadingAttempted;\n\n if (!hasRoomRateModalOpening && hasLoading) {\n return <LargeLoader />;\n }\n\n if (groupedRooms.length > 0 && groupedRooms.length <= 2) {\n let groupObject = { groupName: '', filters: {}, id: '' };\n let rooms = [];\n if (groupedRooms.length === 2) {\n groupObject = groupedRooms[1];\n rooms = groupedRooms[1].rooms;\n } else {\n rooms = groupedRooms[0].rooms;\n }\n\n return <TabGroupedRoomList group={groupObject} rooms={rooms} />;\n } else if (groupedRooms.length > 2) {\n const onlyGroups = [...groupedRooms];\n // Update onlyGroups to be the same as groupedRooms, but without the first element\n onlyGroups.splice(0, 1);\n\n return (\n <div style={{ maxWidth: '100%', overflow: 'hidden' }}>\n <Tabs fullBleedOnLineBreak={false} activeKey={defaultTab}>\n <Tab title=\"All Accommodation\" navPath=\"list-all\" key=\"list-all\" preventScrollTop>\n {disableGroupRoomsAllTab ? (\n <TabGroupedRoomList group={groupedRooms[0]} rooms={rooms} />\n ) : (\n // We're not starting at 1 here as we want to display these rooms, even if they're not ordered\n groupedRooms\n ?.filter((item) => item.rooms.length)\n .map((group) => {\n return <TabGroupedRoomList group={group} rooms={group.rooms} key={group.id} />;\n })\n )}\n </Tab>\n {/* Reason we've got to splice here is 0 index will always be unsorted rooms */}\n {onlyGroups.map((group) => (\n <Tab title={group.groupName} navPath={group.groupName} key={group.id} preventScrollTop>\n <TabGroupedRoomList group={group} rooms={group.rooms} />\n </Tab>\n ))}\n </Tabs>\n </div>\n );\n }\n\n // No rooms found, so let's display the crossell block, or no rooms found\n return (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"TabGroupedRooms.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRooms.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport React, { useContext, useMemo } from 'react';\n\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { Tab } from '@/components/generic/Tabs/Tab';\nimport Tabs from '@/components/generic/Tabs/Tabs';\nimport NoRoomsFoundBlock from '@/components/steps/room/NoRoomsFoundBlock';\nimport RoomListCrossSellBlock from '@/components/steps/room/RoomListCrossSellBlock';\nimport { StepRoomErrorForm } from '@/components/steps/room/StepRoomErrorForm';\nimport { TabGroupedRoomList } from '@/components/steps/room/TabGroupedRooms/TabGroupedRoomList';\nimport { useHashQuery } from '@/hooks/Query';\nimport { useRoomRateAvailabilityListFromApi } from '@/hooks/RoomRateAvailabilityListFromApi';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport DataLayer from '@/util/DataLayer';\n\nexport const TabGroupedRooms = () => {\n const { hotel } = useCurrentHotel();\n const { roomRateCalendarInteractivity } = useContext(FullPageEngineContext);\n const { disableGroupRoomsAllTab } = useContext(HotelOverridesContext);\n const { rooms, isLoading, loadingAttempted, apiHasError } = useRoomRateAvailabilityListFromApi();\n const params = useHashQuery();\n\n const groupedRooms: (HotelRoomGroupsDTO[number] & { rooms: Room[] })[] = useMemo(() => {\n if (!hotel) {\n return [];\n }\n\n const sortingGroup: { [id: string]: HotelRoomGroupsDTO[number] & { rooms: Room[] } } = {\n 'list-all': {\n id: 'list-all',\n groupName: 'All Accommodations',\n filters: {},\n rooms: [],\n },\n };\n\n for (const roomGroup of hotel?.roomGroups ?? []) {\n sortingGroup[roomGroup.id] = {\n ...roomGroup,\n rooms: [],\n };\n }\n\n for (const room of rooms) {\n let groupId = !!room.roomGroupId ? room.roomGroupId : 'list-all';\n\n if (!sortingGroup[groupId]) {\n const foundGroup = hotel?.roomGroups?.find((group) => group.id === groupId);\n\n if (foundGroup) {\n sortingGroup[groupId] = {\n ...foundGroup,\n rooms: [],\n };\n } else {\n // Can't find the specific room, defaulting to \"unsorted\" rooms\n groupId = 'list-all';\n }\n }\n\n // Actual bit that puts the right room in the right location\n sortingGroup[groupId].rooms.push(room);\n }\n\n for (const sortedGroupKey of Object.keys(sortingGroup)) {\n if (sortingGroup[sortedGroupKey]?.rooms?.length === 0 && sortedGroupKey !== 'list-all') {\n delete sortingGroup[sortedGroupKey];\n }\n }\n\n // Sort the rooms by the display order\n const valuedSortedGroups = Object.values(sortingGroup).filter((item) => !!item);\n\n if (valuedSortedGroups.length === 1 && valuedSortedGroups[0].rooms.length === 0) {\n valuedSortedGroups.splice(0, 1);\n }\n\n DataLayer.instance.sendRoomImpressions();\n\n return valuedSortedGroups;\n }, [rooms, hotel?.roomGroups]);\n\n const defaultTab = useMemo(() => {\n return params.get('defaultTab') ?? undefined;\n }, []);\n\n const hasRoomRateModalOpening = !!(roomRateCalendarInteractivity?.rateCode && roomRateCalendarInteractivity?.roomCode);\n const hasLoading: boolean = isLoading || !loadingAttempted;\n\n if (!hasRoomRateModalOpening && hasLoading) {\n return <LargeLoader />;\n }\n\n if (groupedRooms.length > 0 && groupedRooms.length <= 2) {\n let groupObject = { groupName: '', filters: {}, id: '' };\n let rooms = [];\n if (groupedRooms.length === 2) {\n groupObject = groupedRooms[1];\n rooms = groupedRooms[1].rooms;\n } else {\n rooms = groupedRooms[0].rooms;\n }\n\n return <TabGroupedRoomList group={groupObject} rooms={rooms} />;\n } else if (groupedRooms.length > 2) {\n const onlyGroups = [...groupedRooms];\n // Update onlyGroups to be the same as groupedRooms, but without the first element\n onlyGroups.splice(0, 1);\n\n return (\n <div style={{ maxWidth: '100%', overflow: 'hidden' }}>\n <Tabs fullBleedOnLineBreak={false} activeKey={defaultTab}>\n <Tab title=\"All Accommodation\" navPath=\"list-all\" key=\"list-all\" preventScrollTop>\n {disableGroupRoomsAllTab ? (\n <TabGroupedRoomList group={groupedRooms[0]} rooms={rooms} />\n ) : (\n // We're not starting at 1 here as we want to display these rooms, even if they're not ordered\n groupedRooms\n ?.filter((item) => item.rooms.length)\n .map((group) => {\n return <TabGroupedRoomList group={group} rooms={group.rooms} key={group.id} />;\n })\n )}\n </Tab>\n {/* Reason we've got to splice here is 0 index will always be unsorted rooms */}\n {onlyGroups.map((group) => (\n <Tab title={group.groupName} navPath={group.groupName} key={group.id} preventScrollTop>\n <TabGroupedRoomList group={group} rooms={group.rooms} />\n </Tab>\n ))}\n </Tabs>\n </div>\n );\n }\n\n // No rooms found, so let's display the crossell block, or no rooms found\n return (\n <>\n {apiHasError ? <StepRoomErrorForm /> : <NoRoomsFoundBlock />}\n {hotel?.crossSellHotelIds?.map((hotelId) => (\n <RoomListCrossSellBlock key={hotelId} hotelId={hotelId} />\n ))}\n </>\n );\n};\n"]}
@@ -61,7 +61,6 @@ const Color_1 = require("../../../../util/Color");
61
61
  const DataLayer_1 = __importStar(require("../../../../util/DataLayer"));
62
62
  const ScreenSize_1 = __importDefault(require("../../../../util/ScreenSize"));
63
63
  const StringHelper_1 = __importDefault(require("../../../../util/StringHelper"));
64
- const useSignedInMember_1 = require("../../../../hooks/useSignedInMember");
65
64
  const NumberOfInfantsPicker_1 = __importDefault(require("./NumberOfInfantsPicker"));
66
65
  function RoomBuilderProgressRow(props) {
67
66
  var _a, _b, _c, _d;
@@ -71,7 +70,6 @@ function RoomBuilderProgressRow(props) {
71
70
  const { showChildren } = (0, useSearchScopeHook_1.useSearchScopeHook)();
72
71
  const { t } = (0, react_i18next_1.useTranslation)();
73
72
  const { isMobile } = (0, WindowSize_1.useWindowSize)();
74
- const { signedInUser } = (0, useSignedInMember_1.useSignedInMember)();
75
73
  const [isEditing, setIsEditing] = (0, react_1.useState)(false);
76
74
  const [collapsed, setCollapsed] = (0, react_1.useState)(true);
77
75
  const { row } = props;
@@ -187,7 +185,7 @@ function RoomBuilderProgressRow(props) {
187
185
  const updateNumberOfInfantsOnChange = (value) => {
188
186
  updatePeopleValues({ infants: +value });
189
187
  };
190
- const promocode = row.getDefaultInputPromoCode(signedInUser, hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyPromoCode);
188
+ const promocode = row.getPromoCode(hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyPromoCode);
191
189
  const DateRangePicker = (0, react_1.useMemo)(() => {
192
190
  return (react_1.default.createElement("div", { className: "room-builder-progress--value" },
193
191
  react_1.default.createElement(FloatingDatePicker_1.default, { startDate: row.getStartDate(), endDate: row.getEndDate(), selectedDateChanged: updateDateValues, className: "u-w-100@xl- d-flex align-items-center justify-content-center", isAboveNav: true, onDatePickerOpenChange: onDatePickerOpenChange },