@roomstay/frontend 2.9.1-1 → 2.9.1

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 (98) hide show
  1. package/dist/177.bundle.js +1 -1
  2. package/dist/288.bundle.js +1 -1
  3. package/dist/326.bundle.js +2 -0
  4. package/dist/446.bundle.js +1 -1
  5. package/dist/537.bundle.js +1 -1
  6. package/dist/596.bundle.js +1 -1
  7. package/dist/625.bundle.js +1 -1
  8. package/dist/686.bundle.js +1 -0
  9. package/dist/836.bundle.js +1 -1
  10. package/dist/main.bundle.js +1 -1
  11. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js +0 -6
  12. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/BookingWizardBottomSheet.js.map +1 -1
  13. package/dist/src/components/generic/Portal/Portal.js +1 -5
  14. package/dist/src/components/generic/Portal/Portal.js.map +1 -1
  15. package/dist/src/components/generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField.d.ts +2 -2
  16. package/dist/src/components/generic/custom/EnhancedPhoneNumberField/EnhancedPhoneNumberField.js.map +1 -1
  17. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.d.ts +0 -4
  18. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js +30 -105
  19. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js.map +1 -1
  20. package/dist/src/components/members/SignInModal/ExternalMemberModal.d.ts +3 -9
  21. package/dist/src/components/members/SignInModal/ExternalMemberModal.js +6 -45
  22. package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -1
  23. package/dist/src/components/steps/date/BEPeoplePickerBlock.js +1 -3
  24. package/dist/src/components/steps/date/BEPeoplePickerBlock.js.map +1 -1
  25. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +0 -2
  26. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  27. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  28. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +1 -1
  29. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  30. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +0 -1
  31. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  32. package/dist/src/contexts/index.d.ts +0 -2
  33. package/dist/src/contexts/index.js +0 -2
  34. package/dist/src/contexts/index.js.map +1 -1
  35. package/dist/src/engines/BaseEngine.d.ts +0 -13
  36. package/dist/src/engines/BaseEngine.js +0 -32
  37. package/dist/src/engines/BaseEngine.js.map +1 -1
  38. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js +0 -1
  39. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  40. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +1 -3
  41. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
  42. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngine.js +0 -1
  43. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngine.js.map +1 -1
  44. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +10 -12
  45. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  46. package/dist/src/engines/MemberPortalWidget/MemberPortalWidget.js +0 -1
  47. package/dist/src/engines/MemberPortalWidget/MemberPortalWidget.js.map +1 -1
  48. package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js +9 -11
  49. package/dist/src/engines/MemberPortalWidget/MemberPortalWidgetElement.js.map +1 -1
  50. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngine.js +0 -1
  51. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngine.js.map +1 -1
  52. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js +2 -4
  53. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js.map +1 -1
  54. package/dist/src/handlers/membership/SalesforceMemberHandler.js +1 -1
  55. package/dist/src/handlers/membership/SalesforceMemberHandler.js.map +1 -1
  56. package/dist/src/hooks/BodyClickHook.d.ts +2 -2
  57. package/dist/src/hooks/BodyClickHook.js +3 -7
  58. package/dist/src/hooks/BodyClickHook.js.map +1 -1
  59. package/dist/src/hooks/useAreaAvailability.js +2 -1
  60. package/dist/src/hooks/useAreaAvailability.js.map +1 -1
  61. package/dist/src/pages/findReservation/FindReservationResults.js +1 -1
  62. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  63. package/dist/src/pages/findReservation/ReservationRow.js +9 -10
  64. package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
  65. package/dist/src/pages/hotel/HotelInfo.js +6 -7
  66. package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
  67. package/dist/src/providers/RoomstayThemeEngine.js +2 -7
  68. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  69. package/dist/src/providers/storage/SessionProvider.js.map +1 -1
  70. package/dist/src/stories/EnhancedPhoneNumberField.stories.d.ts +1 -1
  71. package/dist/src/translations/Translation.d.ts +0 -3
  72. package/dist/src/translations/Translation.js +0 -3
  73. package/dist/src/translations/Translation.js.map +1 -1
  74. package/dist/src/translations/languages/en-gb.js +0 -3
  75. package/dist/src/translations/languages/en-gb.js.map +1 -1
  76. package/dist/src/util/Analytics/Analytics.js +0 -1
  77. package/dist/src/util/Analytics/Analytics.js.map +1 -1
  78. package/dist/test.bundle.js +1 -1
  79. package/dist/vendors.bundle.js +1 -1
  80. package/package.json +1 -1
  81. package/dist/219.bundle.js +0 -2
  82. package/dist/291.bundle.js +0 -1
  83. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/ShadowDomBottomSheet.d.ts +0 -22
  84. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/ShadowDomBottomSheet.js +0 -131
  85. package/dist/src/components/generic/BookingWizard/BookingWizardBottomSheet/ShadowDomBottomSheet.js.map +0 -1
  86. package/dist/src/contexts/ShadowDomContext/ShadowDomContext.d.ts +0 -10
  87. package/dist/src/contexts/ShadowDomContext/ShadowDomContext.js +0 -12
  88. package/dist/src/contexts/ShadowDomContext/ShadowDomContext.js.map +0 -1
  89. package/dist/src/contexts/ShadowDomContext/ShadowDomContextProvider.d.ts +0 -8
  90. package/dist/src/contexts/ShadowDomContext/ShadowDomContextProvider.js +0 -13
  91. package/dist/src/contexts/ShadowDomContext/ShadowDomContextProvider.js.map +0 -1
  92. package/dist/src/providers/ShadowDomManager.d.ts +0 -21
  93. package/dist/src/providers/ShadowDomManager.js +0 -55
  94. package/dist/src/providers/ShadowDomManager.js.map +0 -1
  95. package/dist/src/providers/StyleInjector.d.ts +0 -42
  96. package/dist/src/providers/StyleInjector.js +0 -118
  97. package/dist/src/providers/StyleInjector.js.map +0 -1
  98. /package/dist/{219.bundle.js.LICENSE.txt → 326.bundle.js.LICENSE.txt} +0 -0
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useBodyClick = void 0;
4
- const ShadowDomContext_1 = require("../contexts/ShadowDomContext/ShadowDomContext");
5
4
  const useBodyClick = () => {
6
- const { isShadowDom, shadowRoot } = (0, ShadowDomContext_1.useShadowDom)();
7
- // Default event target: shadow root when in Shadow DOM, document otherwise
8
- const defaultTarget = isShadowDom && shadowRoot ? shadowRoot : document;
9
- const removeEvent = (event, target = defaultTarget) => {
5
+ const removeEvent = (event, target = document) => {
10
6
  target === null || target === void 0 ? void 0 : target.removeEventListener('click', event);
11
7
  };
12
- const onBodyClick = (event, target = defaultTarget) => {
8
+ const onBodyClick = (event, target = document) => {
13
9
  const mappedEvent = (e) => {
14
10
  return event(e);
15
11
  };
@@ -20,7 +16,7 @@ const useBodyClick = () => {
20
16
  },
21
17
  };
22
18
  };
23
- const onBodyClickExcept = (event, ignore, target = defaultTarget) => {
19
+ const onBodyClickExcept = (event, ignore, target = document) => {
24
20
  const response = onBodyClick((e) => {
25
21
  var _a;
26
22
  for (const element of e.composedPath()) {
@@ -1 +1 @@
1
- {"version":3,"file":"BodyClickHook.js","sourceRoot":"/","sources":["src/hooks/BodyClickHook.ts"],"names":[],"mappings":";;;AAAA,mFAA4E;AAErE,MAAM,YAAY,GAAG,GAAG,EAAE;IAC7B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAA,+BAAY,GAAE,CAAC;IAEnD,2EAA2E;IAC3E,MAAM,aAAa,GAAgB,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAErF,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,SAA6B,aAAa,EAAE,EAAE;QACrF,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,SAA6B,aAAa,EAAE,EAAE;QACrF,MAAM,WAAW,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE/C,OAAO;YACH,MAAM,EAAE,GAAG,EAAE;gBACT,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;SACJ,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,KAAoB,EAAE,MAAmB,EAAE,SAA6B,aAAa,EAAE,EAAE;QAChH,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAQ,EAAE,EAAE;;YACtC,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,YAAY,EAAmB,EAAE,CAAC;gBACtD,IAAI,MAAA,OAAO,CAAC,UAAU,wDAAG,MAAM,CAAC,EAAE,CAAC;oBAC/B,uEAAuE;oBACvE,OAAO;gBACX,CAAC;YACL,CAAC;YAED,yEAAyE;YACzE,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,MAAM,CAAC,CAAC;QAEX,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC,CAAC;AAxCW,QAAA,YAAY,gBAwCvB","sourcesContent":["import { useShadowDom } from '@/contexts/ShadowDomContext/ShadowDomContext';\n\nexport const useBodyClick = () => {\n const { isShadowDom, shadowRoot } = useShadowDom();\n\n // Default event target: shadow root when in Shadow DOM, document otherwise\n const defaultTarget: EventTarget = isShadowDom && shadowRoot ? shadowRoot : document;\n\n const removeEvent = (event: EventListener, target: EventTarget | null = defaultTarget) => {\n target?.removeEventListener('click', event);\n };\n\n const onBodyClick = (event: EventListener, target: EventTarget | null = defaultTarget) => {\n const mappedEvent = (e: Event) => {\n return event(e);\n };\n\n target?.addEventListener('click', mappedEvent);\n\n return {\n remove: () => {\n target && removeEvent(mappedEvent, target);\n },\n };\n };\n\n const onBodyClickExcept = (event: EventListener, ignore: HTMLElement, target: EventTarget | null = defaultTarget) => {\n const response = onBodyClick((e: Event) => {\n for (const element of e.composedPath() as HTMLElement[]) {\n if (element.isSameNode?.(ignore)) {\n // Preventing the event from taking place, as it's in the ignored list.\n return;\n }\n }\n\n // Assuming target click isn't in the ignore area, proceed with the event\n event(e);\n }, target);\n\n return response;\n };\n return { onBodyClick, onBodyClickExcept };\n};\n"]}
1
+ {"version":3,"file":"BodyClickHook.js","sourceRoot":"/","sources":["src/hooks/BodyClickHook.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,GAAG,EAAE;IAC7B,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,SAAwC,QAAQ,EAAE,EAAE;QAC3F,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,SAAwC,QAAQ,EAAE,EAAE;QAC3F,MAAM,WAAW,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAE/C,OAAO;YACH,MAAM,EAAE,GAAG,EAAE;gBACT,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;SACJ,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,KAAoB,EAAE,MAAmB,EAAE,SAAwC,QAAQ,EAAE,EAAE;QACtH,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAQ,EAAE,EAAE;;YACtC,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,YAAY,EAAmB,EAAE,CAAC;gBACtD,IAAI,MAAA,OAAO,CAAC,UAAU,wDAAG,MAAM,CAAC,EAAE,CAAC;oBAC/B,uEAAuE;oBACvE,OAAO;gBACX,CAAC;YACL,CAAC;YAED,yEAAyE;YACzE,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,MAAM,CAAC,CAAC;QAEX,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC,CAAC;AAnCW,QAAA,YAAY,gBAmCvB","sourcesContent":["export const useBodyClick = () => {\n const removeEvent = (event: EventListener, target: HTMLElement | Document | null = document) => {\n target?.removeEventListener('click', event);\n };\n\n const onBodyClick = (event: EventListener, target: HTMLElement | Document | null = document) => {\n const mappedEvent = (e: Event) => {\n return event(e);\n };\n\n target?.addEventListener('click', mappedEvent);\n\n return {\n remove: () => {\n target && removeEvent(mappedEvent, target);\n },\n };\n };\n\n const onBodyClickExcept = (event: EventListener, ignore: HTMLElement, target: HTMLElement | Document | null = document) => {\n const response = onBodyClick((e: Event) => {\n for (const element of e.composedPath() as HTMLElement[]) {\n if (element.isSameNode?.(ignore)) {\n // Preventing the event from taking place, as it's in the ignored list.\n return;\n }\n }\n\n // Assuming target click isn't in the ignore area, proceed with the event\n event(e);\n }, target);\n\n return response;\n };\n return { onBodyClick, onBodyClickExcept };\n};\n"]}
@@ -43,7 +43,8 @@ const useAreaAvailability = (room, groupFilters) => {
43
43
  });
44
44
  const handleBookNow = (rate) => __awaiter(void 0, void 0, void 0, function* () {
45
45
  const latestFilters = currentGroupedRoomFiltersRef.current;
46
- if (!(hotel === null || hotel === void 0 ? void 0 : hotel.checkAreaAvailabilityOnRoomStep)) {
46
+ // When the group has no filter, the Equipment popup should not be displayed.
47
+ if (!(hotel === null || hotel === void 0 ? void 0 : hotel.checkAreaAvailabilityOnRoomStep) || groupFilterIds.length === 0) {
47
48
  yield basketContext.addRate(rate, true, latestFilters);
48
49
  return;
49
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useAreaAvailability.js","sourceRoot":"/","sources":["src/hooks/useAreaAvailability.ts"],"names":[],"mappings":"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","sourcesContent":["import { AreaAvailability, AuxiliaryFilterSelections, BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useContext, useEffect, useRef, useState } from 'react';\n\nimport { AuxiliaryFilterSelectsProps } from '@/components/generic/AuxiliaryFilterControls/AuxiliaryFilterControls';\nimport { API, useCurrentHotel } from '@/index';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\n\nimport { useAuxiliaryFilters } from './useAuxiliaryFilters';\n\nexport const useAreaAvailability = (room: Room, groupFilters: AuxiliaryFilterSelectsProps['groupFilters']) => {\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n const { applyAuxiliaryFilterSelections } = useAuxiliaryFilters();\n\n const [auxiliaryPickerOpen, setAuxiliaryPickerOpen] = useState(false);\n const [auxiliaryPickerShowError, setAuxiliaryPickerShowError] = useState(false);\n const [pendingRate, setPendingRate] = useState<RoomRate | null>(null);\n\n const groupFilterIds = Object.keys(groupFilters || {});\n const currentGroupedRoomFiltersRef = useRef(context.currentGroupedRoomFilters);\n\n useEffect(() => {\n currentGroupedRoomFiltersRef.current = context.currentGroupedRoomFilters;\n }, [context.currentGroupedRoomFilters]);\n\n const getSelectedRow = () => basketContext.selectedBasketRow ?? basketContext.currentBasketRows?.[0];\n\n const checkAvailabilityAndBook = async (rate: RoomRate, selections: AuxiliaryFilterSelections): Promise<boolean> => {\n const row = getSelectedRow();\n if (!row || !room.code || !hotel?.hotelID) return false;\n\n const applicableFilters = Object.fromEntries(Object.entries(selections).filter(([id]) => groupFilterIds.includes(id)));\n\n const availability: AreaAvailability = await API.Availability.fetchAreaAvailability(row, hotel.hotelID, applicableFilters);\n\n const isAvailable = !!availability[room.code];\n\n if (!isAvailable) return false;\n\n applyAuxiliaryFilterSelections({ ...currentGroupedRoomFiltersRef.current, ...selections }, groupFilters);\n\n await basketContext.addRate(rate, true, applicableFilters);\n return true;\n };\n\n const handleBookNow = async (rate: RoomRate) => {\n const latestFilters = currentGroupedRoomFiltersRef.current;\n\n if (!hotel?.checkAreaAvailabilityOnRoomStep) {\n await basketContext.addRate(rate, true, latestFilters);\n return;\n }\n\n const hasUnselectedRequired = Object.entries(groupFilters).some(([id, f]: any) => f.requireSelection && !latestFilters[id]);\n\n const noFiltersSelected = groupFilterIds.length > 0 && Object.keys(latestFilters).length === 0;\n\n if (hasUnselectedRequired || noFiltersSelected) {\n setPendingRate(rate);\n setAuxiliaryPickerShowError(false);\n setAuxiliaryPickerOpen(true);\n return;\n }\n\n const available = await checkAvailabilityAndBook(rate, latestFilters);\n\n if (!available) {\n setPendingRate(rate);\n setAuxiliaryPickerShowError(true);\n setAuxiliaryPickerOpen(true);\n }\n };\n\n const handleAuxiliaryUpdate = async (selections: AuxiliaryFilterSelections) => {\n if (!pendingRate) return false;\n return checkAvailabilityAndBook(pendingRate, selections);\n };\n\n return {\n handleBookNow,\n handleAuxiliaryUpdate,\n auxiliaryPickerOpen,\n auxiliaryPickerShowError,\n setAuxiliaryPickerOpen,\n };\n};\n"]}
1
+ {"version":3,"file":"useAreaAvailability.js","sourceRoot":"/","sources":["src/hooks/useAreaAvailability.ts"],"names":[],"mappings":"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","sourcesContent":["import { AreaAvailability, AuxiliaryFilterSelections, BasketContext, BookingEngineContext } from '@frontend/contexts';\nimport { useContext, useEffect, useRef, useState } from 'react';\n\nimport { AuxiliaryFilterSelectsProps } from '@/components/generic/AuxiliaryFilterControls/AuxiliaryFilterControls';\nimport { API, useCurrentHotel } from '@/index';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\n\nimport { useAuxiliaryFilters } from './useAuxiliaryFilters';\n\nexport const useAreaAvailability = (room: Room, groupFilters: AuxiliaryFilterSelectsProps['groupFilters']) => {\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n const { applyAuxiliaryFilterSelections } = useAuxiliaryFilters();\n\n const [auxiliaryPickerOpen, setAuxiliaryPickerOpen] = useState(false);\n const [auxiliaryPickerShowError, setAuxiliaryPickerShowError] = useState(false);\n const [pendingRate, setPendingRate] = useState<RoomRate | null>(null);\n\n const groupFilterIds = Object.keys(groupFilters || {});\n const currentGroupedRoomFiltersRef = useRef(context.currentGroupedRoomFilters);\n\n useEffect(() => {\n currentGroupedRoomFiltersRef.current = context.currentGroupedRoomFilters;\n }, [context.currentGroupedRoomFilters]);\n\n const getSelectedRow = () => basketContext.selectedBasketRow ?? basketContext.currentBasketRows?.[0];\n\n const checkAvailabilityAndBook = async (rate: RoomRate, selections: AuxiliaryFilterSelections): Promise<boolean> => {\n const row = getSelectedRow();\n if (!row || !room.code || !hotel?.hotelID) return false;\n\n const applicableFilters = Object.fromEntries(Object.entries(selections).filter(([id]) => groupFilterIds.includes(id)));\n\n const availability: AreaAvailability = await API.Availability.fetchAreaAvailability(row, hotel.hotelID, applicableFilters);\n\n const isAvailable = !!availability[room.code];\n\n if (!isAvailable) return false;\n\n applyAuxiliaryFilterSelections({ ...currentGroupedRoomFiltersRef.current, ...selections }, groupFilters);\n\n await basketContext.addRate(rate, true, applicableFilters);\n return true;\n };\n\n const handleBookNow = async (rate: RoomRate) => {\n const latestFilters = currentGroupedRoomFiltersRef.current;\n\n // When the group has no filter, the Equipment popup should not be displayed.\n if (!hotel?.checkAreaAvailabilityOnRoomStep || groupFilterIds.length === 0) {\n await basketContext.addRate(rate, true, latestFilters);\n return;\n }\n\n const hasUnselectedRequired = Object.entries(groupFilters).some(([id, f]: any) => f.requireSelection && !latestFilters[id]);\n\n const noFiltersSelected = groupFilterIds.length > 0 && Object.keys(latestFilters).length === 0;\n\n if (hasUnselectedRequired || noFiltersSelected) {\n setPendingRate(rate);\n setAuxiliaryPickerShowError(false);\n setAuxiliaryPickerOpen(true);\n return;\n }\n\n const available = await checkAvailabilityAndBook(rate, latestFilters);\n\n if (!available) {\n setPendingRate(rate);\n setAuxiliaryPickerShowError(true);\n setAuxiliaryPickerOpen(true);\n }\n };\n\n const handleAuxiliaryUpdate = async (selections: AuxiliaryFilterSelections) => {\n if (!pendingRate) return false;\n return checkAvailabilityAndBook(pendingRate, selections);\n };\n\n return {\n handleBookNow,\n handleAuxiliaryUpdate,\n auxiliaryPickerOpen,\n auxiliaryPickerShowError,\n setAuxiliaryPickerOpen,\n };\n};\n"]}
@@ -133,7 +133,7 @@ function FindReservationResults() {
133
133
  }, [bookingInformation]);
134
134
  const addons = [];
135
135
  const comments = [];
136
- const total = (0, react_1.useMemo)(() => {
136
+ const total = (0, react_1.useCallback)(() => {
137
137
  if (bookingInformation === null || bookingInformation === void 0 ? void 0 : bookingInformation.reservations) {
138
138
  return core_1.TotalCalculator.calculateTotalForReservation(bookingInformation, dismissAddonNightCount);
139
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FindReservationResults.js","sourceRoot":"/","sources":["src/pages/findReservation/FindReservationResults.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,yCAkMC;AAhOD,iDAAoD;AACpD,2CAA4D;AAC5D,yCAA0H;AAC1H,kDAA0B;AAC1B,+CAAwE;AACxE,iDAA+C;AAC/C,uDAA0D;AAC1D,0DAAuD;AAEvD,iFAAyD;AACzD,kEAAmC;AACnC,oEAA8D;AAC9D,iFAAyD;AACzD,6EAAqD;AACrD,6EAAqD;AACrD,8EAA2E;AAC3E,yDAA0D;AAC1D,+EAAuD;AACvD,0FAAkE;AAClE,8DAA2D;AAC3D,mGAAgG;AAChG,kEAA2D;AAC3D,wGAAqG;AACrG,2GAAwG;AACxG,qCAA2D;AAE3D,4FAAoE;AACpE,wCAAqC;AACrC,wDAAiD;AAEjD,SAAwB,sBAAsB;;IAC1C,MAAM,MAAM,GAAQ,IAAA,4BAAS,GAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IAEvC,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,EAAyB,IAAI,CAAC,CAAC;IAC3F,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAElD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAElE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAyB,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAsB,EAAE,CAAC,CAAC;IAE1E,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC5B,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,sBAAsB,GAAG,CAAC,CAAA,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,eAAe,0CAAE,UAAU,CAAC,IAAI,CAAC,CAAA,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,uBAAuB,CAAA,CAAC;IAEzH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,EAAE;YAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,EAAE,CAAC;YACd,oBAAG,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAiB,CAAC;iBAC9E,IAAI,CAAC,CAAC,IAAqB,EAAE,EAAE;gBAC5B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAA,EAAE,CAAC;oBAClE,mGAAmG;oBACnG,gDAAgD;oBAChD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;yBAC7B,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;wBACZ,MAAM,kBAAkB,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,uBAAuB,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACrH,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,kBAAkB,CAAC;oBAC9C,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wBACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,KAAK,kCAAkC,CAAC,CAAC;wBAChF,aAAa,CAAC,IAAI,CAAC,CAAC;oBACxB,CAAC,CAAC,CAAC;gBACX,CAAC;qBAAM,CAAC;oBACJ,aAAa,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACR,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACX,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,GAAG,EAAE;YACR,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,eAAe,CAAC,CAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,WAAW,KAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,KAAK,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACvB,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,YAAY,EAAE,CAAC;YACnC,OAAO,sBAAe,CAAC,4BAA4B,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QACpG,CAAC;QAED,OAAO,CAAC,CAAC;IACb,CAAC,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAEjD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAC7B,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACX,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,YAAY,GACd,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,GAAG,CAAC,CAAC,GAAmB,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,qBAAqB,CAAC;YAEzC,OAAO;gBACH,aAAa,EAAE,GAAG,CAAC,iBAAiB;gBACpC,WAAW,EAAE,IAAA,eAAK,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;gBACnD,YAAY,EAAE,IAAA,eAAK,EAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBAC/C,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;qBACb,MAAM,CAAC,UAAU,CAAC;gBACvB,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;gBAC9B,aAAa,EAAE,GAAG,CAAC,eAAe;aACrC,CAAC;QACN,CAAC,CAAC,mCAAI,EAAE,CAAC;QAEb,MAAM,KAAK,GAAG,IAAI,wCAA+B,CAAC,YAAY,CAAC,CAAC;QAChE,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,CACH,uCAAK,SAAS,EAAC,oDAAoD;QAC/D,8BAAC,qBAAS,IAAC,IAAI,EAAC,iBAAiB,GAAG;QACnC,SAAS,CAAC,CAAC,CAAC,CACT,8BAAC,qBAAW,OAAG,CAClB,CAAC,CAAC,CAAC,CACA;YACI,uCAAK,SAAS,EAAC,eAAe;gBAC1B,8BAAC,oBAAU,IAAC,OAAO,EAAE,kBAAkB,GAAI,CACzC;YACN,8BAAC,kBAAQ,IAAC,IAAI,EAAC,aAAa,IAAE,CAAC,CAAC,yBAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAY;YACtF,8BAAC,kBAAQ,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ;qBAAI,kBAAkB,aAAlB,kBAAkB;gBAAlB,kBAAkB,CAAE,eAAe,CAAY;YAClF,uCAAK,SAAS,EAAC,uBAAuB;gBAClC,8BAAC,wBAAc,IAAC,IAAI,EAAE,CAAC,CAAC,mBAAmB;oBACvC,8BAAC,eAAK,QAAE,mBAAmB,CAAS,CACvB,EAChB,MAAA,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,YAAY;mBAAE,GAAG,CAAC,CAAC,GAAmB,EAAE,KAAa,EAAE,EAAE;oBAC1E,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;wBACb,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACvC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;4BACzB,IAAI,sBAAsB,EAAE,CAAC;gCACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACvB,CAAC;iCAAM,CAAC;gCACJ,MAAM,CAAC,IAAI,iCAAM,KAAK,KAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAG,CAAC;4BACrD,CAAC;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC;oBAED,IAAI,GAAG,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;wBAC9B,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE;4BACjC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC3B,CAAC,CAAC,CAAC;oBACP,CAAC;oBAED,OAAO,CACH,uCAAK,SAAS,EAAC,UAAU,EAAC,GAAG,EAAE,GAAG,CAAC,iBAAiB;wBAChD,8BAAC,wBAAc,IAAC,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,iBAAiB,GAAI,CAC9D,CACT,CAAC;gBACN,CAAC,CAAC,CACA;YACL,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,KAAI,CACrB,8BAAC,eAAK,IAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,iBAAS,CAAC,KAAK;gBAC7C,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK;oBAC7B,8BAAC,qCAAiB,IAAC,OAAO,EAAE,KAAK,CAAC,aAAa,GAAsB,CAClE,CACH,CACX;YACD,8BAAC,mBAAS,OAAG;YACb,8BAAC,uCAAkB,IAAC,MAAM,EAAE,MAAM,GAAI;YACrC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CACrB;gBACI,uCAAK,SAAS,EAAC,eAAe;oBAC1B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI,IACxC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CACvC,CACL;gBACL,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAa,EAAE,EAAE,CAAC,CACtC,8BAAC,cAAI,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IACjC,OAAO,CACL,CACV,CAAC;gBACF,8BAAC,mBAAS,OAAG,CACd,CACN;YAED,8BAAC,yCAAmB,IAAC,IAAI,EAAE,YAAY,GAAI;YAE3C,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK,IAC7C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CACvB;YACP,8BAAC,kBAAQ,IAAC,IAAI,QAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,yBAAS,CAAC,KAAK;gBAC9C,8BAAC,kBAAQ,QAAE,KAAK,CAAY,CACrB;YACX,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;gBACrE,8BAAC,uCAAkB,OAAG,CACnB,CACR,CACN,CACC,CACT,CAAC;AACN,CAAC","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { ReservationAddonDTO, ReservationDTO, ReservationsDTO, SimpleItemisedFee, TotalCalculator } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BackButton from '@/components/generic/BackButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { CommonAddonSummary } from '@/components/steps/common/CommonAddonSummary/CommonAddonSummary';\nimport { ItemisedFeesSummary } from '@/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary';\nimport { FindReservationResultsViewEvent } from '@/events';\nimport { IEventReservation } from '@/models/Api/IEventReservation';\nimport ReservationRow from '@/pages/findReservation/ReservationRow';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport default function FindReservationResults() {\n const params: any = useParams();\n const navigate = useNavigate();\n\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n\n const { t } = useTranslation();\n\n const [bookingInformation, setBookingInformation] = useState<ReservationsDTO | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const [cancellationMessage, setCancellationMessage] = useState('');\n const [cancellationTrigger, setCancellationTrigger] = useState(0);\n\n const [data, setData] = useState<ReservationsDTO | null>(null);\n const [itemisedFees, setItemisedFees] = useState<SimpleItemisedFee[]>([]);\n\n const pushHistoryOnClick = () => {\n navigate('../');\n };\n\n /**\n * Determines whether addon night count should be dismissed.\n * This is true when the booking is not from Roomstay, indicated by:\n * - the itinerary number not starting with 'RS', and\n * - the hotel not preferring provider booking IDs.\n */\n const dismissAddonNightCount = !bookingInformation?.itineraryNumber?.startsWith('RS') && !hotel?.preferProviderBookingId;\n\n useEffect(() => {\n let isCancelled = false;\n\n setIsLoading(true);\n\n const handleSuccess = (data: ReservationsDTO) => {\n if (!isCancelled) {\n setBookingInformation(data);\n setIsLoading(false);\n setData(data);\n }\n };\n\n if (params?.ref) {\n API.Reservation.findReservation(params.ref, params.email, hotel?.hotelID as string)\n .then((data: ReservationsDTO) => {\n if (data.hotelFrontendId && data.hotelFrontendId !== hotel?.hotelID) {\n // User has searched for a booking that belongs to a different hotel (but within the same company).\n // Let's redirect the user to the correct hotel.\n ccx.getHotel(data.hotelFrontendId)\n .then((hotel) => {\n const findReservationUrl = `${hotel.hotelUrl}/${hotel.checkoutUrl}/#/find-reservation/${params.ref}/${params.email}`;\n window.location.href = findReservationUrl;\n })\n .catch((error) => {\n console.error(`Failed to find hotel: ${error}. Continuing with current hotel.`);\n handleSuccess(data);\n });\n } else {\n handleSuccess(data);\n }\n })\n .catch(() => {\n navigate('/find-reservation');\n });\n } else {\n navigate('/find-reservation');\n }\n\n return () => {\n isCancelled = true;\n };\n }, [cancellationTrigger]);\n\n useEffect(() => {\n setItemisedFees(bookingInformation?.feesSummary || []);\n }, [bookingInformation]);\n\n const addons: ReservationAddonDTO[] = [];\n const comments: string[] = [];\n\n const total = useMemo(() => {\n if (bookingInformation?.reservations) {\n return TotalCalculator.calculateTotalForReservation(bookingInformation, dismissAddonNightCount);\n }\n\n return 0;\n }, [bookingInformation, dismissAddonNightCount]);\n\n const { raise } = useEvent();\n useEffect(() => {\n if (!data) return;\n\n const reservations: IEventReservation[] =\n data.reservations?.map((obj: ReservationDTO) => {\n const nightKeys = Object.keys(obj.nights);\n const dateFormat = 'YYYY-MM-DDTHH:mm:ss';\n\n return {\n reservationId: obj.reservationNumber,\n checkInTime: dayjs(nightKeys[0]).format(dateFormat),\n checkOutTime: dayjs(nightKeys[nightKeys.length - 1])\n .add(1, 'day')\n .format(dateFormat),\n totalPrice: obj.total.afterTax,\n priceCurrency: ccx.currentCurrency,\n };\n }) ?? [];\n\n const event = new FindReservationResultsViewEvent(reservations);\n raise(event);\n }, [data]);\n\n return (\n <div className=\"container u-pad--heavy-plus u-pad-left u-pad-right\">\n <PageTitle step=\"FindReservation\" />\n {isLoading ? (\n <LargeLoader />\n ) : (\n <>\n <div className=\"u-marg-bottom\">\n <BackButton onClick={pushHistoryOnClick} />\n </div>\n <Headline size=\"extra-large\">{t(Translation.FindReservation.YourItinerary)}</Headline>\n <Headline color={Color.DarkGrey}>#{bookingInformation?.itineraryNumber}</Headline>\n <div className=\"row u-marg-top--heavy\">\n <AutoAutoHeight open={!!cancellationMessage}>\n <Alert>{cancellationMessage}</Alert>\n </AutoAutoHeight>\n {bookingInformation?.reservations?.map((obj: ReservationDTO, index: number) => {\n if (obj.addons) {\n const nights = Object.keys(obj.nights);\n obj.addons.forEach((addon) => {\n if (dismissAddonNightCount) {\n addons.push(addon);\n } else {\n addons.push({ ...addon, nights: nights.length });\n }\n });\n }\n\n if (obj.comments && index === 0) {\n obj.comments.map((comment: string) => {\n comments.push(comment);\n });\n }\n\n return (\n <div className=\"col-lg-6\" key={obj.reservationNumber}>\n <ReservationRow reservation={obj} key={obj.reservationNumber} />\n </div>\n );\n })}\n </div>\n {hotel?.itineraryNote && (\n <Alert icon={IconType.Info} type={AlertType.Alert}>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel.itineraryNote}></HtmlContentViewer>\n </Text>\n </Alert>\n )}\n <LineBreak />\n <CommonAddonSummary addons={addons} />\n {comments.length >= 1 && (\n <>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Confirmation.Comments)}\n </Text>\n </div>\n {comments.map((comment, index: number) => (\n <Text key={index} type={TextType.Small}>\n {comment}\n </Text>\n ))}\n <LineBreak />\n </>\n )}\n\n <ItemisedFeesSummary fees={itemisedFees} />\n\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{total}</Currency>\n </Headline>\n <Text type={TextType.Small} align={TextAlign.Right} color={Color.DarkGrey}>\n <TaxInclusionNotice />\n </Text>\n </>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FindReservationResults.js","sourceRoot":"/","sources":["src/pages/findReservation/FindReservationResults.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport { ReservationAddonDTO, ReservationDTO, ReservationsDTO, SimpleItemisedFee, TotalCalculator } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport API from '@/api/BookingAPI';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport BackButton from '@/components/generic/BackButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport LargeLoader from '@/components/generic/loader/LargeLoader';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { CommonAddonSummary } from '@/components/steps/common/CommonAddonSummary/CommonAddonSummary';\nimport { ItemisedFeesSummary } from '@/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary';\nimport { FindReservationResultsViewEvent } from '@/events';\nimport { IEventReservation } from '@/models/Api/IEventReservation';\nimport ReservationRow from '@/pages/findReservation/ReservationRow';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nexport default function FindReservationResults() {\n const params: any = useParams();\n const navigate = useNavigate();\n\n const { hotel } = useCurrentHotel();\n const ccx = useContext(CompanyContext);\n\n const { t } = useTranslation();\n\n const [bookingInformation, setBookingInformation] = useState<ReservationsDTO | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const [cancellationMessage, setCancellationMessage] = useState('');\n const [cancellationTrigger, setCancellationTrigger] = useState(0);\n\n const [data, setData] = useState<ReservationsDTO | null>(null);\n const [itemisedFees, setItemisedFees] = useState<SimpleItemisedFee[]>([]);\n\n const pushHistoryOnClick = () => {\n navigate('../');\n };\n\n /**\n * Determines whether addon night count should be dismissed.\n * This is true when the booking is not from Roomstay, indicated by:\n * - the itinerary number not starting with 'RS', and\n * - the hotel not preferring provider booking IDs.\n */\n const dismissAddonNightCount = !bookingInformation?.itineraryNumber?.startsWith('RS') && !hotel?.preferProviderBookingId;\n\n useEffect(() => {\n let isCancelled = false;\n\n setIsLoading(true);\n\n const handleSuccess = (data: ReservationsDTO) => {\n if (!isCancelled) {\n setBookingInformation(data);\n setIsLoading(false);\n setData(data);\n }\n };\n\n if (params?.ref) {\n API.Reservation.findReservation(params.ref, params.email, hotel?.hotelID as string)\n .then((data: ReservationsDTO) => {\n if (data.hotelFrontendId && data.hotelFrontendId !== hotel?.hotelID) {\n // User has searched for a booking that belongs to a different hotel (but within the same company).\n // Let's redirect the user to the correct hotel.\n ccx.getHotel(data.hotelFrontendId)\n .then((hotel) => {\n const findReservationUrl = `${hotel.hotelUrl}/${hotel.checkoutUrl}/#/find-reservation/${params.ref}/${params.email}`;\n window.location.href = findReservationUrl;\n })\n .catch((error) => {\n console.error(`Failed to find hotel: ${error}. Continuing with current hotel.`);\n handleSuccess(data);\n });\n } else {\n handleSuccess(data);\n }\n })\n .catch(() => {\n navigate('/find-reservation');\n });\n } else {\n navigate('/find-reservation');\n }\n\n return () => {\n isCancelled = true;\n };\n }, [cancellationTrigger]);\n\n useEffect(() => {\n setItemisedFees(bookingInformation?.feesSummary || []);\n }, [bookingInformation]);\n\n const addons: ReservationAddonDTO[] = [];\n const comments: string[] = [];\n\n const total = useCallback(() => {\n if (bookingInformation?.reservations) {\n return TotalCalculator.calculateTotalForReservation(bookingInformation, dismissAddonNightCount);\n }\n\n return 0;\n }, [bookingInformation, dismissAddonNightCount]);\n\n const { raise } = useEvent();\n useEffect(() => {\n if (!data) return;\n\n const reservations: IEventReservation[] =\n data.reservations?.map((obj: ReservationDTO) => {\n const nightKeys = Object.keys(obj.nights);\n const dateFormat = 'YYYY-MM-DDTHH:mm:ss';\n\n return {\n reservationId: obj.reservationNumber,\n checkInTime: dayjs(nightKeys[0]).format(dateFormat),\n checkOutTime: dayjs(nightKeys[nightKeys.length - 1])\n .add(1, 'day')\n .format(dateFormat),\n totalPrice: obj.total.afterTax,\n priceCurrency: ccx.currentCurrency,\n };\n }) ?? [];\n\n const event = new FindReservationResultsViewEvent(reservations);\n raise(event);\n }, [data]);\n\n return (\n <div className=\"container u-pad--heavy-plus u-pad-left u-pad-right\">\n <PageTitle step=\"FindReservation\" />\n {isLoading ? (\n <LargeLoader />\n ) : (\n <>\n <div className=\"u-marg-bottom\">\n <BackButton onClick={pushHistoryOnClick} />\n </div>\n <Headline size=\"extra-large\">{t(Translation.FindReservation.YourItinerary)}</Headline>\n <Headline color={Color.DarkGrey}>#{bookingInformation?.itineraryNumber}</Headline>\n <div className=\"row u-marg-top--heavy\">\n <AutoAutoHeight open={!!cancellationMessage}>\n <Alert>{cancellationMessage}</Alert>\n </AutoAutoHeight>\n {bookingInformation?.reservations?.map((obj: ReservationDTO, index: number) => {\n if (obj.addons) {\n const nights = Object.keys(obj.nights);\n obj.addons.forEach((addon) => {\n if (dismissAddonNightCount) {\n addons.push(addon);\n } else {\n addons.push({ ...addon, nights: nights.length });\n }\n });\n }\n\n if (obj.comments && index === 0) {\n obj.comments.map((comment: string) => {\n comments.push(comment);\n });\n }\n\n return (\n <div className=\"col-lg-6\" key={obj.reservationNumber}>\n <ReservationRow reservation={obj} key={obj.reservationNumber} />\n </div>\n );\n })}\n </div>\n {hotel?.itineraryNote && (\n <Alert icon={IconType.Info} type={AlertType.Alert}>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel.itineraryNote}></HtmlContentViewer>\n </Text>\n </Alert>\n )}\n <LineBreak />\n <CommonAddonSummary addons={addons} />\n {comments.length >= 1 && (\n <>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Label} color={Color.Grey}>\n {t(Translation.Step.Confirmation.Comments)}\n </Text>\n </div>\n {comments.map((comment, index: number) => (\n <Text key={index} type={TextType.Small}>\n {comment}\n </Text>\n ))}\n <LineBreak />\n </>\n )}\n\n <ItemisedFeesSummary fees={itemisedFees} />\n\n <Text type={TextType.Small} align={TextAlign.Right}>\n {t(Translation.Misc.Total)}\n </Text>\n <Headline bold size=\"large\" align={TextAlign.Right}>\n <Currency>{total}</Currency>\n </Headline>\n <Text type={TextType.Small} align={TextAlign.Right} color={Color.DarkGrey}>\n <TaxInclusionNotice />\n </Text>\n </>\n )}\n </div>\n );\n}\n"]}
@@ -59,7 +59,7 @@ const DataLayer_1 = __importDefault(require("../../util/DataLayer"));
59
59
  const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
60
60
  const TextAlignment_1 = require("../../util/TextAlignment");
61
61
  function ReservationRow(props) {
62
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
62
+ var _a, _b, _c, _d, _e, _f, _g, _h;
63
63
  const { t } = (0, react_i18next_1.useTranslation)();
64
64
  const { hotel } = (0, hooks_1.useCurrentHotel)();
65
65
  const { formatReservationDate } = (0, hooks_1.useGuestDateFormat)();
@@ -93,8 +93,7 @@ function ReservationRow(props) {
93
93
  const firstNight = (0, dayjs_1.default)(nightKeys[0]);
94
94
  const lastNight = (0, dayjs_1.default)(nightKeys[nightKeys.length - 1]).add(1, 'day');
95
95
  let images = obj.images;
96
- // Prevent Uncaught TypeError when refreshing reservation result
97
- if ((!images || !images.length) && ((_a = hotel === null || hotel === void 0 ? void 0 : hotel.rooms) === null || _a === void 0 ? void 0 : _a[obj.roomCode])) {
96
+ if ((!images || !images.length) && (hotel === null || hotel === void 0 ? void 0 : hotel.rooms[obj.roomCode])) {
98
97
  images = hotel === null || hotel === void 0 ? void 0 : hotel.rooms[obj.roomCode].images;
99
98
  }
100
99
  const cancelRow = () => {
@@ -116,7 +115,7 @@ function ReservationRow(props) {
116
115
  });
117
116
  });
118
117
  };
119
- const roomName = obj.roomType ? obj.roomType : (_c = (_b = hotel === null || hotel === void 0 ? void 0 : hotel.rooms) === null || _b === void 0 ? void 0 : _b[obj.roomCode]) === null || _c === void 0 ? void 0 : _c.name;
118
+ const roomName = obj.roomType ? obj.roomType : (_a = hotel === null || hotel === void 0 ? void 0 : hotel.rooms[obj.roomCode]) === null || _a === void 0 ? void 0 : _a.name;
120
119
  return (react_1.default.createElement(react_1.default.Fragment, null,
121
120
  react_1.default.createElement("div", { className: "reservation-row" },
122
121
  react_1.default.createElement("div", { className: "room-details +is-open " },
@@ -138,8 +137,8 @@ function ReservationRow(props) {
138
137
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small },
139
138
  react_1.default.createElement(react_1.default.Fragment, null, hotel === null || hotel === void 0 ? void 0 :
140
139
  hotel.name,
141
- " - ", (_d = hotel === null || hotel === void 0 ? void 0 : hotel.address) === null || _d === void 0 ? void 0 :
142
- _d.line1)))),
140
+ " - ", (_b = hotel === null || hotel === void 0 ? void 0 : hotel.address) === null || _b === void 0 ? void 0 :
141
+ _b.line1)))),
143
142
  react_1.default.createElement("div", { className: "" },
144
143
  react_1.default.createElement("ul", null,
145
144
  react_1.default.createElement("li", { className: "u-flex justify-content-start u-marg-bottom--light" },
@@ -166,10 +165,10 @@ function ReservationRow(props) {
166
165
  react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.CreditCard, color: Color_1.Color.Grey }),
167
166
  react_1.default.createElement("div", { className: "u-marg-left--light" },
168
167
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, (obj === null || obj === void 0 ? void 0 : obj.paymentMethod) === core_1.EBookingPaymentMethod.Planpay ? (t(Translation_1.Translation.Step.Confirmation.PaidWithPlanpay)) : (react_1.default.createElement(react_1.default.Fragment, null,
169
- "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ", (_f = (_e = obj.paymentCard) === null || _e === void 0 ? void 0 : _e.last4) !== null && _f !== void 0 ? _f : 'N/A',
168
+ "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 ", (_d = (_c = obj.paymentCard) === null || _c === void 0 ? void 0 : _c.last4) !== null && _d !== void 0 ? _d : 'N/A',
170
169
  ' ',
171
170
  react_1.default.createElement("span", { style: { color: Color_1.Color.DarkGrey } },
172
- "(", (_h = (_g = obj.paymentCard) === null || _g === void 0 ? void 0 : _g.type) !== null && _h !== void 0 ? _h : 'N/A',
171
+ "(", (_f = (_e = obj.paymentCard) === null || _e === void 0 ? void 0 : _e.type) !== null && _f !== void 0 ? _f : 'N/A',
173
172
  ")")))))))))),
174
173
  react_1.default.createElement("div", { className: "reservation-row--actions" },
175
174
  react_1.default.createElement("div", { className: "u-flex justify-content-start align-items-center" },
@@ -181,10 +180,10 @@ function ReservationRow(props) {
181
180
  react_1.default.createElement("div", { className: "u-marg-left" },
182
181
  !isCancelled ? (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
183
182
  react_1.default.createElement("strong", null,
184
- react_1.default.createElement(Currency_1.default, null, (_j = obj.total.beforeFees) !== null && _j !== void 0 ? _j : obj.total.afterTax)))) : (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
183
+ react_1.default.createElement(Currency_1.default, null, (_g = obj.total.beforeFees) !== null && _g !== void 0 ? _g : obj.total.afterTax)))) : (react_1.default.createElement(Text_1.default, { color: Color_1.Color.Navy },
185
184
  react_1.default.createElement("del", null,
186
185
  react_1.default.createElement("strong", { className: "u-flex u-flex-direction-row align-items-center" },
187
- react_1.default.createElement(Currency_1.default, null, (_k = obj.total.beforeFees) !== null && _k !== void 0 ? _k : obj.total.afterTax))))),
186
+ react_1.default.createElement(Currency_1.default, null, (_h = obj.total.beforeFees) !== null && _h !== void 0 ? _h : obj.total.afterTax))))),
188
187
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right },
189
188
  react_1.default.createElement(TaxInclusionNotice_1.TaxInclusionNotice, null)))))),
