@roomstay/frontend 2.6.33 → 2.6.35

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 (131) hide show
  1. package/dist/166.bundle.js +1 -1
  2. package/dist/279.bundle.js +1 -1
  3. package/dist/370.bundle.js +1 -1
  4. package/dist/446.bundle.js +1 -1
  5. package/dist/449.bundle.js +1 -1
  6. package/dist/586.bundle.js +1 -1
  7. package/dist/736.bundle.js +1 -1
  8. package/dist/873.bundle.js +1 -1
  9. package/dist/903.bundle.js +1 -1
  10. package/dist/927.bundle.js +1 -1
  11. package/dist/972.bundle.js +1 -1
  12. package/dist/978.bundle.js +1 -1
  13. package/dist/main.bundle.js +1 -1
  14. package/dist/src/animations/AutoAutoHeight.js +4 -2
  15. package/dist/src/animations/AutoAutoHeight.js.map +1 -1
  16. package/dist/src/api/AvailabilityAPI.d.ts +9 -0
  17. package/dist/src/api/AvailabilityAPI.js +13 -1
  18. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  19. package/dist/src/components/User/Forms/SignUpForm.js +1 -1
  20. package/dist/src/components/User/Forms/SignUpForm.js.map +1 -1
  21. package/dist/src/components/generic/HtmlContentViewer.js +8 -5
  22. package/dist/src/components/generic/HtmlContentViewer.js.map +1 -1
  23. package/dist/src/components/generic/ScrollToTop.js +12 -15
  24. package/dist/src/components/generic/ScrollToTop.js.map +1 -1
  25. package/dist/src/components/generic/Tabs/TabLink.js +6 -42
  26. package/dist/src/components/generic/Tabs/TabLink.js.map +1 -1
  27. package/dist/src/components/generic/Tabs/TabRouteContainer.js +9 -7
  28. package/dist/src/components/generic/Tabs/TabRouteContainer.js.map +1 -1
  29. package/dist/src/components/generic/date/DatePicker.js +14 -1
  30. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  31. package/dist/src/components/generic/modal/SigninModal/AuthenticatedUserModal.js +7 -3
  32. package/dist/src/components/generic/modal/SigninModal/AuthenticatedUserModal.js.map +1 -1
  33. package/dist/src/components/generic/modal/SimpleModal.js +0 -22
  34. package/dist/src/components/generic/modal/SimpleModal.js.map +1 -1
  35. package/dist/src/components/navigation/Header.js +2 -2
  36. package/dist/src/components/navigation/Header.js.map +1 -1
  37. package/dist/src/components/navigation/StepSelector.js +2 -2
  38. package/dist/src/components/navigation/StepSelector.js.map +1 -1
  39. package/dist/src/components/navigation/StepSelectorModal.js +5 -1
  40. package/dist/src/components/navigation/StepSelectorModal.js.map +1 -1
  41. package/dist/src/components/steps/hotel/HotelCard.js +2 -2
  42. package/dist/src/components/steps/hotel/HotelCard.js.map +1 -1
  43. package/dist/src/components/steps/hotel/HotelCardModal.js +2 -2
  44. package/dist/src/components/steps/hotel/HotelCardModal.js.map +1 -1
  45. package/dist/src/components/steps/room/StepRoomBestRateAlert.js +13 -2
  46. package/dist/src/components/steps/room/StepRoomBestRateAlert.js.map +1 -1
  47. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js +2 -3
  48. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRooms.js.map +1 -1
  49. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +12 -7
  50. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  51. package/dist/src/components/steps/room/roomDetails/roomRates/MembersOnlyRow.js +1 -1
  52. package/dist/src/components/steps/room/roomDetails/roomRates/MembersOnlyRow.js.map +1 -1
  53. package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js +6 -5
  54. package/dist/src/components/steps/room/roomDetails/roomRates/ReadMoreRoomRateRow.js.map +1 -1
  55. package/dist/src/components/summary/BESummary.js +3 -3
  56. package/dist/src/components/summary/BESummary.js.map +1 -1
  57. package/dist/src/components/summary/BESummaryRoomRow.js +5 -6
  58. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  59. package/dist/src/containers/PrivateRoute.d.ts +6 -3
  60. package/dist/src/containers/PrivateRoute.js +9 -20
  61. package/dist/src/containers/PrivateRoute.js.map +1 -1
  62. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +2 -2
  63. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  64. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +85 -24
  65. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  66. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +11 -3
  67. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  68. package/dist/src/contexts/FullPageEngineContext/EngineBodyLayout.d.ts +1 -0
  69. package/dist/src/contexts/FullPageEngineContext/EngineBodyLayout.js +16 -0
  70. package/dist/src/contexts/FullPageEngineContext/EngineBodyLayout.js.map +1 -0
  71. package/dist/src/contexts/FullPageEngineContext/EnginePageLayout.d.ts +1 -0
  72. package/dist/src/contexts/FullPageEngineContext/EnginePageLayout.js +14 -0
  73. package/dist/src/contexts/FullPageEngineContext/EnginePageLayout.js.map +1 -0
  74. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +20 -26
  75. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  76. package/dist/src/engines/FullPageBookingEngine/FullPageBookingEngineElement.js +4 -1
  77. package/dist/src/engines/FullPageBookingEngine/FullPageBookingEngineElement.js.map +1 -1
  78. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +4 -1
  79. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  80. package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js +4 -1
  81. package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js.map +1 -1
  82. package/dist/src/hooks/HistoryConsistentPush.js +10 -3
  83. package/dist/src/hooks/HistoryConsistentPush.js.map +1 -1
  84. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +1 -2
  85. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  86. package/dist/src/hooks/UpdateQueryParameters.js +5 -3
  87. package/dist/src/hooks/UpdateQueryParameters.js.map +1 -1
  88. package/dist/src/models/BasketRow.d.ts +2 -0
  89. package/dist/src/models/BasketRow.js +6 -1
  90. package/dist/src/models/BasketRow.js.map +1 -1
  91. package/dist/src/pages/account/AccountRouter.js +13 -7
  92. package/dist/src/pages/account/AccountRouter.js.map +1 -1
  93. package/dist/src/pages/account/AccountRoutes.js +1 -1
  94. package/dist/src/pages/account/AccountRoutes.js.map +1 -1
  95. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js +3 -0
  96. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
  97. package/dist/src/pages/account/Reservations/AccountReservationsPage.js +3 -3
  98. package/dist/src/pages/account/Reservations/AccountReservationsPage.js.map +1 -1
  99. package/dist/src/pages/findReservation/FindReservation.d.ts +0 -1
  100. package/dist/src/pages/findReservation/FindReservation.js +12 -12
  101. package/dist/src/pages/findReservation/FindReservation.js.map +1 -1
  102. package/dist/src/pages/findReservation/FindReservationResults.js +4 -4
  103. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  104. package/dist/src/pages/steps/Step.js.map +1 -1
  105. package/dist/src/pages/steps/StepAddon/StepAddonComponent.js +5 -1
  106. package/dist/src/pages/steps/StepAddon/StepAddonComponent.js.map +1 -1
  107. package/dist/src/pages/steps/StepConfirmation/StepConfirmationComponent.js +5 -1
  108. package/dist/src/pages/steps/StepConfirmation/StepConfirmationComponent.js.map +1 -1
  109. package/dist/src/pages/steps/StepDate/StepDateComponent.d.ts +2 -2
  110. package/dist/src/pages/steps/StepDate/StepDateComponent.js +14 -7
  111. package/dist/src/pages/steps/StepDate/StepDateComponent.js.map +1 -1
  112. package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js +5 -1
  113. package/dist/src/pages/steps/StepGroupedRoom/StepGroupedRoomComponent.js.map +1 -1
  114. package/dist/src/pages/steps/StepGuide.js +2 -2
  115. package/dist/src/pages/steps/StepGuide.js.map +1 -1
  116. package/dist/src/pages/steps/StepRoom/StepRoomComponent.js +5 -1
  117. package/dist/src/pages/steps/StepRoom/StepRoomComponent.js.map +1 -1
  118. package/dist/src/routes/NaturallyProgressedStepRoute.js +6 -11
  119. package/dist/src/routes/NaturallyProgressedStepRoute.js.map +1 -1
  120. package/dist/src/translations/Translation.d.ts +1 -0
  121. package/dist/src/translations/Translation.js +1 -0
  122. package/dist/src/translations/Translation.js.map +1 -1
  123. package/dist/src/translations/languages/en-gb.js +2 -1
  124. package/dist/src/translations/languages/en-gb.js.map +1 -1
  125. package/dist/src/util/RouteManager.js +1 -1
  126. package/dist/src/util/RouteManager.js.map +1 -1
  127. package/dist/src/util/StepManager.js.map +1 -1
  128. package/dist/test.bundle.js +1 -1
  129. package/dist/vendors.bundle.js +1 -1
  130. package/dist/vendors.bundle.js.LICENSE.txt +30 -6
  131. package/package.json +2 -4
@@ -1 +1 @@
1
- {"version":3,"file":"StepSelectorModal.js","sourceRoot":"/","sources":["src/components/navigation/StepSelectorModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, FullPageEngineContext } from '@frontend/contexts';\nimport classNames from 'classnames';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport Step from '@/pages/steps/Step';\nimport { Color } from '@/util/Color';\nimport StepManager from '@/util/StepManager';\n\nexport interface StepSelectorModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n}\n\nexport default function StepSelectorModal(props: StepSelectorModalProps) {\n const { currentStep } = useContext(FullPageEngineContext);\n const basketContext = useContext(BasketContext);\n\n const { t } = useTranslation();\n\n const steps = StepManager.getSteps().filter((step) => (step.shouldShowOnNavigation() ? step : null));\n\n const onModalClose = () => {\n return props.onClose ? props.onClose() : null;\n };\n\n const currentStepIndex = StepManager.getStepIndex(currentStep.getName());\n\n return (\n <SimpleModal open={props.isOpen} title={t(Translation.Navigation.SelectStep)} onClose={onModalClose}>\n <ul className=\"step-selector --horizontal\">\n {steps.map((step: Step, stepIndex: number) => {\n const stepName = t(step.getStepTranslation() as string);\n\n const prettyStep = stepIndex + 1;\n\n const isPrevStep = currentStepIndex > prettyStep;\n\n let stepNumber: JSX.Element;\n if (isPrevStep) {\n stepNumber = <Icon icon={IconType.Check} color={Color.White} size=\"24px\" />;\n } else {\n stepNumber = (\n <Text>\n <strong>{'0' + prettyStep}</strong>\n </Text>\n );\n }\n\n let isClickable = false;\n\n if (step) {\n const stepValidator = step.getValidator();\n\n if (stepValidator && stepValidator.isValid(basketContext)) {\n isClickable = true;\n }\n }\n\n const stepClassNames = classNames('step-selector__item', {\n 'is-current': currentStepIndex === prettyStep,\n 'is-valid': isClickable,\n 'is-complete': isPrevStep,\n 'is-disabled': !isPrevStep && currentStepIndex !== prettyStep && !isClickable,\n });\n\n const closeOnClick = () => {\n props.onClose?.();\n };\n return (\n <li className={stepClassNames} key={stepIndex} onClick={closeOnClick}>\n <span className=\"step-selector__count\">{stepNumber}</span>\n <div>\n <Text>\n <strong>{stepName}</strong>\n </Text>\n </div>\n <Link to={step.getStepUrl()} />\n </li>\n );\n })}\n </ul>\n </SimpleModal>\n );\n}\n"]}
1
+ {"version":3,"file":"StepSelectorModal.js","sourceRoot":"/","sources":["src/components/navigation/StepSelectorModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, FullPageEngineContext } from '@frontend/contexts';\nimport classNames from 'classnames';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport Step from '@/pages/steps/Step';\nimport { Color } from '@/util/Color';\nimport StepManager from '@/util/StepManager';\n\nexport interface StepSelectorModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n}\n\nexport default function StepSelectorModal(props: StepSelectorModalProps) {\n const { currentStep } = useContext(FullPageEngineContext);\n const basketContext = useContext(BasketContext);\n const location = useLocation();\n\n const { t } = useTranslation();\n\n const steps = StepManager.getSteps().filter((step) => (step.shouldShowOnNavigation() ? step : null));\n\n const onModalClose = () => {\n return props.onClose ? props.onClose() : null;\n };\n\n const currentStepIndex = StepManager.getStepIndex(currentStep.getName());\n\n return (\n <SimpleModal open={props.isOpen} title={t(Translation.Navigation.SelectStep)} onClose={onModalClose}>\n <ul className=\"step-selector --horizontal\">\n {steps.map((step: Step, stepIndex: number) => {\n const stepName = t(step.getStepTranslation() as string);\n\n const prettyStep = stepIndex + 1;\n\n const isPrevStep = currentStepIndex > prettyStep;\n\n let stepNumber: JSX.Element;\n if (isPrevStep) {\n stepNumber = <Icon icon={IconType.Check} color={Color.White} size=\"24px\" />;\n } else {\n stepNumber = (\n <Text>\n <strong>{'0' + prettyStep}</strong>\n </Text>\n );\n }\n\n let isClickable = false;\n\n if (step) {\n const stepValidator = step.getValidator();\n\n if (stepValidator && stepValidator.isValid(basketContext)) {\n isClickable = true;\n }\n }\n\n const stepClassNames = classNames('step-selector__item', {\n 'is-current': currentStepIndex === prettyStep,\n 'is-valid': isClickable,\n 'is-complete': isPrevStep,\n 'is-disabled': !isPrevStep && currentStepIndex !== prettyStep && !isClickable,\n });\n\n const closeOnClick = () => {\n props.onClose?.();\n };\n return (\n <li className={stepClassNames} key={stepIndex} onClick={closeOnClick}>\n <span className=\"step-selector__count\">{stepNumber}</span>\n <div>\n <Text>\n <strong>{stepName}</strong>\n </Text>\n </div>\n <Link\n to={{\n pathname: step.getStepUrl(),\n search: location.search,\n }}\n />\n </li>\n );\n })}\n </ul>\n </SimpleModal>\n );\n}\n"]}
@@ -63,7 +63,7 @@ const HotelCard = ({ hotel }) => {
63
63
  const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
64
64
  const { hotel: currentHotel } = (0, hooks_1.useCurrentHotel)();
65
65
  const basketContext = (0, contexts_1.useBasket)();
66
- const history = (0, react_router_dom_1.useHistory)();
66
+ const navigate = (0, react_router_dom_1.useNavigate)();
67
67
  const [images, setImages] = (0, react_1.useState)([hotel.heroImage]);
68
68
  const [modalOpen, setModalOpen] = (0, react_1.useState)(false);
69
69
  const hotelCardRef = (0, react_1.useRef)(null);
@@ -104,7 +104,7 @@ const HotelCard = ({ hotel }) => {
104
104
  basketContext.initBasketRows([row]);
105
105
  }
106
106
  ccx.changeHotel(hotel);
107
- history.push((0, GetStepRoom_1.default)().getStepUrl());
107
+ navigate((0, GetStepRoom_1.default)().getStepUrl());
108
108
  });