190
189
  react_1.default.createElement(ReservationRowModal_1.default, { open: isModalOpen, onClose: closeModalOnClick, reservation: props.reservation, images: images }),
@@ -1 +1 @@
1
- {"version":3,"file":"ReservationRow.js","sourceRoot":"/","sources":["src/pages/findReservation/ReservationRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ErrorHandler } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent, useGuestDateFormat } from '@frontend/hooks';\nimport { EBookingPaymentMethod, ReservationDTO } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport ConfirmationModal from '@/components/generic/modal/ConfirmationModal';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { CancelledBookingEvent } from '@/events/views/CancelledBookingEvent';\nimport ReservationRowModal from '@/pages/findReservation/ReservationRowModal';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\ninterface ReservationRowProps {\n reservation: ReservationDTO;\n onCancelled?: () => void;\n}\n\nexport default function ReservationRow(props: ReservationRowProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { formatReservationDate } = useGuestDateFormat();\n const { raise } = useEvent();\n\n const obj = props.reservation;\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isCancelled, setIsCancelled] = useState(obj.status === 'Cancelled');\n const [isCancelLoading, setIsCancelLoading] = useState(false);\n\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n let adultsAndChildren = StringHelper.pluralWithDictAndCount(obj.guestCounts.adults, Translation.Step.Date.Adult, t);\n\n if (obj.guestCounts.children) {\n adultsAndChildren += ', ' + StringHelper.pluralWithDictAndCount(obj.guestCounts.children, Translation.Step.Date.Child, t);\n }\n\n const nightKeys = Object.keys(obj.nights);\n\n const openModalOnClick = () => {\n setIsModalOpen(true);\n };\n const closeModalOnClick = () => {\n setIsModalOpen(false);\n };\n const confirmModalOnClick = () => {\n setConfirmOpen(true);\n };\n const onConfirmHandler = () => {\n cancelRow();\n setConfirmOpen(false);\n };\n const openConfirmationHandler = () => {\n setConfirmOpen(false);\n };\n\n const firstNight = dayjs(nightKeys[0]);\n const lastNight = dayjs(nightKeys[nightKeys.length - 1]).add(1, 'day');\n\n let images: string[] = obj.images;\n\n // Prevent Uncaught TypeError when refreshing reservation result\n if ((!images || !images.length) && hotel?.rooms?.[obj.roomCode]) {\n images = hotel?.rooms[obj.roomCode].images;\n }\n\n const cancelRow = () => {\n setIsCancelLoading(true);\n\n API.Reservation.cancelReservation(obj.reservationNumber, obj.guest.email, hotel?.hotelID as string)\n .then(() => {\n DataLayer.instance.sendCancellation(obj);\n raise(new CancelledBookingEvent(obj.reservationNumber, obj.guest.email));\n\n setIsCancelled(true);\n setIsCancelLoading(false);\n\n if (props.onCancelled) {\n props.onCancelled();\n }\n })\n .catch((ex) => {\n ErrorHandler.add({\n title: t(Translation.Step.Thanks.Errors.CancelFailed),\n message: ex.Message,\n });\n });\n };\n\n const roomName = obj.roomType ? obj.roomType : hotel?.rooms?.[obj.roomCode]?.name;\n\n return (\n <>\n <div className=\"reservation-row\">\n <div className=\"room-details +is-open \">\n <div className=\"room-details--image\">\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"room-details--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom\">\n <div className=\"room-details--content-title u-marg-bottom--light\">\n {!isCancelled ? (\n <Text>\n <strong>{roomName}</strong>\n <small style={{ color: Color.Grey }}> #{obj.reservationNumber}</small>\n </Text>\n ) : (\n <Text>\n <del>\n <strong>{roomName}</strong>\n </del>\n <small style={{ color: Color.Alert }}> {t(Translation.Misc.Cancelled)}</small>\n </Text>\n )}\n </div>\n <div className=\"room-details--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <>\n {hotel?.name} - {hotel?.address?.line1}\n </>\n </Text>\n </div>\n </div>\n\n <div className=\"\">\n <ul>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon color={Color.Grey} icon={IconType.Person} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj.guest.firstName} {obj.guest.lastName} <span style={{ color: Color.DarkGrey }}>- {adultsAndChildren}</span>\n </Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Email} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{obj.guest.email}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Calendar} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{formatReservationDate(firstNight)}</Text>\n <Text type={TextType.Small}>{formatReservationDate(lastNight)}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start\">\n <Icon icon={IconType.CreditCard} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj?.paymentMethod === EBookingPaymentMethod.Planpay ? (\n t(Translation.Step.Confirmation.PaidWithPlanpay)\n ) : (\n <>\n •••• •••• •••• {obj.paymentCard?.last4 ?? 'N/A'}{' '}\n <span style={{ color: Color.DarkGrey }}>({obj.paymentCard?.type ?? 'N/A'})</span>\n </>\n )}\n </Text>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div className=\"reservation-row--actions\">\n <div className=\"u-flex justify-content-start align-items-center\">\n <div className=\"u-marg-right--heavy u-inline-flex\">\n <BEButton icon={IconType.ArrowRight2} isText primary size=\"tiny\" iconPosition=\"right\" onClick={openModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n <div className=\"u-inline-flex\">\n {hotel?.preventCancellation !== true && (\n <BEButton\n isText\n size=\"tiny\"\n isLoading={isCancelLoading}\n disabled={!obj.isCancelable || isCancelled}\n textColor={Color.DarkGrey}\n onClick={confirmModalOnClick}\n >\n {t(Translation.Misc.Cancel)}\n </BEButton>\n )}\n </div>\n </div>\n <div className=\"u-flex u-flex-direction-row align-items-center\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Misc.Total)}\n </Text>\n <div className=\"u-marg-left\">\n {!isCancelled ? (\n <Text color={Color.Navy}>\n <strong>\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </Text>\n ) : (\n <Text color={Color.Navy}>\n <del>\n <strong className=\"u-flex u-flex-direction-row align-items-center\">\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </del>\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n </div>\n </div>\n </div>\n <ReservationRowModal open={isModalOpen} onClose={closeModalOnClick} reservation={props.reservation} images={images} />\n <ConfirmationModal open={confirmOpen} message=\"Are you sure you want to cancel this reservation?\" onConfirm={onConfirmHandler} onClose={openConfirmationHandler} />\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"ReservationRow.js","sourceRoot":"/","sources":["src/pages/findReservation/ReservationRow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ErrorHandler } from '@frontend/contexts';\nimport { useCurrentHotel, useEvent, useGuestDateFormat } from '@frontend/hooks';\nimport { EBookingPaymentMethod, ReservationDTO } from '@roomstay/core';\nimport dayjs from 'dayjs';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport ConfirmationModal from '@/components/generic/modal/ConfirmationModal';\nimport { TaxInclusionNotice } from '@/components/generic/TaxInclusionNotice/TaxInclusionNotice';\nimport Text, { TextType } from '@/components/generic/Text';\nimport ImageGallerySlider from '@/components/steps/room/ImageGallerySlider';\nimport { CancelledBookingEvent } from '@/events/views/CancelledBookingEvent';\nimport ReservationRowModal from '@/pages/findReservation/ReservationRowModal';\nimport { Color } from '@/util/Color';\nimport DataLayer from '@/util/DataLayer';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\n\ninterface ReservationRowProps {\n reservation: ReservationDTO;\n onCancelled?: () => void;\n}\n\nexport default function ReservationRow(props: ReservationRowProps) {\n const { t } = useTranslation();\n const { hotel } = useCurrentHotel();\n const { formatReservationDate } = useGuestDateFormat();\n const { raise } = useEvent();\n\n const obj = props.reservation;\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isCancelled, setIsCancelled] = useState(obj.status === 'Cancelled');\n const [isCancelLoading, setIsCancelLoading] = useState(false);\n\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n let adultsAndChildren = StringHelper.pluralWithDictAndCount(obj.guestCounts.adults, Translation.Step.Date.Adult, t);\n\n if (obj.guestCounts.children) {\n adultsAndChildren += ', ' + StringHelper.pluralWithDictAndCount(obj.guestCounts.children, Translation.Step.Date.Child, t);\n }\n\n const nightKeys = Object.keys(obj.nights);\n\n const openModalOnClick = () => {\n setIsModalOpen(true);\n };\n const closeModalOnClick = () => {\n setIsModalOpen(false);\n };\n const confirmModalOnClick = () => {\n setConfirmOpen(true);\n };\n const onConfirmHandler = () => {\n cancelRow();\n setConfirmOpen(false);\n };\n const openConfirmationHandler = () => {\n setConfirmOpen(false);\n };\n\n const firstNight = dayjs(nightKeys[0]);\n const lastNight = dayjs(nightKeys[nightKeys.length - 1]).add(1, 'day');\n\n let images: string[] = obj.images;\n\n if ((!images || !images.length) && hotel?.rooms[obj.roomCode]) {\n images = hotel?.rooms[obj.roomCode].images;\n }\n\n const cancelRow = () => {\n setIsCancelLoading(true);\n\n API.Reservation.cancelReservation(obj.reservationNumber, obj.guest.email, hotel?.hotelID as string)\n .then(() => {\n DataLayer.instance.sendCancellation(obj);\n raise(new CancelledBookingEvent(obj.reservationNumber, obj.guest.email));\n\n setIsCancelled(true);\n setIsCancelLoading(false);\n\n if (props.onCancelled) {\n props.onCancelled();\n }\n })\n .catch((ex) => {\n ErrorHandler.add({\n title: t(Translation.Step.Thanks.Errors.CancelFailed),\n message: ex.Message,\n });\n });\n };\n\n const roomName = obj.roomType ? obj.roomType : hotel?.rooms[obj.roomCode]?.name;\n\n return (\n <>\n <div className=\"reservation-row\">\n <div className=\"room-details +is-open \">\n <div className=\"room-details--image\">\n <ImageGallerySlider images={images} />\n </div>\n <div className=\"room-details--content u-pad--heavy u-pad@m-\">\n <div className=\"u-marg-bottom\">\n <div className=\"room-details--content-title u-marg-bottom--light\">\n {!isCancelled ? (\n <Text>\n <strong>{roomName}</strong>\n <small style={{ color: Color.Grey }}> #{obj.reservationNumber}</small>\n </Text>\n ) : (\n <Text>\n <del>\n <strong>{roomName}</strong>\n </del>\n <small style={{ color: Color.Alert }}> {t(Translation.Misc.Cancelled)}</small>\n </Text>\n )}\n </div>\n <div className=\"room-details--content-description u-marg-bottom--light\">\n <Text color={Color.DarkGrey} type={TextType.Small}>\n <>\n {hotel?.name} - {hotel?.address?.line1}\n </>\n </Text>\n </div>\n </div>\n\n <div className=\"\">\n <ul>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon color={Color.Grey} icon={IconType.Person} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj.guest.firstName} {obj.guest.lastName} <span style={{ color: Color.DarkGrey }}>- {adultsAndChildren}</span>\n </Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Email} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{obj.guest.email}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start u-marg-bottom--light\">\n <Icon icon={IconType.Calendar} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>{formatReservationDate(firstNight)}</Text>\n <Text type={TextType.Small}>{formatReservationDate(lastNight)}</Text>\n </div>\n </li>\n <li className=\"u-flex justify-content-start\">\n <Icon icon={IconType.CreditCard} color={Color.Grey} />\n <div className=\"u-marg-left--light\">\n <Text type={TextType.Small}>\n {obj?.paymentMethod === EBookingPaymentMethod.Planpay ? (\n t(Translation.Step.Confirmation.PaidWithPlanpay)\n ) : (\n <>\n •••• •••• •••• {obj.paymentCard?.last4 ?? 'N/A'}{' '}\n <span style={{ color: Color.DarkGrey }}>({obj.paymentCard?.type ?? 'N/A'})</span>\n </>\n )}\n </Text>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div className=\"reservation-row--actions\">\n <div className=\"u-flex justify-content-start align-items-center\">\n <div className=\"u-marg-right--heavy u-inline-flex\">\n <BEButton icon={IconType.ArrowRight2} isText primary size=\"tiny\" iconPosition=\"right\" onClick={openModalOnClick}>\n {t(Translation.Step.Room.RoomInfo.MoreDetails)}\n </BEButton>\n </div>\n <div className=\"u-inline-flex\">\n {hotel?.preventCancellation !== true && (\n <BEButton\n isText\n size=\"tiny\"\n isLoading={isCancelLoading}\n disabled={!obj.isCancelable || isCancelled}\n textColor={Color.DarkGrey}\n onClick={confirmModalOnClick}\n >\n {t(Translation.Misc.Cancel)}\n </BEButton>\n )}\n </div>\n </div>\n <div className=\"u-flex u-flex-direction-row align-items-center\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n {t(Translation.Misc.Total)}\n </Text>\n <div className=\"u-marg-left\">\n {!isCancelled ? (\n <Text color={Color.Navy}>\n <strong>\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </Text>\n ) : (\n <Text color={Color.Navy}>\n <del>\n <strong className=\"u-flex u-flex-direction-row align-items-center\">\n <Currency>{obj.total.beforeFees ?? obj.total.afterTax}</Currency>\n </strong>\n </del>\n </Text>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n </div>\n </div>\n </div>\n <ReservationRowModal open={isModalOpen} onClose={closeModalOnClick} reservation={props.reservation} images={images} />\n <ConfirmationModal open={confirmOpen} message=\"Are you sure you want to cancel this reservation?\" onConfirm={onConfirmHandler} onClose={openConfirmationHandler} />\n </>\n );\n}\n"]}
@@ -47,7 +47,6 @@ const react_i18next_1 = require("react-i18next");
47
47
  const Translation_1 = require("translations/Translation");
48
48
  const BEButton_1 = __importDefault(require("../../components/generic/BEButton"));
49
49
  const Headline_1 = __importDefault(require("../../components/generic/Headline"));
50
- const HtmlContentViewer_1 = require("../../components/generic/HtmlContentViewer");
51
50
  const Icon_1 = __importStar(require("../../components/generic/Icon/Icon"));
52
51
  const BEHotelLocationMapBlock_1 = __importDefault(require("../../components/generic/map/BEHotelLocationMapBlock"));
53
52
  const PageTitle_1 = require("../../components/generic/PageTitle");
@@ -60,7 +59,7 @@ const Color_1 = require("../../util/Color");
60
59
  const ScreenSize_1 = __importDefault(require("../../util/ScreenSize"));
61
60
  const StepManager_1 = __importDefault(require("../../util/StepManager"));
62
61
  function HotelInfo() {
63
- var _a, _b, _c, _d, _e;
62
+ var _a, _b, _c, _d, _e, _f, _g;
64
63
  const { hotel } = (0, hooks_1.useCurrentHotel)();
65
64
  const historyConsistentPush = (0, HistoryConsistentPush_1.useHistoryConsistentPush)();
66
65
  const { t } = (0, react_i18next_1.useTranslation)();
@@ -155,15 +154,15 @@ function HotelInfo() {
155
154
  react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
156
155
  react_1.default.createElement(Headline_1.default, { className: "rs-hotelinfo-about", bold: true }, t(Translation_1.Translation.Step.Hotel.About))),
157
156
  react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
158
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
159
- react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: (hotel === null || hotel === void 0 ? void 0 : hotel.description) || '' })),
157
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
158
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: ((_e = hotel === null || hotel === void 0 ? void 0 : hotel.description) === null || _e === void 0 ? void 0 : _e.replace('\r\n', '<br/><br/>')) || '' } })),
160
159
  !!(hotel === null || hotel === void 0 ? void 0 : hotel.locationDescription) && (react_1.default.createElement(react_1.default.Fragment, null,
161
160
  react_1.default.createElement("div", { className: "u-marg-top" },
162
161
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
163
162
  react_1.default.createElement("strong", null, t(Translation_1.Translation.Step.Hotel.Location)))),
164
- react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, asDiv: true },
165
- react_1.default.createElement(HtmlContentViewer_1.HtmlContentViewer, { content: hotel.locationDescription }))))),
166
- !!((_e = hotel === null || hotel === void 0 ? void 0 : hotel.perks) === null || _e === void 0 ? void 0 : _e.length) && (react_1.default.createElement(react_1.default.Fragment, null,
163
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
164
+ react_1.default.createElement("span", { dangerouslySetInnerHTML: { __html: (_f = hotel === null || hotel === void 0 ? void 0 : hotel.locationDescription) === null || _f === void 0 ? void 0 : _f.replace('\r\n', '<br/><br/>') } }))))),
165
+ !!((_g = hotel === null || hotel === void 0 ? void 0 : hotel.perks) === null || _g === void 0 ? void 0 : _g.length) && (react_1.default.createElement(react_1.default.Fragment, null,
167
166
  react_1.default.createElement("div", { className: "u-marg-bottom u-marg-bottom--heavy" },
168
167
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small },
169
168
  react_1.default.createElement("strong", { className: "rs-hotelinfo-andyougetall" }, hotel.perkTitle || t(Translation_1.Translation.Step.Hotel.AndYouGetAll)))),