109
109
  const onMoreDetailsClicked = () => __awaiter(void 0, void 0, void 0, function* () {
110
110
  setModalOpen(true);
@@ -1 +1 @@
1
- {"version":3,"file":"HotelCard.js","sourceRoot":"/","sources":["src/components/steps/hotel/HotelCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, useBasket } from '@frontend/contexts';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Placeholder from '@/components/generic/Placeholder';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport HotelCardModal from '@/components/steps/hotel/HotelCardModal';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useCurrentHotel } from '@/hooks';\nimport BasketRow from '@/models/BasketRow';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Color, getAccentOverrideStyleContent, lightOrDark } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { getPerkIconElement } from '@/util/HotelPerkHelper';\nimport ScreenSize from '@/util/ScreenSize';\n\ninterface HotelCardProps {\n hotel: Hotel;\n}\n\nconst HotelCard = ({ hotel }: HotelCardProps) => {\n const beContext = useContext(BookingEngineContext);\n const ccx = useContext(CompanyContext);\n const { hotel: currentHotel } = useCurrentHotel();\n const basketContext = useBasket();\n\n const history = useHistory();\n\n const [images, setImages] = useState([hotel.heroImage]);\n const [modalOpen, setModalOpen] = useState(false);\n\n const hotelCardRef = useRef<HTMLElement | null>(null);\n\n const currentPrice = hotel.lowestPrice?.value;\n const currentPriceLoading = hotel.lowestPrice?.isLoading;\n\n const showPrice = currentPriceLoading || (!currentPriceLoading && (currentPrice as number) > 0);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n const newImages: string[] = [hotel.heroImage];\n\n if (hotel.rooms) {\n for (const room of Object.values(hotel.rooms)) {\n room.images.forEach((image) => {\n newImages.push(image);\n });\n }\n }\n\n setImages(newImages);\n }, [hotel.rooms]);\n\n useEffect(() => {\n if (!hotel.hasLoadedDetails) {\n // If we haven't fetched this hotel yet, lets trigger\n ccx.getHotel(hotel.hotelID);\n }\n }, [hotel.hasLoadedDetails]);\n\n const [openPerk, setOpenPerk] = useState(hotel.perks?.[0]?.name);\n const colorProfile = hotel.colors;\n\n const onViewRoomsClicked = async () => {\n if (currentHotel?.hotelID !== hotel.hotelID) {\n const appliedBasketRow = basketContext.selectedBasketRow || basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n const row = new BasketRow();\n row.setStartDate(appliedBasketRow?.getStartDate() || dayjs().add(1, 'day'));\n row.setEndDate(appliedBasketRow?.getEndDate() || dayjs().add(2, 'day'));\n row.setAdults(appliedBasketRow?.getAdults() || 1);\n row.setChildren(appliedBasketRow?.getChildren() || 0);\n row.setInfants(appliedBasketRow?.getInfants() || 0);\n row.setPromoCode(appliedBasketRow.getPromoCode() ?? '');\n basketContext.initBasketRows([row]);\n }\n ccx.changeHotel(hotel);\n\n history.push(getStepRoom().getStepUrl());\n };\n\n const onMoreDetailsClicked = async () => {\n setModalOpen(true);\n };\n\n const onModalClose = () => {\n setModalOpen(false);\n };\n\n const isLoading = !hotel.hasLoadedDetails;\n\n return useMemo(() => {\n const content = isLoading ? (\n <div>\n <div className=\"d-flex flex-column\">\n <Placeholder type=\"block\" blockSize=\"sm\" rounded=\"lg\" blink />\n <div className=\"u-pad\">\n <Placeholder type=\"text\" w=\"md\" h=\"md\" blink />\n <Placeholder type=\"text\" w=\"md\" h=\"md\" blink />\n <div className=\"u-marg-top\">\n <div className=\"u-flex justify-space-between\">\n <Placeholder type=\"block\" blockSize=\"xs\" rounded=\"lg\" blink />\n <Placeholder type=\"block\" blockSize=\"xs\" rounded=\"lg\" blink />\n <Placeholder type=\"block\" blockSize=\"xs\" rounded=\"lg\" blink />\n </div>\n </div>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"large-hotel-card u-rounded h-100 justify-items-between\">\n <div className=\"large-hotel-card--image\">\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"large-hotel-card--body u-pad--heavy u-pad-bottom--none container\">\n <Headline bold>{hotel?.name}</Headline>\n <Text color={Color.DarkGrey} bold className=\"u-marg-bottom--light\">\n {hotel?.address?.city}\n </Text>\n <div className=\"u-flex u-marg-bottom\">\n <Text type={TextType.Small}>{[hotel?.address?.line1, hotel?.address?.line2, hotel?.address?.state].filter((line) => !!line).join(', ')}</Text>\n </div>\n <div className=\"u-marg-bottom--medium large-hotel-card--description\">\n <Text className=\"text\" type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel.description || '' }}></span>\n </Text>\n </div>\n {!!hotel.perks?.length && (\n <Text className=\"u-marg-bottom\" bold type={TextType.Small} color={Color.Accent}>\n And these come free...\n </Text>\n )}\n <div className=\"u-flex u-flex-align-center u-marg-bottom--medium\">\n {!!hotel.perks?.length && (\n <div className=\"u-flex\">\n {hotel.perks.slice(0, 5).map((perk) => {\n const openPerkOnClick = () => {\n setOpenPerk(perk.name);\n };\n\n const perkIconElement = getPerkIconElement(perk);\n return (\n <div className=\"u-flex u-flex-align-center\" key={perk.name}>\n <Tooltip\n title={perk.tooltip ?? perk.name}\n overrideContainer={hotelCardRef?.current}\n dark={lightOrDark(hotel.colors.accent2) === 'dark'}\n >\n <div\n onClick={openPerkOnClick}\n style={{ backgroundColor: Color.Snow }}\n className=\"u-rounded u-pad--light u-marg-right--light d-flex justify-center\"\n >\n <div className=\"u-mw-16 d-flex justify-content-center\">{perkIconElement}</div>\n </div>\n </Tooltip>\n <div\n className={\n 'u-marg-right u-none@l- u-block@m- ' +\n (beContext.screenSize > ScreenSize.Medium ||\n beContext.screenSize <= ScreenSize.Mobile ||\n (beContext.screenSize > ScreenSize.Mobile && beContext.screenSize <= ScreenSize.Medium && openPerk !== perk.name)\n ? 'u-none-2'\n : '')\n }\n >\n <Text type={TextType.Small}>{perk.name}</Text>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <BEButton icon={IconType.ArrowRight2} isText primary size=\"tiny\" iconPosition=\"right\" onClick={onMoreDetailsClicked}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n </div>\n <div className=\"u-pad--heavy u-pad-top--none h-100 justify-content-end u-flex flex-column u-flex-align-flex-start align-items-md-start no-gutters\">\n {showPrice ? (\n <>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"u-flex u-flex-flex-start u-flex-align-center flex-row\">\n <Headline bold className=\"u-flex\">\n {hotel.lowestPrice?.isLoading ? (\n <SmallSpinner />\n ) : (\n <Currency hideDecimals originalCurrencyCode={hotel.defaultCurrency}>\n {currentPrice}\n </Currency>\n )}\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n </>\n ) : (\n <div className=\"u-h-fill d-flex align-items-center\">\n <Text type={TextType.Small} color={Color.Alert}>\n {t(Translation.Step.Hotel.HotelCard.DatesUnavailable)}\n </Text>\n </div>\n )}\n\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@m-\">\n <BEButton\n name=\"ViewRatesNowButton\"\n primary\n primaryActive\n filled\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n wide={beContext.screenSize <= ScreenSize.Medium}\n onClick={onViewRoomsClicked}\n >\n {t(Translation.Step.Hotel.ViewRooms)}\n </BEButton>\n </div>\n </div>\n <HotelCardModal open={modalOpen} onClose={onModalClose} hotel={hotel} container={hotelCardRef?.current} />\n </div>\n );\n\n return (\n <span ref={hotelCardRef} id={`hotel-card-${hotel.hotelID}`}>\n <style>{`#hotel-card-modal-${hotel.hotelID},\n #hotel-card-${hotel.hotelID} {\n ${getAccentOverrideStyleContent(colorProfile)}\n }`}</style>\n {content}\n </span>\n );\n }, [currentPrice, isLoading, currentPriceLoading, modalOpen, hotelCardRef, openPerk]);\n};\n\nexport default HotelCard;\n"]}
1
+ {"version":3,"file":"HotelCard.js","sourceRoot":"/","sources":["src/components/steps/hotel/HotelCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, useBasket } from '@frontend/contexts';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Placeholder from '@/components/generic/Placeholder';\nimport Text, { TextType } from '@/components/generic/Text';\nimport Tooltip from '@/components/generic/Tooltip/Tooltip';\nimport HotelCardModal from '@/components/steps/hotel/HotelCardModal';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { useCurrentHotel } from '@/hooks';\nimport BasketRow from '@/models/BasketRow';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport { Color, getAccentOverrideStyleContent, lightOrDark } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport { getPerkIconElement } from '@/util/HotelPerkHelper';\nimport ScreenSize from '@/util/ScreenSize';\n\ninterface HotelCardProps {\n hotel: Hotel;\n}\n\nconst HotelCard = ({ hotel }: HotelCardProps) => {\n const beContext = useContext(BookingEngineContext);\n const ccx = useContext(CompanyContext);\n const { hotel: currentHotel } = useCurrentHotel();\n const basketContext = useBasket();\n\n const navigate = useNavigate();\n\n const [images, setImages] = useState([hotel.heroImage]);\n const [modalOpen, setModalOpen] = useState(false);\n\n const hotelCardRef = useRef<HTMLElement | null>(null);\n\n const currentPrice = hotel.lowestPrice?.value;\n const currentPriceLoading = hotel.lowestPrice?.isLoading;\n\n const showPrice = currentPriceLoading || (!currentPriceLoading && (currentPrice as number) > 0);\n\n const { t } = useTranslation();\n\n useEffect(() => {\n const newImages: string[] = [hotel.heroImage];\n\n if (hotel.rooms) {\n for (const room of Object.values(hotel.rooms)) {\n room.images.forEach((image) => {\n newImages.push(image);\n });\n }\n }\n\n setImages(newImages);\n }, [hotel.rooms]);\n\n useEffect(() => {\n if (!hotel.hasLoadedDetails) {\n // If we haven't fetched this hotel yet, lets trigger\n ccx.getHotel(hotel.hotelID);\n }\n }, [hotel.hasLoadedDetails]);\n\n const [openPerk, setOpenPerk] = useState(hotel.perks?.[0]?.name);\n const colorProfile = hotel.colors;\n\n const onViewRoomsClicked = async () => {\n if (currentHotel?.hotelID !== hotel.hotelID) {\n const appliedBasketRow = basketContext.selectedBasketRow || basketContext.currentBasketRows[basketContext.currentBasketRows.length - 1];\n const row = new BasketRow();\n row.setStartDate(appliedBasketRow?.getStartDate() || dayjs().add(1, 'day'));\n row.setEndDate(appliedBasketRow?.getEndDate() || dayjs().add(2, 'day'));\n row.setAdults(appliedBasketRow?.getAdults() || 1);\n row.setChildren(appliedBasketRow?.getChildren() || 0);\n row.setInfants(appliedBasketRow?.getInfants() || 0);\n row.setPromoCode(appliedBasketRow.getPromoCode() ?? '');\n basketContext.initBasketRows([row]);\n }\n ccx.changeHotel(hotel);\n\n navigate(getStepRoom().getStepUrl());\n };\n\n const onMoreDetailsClicked = async () => {\n setModalOpen(true);\n };\n\n const onModalClose = () => {\n setModalOpen(false);\n };\n\n const isLoading = !hotel.hasLoadedDetails;\n\n return useMemo(() => {\n const content = isLoading ? (\n <div>\n <div className=\"d-flex flex-column\">\n <Placeholder type=\"block\" blockSize=\"sm\" rounded=\"lg\" blink />\n <div className=\"u-pad\">\n <Placeholder type=\"text\" w=\"md\" h=\"md\" blink />\n <Placeholder type=\"text\" w=\"md\" h=\"md\" blink />\n <div className=\"u-marg-top\">\n <div className=\"u-flex justify-space-between\">\n <Placeholder type=\"block\" blockSize=\"xs\" rounded=\"lg\" blink />\n <Placeholder type=\"block\" blockSize=\"xs\" rounded=\"lg\" blink />\n <Placeholder type=\"block\" blockSize=\"xs\" rounded=\"lg\" blink />\n </div>\n </div>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"large-hotel-card u-rounded h-100 justify-items-between\">\n <div className=\"large-hotel-card--image\">\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"large-hotel-card--body u-pad--heavy u-pad-bottom--none container\">\n <Headline bold>{hotel?.name}</Headline>\n <Text color={Color.DarkGrey} bold className=\"u-marg-bottom--light\">\n {hotel?.address?.city}\n </Text>\n <div className=\"u-flex u-marg-bottom\">\n <Text type={TextType.Small}>{[hotel?.address?.line1, hotel?.address?.line2, hotel?.address?.state].filter((line) => !!line).join(', ')}</Text>\n </div>\n <div className=\"u-marg-bottom--medium large-hotel-card--description\">\n <Text className=\"text\" type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel.description || '' }}></span>\n </Text>\n </div>\n {!!hotel.perks?.length && (\n <Text className=\"u-marg-bottom\" bold type={TextType.Small} color={Color.Accent}>\n And these come free...\n </Text>\n )}\n <div className=\"u-flex u-flex-align-center u-marg-bottom--medium\">\n {!!hotel.perks?.length && (\n <div className=\"u-flex\">\n {hotel.perks.slice(0, 5).map((perk) => {\n const openPerkOnClick = () => {\n setOpenPerk(perk.name);\n };\n\n const perkIconElement = getPerkIconElement(perk);\n return (\n <div className=\"u-flex u-flex-align-center\" key={perk.name}>\n <Tooltip\n title={perk.tooltip ?? perk.name}\n overrideContainer={hotelCardRef?.current}\n dark={lightOrDark(hotel.colors.accent2) === 'dark'}\n >\n <div\n onClick={openPerkOnClick}\n style={{ backgroundColor: Color.Snow }}\n className=\"u-rounded u-pad--light u-marg-right--light d-flex justify-center\"\n >\n <div className=\"u-mw-16 d-flex justify-content-center\">{perkIconElement}</div>\n </div>\n </Tooltip>\n <div\n className={\n 'u-marg-right u-none@l- u-block@m- ' +\n (beContext.screenSize > ScreenSize.Medium ||\n beContext.screenSize <= ScreenSize.Mobile ||\n (beContext.screenSize > ScreenSize.Mobile && beContext.screenSize <= ScreenSize.Medium && openPerk !== perk.name)\n ? 'u-none-2'\n : '')\n }\n >\n <Text type={TextType.Small}>{perk.name}</Text>\n </div>\n </div>\n );\n })}\n </div>\n )}\n <BEButton icon={IconType.ArrowRight2} isText primary size=\"tiny\" iconPosition=\"right\" onClick={onMoreDetailsClicked}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n </div>\n <div className=\"u-pad--heavy u-pad-top--none h-100 justify-content-end u-flex flex-column u-flex-align-flex-start align-items-md-start no-gutters\">\n {showPrice ? (\n <>\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"u-flex u-flex-flex-start u-flex-align-center flex-row\">\n <Headline bold className=\"u-flex\">\n {hotel.lowestPrice?.isLoading ? (\n <SmallSpinner />\n ) : (\n <Currency hideDecimals originalCurrencyCode={hotel.defaultCurrency}>\n {currentPrice}\n </Currency>\n )}\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n </>\n ) : (\n <div className=\"u-h-fill d-flex align-items-center\">\n <Text type={TextType.Small} color={Color.Alert}>\n {t(Translation.Step.Hotel.HotelCard.DatesUnavailable)}\n </Text>\n </div>\n )}\n\n <div className=\"u-marg-top--light u-flex justify-content-end u-w-100@m-\">\n <BEButton\n name=\"ViewRatesNowButton\"\n primary\n primaryActive\n filled\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n wide={beContext.screenSize <= ScreenSize.Medium}\n onClick={onViewRoomsClicked}\n >\n {t(Translation.Step.Hotel.ViewRooms)}\n </BEButton>\n </div>\n </div>\n <HotelCardModal open={modalOpen} onClose={onModalClose} hotel={hotel} container={hotelCardRef?.current} />\n </div>\n );\n\n return (\n <span ref={hotelCardRef} id={`hotel-card-${hotel.hotelID}`}>\n <style>{`#hotel-card-modal-${hotel.hotelID},\n #hotel-card-${hotel.hotelID} {\n ${getAccentOverrideStyleContent(colorProfile)}\n }`}</style>\n {content}\n </span>\n );\n }, [currentPrice, isLoading, currentPriceLoading, modalOpen, hotelCardRef, openPerk]);\n};\n\nexport default HotelCard;\n"]}
@@ -49,7 +49,7 @@ const HotelCardModal = (props) => {
49
49
  const hotel = props.hotel;
50
50
  const [images, setImages] = (0, react_1.useState)([props.hotel.heroImage]);
51
51
  const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
52
- const history = (0, react_router_dom_1.useHistory)();
52
+ const navigate = (0, react_router_dom_1.useNavigate)();
53
53
  const { t } = (0, react_i18next_1.useTranslation)();
54
54
  const currentPrice = (_a = hotel.lowestPrice) === null || _a === void 0 ? void 0 : _a.value;
55
55
  (0, react_1.useEffect)(() => {
@@ -67,7 +67,7 @@ const HotelCardModal = (props) => {
67
67
  const perksFree = hotel.perks;
68
68
  const onClickViewRooms = () => {
69
69
  ccx.changeHotel(hotel);
70
- history.push(StepManager_1.default.getNextStepUrl(StepHotel_1.default));
70
+ navigate(StepManager_1.default.getNextStepUrl(StepHotel_1.default));
71
71
  };
72
72
  return (react_1.default.createElement(SimpleModal_1.default, { style: { overflow: 'scroll' }, size: SimpleModal_1.SimpleModalSize.Small, open: props.open, onClose: props.onClose, title: hotel.name, modalTarget: props.container },
73
73
  react_1.default.createElement("div", { style: { backgroundColor: Color_1.Color.White }, id: `hotel-card-modal-${hotel.hotelID}` },
@@ -1 +1 @@
1
- {"version":3,"file":"HotelCardModal.js","sourceRoot":"/","sources":["src/components/steps/hotel/HotelCardModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport 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 TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport { Color } from '@/util/Color';\nimport { getPerkIconElement } from '@/util/HotelPerkHelper';\nimport StepManager from '@/util/StepManager';\n\ninterface HotelCardModalProps {\n open: boolean;\n hotel: Hotel;\n\n onClose: () => void;\n\n container?: HTMLElement | null;\n}\n\nconst HotelCardModal = (props: HotelCardModalProps) => {\n const hotel = props.hotel;\n\n const [images, setImages] = useState([props.hotel.heroImage]);\n const ccx = useContext(CompanyContext);\n const history = useHistory();\n\n const { t } = useTranslation();\n\n const currentPrice = hotel.lowestPrice?.value;\n\n useEffect(() => {\n const newImages: string[] = [hotel.heroImage];\n\n if (hotel.rooms) {\n for (const room of Object.values(hotel.rooms)) {\n room.images?.forEach((image) => {\n newImages.push(image);\n });\n }\n }\n\n setImages(newImages);\n }, [hotel.rooms]);\n\n const perksFree = hotel.perks;\n\n const onClickViewRooms = () => {\n ccx.changeHotel(hotel);\n history.push(StepManager.getNextStepUrl(StepHotel));\n };\n\n return (\n <SimpleModal style={{ overflow: 'scroll' }} size={SimpleModalSize.Small} open={props.open} onClose={props.onClose} title={hotel.name} modalTarget={props.container}>\n <div style={{ backgroundColor: Color.White }} id={`hotel-card-modal-${hotel.hotelID}`}>\n <div style={{ height: '350px' }}>\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"container u-pad--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Headline size=\"large\" bold>\n {hotel.name}\n </Headline>\n </div>\n <Text bold color={Color.DarkGrey}>\n {hotel.address?.city}\n </Text>\n </div>\n <div className=\"u-marg-top-bottom--heavy row u-w-100\">\n <TransportDistanceFromHotelBlock tightMargins hotel={hotel} />\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {hotel.address?.line1}, {hotel.address?.line2}\n </Text>\n </div>\n {!!hotel.perks?.length && (\n <div>\n <Text className=\"u-marg-bottom\" bold color={Color.Accent}>\n And these come free...\n </Text>\n <div className=\"u-flex row u-marg-bottom--massive\">\n {perksFree?.map((perk) => {\n const perkIconElement = getPerkIconElement(perk);\n\n return (\n <div className=\"u-flex u-flex-align-center u-flex-flex-start col-sm-4 col-6 u-marg-bottom--light\" key={perk.name}>\n <div style={{ backgroundColor: Color.Snow }} className=\"u-rounded u-pad--light u-marg-right--light\">\n <div className=\"u-mw-16 d-flex justify-content-center\">{perkIconElement}</div>\n </div>\n <div className=\"u-marg-right u-block@m-\">\n <Text type={TextType.Small}>{perk.name}</Text>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n <div>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel.description || '' }}></span>\n </Text>\n </div>\n <LineBreak />\n <div className=\"u-flex\">\n <div style={{ paddingLeft: '0' }} className=\"col-md-6 u-flex justify-content-start flex-column align-items-start\">\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals originalCurrencyCode={hotel.defaultCurrency}>\n {currentPrice}\n </Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n </div>\n <div>\n <BEButton primary filled icon={IconType.ArrowRight} iconPosition=\"right\" onClick={onClickViewRooms}>\n {t(Translation.Step.Hotel.ViewRooms)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default HotelCardModal;\n"]}
1
+ {"version":3,"file":"HotelCardModal.js","sourceRoot":"/","sources":["src/components/steps/hotel/HotelCardModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport 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 TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport { Hotel } from '@/models/Client/Hotel/Hotel';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport { Color } from '@/util/Color';\nimport { getPerkIconElement } from '@/util/HotelPerkHelper';\nimport StepManager from '@/util/StepManager';\n\ninterface HotelCardModalProps {\n open: boolean;\n hotel: Hotel;\n\n onClose: () => void;\n\n container?: HTMLElement | null;\n}\n\nconst HotelCardModal = (props: HotelCardModalProps) => {\n const hotel = props.hotel;\n\n const [images, setImages] = useState([props.hotel.heroImage]);\n const ccx = useContext(CompanyContext);\n const navigate = useNavigate();\n\n const { t } = useTranslation();\n\n const currentPrice = hotel.lowestPrice?.value;\n\n useEffect(() => {\n const newImages: string[] = [hotel.heroImage];\n\n if (hotel.rooms) {\n for (const room of Object.values(hotel.rooms)) {\n room.images?.forEach((image) => {\n newImages.push(image);\n });\n }\n }\n\n setImages(newImages);\n }, [hotel.rooms]);\n\n const perksFree = hotel.perks;\n\n const onClickViewRooms = () => {\n ccx.changeHotel(hotel);\n navigate(StepManager.getNextStepUrl(StepHotel));\n };\n\n return (\n <SimpleModal style={{ overflow: 'scroll' }} size={SimpleModalSize.Small} open={props.open} onClose={props.onClose} title={hotel.name} modalTarget={props.container}>\n <div style={{ backgroundColor: Color.White }} id={`hotel-card-modal-${hotel.hotelID}`}>\n <div style={{ height: '350px' }}>\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"container u-pad--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--light\">\n <Headline size=\"large\" bold>\n {hotel.name}\n </Headline>\n </div>\n <Text bold color={Color.DarkGrey}>\n {hotel.address?.city}\n </Text>\n </div>\n <div className=\"u-marg-top-bottom--heavy row u-w-100\">\n <TransportDistanceFromHotelBlock tightMargins hotel={hotel} />\n </div>\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {hotel.address?.line1}, {hotel.address?.line2}\n </Text>\n </div>\n {!!hotel.perks?.length && (\n <div>\n <Text className=\"u-marg-bottom\" bold color={Color.Accent}>\n And these come free...\n </Text>\n <div className=\"u-flex row u-marg-bottom--massive\">\n {perksFree?.map((perk) => {\n const perkIconElement = getPerkIconElement(perk);\n\n return (\n <div className=\"u-flex u-flex-align-center u-flex-flex-start col-sm-4 col-6 u-marg-bottom--light\" key={perk.name}>\n <div style={{ backgroundColor: Color.Snow }} className=\"u-rounded u-pad--light u-marg-right--light\">\n <div className=\"u-mw-16 d-flex justify-content-center\">{perkIconElement}</div>\n </div>\n <div className=\"u-marg-right u-block@m-\">\n <Text type={TextType.Small}>{perk.name}</Text>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n <div>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel.description || '' }}></span>\n </Text>\n </div>\n <LineBreak />\n <div className=\"u-flex\">\n <div style={{ paddingLeft: '0' }} className=\"col-md-6 u-flex justify-content-start flex-column align-items-start\">\n <Text type={TextType.Small} color={Color.Navy} inline>\n {t(Translation.Misc.From)}\n </Text>\n <div className=\"room-details--content-price flex-row\">\n <Headline bold>\n <Currency hideDecimals originalCurrencyCode={hotel.defaultCurrency}>\n {currentPrice}\n </Currency>\n </Headline>\n <Text color={Color.DarkGrey} inline>\n /{t(Translation.Misc.Night)}\n </Text>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.Grey} inline className=\"u-nowrap\">\n {t(Translation.Step.Room.ExcludingTaxes)}\n </Text>\n </div>\n </div>\n <div>\n <BEButton primary filled icon={IconType.ArrowRight} iconPosition=\"right\" onClick={onClickViewRooms}>\n {t(Translation.Step.Hotel.ViewRooms)}\n </BEButton>\n </div>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default HotelCardModal;\n"]}
@@ -28,6 +28,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.STEP_ROOM_BEST_RATE_ALERT = void 0;
30
30
  const contexts_1 = require("../../../contexts/index.js");
31
+ const hooks_1 = require("../../../hooks/index.js");
32
+ const classnames_1 = __importDefault(require("classnames"));
31
33
  const react_1 = __importStar(require("react"));
32
34
  const react_i18next_1 = require("react-i18next");
33
35
  const Translation_1 = require("translations/Translation");
@@ -40,9 +42,17 @@ function OriginalBestRateAlert() {
40
42
  const overrides = (0, react_1.useContext)(contexts_1.HotelOverridesContext);
41
43
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
42
44
  const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
45
+ const { hotel } = (0, hooks_1.useCurrentHotel)();
43
46
  const { t } = (0, react_i18next_1.useTranslation)();
44
47
  const isEditingRow = !!(basketContext.selectedBasketRow && basketContext.selectedBasketRow.isValid());
45
48
  const hyphen = t(Translation_1.Translation.Misc.Alerts.BestRatePerks) !== '' ? ' - ' : '';
49
+ const isClickable = !ccx.signedInUser && (hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyPromoCode);
50
+ const openSignupModalOnClick = () => {
51
+ // When guests are not signed in and member sign-ups are enabled.
52
+ if (isClickable) {
53
+ ccx.openMemberSignupModal();
54
+ }
55
+ };
46
56
  const alertText = (0, react_1.useMemo)(() => {
47
57
  var _a, _b, _c, _d;
48
58
  const preSignUp = ((_a = overrides.messages) === null || _a === void 0 ? void 0 : _a.PreSignUp) || t(Translation_1.Translation.Misc.Alerts.PreSignUp);
@@ -66,8 +76,9 @@ function OriginalBestRateAlert() {
66
76
  hyphen,
67
77
  ((_d = overrides.messages) === null || _d === void 0 ? void 0 : _d.BestRatePerksAlert) || t(Translation_1.Translation.Misc.Alerts.BestRatePerksAlert)));
68
78
  }, [ccx]);
69
- return (react_1.default.createElement(Alert_1.default, { icon: Icon_1.IconType.Money, noMargin: !isEditingRow },
70
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, alertText)));
79
+ return (react_1.default.createElement("div", { onClick: openSignupModalOnClick, className: (0, classnames_1.default)({ 'u-cursor-pointer': isClickable }) },
80
+ react_1.default.createElement(Alert_1.default, { icon: Icon_1.IconType.Money, noMargin: !isEditingRow },
81
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, alertText))));
71
82
  }
72
83
  function StepRoomBestRateAlert() {
73
84
  return (0, DIProvider_1.withDI)(exports.STEP_ROOM_BEST_RATE_ALERT, OriginalBestRateAlert, null);
@@ -1 +1 @@
1
- {"version":3,"file":"StepRoomBestRateAlert.js","sourceRoot":"/","sources":["src/components/steps/room/StepRoomBestRateAlert.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA0F;AAC1F,+CAAmD;AACnD,iDAA+C;AAC/C,0DAAuD;AAEvD,uEAA+C;AAC/C,yDAA0D;AAC1D,kEAA2D;AAC3D,uDAAgD;AAEnC,QAAA,yBAAyB,GAAG,uBAAuB,CAAC;AAEjE,SAAS,qBAAqB;IAC1B,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,IAAI,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5E,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;QAC3B,MAAM,SAAS,GAAG,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,SAAS,KAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxF,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAChC,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,GAAG,CAAC,YAAY,EAAE;YAClB,MAAM,UAAU,GACZ,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,UAAU;gBAC9B,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBAClC,IAAI,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACvE,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,SAAS;oBACrC,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;oBACnC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,KAAK;iBAChC,CAAC,CAAC;YAEP,IAAI,UAAU,EAAE;gBACZ,OAAO,UAAU,CAAC;aACrB;SACJ;QAED,OAAO,CACH;YACI,8CAAS,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,aAAa,KAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAU;YAC/F,MAAM;YACN,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,kBAAkB,KAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACzF,CACN,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,CACH,8BAAC,eAAK,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,YAAY;QAChD,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,SAAS,CAAQ,CAC1C,CACX,CAAC;AACN,CAAC;AAED,SAAwB,qBAAqB;IACzC,OAAO,IAAA,mBAAM,EAAC,iCAAyB,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC;AAFD,wCAEC","sourcesContent":["import { BasketContext, CompanyContext, HotelOverridesContext } from '@frontend/contexts';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { withDI } from '@/providers/DIProvider';\n\nexport const STEP_ROOM_BEST_RATE_ALERT = 'StepRoomBestRateAlert';\n\nfunction OriginalBestRateAlert() {\n const overrides = useContext(HotelOverridesContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const { t } = useTranslation();\n const isEditingRow = !!(basketContext.selectedBasketRow && basketContext.selectedBasketRow.isValid());\n const hyphen = t(Translation.Misc.Alerts.BestRatePerks) !== '' ? ' - ' : '';\n\n const alertText = useMemo(() => {\n const preSignUp = overrides.messages?.PreSignUp || t(Translation.Misc.Alerts.PreSignUp);\n if (preSignUp && !ccx.signedInUser) {\n return preSignUp;\n }\n\n if (ccx.signedInUser) {\n const postSignUp =\n overrides.messages?.PostSignUp ||\n t(Translation.Misc.Alerts.PostSignUp, {\n name: [ccx.signedInUser.firstName, ccx.signedInUser.lastName].join(' '),\n firstName: ccx.signedInUser.firstName,\n lastName: ccx.signedInUser.lastName,\n email: ccx.signedInUser.email,\n });\n\n if (postSignUp) {\n return postSignUp;\n }\n }\n\n return (\n <>\n <strong>{overrides.messages?.BestRatePerks || t(Translation.Misc.Alerts.BestRatePerks)}</strong>\n {hyphen}\n {overrides.messages?.BestRatePerksAlert || t(Translation.Misc.Alerts.BestRatePerksAlert)}\n </>\n );\n }, [ccx]);\n\n return (\n <Alert icon={IconType.Money} noMargin={!isEditingRow}>\n <Text type={TextType.Small}>{alertText}</Text>\n </Alert>\n );\n}\n\nexport default function StepRoomBestRateAlert() {\n return withDI(STEP_ROOM_BEST_RATE_ALERT, OriginalBestRateAlert, null);\n}\n"]}
1
+ {"version":3,"file":"StepRoomBestRateAlert.js","sourceRoot":"/","sources":["src/components/steps/room/StepRoomBestRateAlert.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext, HotelOverridesContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport classnames from 'classnames';\nimport React, { useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { withDI } from '@/providers/DIProvider';\n\nexport const STEP_ROOM_BEST_RATE_ALERT = 'StepRoomBestRateAlert';\n\nfunction OriginalBestRateAlert() {\n const overrides = useContext(HotelOverridesContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n const isEditingRow = !!(basketContext.selectedBasketRow && basketContext.selectedBasketRow.isValid());\n const hyphen = t(Translation.Misc.Alerts.BestRatePerks) !== '' ? ' - ' : '';\n const isClickable = !ccx.signedInUser && hotel?.memberOnlyPromoCode;\n const openSignupModalOnClick = () => {\n // When guests are not signed in and member sign-ups are enabled.\n if (isClickable) {\n ccx.openMemberSignupModal();\n }\n };\n\n const alertText = useMemo(() => {\n const preSignUp = overrides.messages?.PreSignUp || t(Translation.Misc.Alerts.PreSignUp);\n if (preSignUp && !ccx.signedInUser) {\n return preSignUp;\n }\n\n if (ccx.signedInUser) {\n const postSignUp =\n overrides.messages?.PostSignUp ||\n t(Translation.Misc.Alerts.PostSignUp, {\n name: [ccx.signedInUser.firstName, ccx.signedInUser.lastName].join(' '),\n firstName: ccx.signedInUser.firstName,\n lastName: ccx.signedInUser.lastName,\n email: ccx.signedInUser.email,\n });\n\n if (postSignUp) {\n return postSignUp;\n }\n }\n\n return (\n <>\n <strong>{overrides.messages?.BestRatePerks || t(Translation.Misc.Alerts.BestRatePerks)}</strong>\n {hyphen}\n {overrides.messages?.BestRatePerksAlert || t(Translation.Misc.Alerts.BestRatePerksAlert)}\n </>\n );\n }, [ccx]);\n\n return (\n <div onClick={openSignupModalOnClick} className={classnames({ 'u-cursor-pointer': isClickable })}>\n <Alert icon={IconType.Money} noMargin={!isEditingRow}>\n <Text type={TextType.Small}>{alertText}</Text>\n </Alert>\n </div>\n );\n}\n\nexport default function StepRoomBestRateAlert() {\n return withDI(STEP_ROOM_BEST_RATE_ALERT, OriginalBestRateAlert, null);\n}\n"]}
@@ -38,7 +38,6 @@ const StepRoomErrorForm_1 = require("../StepRoomErrorForm");
38
38
  const TabGroupedRoomList_1 = require("./TabGroupedRoomList");
39
39
  const Query_1 = require("../../../../hooks/Query");
40
40
  const RoomRateAvailabilityListFromApi_1 = require("../../../../hooks/RoomRateAvailabilityListFromApi");
41
- const StepGroupedRoom_1 = __importDefault(require("../../../../pages/steps/StepGroupedRoom/StepGroupedRoom"));
42
41
  const DataLayer_1 = __importDefault(require("../../../../util/DataLayer"));
43
42
  const TabGroupedRooms = () => {
44
43
  var _a;
@@ -114,10 +113,10 @@ const TabGroupedRooms = () => {
114
113
  onlyGroups.splice(0, 1);
115
114
  return (react_1.default.createElement("div", { style: { maxWidth: '100%', overflow: 'hidden' } },
116
115
  react_1.default.createElement(Tabs_1.default, { fullBleedOnLineBreak: false, activeKey: defaultTab },
117
- react_1.default.createElement(Tab_1.Tab, { title: "All Accommodation", navPath: StepGroupedRoom_1.default.getStepUrl() + 'list-all', key: "list-all", preventScrollTop: true }, groupedRooms === null || groupedRooms === void 0 ? void 0 : groupedRooms.filter((item) => item.rooms.length).map((group) => {
116
+ react_1.default.createElement(Tab_1.Tab, { title: "All Accommodation", navPath: 'list-all', key: "list-all", preventScrollTop: true }, groupedRooms === null || groupedRooms === void 0 ? void 0 : groupedRooms.filter((item) => item.rooms.length).map((group) => {
118
117
  return react_1.default.createElement(TabGroupedRoomList_1.TabGroupedRoomList, { group: group, rooms: group.rooms, key: group.id });
119
118
  })),
120
- onlyGroups.map((group) => (react_1.default.createElement(Tab_1.Tab, { title: group.groupName, navPath: StepGroupedRoom_1.default.getStepUrl() + group.groupName, key: group.id, preventScrollTop: true },
119
+ onlyGroups.map((group) => (react_1.default.createElement(Tab_1.Tab, { title: group.groupName, navPath: group.groupName, key: group.id, preventScrollTop: true },
121
120
  react_1.default.createElement(TabGroupedRoomList_1.TabGroupedRoomList, { group: group, rooms: group.rooms })))))));
122
121
  }
123
122
  // No rooms found, so let's display the crossell block, or no rooms found
@@ -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 { useCurrentHotel } from '@frontend/hooks';\nimport React, { 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 StepGroupedRoom from '@/pages/steps/StepGroupedRoom/StepGroupedRoom';\nimport DataLayer from '@/util/DataLayer';\n\nexport const TabGroupedRooms = () => {\n const { hotel } = useCurrentHotel();\n\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 if (isLoading || !loadingAttempted) {\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={StepGroupedRoom.getStepUrl() + 'list-all'} key=\"list-all\" preventScrollTop>\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 </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={StepGroupedRoom.getStepUrl() + 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 { useCurrentHotel } from '@frontend/hooks';\nimport React, { 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\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 if (isLoading || !loadingAttempted) {\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 {/* 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 </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"]}
@@ -49,7 +49,7 @@ const ScreenSize_1 = __importDefault(require("../../../../util/ScreenSize"));
49
49
  const StringHelper_1 = __importDefault(require("../../../../util/StringHelper"));
50
50
  const NumberOfInfantsPicker_1 = __importDefault(require("./NumberOfInfantsPicker"));
51
51
  function RoomBuilderProgressRow(props) {
52
- var _a, _b, _c, _d;
52
+ var _a, _b, _c, _d, _e;
53
53
  const context = (0, react_1.useContext)(contexts_1.BasketContext);
54
54
  const engineContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
55
55
  const { hotel } = (0, hooks_1.useCurrentHotel)();
@@ -57,7 +57,10 @@ function RoomBuilderProgressRow(props) {
57
57
  const { t } = (0, react_i18next_1.useTranslation)();
58
58
  const [isEditing, setIsEditing] = (0, react_1.useState)(false);
59
59
  const { row } = props;
60
- const isCurrent = context.selectedBasketRow && context.selectedBasketRow.getID() === row.getID();
60
+ const isCurrent = (0, react_1.useMemo)(() => {
61
+ var _a;
62
+ return context.selectedBasketRow && ((_a = context.selectedBasketRow) === null || _a === void 0 ? void 0 : _a.getID()) === (row === null || row === void 0 ? void 0 : row.getID());
63
+ }, [context.selectedBasketRow, (_a = context.selectedBasketRow) === null || _a === void 0 ? void 0 : _a.getID(), row === null || row === void 0 ? void 0 : row.getID()]);
61
64
  const classes = (0, classnames_1.default)('room-builder-progress--item', {
62
65
  '--current': isCurrent,
63
66
  '--complete': row.isValid(),
@@ -118,7 +121,9 @@ function RoomBuilderProgressRow(props) {
118
121
  react_1.default.createElement(BEButton_1.default, { isText: true, icon: Icon_1.IconType.Close, iconPosition: "right", stopIconAnimation: true, disabled: !isRemovable, onClick: removeRoomOnClick }))));
119
122
  const isLargerThanLarge = engineContext.screenSize > ScreenSize_1.default.ExtraLarge;
120
123
  const showEditSection = isLargerThanLarge || isCurrent;
121
- const roomLabel = context.currentBasketRows.length !== 1 ? props.number + 1 : '';
124
+ const roomLabel = (0, react_1.useMemo)(() => {
125
+ return context.currentBasketRows.length !== 1 ? props.number + 1 : '';
126
+ }, [context.currentBasketRows.length, props.number]);
122
127
  let promoCodeTooltip = '';
123
128
  if (row.getPromoCodeStatus() === 'new') {
124
129
  promoCodeTooltip = row.getPromoCode() ? t(Translation_1.Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation_1.Translation.Step.Date.PromoCodeTooltip.NoValue);
@@ -189,7 +194,7 @@ function RoomBuilderProgressRow(props) {
189
194
  showChildren ? (react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateChildren), wrapperClasses: "u-w-100@xl- d-flex" },
190
195
  react_1.default.createElement("div", { className: "room-builder-progress--value u-flex-justify-center u-flex" },
191
196
  react_1.default.createElement(NumberOfChildrenPicker_1.default, { row: row, onChange: updateNumberOfChildrenOnChange })))) : null,
192
- ((_a = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _a === void 0 ? void 0 : _a.supportInfants) ? (react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateInfants), wrapperClasses: "u-w-100@xl- d-flex" },
197
+ ((_b = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _b === void 0 ? void 0 : _b.supportInfants) ? (react_1.default.createElement(Tooltip_1.default, { title: t(Translation_1.Translation.Step.Date.UpdateInfants), wrapperClasses: "u-w-100@xl- d-flex" },
193
198
  react_1.default.createElement("div", { className: "room-builder-progress--value u-flex-justify-center u-flex" },
194
199
  react_1.default.createElement(NumberOfInfantsPicker_1.default, { row: row, onChange: updateNumberOfInfantsOnChange })))) : null,
195
200
  react_1.default.createElement(react_1.default.Fragment, null,
@@ -208,8 +213,8 @@ function RoomBuilderProgressRow(props) {
208
213
  react_1.default.createElement(Overlay_1.Overlay, { open: isPromoModalOpen, followElement: thisElement.current, onClose: setPromoCodeOnClose },
209
214
  react_1.default.createElement("div", { className: "u-pad--heavy" },
210
215
  react_1.default.createElement("div", null,
211
- react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: ((_b = context.selectedBasketRow) === null || _b === void 0 ? void 0 : _b.getPromoCodeStatus()) !== 'new' && promocode
212
- ? ((_c = context.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCodeStatus()) === 'valid'
216
+ react_1.default.createElement(PromoCodeInput_1.default, { value: promocode, onChange: changePromoCode, valid: ((_c = context.selectedBasketRow) === null || _c === void 0 ? void 0 : _c.getPromoCodeStatus()) !== 'new' && promocode
217
+ ? ((_d = context.selectedBasketRow) === null || _d === void 0 ? void 0 : _d.getPromoCodeStatus()) === 'valid'
213
218
  : undefined })),
214
219
  react_1.default.createElement("div", { className: "u-flex justify-content-end align-items-center u-marg-top" },
215
220
  react_1.default.createElement(BEButton_1.default, { isText: true, size: "small", onClick: cancelPromoPopupOnClick }, t(Translation_1.Translation.Misc.Cancel))))),
@@ -232,7 +237,7 @@ function RoomBuilderProgressRow(props) {
232
237
  showChildren ? (react_1.default.createElement(react_1.default.Fragment, null,
233
238
  ",\u00A0",
234
239
  StringHelper_1.default.pluralWithDictAndCount(row.getChildren(), Translation_1.Translation.Step.Date.Child, t))) : null,
235
- ((_d = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _d === void 0 ? void 0 : _d.supportInfants) ? (react_1.default.createElement(react_1.default.Fragment, null,
240
+ ((_e = hotel === null || hotel === void 0 ? void 0 : hotel.childConfiguration) === null || _e === void 0 ? void 0 : _e.supportInfants) ? (react_1.default.createElement(react_1.default.Fragment, null,
236
241
  ",\u00A0",
237
242
  StringHelper_1.default.pluralWithDictAndCount(row.getInfants(), Translation_1.Translation.Step.Date.Infant, t))) : null))),
238
243
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Caption, color: Color_1.Color.DarkGrey },