@@ -1 +1 @@
1
- {"version":3,"file":"HotelInfo.js","sourceRoot":"/","sources":["src/pages/hotel/HotelInfo.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,4BA6QC;AArSD,6CAA0D;AAC1D,2CAA4D;AAC5D,4DAAoC;AACpC,wEAA0C;AAC1C,uEAAuE;AACvE,+CAA+D;AAC/D,iDAA+C;AAC/C,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,8EAA2E;AAC3E,uEAAgE;AAChE,+GAAuF;AACvF,8DAA2D;AAC3D,kEAA2D;AAC3D,mGAA0E;AAC1E,2HAAmG;AACnG,mCAA+C;AAC/C,2EAAqE;AACrE,wCAAqC;AACrC,mEAA2C;AAC3C,qEAA6C;AAE7C,SAAwB,SAAS;;IAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IACpC,MAAM,qBAAqB,GAAG,IAAA,gDAAwB,GAAE,CAAC;IACzD,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,4BAAoB,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,IAAI,oBAAU,CAAC,KAAK,CAAC;IAExD,MAAM,QAAQ,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC;IAElC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,EAAE,CAAC;IAEnE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAW,EAAE,CAAC,CAAC;IAEnD,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;QACjC,qBAAqB,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC3B,UAAU,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAE7B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,MAAM,KAAK,GAAG,IAAI,+BAAsB,EAAE,CAAC;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACX,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,IAAI,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,MAAM,EAAE,CAAC;YACxB,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC3B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,SAAS,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,CAAC,CAAC;IAElC,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,qBAAqB,CAAC,qBAAW,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;QAC/B,MAAM,wBAAwB,GAAG,GAAG,EAAE;YAClC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,uBAAa,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,yBAAS,CAAC,KAAK,CAAC,CAAC;QAE7E,OAAO,CACH,uCACI,KAAK,EAAE,EAAE,eAAe,EAAE,QAAQ,UAAU,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EACrE,SAAS,EAAC,6DAA6D,EACvE,OAAO,EAAE,wBAAwB,GACnC,CACL,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,0CAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC;IAC/E,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,iBAAiB,CAAC;IAEjF,OAAO,CACH;QACI,8BAAC,qBAAS,IAAC,IAAI,EAAC,WAAW,GAAG;QAC9B,uCACI,KAAK,EAAE,EAAE,eAAe,EAAE,QAAQ,QAAQ,IAAI,uBAAa,CAAC,WAAW,CAAC,QAAQ,EAAE,yBAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,EAC3G,SAAS,EAAE,IAAA,oBAAU,EAAC,qBAAqB,EAAE,0BAA0B,EAAE,iBAAiB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,CAAC;YAE3G,uCAAK,SAAS,EAAC,WAAW;gBACtB,uCAAK,SAAS,EAAC,4DAA4D;oBACvE,sCAAI,SAAS,EAAC,oBAAoB,IAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAM;oBACrD,sCAAI,SAAS,EAAC,wBAAwB,IACjC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,mCAAI,EAAE;6BAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO;2BAAE,OAAO,CACpD,CACH,CACJ,CACJ;QACN,uCAAK,SAAS,EAAC,yDAAyD;YACpE,uCAAK,SAAS,EAAC,WAAW;gBACtB,uCAAK,SAAS,EAAC,KAAK;oBAChB,uCAAK,SAAS,EAAC,oCAAoC;wBAC/C;4BACI,sCAAI,SAAS,EAAC,6BAA6B;gCACvC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,GAAG,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,aAAK,CAAC,MAAM,GAAI;gCAC9D,wCAAM,SAAS,EAAC,0BAA0B;oCACrC,KAAK;oCACN,yCAAM;oCACL,KAAK;;oCAAG,UAAU;;oCAAI,OAAO,CAC3B,CACN;4BACL,sCAAI,SAAS,EAAC,6BAA6B;gCACvC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,aAAK,CAAC,MAAM,GAAI;gCAChE,wCAAM,SAAS,EAAC,0BAA0B,IAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAQ,CAC/D;4BACL,sCAAI,SAAS,EAAC,6BAA6B;gCACvC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,MAAM,EAAE,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,aAAK,CAAC,MAAM,GAAI;gCACjE,wCAAM,SAAS,EAAC,0BAA0B;oCACtC,qCAAG,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,IACjE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CACZ,CACD,CACN;4BACL,sCAAI,SAAS,EAAC,QAAQ;gCAClB,8BAAC,kBAAQ,IAAC,IAAI,EAAE,eAAQ,CAAC,UAAU,EAAE,OAAO,QAAC,MAAM,QAAC,YAAY,EAAC,OAAO,EAAC,OAAO,EAAE,cAAc,IAC3F,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CACrB,CACV,CACJ,CACH;oBACN,uCAAK,SAAS,EAAC,UAAU;wBACrB,uCAAK,SAAS,EAAC,WAAW;4BACtB,uCAAK,SAAS,EAAC,+FAA+F,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;gCACrI,8BAAC,iCAAuB,OAAG,CACzB;4BACN,uCAAK,SAAS,EAAC,qFAAqF;gCAChG,8BAAC,yCAA+B,IAAC,KAAK,EAAE,KAAK,GAAI,CAC/C,CACJ,CACJ,CACJ,CACJ,CACJ;QACN,uCAAK,SAAS,EAAC,oDAAoD;YAC/D,uCAAK,SAAS,EAAC,wBAAwB;gBACnC,uCAAK,SAAS,EAAC,KAAK;oBAChB,uCAAK,SAAS,EAAC,UAAU;wBACrB,uCAAK,SAAS,EAAC,oCAAoC;4BAC/C,uCAAK,SAAS,EAAC,oCAAoC;gCAC/C,8BAAC,kBAAQ,IAAC,SAAS,EAAC,oBAAoB,EAAC,IAAI,UACxC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACzB,CACT;4BACN,uCAAK,SAAS,EAAC,oCAAoC;gCAC/C,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK;oCAC7B,8BAAC,qCAAiB,IAAC,OAAO,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,KAAI,EAAE,GAAI,CACrD;gCAEN,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAA,IAAI,CAC7B;oCACI,uCAAK,SAAS,EAAC,YAAY;wCACvB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;4CACtB,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAU,CAClD,CACL;oCACN,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK;wCAC7B,8BAAC,qCAAiB,IAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,GAAI,CACtD,CACR,CACN,CACC;4BACL,CAAC,CAAC,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,MAAM,CAAA,IAAI,CACvB;gCACI,uCAAK,SAAS,EAAC,oCAAoC;oCAC/C,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;wCACtB,0CAAQ,SAAS,EAAC,2BAA2B,IAAE,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAU,CAC/G,CACL;gCACN,uCAAK,SAAS,EAAC,KAAK;oCAChB,8BAAC,2BAAgB,IAAC,KAAK,EAAE,KAAK,GAAI,CAChC;gCACL,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,KAAI,CAC3B,uCAAK,SAAS,EAAC,yBAAyB;oCACpC,yCAAO,SAAS,EAAC,QAAQ,IAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAS,CACrE,CACT,CACF,CACN,CACC;wBACL,CAAC,CAAC,aAAa,CAAC,MAAM,IAAI,CACvB,uCAAK,SAAS,EAAC,oCAAoC;4BAC/C,uCAAK,SAAS,EAAC,sBAAsB;gCACjC,8BAAC,kBAAQ,IAAC,SAAS,EAAC,6BAA6B,EAAC,IAAI,UACjD,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAClC,CACT;4BACN,uCAAK,SAAS,EAAC,KAAK,IACf,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;gCACvC,OAAO,CACH,uCAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,UAAU;oCACjC,uCAAK,SAAS,EAAC,sBAAsB;wCACjC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,KAAK,EAAE,eAAe,EAAE,aAAK,CAAC,MAAM,EAAE,YAAY,EAAC,OAAO,EAAC,SAAS,QAAC,IAAI,EAAC,MAAM,GAAG;wCAC5H,wCAAM,SAAS,EAAC,iCAAiC;4CAC7C,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,YAAY,CAAC,IAAI,CAAQ,CACnD,CACL,CACJ,CACT,CAAC;4BACN,CAAC,CAAC,CACA,CACJ,CACT;wBACA,CAAC,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAA,IAAI,CAClB,uCAAK,SAAS,EAAC,oCAAoC;4BAC/C,uCAAK,SAAS,EAAC,sBAAsB;gCACjC,8BAAC,kBAAQ,IAAC,SAAS,EAAC,uBAAuB,EAAC,IAAI,UAC3C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC5B,CACT;4BACN,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;gCACtB,qCAAG,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAC,YAAY,IAC7F,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAChB,CACD,CACL,CACT;wBAEA,UAAU,IAAI,CACX,uCAAK,SAAS,EAAC,oCAAoC;4BAC/C,8BAAC,UAAU,IACP,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,IAAA,oBAAU,EAAC,gDAAgD,EAAE;oCACpE,UAAU,EAAE,QAAQ;oCACpB,WAAW,EAAE,CAAC,QAAQ;iCACzB,CAAC,EACF,GAAG,EAAE,UAAU,GACL,CACZ,CACT,CACC;oBACN,uCAAK,SAAS,EAAC,UAAU;wBACrB,uCAAK,SAAS,EAAC,oCAAoC;4BAC/C,uCAAK,SAAS,EAAC,oCAAoC;gCAC/C,8BAAC,kBAAQ,IAAC,SAAS,EAAC,sBAAsB,EAAC,IAAI,UAC1C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAC3B,CACT;4BACL,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;4BAClC,uCAAK,SAAS,EAAC,KAAK;gCACf,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oCACrB,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;wCACxB,OAAO,CACH,uCAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,OAAO,IAC7B,QAAQ,CAAC,KAAK,CAAC,CACd,CACT,CAAC;oCACN,CAAC;gCACL,CAAC,CAAC;gCACD,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB,uCAAK,SAAS,EAAC,OAAO;oCAClB,uCAAK,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAE,iBAAiB;wCAC9D,QAAQ,CAAC,CAAC,CAAC;wCACZ;;4CAAS,MAAM,CAAC,MAAM,GAAG,CAAC,CAAQ,CAChC,CACJ,CACT,CACC,CACJ,CACJ,CACJ,CACJ,CACJ;QACL,CAAC,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,IAAI,CACjB,8BAAC,0BAAU,IACP,OAAO,EAAE,kBAAkB,CAAC,OAAO,EACnC,KAAK,EAAE,kBAAkB,CAAC,KAAK,EAC/B,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAa,CAAC,WAAW,CAAC,KAAK,EAAE,yBAAS,CAAC,QAAQ,CAAC,CAAC,EACpF,IAAI,EAAC,OAAO,GACd,CACL,CACF,CACN,CAAC;AACN,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAA0D,EAAE,EAAE;IACxG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAEpE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACvG,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtC,cAAc,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE/E,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;QAC3E,YAAY,EAAE,CAAC;QAEf,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5B,OAAO,CACH,uCAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IACnE,GAAG,IAAI,CACJ,uCACI,GAAG,EAAE,GAAG,EACR,GAAG,EAAC,OAAO,EACX,KAAK,EAAE;YACH,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,MAAM;YAC7D,SAAS,EAAE,SAAS,EAAE,6CAA6C;YACnE,OAAO,EAAE,OAAO,EAAE,mCAAmC;YACrD,MAAM,EAAE,QAAQ,EAAE,+BAA+B;SACpD,GACH,CACL,CACC,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { StepHotelInfoViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport FsLightbox from 'fslightbox-react';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { HtmlContentViewer } from '@/components/generic/HtmlContentViewer';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport BEHotelLocationMapBlock from '@/components/generic/map/BEHotelLocationMapBlock';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport Text, { TextType } from '@/components/generic/Text';\nimport HotelInfoPerkRow from '@/components/steps/hotel/HotelInfoPerksRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport { BookingEngineContext } from '@/index';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nexport default function HotelInfo() {\n const { hotel } = useCurrentHotel();\n const historyConsistentPush = useHistoryConsistentPush();\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const imageUrl = hotel?.heroImage;\n\n const { line1, line2, postalCode, country } = hotel?.address ?? {};\n\n const [lightboxController, setLightboxController] = useState({ toggler: false, slide: 1 });\n const [images, setImages] = useState<string[]>([]);\n\n const openSlider = (slide: number) => {\n setLightboxController((controller) => ({ toggler: !controller.toggler, slide: slide + 1 }));\n };\n const openSliderOnClick = () => {\n openSlider(4);\n };\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const event = new StepHotelInfoViewEvent();\n raise(event);\n }, []);\n\n useEffect(() => {\n const newImages: string[] = [];\n\n if (hotel?.images?.length) {\n newImages.push(...hotel.images);\n }\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?.images, hotel?.rooms]);\n\n const onBookNowClick = () => {\n historyConsistentPush(StepManager.getFirstStep().getStepUrl());\n };\n\n const getImage = (index: number) => {\n const openSliderOnClickHandler = () => {\n openSlider(index);\n };\n\n const resizedUrl = ImageProvider.resizeImage(images[index], ImageSize.Small);\n\n return (\n <div\n style={{ backgroundImage: `url('${resizedUrl}')`, paddingTop: '75%' }}\n className=\"c-images u-block u-w-100 u-marg-bottom u-marg-bottom--heavy\"\n onClick={openSliderOnClickHandler}\n />\n );\n };\n\n const hotelServices = hotel?.hotelServices?.filter(({ name }) => !!name) || [];\n const quoteImage = isMobile ? hotel?.quoteImageMobile : hotel?.quoteImageDesktop;\n\n return (\n <>\n <PageTitle step=\"HotelInfo\" />\n <div\n style={{ backgroundImage: `url('${imageUrl && ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }}\n className={classNames('c-masthead has-tint', 'rs-background-hotel-info', `rs-background-${hotel?.hotelID}`)}\n >\n <div className=\"container\">\n <div className=\"c-masthead__body u-fill-white u-pad--heavy u-shadow-accent\">\n <h1 className=\"c-masthead__header\">{hotel?.name}</h1>\n <h2 className=\"c-masthead__sub-header\">\n {hotel?.countryPrefix ?? ''} {hotel?.address?.country}\n </h2>\n </div>\n </div>\n </div>\n <div className=\"u-fill-snow u-pad--heavy-med u-pad-top-bottom--heavy@m-\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-md-6 u-flex align-items-center\">\n <ul>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Map} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n {line1}\n <br />\n {line2} {postalCode}, {country}\n </span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Phone} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">{hotel?.phone}</span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Hotel2} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n <a href={hotel?.hotelUrl} style={{ color: 'var(--rs-color-accent-1)' }}>\n {hotel?.name}\n </a>\n </span>\n </li>\n <li className=\"u-flex\">\n <BEButton icon={IconType.ArrowRight} primary filled iconPosition=\"right\" onClick={onBookNowClick}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n </li>\n </ul>\n </div>\n <div className=\"col-md-6\">\n <div className=\"c-overlap\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy u-marg-top u-marg-top--heavy rs-summary-hotel-location-map\" style={{ height: '240px' }}>\n <BEHotelLocationMapBlock />\n </div>\n <div className=\"u-flex u-flex-column justify-content-center rs-hotelinfo-transport-distance u-w-100\">\n <TransportDistanceFromHotelBlock hotel={hotel} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"u-pad u-pad--heavy-plus u-pad-top-bottom--heavy@m-\">\n <div className=\"container rs-hotelinfo\">\n <div className=\"row\">\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-about\" bold>\n {t(Translation.Step.Hotel.About)}\n </Headline>\n </div>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel?.description || ''} />\n </Text>\n\n {!!hotel?.locationDescription && (\n <>\n <div className=\"u-marg-top\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Hotel.Location)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small} asDiv>\n <HtmlContentViewer content={hotel.locationDescription} />\n </Text>\n </>\n )}\n </div>\n {!!hotel?.perks?.length && (\n <>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <strong className=\"rs-hotelinfo-andyougetall\">{hotel.perkTitle || t(Translation.Step.Hotel.AndYouGetAll)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n <HotelInfoPerkRow hotel={hotel} />\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 </>\n )}\n </div>\n {!!hotelServices.length && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-hotelamenities\" bold>\n {t(Translation.Step.Hotel.HotelAmenities)}\n </Headline>\n </div>\n <div className=\"row\">\n {hotelServices.map((hotelService, index) => {\n return (\n <div key={index} className=\"col-md-6\">\n <div className=\"u-flex u-marg-bottom\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Accent} borderRadius=\"round\" noPadding size=\"16px\" />\n <span className=\"u-flex__item u-marg-left--light\">\n <Text type={TextType.Small}>{hotelService.name}</Text>\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n {!!hotel?.policies && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-policies\" bold>\n {t(Translation.Step.Hotel.Policies)}\n </Headline>\n </div>\n <Text type={TextType.Small}>\n <a href={hotel?.policies} target=\"_blank\" style={{ color: hotel?.colors.accent }} rel=\"noreferrer\">\n {hotel?.policies}\n </a>\n </Text>\n </div>\n )}\n\n {quoteImage && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <QuoteImage\n isMobile={isMobile}\n className={classNames('u-marg-bottom--heavy rs-hotelinfo-quote-images', {\n '--mobile': isMobile,\n '--desktop': !isMobile,\n })}\n src={quoteImage}\n ></QuoteImage>\n </div>\n )}\n </div>\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-gallery\" bold>\n {t(Translation.Step.Hotel.Gallery)}\n </Headline>\n </div>\n {images.length >= 1 && getImage(0)}\n <div className=\"row\">\n {[1, 2, 3].map((index) => {\n if (images.length > index) {\n return (\n <div key={index} className=\"col-6\">\n {getImage(index)}\n </div>\n );\n }\n })}\n {images.length > 5 && (\n <div className=\"col-6\">\n <div className=\"c-images c-images--more\" onClick={openSliderOnClick}>\n {getImage(4)}\n <span>+ {images.length - 5}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {!!images?.length && (\n <FsLightbox\n toggler={lightboxController.toggler}\n slide={lightboxController.slide}\n sources={images.map((image) => ImageProvider.resizeImage(image, ImageSize.Original))}\n type=\"image\"\n />\n )}\n </>\n );\n}\n\nconst QuoteImage = ({ src, className, isMobile }: { src: string; className?: string; isMobile: boolean }) => {\n const [aspectRatio, setAspectRatio] = useState<number | null>(null);\n const [imageHeight, setImageHeight] = useState<number | null>(null);\n\n useEffect(() => {\n if (!src) return;\n\n const img = new Image();\n img.src = src;\n img.onload = () => setAspectRatio(img.width > 0 ? img.height / img.width : 1); // Fallback aspect ratio\n img.onerror = () => {\n console.error('Failed to load image');\n setAspectRatio(1);\n };\n }, [src]);\n\n useEffect(() => {\n if (!isMobile || aspectRatio === null || typeof window === 'undefined') return;\n\n const updateHeight = () => setImageHeight(window.innerWidth * aspectRatio);\n updateHeight();\n\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n }, [aspectRatio, isMobile]);\n\n return (\n <div className={className} style={{ width: '100%', textAlign: 'center' }}>\n {src && (\n <img\n src={src}\n alt=\"Quote\"\n style={{\n width: '100%',\n height: isMobile && imageHeight ? `${imageHeight}px` : 'auto',\n objectFit: 'contain', // Ensures full image is visible, no cropping\n display: 'block', // Prevents inline whitespace issue\n margin: '0 auto', // Centers the image in the div\n }}\n />\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"HotelInfo.js","sourceRoot":"/","sources":["src/pages/hotel/HotelInfo.tsx"],"names":[],"mappings":"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","sourcesContent":["import { StepHotelInfoViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport FsLightbox from 'fslightbox-react';\nimport { useHistoryConsistentPush } from 'hooks/HistoryConsistentPush';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport BEHotelLocationMapBlock from '@/components/generic/map/BEHotelLocationMapBlock';\nimport { PageTitle } from '@/components/generic/PageTitle';\nimport Text, { TextType } from '@/components/generic/Text';\nimport HotelInfoPerkRow from '@/components/steps/hotel/HotelInfoPerksRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport { BookingEngineContext } from '@/index';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport StepManager from '@/util/StepManager';\n\nexport default function HotelInfo() {\n const { hotel } = useCurrentHotel();\n const historyConsistentPush = useHistoryConsistentPush();\n const { t } = useTranslation();\n const context = useContext(BookingEngineContext);\n const isMobile = context.screenSize <= ScreenSize.Large;\n\n const imageUrl = hotel?.heroImage;\n\n const { line1, line2, postalCode, country } = hotel?.address ?? {};\n\n const [lightboxController, setLightboxController] = useState({ toggler: false, slide: 1 });\n const [images, setImages] = useState<string[]>([]);\n\n const openSlider = (slide: number) => {\n setLightboxController((controller) => ({ toggler: !controller.toggler, slide: slide + 1 }));\n };\n const openSliderOnClick = () => {\n openSlider(4);\n };\n\n const { raise } = useEvent();\n\n useEffect(() => {\n const event = new StepHotelInfoViewEvent();\n raise(event);\n }, []);\n\n useEffect(() => {\n const newImages: string[] = [];\n\n if (hotel?.images?.length) {\n newImages.push(...hotel.images);\n }\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?.images, hotel?.rooms]);\n\n const onBookNowClick = () => {\n historyConsistentPush(StepManager.getFirstStep().getStepUrl());\n };\n\n const getImage = (index: number) => {\n const openSliderOnClickHandler = () => {\n openSlider(index);\n };\n\n const resizedUrl = ImageProvider.resizeImage(images[index], ImageSize.Small);\n\n return (\n <div\n style={{ backgroundImage: `url('${resizedUrl}')`, paddingTop: '75%' }}\n className=\"c-images u-block u-w-100 u-marg-bottom u-marg-bottom--heavy\"\n onClick={openSliderOnClickHandler}\n />\n );\n };\n\n const hotelServices = hotel?.hotelServices?.filter(({ name }) => !!name) || [];\n const quoteImage = isMobile ? hotel?.quoteImageMobile : hotel?.quoteImageDesktop;\n\n return (\n <>\n <PageTitle step=\"HotelInfo\" />\n <div\n style={{ backgroundImage: `url('${imageUrl && ImageProvider.resizeImage(imageUrl, ImageSize.Original)}')` }}\n className={classNames('c-masthead has-tint', 'rs-background-hotel-info', `rs-background-${hotel?.hotelID}`)}\n >\n <div className=\"container\">\n <div className=\"c-masthead__body u-fill-white u-pad--heavy u-shadow-accent\">\n <h1 className=\"c-masthead__header\">{hotel?.name}</h1>\n <h2 className=\"c-masthead__sub-header\">\n {hotel?.countryPrefix ?? ''} {hotel?.address?.country}\n </h2>\n </div>\n </div>\n </div>\n <div className=\"u-fill-snow u-pad--heavy-med u-pad-top-bottom--heavy@m-\">\n <div className=\"container\">\n <div className=\"row\">\n <div className=\"col-md-6 u-flex align-items-center\">\n <ul>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Map} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n {line1}\n <br />\n {line2} {postalCode}, {country}\n </span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Phone} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">{hotel?.phone}</span>\n </li>\n <li className=\"u-flex u-marg-bottom--heavy\">\n <Icon icon={IconType.Hotel2} size=\"1.3em\" color={Color.Accent} />\n <span className=\"u-flex__item u-marg-left\">\n <a href={hotel?.hotelUrl} style={{ color: 'var(--rs-color-accent-1)' }}>\n {hotel?.name}\n </a>\n </span>\n </li>\n <li className=\"u-flex\">\n <BEButton icon={IconType.ArrowRight} primary filled iconPosition=\"right\" onClick={onBookNowClick}>\n {t(Translation.Misc.BookNow)}\n </BEButton>\n </li>\n </ul>\n </div>\n <div className=\"col-md-6\">\n <div className=\"c-overlap\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy u-marg-top u-marg-top--heavy rs-summary-hotel-location-map\" style={{ height: '240px' }}>\n <BEHotelLocationMapBlock />\n </div>\n <div className=\"u-flex u-flex-column justify-content-center rs-hotelinfo-transport-distance u-w-100\">\n <TransportDistanceFromHotelBlock hotel={hotel} />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className=\"u-pad u-pad--heavy-plus u-pad-top-bottom--heavy@m-\">\n <div className=\"container rs-hotelinfo\">\n <div className=\"row\">\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-about\" bold>\n {t(Translation.Step.Hotel.About)}\n </Headline>\n </div>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel?.description?.replace('\\r\\n', '<br/><br/>') || '' }} />\n </Text>\n {!!hotel?.locationDescription && (\n <>\n <div className=\"u-marg-top\">\n <Text type={TextType.Small}>\n <strong>{t(Translation.Step.Hotel.Location)}</strong>\n </Text>\n </div>\n <Text type={TextType.Small}>\n <span dangerouslySetInnerHTML={{ __html: hotel?.locationDescription?.replace('\\r\\n', '<br/><br/>') }} />\n </Text>\n </>\n )}\n </div>\n {!!hotel?.perks?.length && (\n <>\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Text type={TextType.Small}>\n <strong className=\"rs-hotelinfo-andyougetall\">{hotel.perkTitle || t(Translation.Step.Hotel.AndYouGetAll)}</strong>\n </Text>\n </div>\n <div className=\"row\">\n <HotelInfoPerkRow hotel={hotel} />\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 </>\n )}\n </div>\n {!!hotelServices.length && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-hotelamenities\" bold>\n {t(Translation.Step.Hotel.HotelAmenities)}\n </Headline>\n </div>\n <div className=\"row\">\n {hotelServices.map((hotelService, index) => {\n return (\n <div key={index} className=\"col-md-6\">\n <div className=\"u-flex u-marg-bottom\">\n <Icon icon={IconType.Check} color={Color.White} backgroundColor={Color.Accent} borderRadius=\"round\" noPadding size=\"16px\" />\n <span className=\"u-flex__item u-marg-left--light\">\n <Text type={TextType.Small}>{hotelService.name}</Text>\n </span>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n {!!hotel?.policies && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-policies\" bold>\n {t(Translation.Step.Hotel.Policies)}\n </Headline>\n </div>\n <Text type={TextType.Small}>\n <a href={hotel?.policies} target=\"_blank\" style={{ color: hotel?.colors.accent }} rel=\"noreferrer\">\n {hotel?.policies}\n </a>\n </Text>\n </div>\n )}\n\n {quoteImage && (\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <QuoteImage\n isMobile={isMobile}\n className={classNames('u-marg-bottom--heavy rs-hotelinfo-quote-images', {\n '--mobile': isMobile,\n '--desktop': !isMobile,\n })}\n src={quoteImage}\n ></QuoteImage>\n </div>\n )}\n </div>\n <div className=\"col-lg-6\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <div className=\"u-marg-bottom u-marg-bottom--heavy\">\n <Headline className=\"rs-hotelinfo-gallery\" bold>\n {t(Translation.Step.Hotel.Gallery)}\n </Headline>\n </div>\n {images.length >= 1 && getImage(0)}\n <div className=\"row\">\n {[1, 2, 3].map((index) => {\n if (images.length > index) {\n return (\n <div key={index} className=\"col-6\">\n {getImage(index)}\n </div>\n );\n }\n })}\n {images.length > 5 && (\n <div className=\"col-6\">\n <div className=\"c-images c-images--more\" onClick={openSliderOnClick}>\n {getImage(4)}\n <span>+ {images.length - 5}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n {!!images?.length && (\n <FsLightbox\n toggler={lightboxController.toggler}\n slide={lightboxController.slide}\n sources={images.map((image) => ImageProvider.resizeImage(image, ImageSize.Original))}\n type=\"image\"\n />\n )}\n </>\n );\n}\n\nconst QuoteImage = ({ src, className, isMobile }: { src: string; className?: string; isMobile: boolean }) => {\n const [aspectRatio, setAspectRatio] = useState<number | null>(null);\n const [imageHeight, setImageHeight] = useState<number | null>(null);\n\n useEffect(() => {\n if (!src) return;\n\n const img = new Image();\n img.src = src;\n img.onload = () => setAspectRatio(img.width > 0 ? img.height / img.width : 1); // Fallback aspect ratio\n img.onerror = () => {\n console.error('Failed to load image');\n setAspectRatio(1);\n };\n }, [src]);\n\n useEffect(() => {\n if (!isMobile || aspectRatio === null || typeof window === 'undefined') return;\n\n const updateHeight = () => setImageHeight(window.innerWidth * aspectRatio);\n updateHeight();\n\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n }, [aspectRatio, isMobile]);\n\n return (\n <div className={className} style={{ width: '100%', textAlign: 'center' }}>\n {src && (\n <img\n src={src}\n alt=\"Quote\"\n style={{\n width: '100%',\n height: isMobile && imageHeight ? `${imageHeight}px` : 'auto',\n objectFit: 'contain', // Ensures full image is visible, no cropping\n display: 'block', // Prevents inline whitespace issue\n margin: '0 auto', // Centers the image in the div\n }}\n />\n )}\n </div>\n );\n};\n"]}
@@ -82,14 +82,10 @@ class RoomstayThemeEngine {
82
82
  this.registerStyles(newCompany.colors);
83
83
  };
84
84
  this.changeTheme = (profile) => __awaiter(this, void 0, void 0, function* () {
85
- var _a;
86
85
  const styleOverrides = this.createElementOrReuseExisting('style', 'engine-styles');
87
86
  styleOverrides.setAttribute('rel', 'preload');
88
- // Use :host when inside Shadow DOM, :root for light DOM
89
- const isInShadowDom = ((_a = this.EngineContainer) === null || _a === void 0 ? void 0 : _a.getRootNode()) instanceof ShadowRoot;
90
- const selector = isInShadowDom ? ':host' : ':root';
91
87
  styleOverrides.innerHTML = `
92
- ${selector} {
88
+ :root {
93
89
  ${(0, Color_1.getAccentOverrideStyleContent)(profile)}
94
90
  }`;
95
91
  });
@@ -127,8 +123,7 @@ class RoomstayThemeEngine {
127
123
  });
128
124
  this.loadScript = (src, name, alwaysExecute = false, timeout = 5000) => new Promise((resolve, reject) => {
129
125
  var _a;
130
- // Always use document.head for scripts — they need document scope (especially in Shadow DOM)
131
- const container = document.head;
126
+ const container = this.EngineContainer;
132
127
  const existingScript = container.querySelector(`script[name="roomstay-script-${name}"]`);
133
128
  if (existingScript) {
134
129
  if (alwaysExecute) {