@roomstay/frontend 2.6.113 → 2.8.0

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 (113) hide show
  1. package/dist/177.bundle.js +1 -1
  2. package/dist/279.bundle.js +1 -1
  3. package/dist/288.bundle.js +1 -1
  4. package/dist/370.bundle.js +1 -1
  5. package/dist/422.bundle.js +1 -1
  6. package/dist/449.bundle.js +1 -1
  7. package/dist/537.bundle.js +1 -1
  8. package/dist/836.bundle.js +1 -1
  9. package/dist/873.bundle.js +1 -1
  10. package/dist/972.bundle.js +1 -1
  11. package/dist/978.bundle.js +1 -1
  12. package/dist/main.bundle.js +1 -1
  13. package/dist/src/api/AvailabilityAPI.d.ts +19 -0
  14. package/dist/src/api/AvailabilityAPI.js +84 -0
  15. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  16. package/dist/src/api/BaseAPI.d.ts +1 -0
  17. package/dist/src/api/BaseAPI.js +1 -0
  18. package/dist/src/api/BaseAPI.js.map +1 -1
  19. package/dist/src/components/generic/Alert.d.ts +6 -4
  20. package/dist/src/components/generic/Alert.js +1 -1
  21. package/dist/src/components/generic/Alert.js.map +1 -1
  22. package/dist/src/components/generic/BookingWizard/BookingWizardContext.d.ts +2 -13
  23. package/dist/src/components/generic/BookingWizard/BookingWizardContext.js.map +1 -1
  24. package/dist/src/components/generic/Currency.js +5 -30
  25. package/dist/src/components/generic/Currency.js.map +1 -1
  26. package/dist/src/components/generic/map/BEHotelLocationMapBlock.d.ts +4 -0
  27. package/dist/src/components/generic/map/{HotelLocationMap.js → BEHotelLocationMapBlock.js} +10 -3
  28. package/dist/src/components/generic/map/BEHotelLocationMapBlock.js.map +1 -0
  29. package/dist/src/components/steps/confirmation/RoomContactDetails.js +20 -14
  30. package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
  31. package/dist/src/components/steps/confirmation/StepConfirmationForm.js +19 -2
  32. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  33. package/dist/src/components/steps/date/BEPeoplePickerBlock.d.ts +4 -0
  34. package/dist/src/components/steps/date/{PeoplePicker.js → BEPeoplePickerBlock.js} +10 -3
  35. package/dist/src/components/steps/date/BEPeoplePickerBlock.js.map +1 -0
  36. package/dist/src/components/steps/hotel/HotelCard.js +1 -7
  37. package/dist/src/components/steps/hotel/HotelCard.js.map +1 -1
  38. package/dist/src/components/steps/hotel/HotelCardModal.js +1 -1
  39. package/dist/src/components/steps/hotel/HotelCardModal.js.map +1 -1
  40. package/dist/src/components/steps/room/AvailableUpgradesModal.js +20 -11
  41. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  42. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +10 -1
  43. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
  44. package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.js +14 -3
  45. package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.js.map +1 -1
  46. package/dist/src/components/summary/BEMobileSummaryModal.js +9 -3
  47. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  48. package/dist/src/components/summary/BESummary.js +17 -4
  49. package/dist/src/components/summary/BESummary.js.map +1 -1
  50. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +42 -22
  51. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  52. package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -1
  53. package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
  54. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +39 -25
  55. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  56. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +19 -8
  57. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  58. package/dist/src/contexts/HotelOverridesContext.js +7 -3
  59. package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
  60. package/dist/src/engines/BaseEngine.d.ts +17 -0
  61. package/dist/src/engines/BaseEngine.js.map +1 -1
  62. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +1 -5
  63. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  64. package/dist/src/hooks/Currency.d.ts +25 -1
  65. package/dist/src/hooks/Currency.js +50 -5
  66. package/dist/src/hooks/Currency.js.map +1 -1
  67. package/dist/src/index.d.ts +9 -8
  68. package/dist/src/index.js +18 -10
  69. package/dist/src/index.js.map +1 -1
  70. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  71. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  72. package/dist/src/models/Api/HotelOverrideDTO.d.ts +1 -0
  73. package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
  74. package/dist/src/models/Room/Room.d.ts +2 -0
  75. package/dist/src/models/Room/Room.js.map +1 -1
  76. package/dist/src/pages/hotel/HotelInfo.js +3 -3
  77. package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
  78. package/dist/src/pages/steps/StepDate/StepDateComponent.js +12 -6
  79. package/dist/src/pages/steps/StepDate/StepDateComponent.js.map +1 -1
  80. package/dist/src/pages/steps/StepHotel/StepHotelComponent.js +1 -3
  81. package/dist/src/pages/steps/StepHotel/StepHotelComponent.js.map +1 -1
  82. package/dist/src/pages/steps/StepThanks/StepThanksComponent.d.ts +2 -0
  83. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +8 -1
  84. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
  85. package/dist/src/providers/CurrencyProvider.js +1 -1
  86. package/dist/src/providers/CurrencyProvider.js.map +1 -1
  87. package/dist/src/providers/FeatureProvider.js +2 -0
  88. package/dist/src/providers/FeatureProvider.js.map +1 -1
  89. package/dist/src/providers/FilterProvider.d.ts +4 -0
  90. package/dist/src/providers/FilterProvider.js +12 -0
  91. package/dist/src/providers/FilterProvider.js.map +1 -1
  92. package/dist/src/providers/feature/StepDateNextButtonAboveDatepickerFeature.d.ts +6 -0
  93. package/dist/src/providers/feature/StepDateNextButtonAboveDatepickerFeature.js +10 -0
  94. package/dist/src/providers/feature/StepDateNextButtonAboveDatepickerFeature.js.map +1 -0
  95. package/dist/src/translations/Translation.d.ts +1 -0
  96. package/dist/src/translations/Translation.js +1 -0
  97. package/dist/src/translations/Translation.js.map +1 -1
  98. package/dist/src/translations/languages/en-gb.js +1 -0
  99. package/dist/src/translations/languages/en-gb.js.map +1 -1
  100. package/dist/src/util/CurrencyHelper.js +1 -1
  101. package/dist/src/util/CurrencyHelper.js.map +1 -1
  102. package/dist/src/util/SyncBasketAddonRowQuantities.d.ts +11 -0
  103. package/dist/src/util/SyncBasketAddonRowQuantities.js +44 -0
  104. package/dist/src/util/SyncBasketAddonRowQuantities.js.map +1 -0
  105. package/dist/test.bundle.js +1 -1
  106. package/dist/tests/offline/entry/config/hotelSpecDefault.js +2 -2
  107. package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
  108. package/dist/vendors.bundle.js +1 -1
  109. package/package.json +2 -2
  110. package/dist/src/components/generic/map/HotelLocationMap.d.ts +0 -2
  111. package/dist/src/components/generic/map/HotelLocationMap.js.map +0 -1
  112. package/dist/src/components/steps/date/PeoplePicker.d.ts +0 -2
  113. package/dist/src/components/steps/date/PeoplePicker.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TabGroupedRoomList.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { IconType } from '@roomstay/ui';\nimport classNames from 'classnames';\nimport React, { useContext, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Headline from '@/components/generic/Headline';\nimport { Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useCurrentHotel } from '@/hooks';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport { Translation } from '@/translations/Translation';\n\nimport RoomDetails from '../roomDetails/RoomDetails';\nimport styles from './TabGroupedRoomList.module.scss';\n\ntype TabGroupedRoomListProps = {\n rooms: Room[];\n group: HotelRoomGroupsDTO[number];\n};\n\nexport const TabGroupedRoomList = (props: TabGroupedRoomListProps) => {\n const beContext = useContext(BookingEngineContext);\n const { orderUnavailableRoomsLast } = useContext(HotelOverridesContext);\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n\n const sortBy = beContext.currentRoomSort;\n const { rooms, group } = props;\n const [appliedFilters, setAppliedFilters] = useState<{ [id: string]: any }>({});\n\n const filterKeys = useMemo(() => {\n return Object.keys(group.filters || {});\n }, [group.filters]);\n\n const bookNowButtonDisabledReason = useMemo(() => {\n for (const filterKey of filterKeys) {\n const filter = group.filters?.[filterKey];\n if (filter?.requireSelection && !appliedFilters[filterKey]) {\n return t(Translation.Step.Room.SelectDwellingOptionsFirst);\n }\n }\n }, [appliedFilters, filterKeys]);\n\n const mandatoryFilters = useMemo(() => {\n return Object.entries(group.filters)\n .filter(([id, filter]) => !appliedFilters[id] && filter.requireSelection)\n .map(([, filter]) => filter.name)\n .join(', ');\n }, [appliedFilters, filterKeys]);\n\n const roomList = useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n if (hotel?.showUnavailableRooms) {\n if (orderUnavailableRoomsLast) {\n sortedRooms.sort((a, b) => {\n if (a.isAvailable() && !b.isAvailable()) return -1;\n if (!a.isAvailable() && b.isAvailable()) return 1;\n return 0;\n });\n }\n }\n\n return sortedRooms\n .filter((room) => {\n for (const filter of Object.keys(appliedFilters)) {\n if (room.auxiliaryValues?.[filter] && appliedFilters[filter] && !room.auxiliaryValues[filter].includes(`${appliedFilters[filter]}`)) {\n return false;\n }\n }\n\n return room;\n })\n .map((room, index) => {\n return <RoomDetails key={room.code} room={room} disableMarginBottom={index === rooms.length - 1} bookNowButtonDisabledReason={bookNowButtonDisabledReason} />;\n });\n }, [rooms, appliedFilters, sortBy, orderUnavailableRoomsLast, bookNowButtonDisabledReason]);\n\n return (\n <div className={classNames(styles.groupedRoomList, 'room-list')}>\n {!!group.groupName && (\n <div className={styles.groupedRoomListHeader}>\n <Headline bold>{group.groupName}</Headline>\n </div>\n )}\n\n {mandatoryFilters && (\n <Alert className=\"rs-mandatory-filters-alert\" type={AlertType.Accent1} icon={IconType.Info}>\n <Text type={TextType.Small}>{t(Translation.Misc.Alerts.SelectRequiredForAvailability, { message: mandatoryFilters })}</Text>\n </Alert>\n )}\n\n {!!filterKeys?.length && rooms.length > 0 && (\n <div className={styles.filterContainer}>\n {filterKeys.map((filterKey) => {\n const filter = group.filters?.[filterKey];\n\n if (filter.type === 'select') {\n const options = [{ label: 'All', value: null }, ...filter.options];\n const currentValue = appliedFilters?.[filterKey] ?? (options[0] as any)?.value;\n\n const localOnFilterChange = (value: string) => {\n setAppliedFilters((prev) => {\n const filter = { ...prev, [filterKey]: value };\n\n beContext.setCurrentGroupedRoomFilters(filter);\n\n return filter;\n });\n };\n\n return (\n <div key={filterKey} className={styles.filterItem}>\n <div className={styles['filterItem-label']}>{filter.name}:</div>\n <Select keyName=\"value\" labelName=\"label\" options={options as any} value={currentValue} onChange={localOnFilterChange}></Select>\n </div>\n );\n }\n })}\n </div>\n )}\n\n <div className=\"room-list__container\">{roomList}</div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"TabGroupedRoomList.js","sourceRoot":"/","sources":["src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { IconType } from '@roomstay/ui';\nimport classNames from 'classnames';\nimport React, { useContext, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Headline from '@/components/generic/Headline';\nimport { Select } from '@/components/generic/Select/Select';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useCurrentHotel } from '@/hooks';\nimport { HotelRoomGroupsDTO } from '@/models/Api/HotelDTO';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\nimport { Translation } from '@/translations/Translation';\n\nimport RoomDetails from '../roomDetails/RoomDetails';\nimport styles from './TabGroupedRoomList.module.scss';\n\ntype TabGroupedRoomListProps = {\n rooms: Room[];\n group: HotelRoomGroupsDTO[number];\n};\n\nexport const TabGroupedRoomList = (props: TabGroupedRoomListProps) => {\n const beContext = useContext(BookingEngineContext);\n const { orderUnavailableRoomsLast } = useContext(HotelOverridesContext);\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n\n const sortBy = beContext.currentRoomSort;\n const { rooms, group } = props;\n const [appliedFilters, setAppliedFilters] = useState<{ [id: string]: any }>({});\n\n const filterKeys = useMemo(() => {\n const filters = group.filters || {};\n\n return Object.keys(filters)\n .map((key, index) => ({ key, index }))\n .sort((a, b) => {\n const orderA = filters[a.key]?.order ?? 0;\n const orderB = filters[b.key]?.order ?? 0;\n return orderA === orderB ? a.index - b.index : orderA - orderB;\n })\n .map((item) => item.key);\n }, [group.filters]);\n\n const bookNowButtonDisabledReason = useMemo(() => {\n for (const filterKey of filterKeys) {\n const filter = group.filters?.[filterKey];\n if (filter?.requireSelection && !appliedFilters[filterKey]) {\n return t(Translation.Step.Room.SelectDwellingOptionsFirst);\n }\n }\n }, [appliedFilters, filterKeys]);\n\n const mandatoryFilters = useMemo(() => {\n return Object.entries(group.filters)\n .filter(([id, filter]) => !appliedFilters[id] && filter.requireSelection)\n .map(([, filter]) => filter.name)\n .join(', ');\n }, [appliedFilters, filterKeys]);\n\n const roomList = useMemo(() => {\n const sortedRooms = [...rooms];\n if (sortedRooms.length !== 0) {\n sortedRooms.sort(RoomSortProvider.getSortByFunction(sortBy));\n }\n\n if (hotel?.showUnavailableRooms) {\n if (orderUnavailableRoomsLast) {\n sortedRooms.sort((a, b) => {\n if (a.isAvailable() && !b.isAvailable()) return -1;\n if (!a.isAvailable() && b.isAvailable()) return 1;\n return 0;\n });\n }\n }\n\n return sortedRooms\n .filter((room) => {\n for (const filter of Object.keys(appliedFilters)) {\n if (room.auxiliaryValues?.[filter] && appliedFilters[filter] && !room.auxiliaryValues[filter].includes(`${appliedFilters[filter]}`)) {\n return false;\n }\n }\n\n return room;\n })\n .map((room, index) => {\n return <RoomDetails key={room.code} room={room} disableMarginBottom={index === rooms.length - 1} bookNowButtonDisabledReason={bookNowButtonDisabledReason} />;\n });\n }, [rooms, appliedFilters, sortBy, orderUnavailableRoomsLast, bookNowButtonDisabledReason]);\n\n return (\n <div className={classNames(styles.groupedRoomList, 'room-list')}>\n {!!group.groupName && (\n <div className={styles.groupedRoomListHeader}>\n <Headline bold>{group.groupName}</Headline>\n </div>\n )}\n\n {mandatoryFilters && (\n <Alert className=\"rs-mandatory-filters-alert\" type={AlertType.Accent1} icon={IconType.Info}>\n <Text type={TextType.Small}>{t(Translation.Misc.Alerts.SelectRequiredForAvailability, { message: mandatoryFilters })}</Text>\n </Alert>\n )}\n\n {!!filterKeys?.length && rooms.length > 0 && (\n <div className={styles.filterContainer}>\n {filterKeys.map((filterKey) => {\n const filter = group.filters?.[filterKey];\n\n if (filter.type === 'select') {\n const options = [{ label: 'All', value: null }, ...filter.options];\n const currentValue = appliedFilters?.[filterKey] ?? (options[0] as any)?.value;\n\n const localOnFilterChange = (value: string) => {\n setAppliedFilters((prev) => {\n const filter = { ...prev, [filterKey]: value };\n\n beContext.setCurrentGroupedRoomFilters(filter);\n\n return filter;\n });\n };\n\n return (\n <div key={filterKey} className={styles.filterItem}>\n <div className={styles['filterItem-label']}>{filter.name}:</div>\n <Select keyName=\"value\" labelName=\"label\" options={options as any} value={currentValue} onChange={localOnFilterChange}></Select>\n </div>\n );\n }\n })}\n </div>\n )}\n\n <div className=\"room-list__container\">{roomList}</div>\n </div>\n );\n};\n"]}
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.default = RoomFilterRoomType;
40
+ const contexts_1 = require("../../../../contexts/index.js");
40
41
  const react_1 = __importStar(require("react"));
41
42
  const react_i18next_1 = require("react-i18next");
42
43
  const Translation_1 = require("translations/Translation");
@@ -45,24 +46,34 @@ const Checkbox_1 = __importDefault(require("../../../generic/Checkbox/Checkbox")
45
46
  const SmallSpinner_1 = __importDefault(require("../../../generic/loader/SmallSpinner"));
46
47
  const Text_1 = __importStar(require("../../../generic/Text"));
47
48
  const RoomTypeFilter_1 = __importDefault(require("../../../../models/Room/Filters/RoomTypeFilter"));
49
+ const RoomSortProvider_1 = __importDefault(require("../../../../providers/RoomSortProvider"));
48
50
  function RoomFilterRoomType(props) {
49
51
  var _a;
50
52
  const { t } = (0, react_i18next_1.useTranslation)();
53
+ const beContext = (0, react_1.useContext)(contexts_1.BookingEngineContext);
51
54
  const [selectedRooms, setSelectedRooms] = (0, react_1.useState)({});
52
55
  const [resetCounter, setResetCounter] = (0, react_1.useState)(0);
53
56
  const obj = (0, react_1.useRef)(null);
57
+ const sortBy = beContext.currentRoomSort;
58
+ // Sort rooms using the same logic as the room list so the filter order matches the displayed rooms.
59
+ const sortedRoomList = (0, react_1.useMemo)(() => {
60
+ var _a;
61
+ const sorted = [...((_a = props.roomList) !== null && _a !== void 0 ? _a : [])];
62
+ sorted.sort(RoomSortProvider_1.default.getSortByFunction(sortBy));
63
+ return sorted;
64
+ }, [props.roomList, sortBy]);
54
65
  (0, react_1.useEffect)(() => {
55
- if (props.roomList) {
66
+ if (sortedRoomList) {
56
67
  const roomTypes = {};
57
68
  const visibleRoomsFilter = props.filter ? props.filter.getVisibleRooms() : null;
58
- props.roomList.forEach((room) => {
69
+ sortedRoomList.forEach((room) => {
59
70
  roomTypes[room.name] = {
60
71
  status: visibleRoomsFilter ? visibleRoomsFilter.includes(room.name) || visibleRoomsFilter.includes(room.code) : true,
61
72
  };
62
73
  });
63
74
  setSelectedRooms(roomTypes);
64
75
  }
65
- }, [props.roomList, resetCounter]);
76
+ }, [sortedRoomList, resetCounter]);
66
77
  const allRooms = Object.keys(selectedRooms);
67
78
  const rooms = allRooms.filter((name) => selectedRooms[name].status);
68
79
  (0, react_1.useEffect)(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"RoomFilterRoomType.js","sourceRoot":"/","sources":["src/components/steps/room/roomFilter/RoomFilterRoomType.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Checkbox from '@/components/generic/Checkbox/Checkbox';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport { Room } from '@/models/Room/Room';\n\ninterface RoomFilterRoomTypeProps {\n roomList: Room[];\n filter: RoomTypeFilter;\n onChange: (filter: RoomTypeFilter | null) => void;\n}\n\ninterface RoomFilterRoomTypeStatus {\n [name: string]: {\n status: boolean;\n };\n}\n\nexport default function RoomFilterRoomType(props: RoomFilterRoomTypeProps) {\n const { t } = useTranslation();\n const [selectedRooms, setSelectedRooms] = useState<{ [name: string]: { status: boolean } }>({});\n const [resetCounter, setResetCounter] = useState(0);\n const obj = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (props.roomList) {\n const roomTypes: RoomFilterRoomTypeStatus = {};\n const visibleRoomsFilter = props.filter ? props.filter.getVisibleRooms() : null;\n\n props.roomList.forEach((room) => {\n roomTypes[room.name as string] = {\n status: visibleRoomsFilter ? visibleRoomsFilter.includes(room.name as string) || visibleRoomsFilter.includes(room.code as string) : true,\n };\n });\n\n setSelectedRooms(roomTypes);\n }\n }, [props.roomList, resetCounter]);\n\n const allRooms = Object.keys(selectedRooms);\n const rooms = allRooms.filter((name) => selectedRooms[name].status);\n useEffect(() => {\n if (!obj?.current || !props.roomList?.length) return;\n if (rooms.length === allRooms.length) {\n props.onChange(null);\n } else {\n props.onChange(new RoomTypeFilter(rooms));\n }\n }, [selectedRooms]);\n const clearOnClickHandler = () => {\n props.onChange(null);\n setResetCounter((old) => old + 1);\n };\n return (\n <>\n <div className=\"u-flex u-marg-bottom u-marg-top--heavy\" ref={obj}>\n <Text inline type={TextType.Small}>\n <strong>{t(Translation.Step.Room.Filter.RoomType)}</strong>\n </Text>\n <BEButton size=\"tiny\" isText disabled={!props.filter} onClick={clearOnClickHandler}>\n {t(Translation.Misc.Clear)}\n </BEButton>\n </div>\n <div>\n {props.roomList?.length > 0 ? (\n selectedRooms &&\n Object.keys(selectedRooms).map((selectedRoomKey) => {\n const onChangeCheckboxHandler = (value: React.ChangeEvent<HTMLInputElement>) => {\n const oldRooms = { ...selectedRooms };\n oldRooms[selectedRoomKey].status = value.target.checked;\n setSelectedRooms(oldRooms);\n };\n return (\n <div className=\"u-marg-bottom--light\" key={selectedRoomKey}>\n <Checkbox label={selectedRoomKey} checked={selectedRooms[selectedRoomKey].status} onChange={onChangeCheckboxHandler} />\n </div>\n );\n })\n ) : (\n <div className=\"u-marg-top-bottom u-flex justify-content-center\">\n <SmallSpinner />\n </div>\n )}\n </div>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"RoomFilterRoomType.js","sourceRoot":"/","sources":["src/components/steps/room/roomFilter/RoomFilterRoomType.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext } from '@frontend/contexts';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Checkbox from '@/components/generic/Checkbox/Checkbox';\nimport SmallSpinner from '@/components/generic/loader/SmallSpinner';\nimport Text, { TextType } from '@/components/generic/Text';\nimport RoomTypeFilter from '@/models/Room/Filters/RoomTypeFilter';\nimport { Room } from '@/models/Room/Room';\nimport RoomSortProvider from '@/providers/RoomSortProvider';\n\ninterface RoomFilterRoomTypeProps {\n roomList: Room[];\n filter: RoomTypeFilter;\n onChange: (filter: RoomTypeFilter | null) => void;\n}\n\ninterface RoomFilterRoomTypeStatus {\n [name: string]: {\n status: boolean;\n };\n}\n\nexport default function RoomFilterRoomType(props: RoomFilterRoomTypeProps) {\n const { t } = useTranslation();\n const beContext = useContext(BookingEngineContext);\n const [selectedRooms, setSelectedRooms] = useState<{ [name: string]: { status: boolean } }>({});\n const [resetCounter, setResetCounter] = useState(0);\n const obj = useRef<HTMLDivElement | null>(null);\n\n const sortBy = beContext.currentRoomSort;\n\n // Sort rooms using the same logic as the room list so the filter order matches the displayed rooms.\n const sortedRoomList = useMemo(() => {\n const sorted = [...(props.roomList ?? [])];\n sorted.sort(RoomSortProvider.getSortByFunction(sortBy));\n return sorted;\n }, [props.roomList, sortBy]);\n\n useEffect(() => {\n if (sortedRoomList) {\n const roomTypes: RoomFilterRoomTypeStatus = {};\n const visibleRoomsFilter = props.filter ? props.filter.getVisibleRooms() : null;\n\n sortedRoomList.forEach((room) => {\n roomTypes[room.name as string] = {\n status: visibleRoomsFilter ? visibleRoomsFilter.includes(room.name as string) || visibleRoomsFilter.includes(room.code as string) : true,\n };\n });\n\n setSelectedRooms(roomTypes);\n }\n }, [sortedRoomList, resetCounter]);\n\n const allRooms = Object.keys(selectedRooms);\n const rooms = allRooms.filter((name) => selectedRooms[name].status);\n useEffect(() => {\n if (!obj?.current || !props.roomList?.length) return;\n if (rooms.length === allRooms.length) {\n props.onChange(null);\n } else {\n props.onChange(new RoomTypeFilter(rooms));\n }\n }, [selectedRooms]);\n const clearOnClickHandler = () => {\n props.onChange(null);\n setResetCounter((old) => old + 1);\n };\n return (\n <>\n <div className=\"u-flex u-marg-bottom u-marg-top--heavy\" ref={obj}>\n <Text inline type={TextType.Small}>\n <strong>{t(Translation.Step.Room.Filter.RoomType)}</strong>\n </Text>\n <BEButton size=\"tiny\" isText disabled={!props.filter} onClick={clearOnClickHandler}>\n {t(Translation.Misc.Clear)}\n </BEButton>\n </div>\n <div>\n {props.roomList?.length > 0 ? (\n selectedRooms &&\n Object.keys(selectedRooms).map((selectedRoomKey) => {\n const onChangeCheckboxHandler = (value: React.ChangeEvent<HTMLInputElement>) => {\n const oldRooms = { ...selectedRooms };\n oldRooms[selectedRoomKey].status = value.target.checked;\n setSelectedRooms(oldRooms);\n };\n return (\n <div className=\"u-marg-bottom--light\" key={selectedRoomKey}>\n <Checkbox label={selectedRoomKey} checked={selectedRooms[selectedRoomKey].status} onChange={onChangeCheckboxHandler} />\n </div>\n );\n })\n ) : (\n <div className=\"u-marg-top-bottom u-flex justify-content-center\">\n <SmallSpinner />\n </div>\n )}\n </div>\n </>\n );\n}\n"]}
@@ -48,7 +48,7 @@ const Currency_1 = __importDefault(require("../generic/Currency"));
48
48
  const Headline_1 = __importDefault(require("../generic/Headline"));
49
49
  const Icon_1 = __importStar(require("../generic/Icon/Icon"));
50
50
  const LineBreak_1 = __importDefault(require("../generic/LineBreak"));
51
- const HotelLocationMap_1 = __importDefault(require("../generic/map/HotelLocationMap"));
51
+ const BEHotelLocationMapBlock_1 = __importDefault(require("../generic/map/BEHotelLocationMapBlock"));
52
52
  const SimpleModal_1 = __importDefault(require("../generic/modal/SimpleModal"));
53
53
  const Text_1 = __importStar(require("../generic/Text"));
54
54
  const ItemisedFeesListing_1 = require("../steps/common/ItemisedFeesListing/ItemisedFeesListing");
@@ -64,9 +64,11 @@ const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
64
64
  const TextAlignment_1 = require("../../util/TextAlignment");
65
65
  const AddonDiscountCalculator_1 = require("../../utils/AddonDiscountCalculator");
66
66
  const GroupedCheckInOutTimes_1 = require("../generic/GroupedCheckInOutTimes/GroupedCheckInOutTimes");
67
+ const Pill_1 = __importStar(require("../generic/Pill"));
67
68
  const TaxInclusionNotice_1 = require("../generic/TaxInclusionNotice/TaxInclusionNotice");
68
69
  function BEMobileSummaryModal(props) {
69
70
  var _a, _b, _c, _d;
71
+ const ccx = (0, react_1.useContext)(contexts_1.CompanyContext);
70
72
  const basketContext = (0, react_1.useContext)(contexts_1.BasketContext);
71
73
  const { hotel } = (0, hooks_1.useCurrentHotel)();
72
74
  const selectedBasketRows = basketContext.getAllValidRows();
@@ -117,6 +119,10 @@ function BEMobileSummaryModal(props) {
117
119
  react_1.default.createElement("div", { className: "col-8 u-flex u-flex-direction-column align-items-end" },
118
120
  react_1.default.createElement(Headline_1.default, { bold: true, size: "normal", align: TextAlignment_1.TextAlign.Right },
119
121
  react_1.default.createElement(Currency_1.default, null, totalPrice)),
122
+ hotel && ccx.currentCurrency !== (hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency) && (react_1.default.createElement("div", { className: "u-align-right rs-summary-currency-display-enhancements--mobile" },
123
+ react_1.default.createElement(Pill_1.default, { type: Pill_1.PillType.Grey },
124
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Navy, align: TextAlignment_1.TextAlign.Right, inline: true },
125
+ react_1.default.createElement(Currency_1.default, { toCurrencyCode: hotel.defaultCurrency }, basketContext.getTotalPrice()))))),
120
126
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right },
121
127
  react_1.default.createElement(TaxInclusionNotice_1.TaxInclusionNotice, null)))) },
122
128
  react_1.default.createElement(react_1.default.Fragment, null,
@@ -175,8 +181,8 @@ function BEMobileSummaryModal(props) {
175
181
  }))))) : (react_1.default.createElement("div", { className: "u-marg-bottom--heavy u-marg-top--heavy" },
176
182
  react_1.default.createElement("div", { className: "u-marg-bottom--heavy" },
177
183
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Body }, t(Translation_1.Translation.Step.General.YourCartIsEmpty))),
178
- react_1.default.createElement("div", { style: { height: '150px', position: 'relative' } },
179
- react_1.default.createElement(HotelLocationMap_1.default, null)),
184
+ react_1.default.createElement("div", { className: "rs-summary-hotel-location-map", style: { height: '150px', position: 'relative' } },
185
+ react_1.default.createElement(BEHotelLocationMapBlock_1.default, null)),
180
186
  react_1.default.createElement("div", { className: "u-marg-top" },
181
187
  react_1.default.createElement("div", { className: "u-marg-bottom" },
182
188
  react_1.default.createElement(Text_1.default, { bold: true }, hotel === null || hotel === void 0 ? void 0 : hotel.name)),
@@ -1 +1 @@
1
- {"version":3,"file":"BEMobileSummaryModal.js","sourceRoot":"/","sources":["src/components/summary/BEMobileSummaryModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,uCAgRC;AAtTD,iDAAmD;AACnD,2CAAsF;AACtF,+CAA+D;AAC/D,iDAA+C;AAC/C,uDAAwC;AACxC,0DAAuD;AAEvD,6EAAqD;AACrD,6EAAqD;AACrD,6EAAqD;AACrD,uEAAgE;AAChE,+EAAuD;AACvD,iGAAyE;AACzE,yFAAiE;AACjE,kEAA2D;AAC3D,2GAAwG;AACxG,8DAAsE;AACtE,+FAAuE;AACvE,gFAA6E;AAC7E,yGAAiF;AACjF,6FAAqE;AACrE,2HAAmG;AAEnG,wCAAqC;AACrC,qEAA6C;AAC7C,uEAA+C;AAC/C,wDAAiD;AACjD,6EAA0E;AAE1E,qGAAkG;AAClG,yFAAsF;AAQtF,SAAwB,oBAAoB,CAAC,KAAgC;;IACzE,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,kBAAkB,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IAE3D,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC;IAE7C,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAqB,EAAE,CAAC,CAAC;IAEzE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,4HAA4H;QAC5H,MAAM,SAAS,qBAAqC,gCAAoB,CAAE,CAAC;QAC3E,SAAS,CAAC,sBAAsB,CAAC,SAAS,GAAG,CACzC,uCAAK,SAAS,EAAC,wDAAwD;YACnE,uCAAK,SAAS,EAAC,yBAAyB;gBACpC,8BAAC,yCAA+B,IAAC,QAAQ,QAAC,KAAK,EAAE,KAAK,GAAI,CACxD,CACJ,CACT,CAAC;QACF,SAAS,CAAC,UAAU,CAAC,SAAS,GAAG,8BAAC,uCAAkB,IAAC,IAAI,EAAC,QAAQ,GAAG,CAAC;QAEtE,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAA,sBAAc,EAAC,YAAY,CAAC,CAAC;IAE1D,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzG,MAAM,YAAY,GAAG,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,UAAU,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,CAAC,CAAC;IAEzE,MAAM,gBAAgB,GAAG,CAAC,GAAa,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,IAAI,CAAQ,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;;QACrB,MAAA,KAAK,CAAC,OAAO,qDAAI,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,4BAA4B,GAAG,GAAG,EAAE;;QACtC,MAAA,KAAK,CAAC,OAAO,qDAAI,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IACrD,MAAM,WAAW,GAAG,aAAa,CAAC,mBAAmB,EAAE,CAAC;IAExD,OAAO,CACH,8BAAC,qBAAW,IACR,IAAI,EAAE,KAAK,CAAC,MAAM,EAClB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAClC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EACR,uCAAK,SAAS,EAAC,wBAAwB;YACnC,uCAAK,SAAS,EAAC,OAAO;gBAClB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ;gBAC7D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,MAAM;oBAC3C,8CAAS,sBAAY,CAAC,sBAAsB,CAAC,SAAS,EAAE,yBAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAU,CACzF,CACL;YACN,uCAAK,SAAS,EAAC,sDAAsD;gBACjE,8BAAC,kBAAQ,IAAC,IAAI,QAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,yBAAS,CAAC,KAAK;oBAC/C,8BAAC,kBAAQ,QAAE,UAAU,CAAY,CAC1B;gBACX,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK;oBACrE,8BAAC,uCAAkB,OAAG,CACnB,CACL,CACJ;QAGV;YACI,uCAAK,SAAS,EAAC,WAAW;gBACtB,8BAAC,+CAAsB,IACnB,KAAK,EAAE,KAAK,EACZ,gBAAgB,EAAC,sCAAsC,EACvD,YAAY,EAAC,OAAO,EACpB,aAAa,EAAE,GAAG,EAAE,CAAC,CACjB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI;wBACzC,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAU,CAC3C,CACV,EACD,cAAc,EAAE,GAAG,EAAE,CAAC,CAClB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,IAAI;wBACzC,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAU,CAC5C,CACV,EACD,UAAU,EAAE,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE,CAAC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,IAAI,CAAQ,GACvF;gBAEF,uCAAK,SAAS,EAAC,gEAAgE,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;oBACrG,uCAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;wBACnB,uCAAK,SAAS,EAAC,0BAA0B;4BACrC,8BAAC,cAAI,IAAC,SAAS,EAAC,0BAA0B;gCACtC,wDACQ,CAAC,aAAa,CAAC,SAAS;oCACxB,CAAC,CAAC;wCACI,KAAK,EAAE;4CACH,KAAK,EAAE,aAAK,CAAC,MAAM;4CACnB,UAAU,EAAE,MAAM;yCACrB;qCACJ;oCACH,CAAC,CAAC,EAAE,CAAC,GAER,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAClG,CACJ;4BACP,wCAAM,SAAS,EAAC,0BAA0B;gCACtC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,WAAW,EAAE,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,GAAI,CACpE;4BACP,8BAAC,cAAI,IAAC,SAAS,EAAC,0BAA0B;gCACtC,wDACQ,CAAC,aAAa,CAAC,OAAO;oCACtB,CAAC,CAAC;wCACI,KAAK,EAAE;4CACH,KAAK,EAAE,aAAK,CAAC,MAAM;4CACnB,UAAU,EAAE,MAAM;yCACrB;qCACJ;oCACH,CAAC,CAAC,EAAE,CAAC,GAER,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAChG,CACJ,CACL;wBACN,8BAAC,cAAI,IAAC,SAAS,EAAC,6BAA6B;4BACxC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;;4BACrC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC;;4BACvC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAClC,CACL;oBACN,uCAAK,SAAS,EAAC,eAAe;wBAC1B,8BAAC,uBAAI,IAAC,EAAE,EAAE,IAAA,qBAAW,GAAE,CAAC,UAAU,EAAE;4BAChC,8BAAC,kBAAQ,IAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAC,MAAM,IACtC,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAChC,CACR,CACL,CACJ;gBAEL,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAC/C;oBACK,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAc,EAAE,KAAa,EAAE,EAAE;wBACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;4BAAE,OAAO;wBAE3B,OAAO,CACH,8BAAC,0BAAgB,IACb,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,EAChB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,EAC9B,qBAAqB,EAAE,4BAA4B,GACrD,CACL,CAAC;oBACN,CAAC,CAAC;oBAED,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB;wBACI,8BAAC,mBAAS,IAAC,SAAS,QAAC,MAAM,SAAG;wBAE9B,uCAAK,SAAS,EAAC,YAAY;4BACvB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;gCAC7C,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAU,CACrD,CACL;wBAEL,iDAAuB,CAAC,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,GAAG,CACjH,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE;4BAC7B,MAAM,oBAAoB,GAAG,GAAG,EAAE;gCAC9B,OAAO,aAAa,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;4BACrD,CAAC,CAAC;4BAEF,OAAO,CACH,8BAAC,2BAAiB,IACd,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,EAClB,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,EAChD,iBAAiB,EAAE,iBAAiB,GACtC,CACL,CAAC;wBACN,CAAC,CACJ,CACF,CACN,CACF,CACN,CAAC,CAAC,CAAC,CACA,uCAAK,SAAS,EAAC,wCAAwC;oBACnD,uCAAK,SAAS,EAAC,sBAAsB;wBACjC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,IAAI,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAQ,CAC7E;oBACN,uCAAK,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;wBACjD,8BAAC,0BAAgB,OAAG,CAClB;oBACN,uCAAK,SAAS,EAAC,YAAY;wBACvB,uCAAK,SAAS,EAAC,eAAe;4BAC1B,8BAAC,cAAI,IAAC,IAAI,UAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAQ,CAC7B;wBACL,gBAAgB,CAAC,YAAwB,CAAC;wBAC1C,gBAAgB,CAAC,YAAwB,CAAC,CACzC,CACJ,CACT;gBAGA,SAAS,GAAG,CAAC,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,CACvC;oBACI,uCAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAI;oBAC7E,uCAAK,SAAS,EAAC,QAAQ;wBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;4BAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;wBAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;4BACtB,8BAAC,kBAAQ,QAAE,SAAS,CAAY,CAC7B,CACL,CACP,CACN;gBAEA,CAAC,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,8BAAC,yCAAmB,IAAC,IAAI,EAAE,YAAY,GAAI;gBAErE,gBAAgB;gBAEjB,uCAAK,SAAS,EAAC,wCAAwC;oBACnD,8BAAC,gCAAsB,OAAG,CACxB;gBACL,KAAK,IAAI,WAAW,IAAI,CACrB,uCAAK,SAAS,EAAC,sBAAsB;oBACjC,uCAAK,SAAS,EAAC,wBAAwB;wBAClC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,KAAI,CAC1B;4BACI,uCAAK,SAAS,EAAC,0BAA0B;gCACrC,uCAAK,SAAS,EAAC,QAAQ;oCACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;wCAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;oCAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;wCACtB,8BAAC,kBAAQ,QAAE,WAAW,CAAY,CAC/B,CACL,CACJ;4BACN,uCAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,GAAI,CAC7E,CACN;wBACD,uCAAK,SAAS,EAAC,+CAA+C;4BAC1D,uCAAK,SAAS,EAAC,QAAQ;gCACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,UAC3B,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CACxB;gCACP,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI;oCAC5B,8BAAC,kBAAQ,QAAE,WAAW,CAAY,CAC/B,CACL,CACJ,CACJ,CACJ,CACT,CACC,CACP,CACO,CACjB,CAAC;AACN,CAAC","sourcesContent":["import { BasketContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport { BESummaryLayoutOrder } from '@/components/summary/BESummary';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryPrivacyPolicy from '@/components/summary/BESummaryPrivacyPolicy';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketRow from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\nimport { AddonDiscountCalculator } from '@/utils/AddonDiscountCalculator';\n\nimport { GroupedCheckInOutTimes } from '../generic/GroupedCheckInOutTimes/GroupedCheckInOutTimes';\nimport { TaxInclusionNotice } from '../generic/TaxInclusionNotice/TaxInclusionNotice';\n\nexport interface BEMobileSummaryModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n showImages?: boolean;\n}\n\nexport default function BEMobileSummaryModal(props: BEMobileSummaryModalProps) {\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const [mobileLayout, setMobileLayout] = useState<OrderableReactList>({});\n\n useEffect(() => {\n // We do this hacky thing since Mobile summary & Desktop summary are almost identical, just blocks are presented differently\n const newLayout: typeof BESummaryLayoutOrder = { ...BESummaryLayoutOrder };\n newLayout.TransportDistanceBlock.component = (\n <div className=\"u-flex justify-content-center u-marg-top u-marg-bottom\">\n <div className=\"u-flex flex-row u-w-100\">\n <TransportDistanceFromHotelBlock vertical hotel={hotel} />\n </div>\n </div>\n );\n newLayout.PerksBlock.component = <BESummaryPerkBlock size=\"mobile\" />;\n\n setMobileLayout(newLayout);\n }, []);\n\n const { sortedComponents } = useElementSort(mobileLayout);\n\n const totalDays = basketContext.endDate ? basketContext.endDate.diff(basketContext.startDate, 'day') : 0;\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const getAddressString = (val: string[]) => {\n const line = val.filter((it) => !!it && it !== '0').join(', ');\n\n if (line) {\n return <Text type={TextType.Small}>{line}</Text>;\n }\n\n return null;\n };\n\n const onCloseModalHandler = () => {\n return props.onClose ? props.onClose() : null;\n };\n\n const editOnClick = () => {\n props.onClose?.();\n };\n\n const onEditPropertyClickedHandler = () => {\n props.onClose?.();\n };\n\n const totalPrice = basketContext.getTotalPrice();\n const totalPayNow = basketContext.getTotalPayNow();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n const depositFees = basketContext.getDepositQuoteFees();\n\n return (\n <SimpleModal\n open={props.isOpen}\n title={t(Translation.Misc.Summary)}\n onClose={onCloseModalHandler}\n mobileFooter={\n <div className=\"row align-items-center\">\n <div className=\"col-4\">\n <Text type={TextType.Body}>{t(Translation.Misc.Total)}</Text>\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{StringHelper.pluralWithDictAndCount(totalDays, Translation.Misc.Night, t)}</strong>\n </Text>\n </div>\n <div className=\"col-8 u-flex u-flex-direction-column align-items-end\">\n <Headline bold size=\"normal\" align={TextAlign.Right}>\n <Currency>{totalPrice}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n </div>\n }\n >\n <>\n <div className=\"container\">\n <GroupedCheckInOutTimes\n hotel={hotel}\n wrapperClassName=\"row u-border-bottom u-pad-top-bottom\"\n colClassName=\"col-6\"\n CheckInRender={() => (\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckIn)}</strong>\n </Text>\n )}\n CheckOutRender={() => (\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckOut)}</strong>\n </Text>\n )}\n LineRender={({ line }: { line: string }) => <Text type={TextType.Small}>{line}</Text>}\n />\n\n <div className=\"row u-border-bottom u-pad be-mobile-summary-select-date-header\" style={{ width: 'unset' }}>\n <div style={{ flex: 1 }}>\n <div className=\"u-flex u-flex-flex-start\">\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.startDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.startDate ? basketContext.startDate.format('MMM D') : t(Translation.Step.Date.Arrival)}\n </span>\n </Text>\n <span className=\"u-marg-left-right--light\">\n <Icon icon={IconType.ArrowRight2} size=\"18px\" color={Color.DarkGrey} />\n </span>\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.endDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.endDate ? basketContext.endDate.format('MMM D') : t(Translation.Step.Date.Departure)}\n </span>\n </Text>\n </div>\n <Text className=\"select-date-header-subtitle\">\n {basketContext.getNumberOfAdults(true)},&nbsp;\n {basketContext.getNumberOfChildren(true)},&nbsp;\n {basketContext.getNumberOfRooms(true)}\n </Text>\n </div>\n <div className=\"u-align-right\">\n <Link to={getStepRoom().getStepUrl()}>\n <BEButton onClick={editOnClick} size=\"tiny\">\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </Link>\n </div>\n </div>\n\n {selectedBasketRows && selectedBasketRows.length ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n\n return (\n <BESummaryRoomRow\n row={row}\n index={index}\n key={row.getID()}\n showImages={!!props.showImages}\n onEditPropertyClicked={onEditPropertyClickedHandler}\n />\n );\n })}\n\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.Step.Thanks.AddOnItems)}</strong>\n </Text>\n </div>\n\n {AddonDiscountCalculator.calculateIndividualDiscounts(addons, selectedBasketRows, basketContext.promoCodeDetails).map(\n ({ addon, remainingDiscount }) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(addon);\n };\n\n return (\n <BESummaryAddonRow\n row={addon}\n key={addon.getID()}\n onRemoveClick={onRemoveClickHandler}\n promoCodeDetails={basketContext.promoCodeDetails}\n remainingDiscount={remainingDiscount}\n />\n );\n }\n )}\n </>\n )}\n </>\n ) : (\n <div className=\"u-marg-bottom--heavy u-marg-top--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Body}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div style={{ height: '150px', position: 'relative' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {getAddressString(addressLine1 as string[])}\n {getAddressString(addressLine2 as string[])}\n </div>\n </div>\n )}\n\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n\n {sortedComponents}\n\n <div className=\"u-marg-top--heavy u-marg-bottom--heavy\">\n <BESummaryPrivacyPolicy />\n </div>\n {hotel && totalPayNow && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"row align-items-center\">\n {hotel?.rmsUseDepositQuote && (\n <>\n <div className=\"col-12 u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '8px' }} />\n </>\n )}\n <div className=\"col-12 u-marg-top--light u-marg-bottom--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small} bold>\n {t(Translation.Misc.PayNow)}\n </Text>\n <Text type={TextType.Small} bold>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n </SimpleModal>\n );\n}\n"]}
1
+ {"version":3,"file":"BEMobileSummaryModal.js","sourceRoot":"/","sources":["src/components/summary/BEMobileSummaryModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router-dom';\nimport { Translation } from 'translations/Translation';\n\nimport BEButton from '@/components/generic/BEButton';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport BEHotelLocationMapBlock from '@/components/generic/map/BEHotelLocationMapBlock';\nimport SimpleModal from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport { BESummaryLayoutOrder } from '@/components/summary/BESummary';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryPrivacyPolicy from '@/components/summary/BESummaryPrivacyPolicy';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketRow from '@/models/BasketRow';\nimport { Color } from '@/util/Color';\nimport getStepRoom from '@/util/GetStepRoom';\nimport StringHelper from '@/util/StringHelper';\nimport { TextAlign } from '@/util/TextAlignment';\nimport { AddonDiscountCalculator } from '@/utils/AddonDiscountCalculator';\n\nimport { GroupedCheckInOutTimes } from '../generic/GroupedCheckInOutTimes/GroupedCheckInOutTimes';\nimport Pill, { PillType } from '../generic/Pill';\nimport { TaxInclusionNotice } from '../generic/TaxInclusionNotice/TaxInclusionNotice';\n\nexport interface BEMobileSummaryModalProps {\n isOpen?: boolean;\n onClose?: () => void;\n showImages?: boolean;\n}\n\nexport default function BEMobileSummaryModal(props: BEMobileSummaryModalProps) {\n const ccx = useContext(CompanyContext);\n const basketContext = useContext(BasketContext);\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const [mobileLayout, setMobileLayout] = useState<OrderableReactList>({});\n\n useEffect(() => {\n // We do this hacky thing since Mobile summary & Desktop summary are almost identical, just blocks are presented differently\n const newLayout: typeof BESummaryLayoutOrder = { ...BESummaryLayoutOrder };\n newLayout.TransportDistanceBlock.component = (\n <div className=\"u-flex justify-content-center u-marg-top u-marg-bottom\">\n <div className=\"u-flex flex-row u-w-100\">\n <TransportDistanceFromHotelBlock vertical hotel={hotel} />\n </div>\n </div>\n );\n newLayout.PerksBlock.component = <BESummaryPerkBlock size=\"mobile\" />;\n\n setMobileLayout(newLayout);\n }, []);\n\n const { sortedComponents } = useElementSort(mobileLayout);\n\n const totalDays = basketContext.endDate ? basketContext.endDate.diff(basketContext.startDate, 'day') : 0;\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const getAddressString = (val: string[]) => {\n const line = val.filter((it) => !!it && it !== '0').join(', ');\n\n if (line) {\n return <Text type={TextType.Small}>{line}</Text>;\n }\n\n return null;\n };\n\n const onCloseModalHandler = () => {\n return props.onClose ? props.onClose() : null;\n };\n\n const editOnClick = () => {\n props.onClose?.();\n };\n\n const onEditPropertyClickedHandler = () => {\n props.onClose?.();\n };\n\n const totalPrice = basketContext.getTotalPrice();\n const totalPayNow = basketContext.getTotalPayNow();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n const depositFees = basketContext.getDepositQuoteFees();\n\n return (\n <SimpleModal\n open={props.isOpen}\n title={t(Translation.Misc.Summary)}\n onClose={onCloseModalHandler}\n mobileFooter={\n <div className=\"row align-items-center\">\n <div className=\"col-4\">\n <Text type={TextType.Body}>{t(Translation.Misc.Total)}</Text>\n <Text type={TextType.Small} color={Color.Accent}>\n <strong>{StringHelper.pluralWithDictAndCount(totalDays, Translation.Misc.Night, t)}</strong>\n </Text>\n </div>\n <div className=\"col-8 u-flex u-flex-direction-column align-items-end\">\n <Headline bold size=\"normal\" align={TextAlign.Right}>\n <Currency>{totalPrice}</Currency>\n </Headline>\n {hotel && ccx.currentCurrency !== hotel?.defaultCurrency && (\n <div className=\"u-align-right rs-summary-currency-display-enhancements--mobile\">\n <Pill type={PillType.Grey}>\n <Text type={TextType.Small} color={Color.Navy} align={TextAlign.Right} inline>\n <Currency toCurrencyCode={hotel.defaultCurrency}>{basketContext.getTotalPrice()}</Currency>\n </Text>\n </Pill>\n </div>\n )}\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n </div>\n }\n >\n <>\n <div className=\"container\">\n <GroupedCheckInOutTimes\n hotel={hotel}\n wrapperClassName=\"row u-border-bottom u-pad-top-bottom\"\n colClassName=\"col-6\"\n CheckInRender={() => (\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckIn)}</strong>\n </Text>\n )}\n CheckOutRender={() => (\n <Text type={TextType.Small} color={Color.Grey}>\n <strong>{t(Translation.Misc.CheckOut)}</strong>\n </Text>\n )}\n LineRender={({ line }: { line: string }) => <Text type={TextType.Small}>{line}</Text>}\n />\n\n <div className=\"row u-border-bottom u-pad be-mobile-summary-select-date-header\" style={{ width: 'unset' }}>\n <div style={{ flex: 1 }}>\n <div className=\"u-flex u-flex-flex-start\">\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.startDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.startDate ? basketContext.startDate.format('MMM D') : t(Translation.Step.Date.Arrival)}\n </span>\n </Text>\n <span className=\"u-marg-left-right--light\">\n <Icon icon={IconType.ArrowRight2} size=\"18px\" color={Color.DarkGrey} />\n </span>\n <Text className=\"select-date-header-title\">\n <span\n {...(basketContext.endDate\n ? {\n style: {\n color: Color.Accent,\n fontWeight: 'bold',\n },\n }\n : {})}\n >\n {basketContext.endDate ? basketContext.endDate.format('MMM D') : t(Translation.Step.Date.Departure)}\n </span>\n </Text>\n </div>\n <Text className=\"select-date-header-subtitle\">\n {basketContext.getNumberOfAdults(true)},&nbsp;\n {basketContext.getNumberOfChildren(true)},&nbsp;\n {basketContext.getNumberOfRooms(true)}\n </Text>\n </div>\n <div className=\"u-align-right\">\n <Link to={getStepRoom().getStepUrl()}>\n <BEButton onClick={editOnClick} size=\"tiny\">\n {t(Translation.Misc.Edit).toUpperCase()}\n </BEButton>\n </Link>\n </div>\n </div>\n\n {selectedBasketRows && selectedBasketRows.length ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n\n return (\n <BESummaryRoomRow\n row={row}\n index={index}\n key={row.getID()}\n showImages={!!props.showImages}\n onEditPropertyClicked={onEditPropertyClickedHandler}\n />\n );\n })}\n\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.Step.Thanks.AddOnItems)}</strong>\n </Text>\n </div>\n\n {AddonDiscountCalculator.calculateIndividualDiscounts(addons, selectedBasketRows, basketContext.promoCodeDetails).map(\n ({ addon, remainingDiscount }) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(addon);\n };\n\n return (\n <BESummaryAddonRow\n row={addon}\n key={addon.getID()}\n onRemoveClick={onRemoveClickHandler}\n promoCodeDetails={basketContext.promoCodeDetails}\n remainingDiscount={remainingDiscount}\n />\n );\n }\n )}\n </>\n )}\n </>\n ) : (\n <div className=\"u-marg-bottom--heavy u-marg-top--heavy\">\n <div className=\"u-marg-bottom--heavy\">\n <Text type={TextType.Body}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div className=\"rs-summary-hotel-location-map\" style={{ height: '150px', position: 'relative' }}>\n <BEHotelLocationMapBlock />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {getAddressString(addressLine1 as string[])}\n {getAddressString(addressLine2 as string[])}\n </div>\n </div>\n )}\n\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n\n {sortedComponents}\n\n <div className=\"u-marg-top--heavy u-marg-bottom--heavy\">\n <BESummaryPrivacyPolicy />\n </div>\n {hotel && totalPayNow && (\n <div className=\"u-marg-bottom--heavy\">\n <div className=\"row align-items-center\">\n {hotel?.rmsUseDepositQuote && (\n <>\n <div className=\"col-12 u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '8px' }} />\n </>\n )}\n <div className=\"col-12 u-marg-top--light u-marg-bottom--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small} bold>\n {t(Translation.Misc.PayNow)}\n </Text>\n <Text type={TextType.Small} bold>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n </SimpleModal>\n );\n}\n"]}
@@ -49,7 +49,7 @@ const Currency_1 = __importDefault(require("../generic/Currency"));
49
49
  const Headline_1 = __importDefault(require("../generic/Headline"));
50
50
  const Icon_1 = require("../generic/Icon/Icon");
51
51
  const LineBreak_1 = __importDefault(require("../generic/LineBreak"));
52
- const HotelLocationMap_1 = __importDefault(require("../generic/map/HotelLocationMap"));
52
+ const BEHotelLocationMapBlock_1 = __importDefault(require("../generic/map/BEHotelLocationMapBlock"));
53
53
  const Text_1 = __importStar(require("../generic/Text"));
54
54
  const ItemisedFeesListing_1 = require("../steps/common/ItemisedFeesListing/ItemisedFeesListing");
55
55
  const BESummaryAddonRow_1 = __importDefault(require("./BESummaryAddonRow"));
@@ -61,6 +61,7 @@ const Color_1 = require("../../util/Color");
61
61
  const TextAlignment_1 = require("../../util/TextAlignment");
62
62
  const AddonDiscountCalculator_1 = require("../../utils/AddonDiscountCalculator");
63
63
  const OverlayLoader_1 = require("../generic/loader/OverlayLoader");
64
+ const Pill_1 = __importStar(require("../generic/Pill"));
64
65
  const TaxInclusionNotice_1 = require("../generic/TaxInclusionNotice/TaxInclusionNotice");
65
66
  const TransportDistanceFromHotelBlockContainer = () => {
66
67
  var _a;
@@ -143,6 +144,10 @@ function BESummary(props) {
143
144
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Misc.Total)),
144
145
  react_1.default.createElement(Headline_1.default, { bold: true, size: "large" },
145
146
  react_1.default.createElement(Currency_1.default, null, basketContext.getTotalPrice()))),
147
+ hotel.defaultCurrency && ccx.currentCurrency !== (hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency) && (react_1.default.createElement("div", { className: "u-align-right rs-summary-currency-display-enhancements" },
148
+ react_1.default.createElement(Pill_1.default, { type: Pill_1.PillType.Grey },
149
+ react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Navy, align: TextAlignment_1.TextAlign.Right, inline: true },
150
+ react_1.default.createElement(Currency_1.default, { toCurrencyCode: hotel.defaultCurrency }, basketContext.getTotalPrice()))))),
146
151
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right },
147
152
  react_1.default.createElement(TaxInclusionNotice_1.TaxInclusionNotice, null))),
148
153
  react_1.default.createElement("div", { className: "u-marg-top--light u-flex" },
@@ -158,7 +163,15 @@ function BESummary(props) {
158
163
  react_1.default.createElement(Text_1.default, { color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small, align: TextAlignment_1.TextAlign.Right },
159
164
  react_1.default.createElement(TaxInclusionNotice_1.TaxInclusionNotice, null))));
160
165
  }
161
- }, [basketContext.currentBasketRows, basketContext.isLoadingPriceQuote, basketContext.getTotalPrice, hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote, (_e = engineContext.currentStep) === null || _e === void 0 ? void 0 : _e.getStepUrl()]);
166
+ }, [
167
+ basketContext.currentBasketRows,
168
+ basketContext.isLoadingPriceQuote,
169
+ basketContext.getTotalPrice,
170
+ hotel === null || hotel === void 0 ? void 0 : hotel.rmsUseDepositQuote,
171
+ (_e = engineContext.currentStep) === null || _e === void 0 ? void 0 : _e.getStepUrl(),
172
+ ccx.currentCurrency,
173
+ hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency,
174
+ ]);
162
175
  return (react_1.default.createElement("div", { className: "booking-engine-summary" },
163
176
  react_1.default.createElement("div", { className: "u-marg-bottom" },
164
177
  react_1.default.createElement(Headline_1.default, { bold: true }, t(Translation_1.Translation.Misc.Summary))),
@@ -190,8 +203,8 @@ function BESummary(props) {
190
203
  !!(itemisedFees === null || itemisedFees === void 0 ? void 0 : itemisedFees.length) && react_1.default.createElement(ItemisedFeesListing_1.ItemisedFeesListing, { fees: itemisedFees }))) : (react_1.default.createElement("div", { className: "u-marg-bottom rs-summary-hotel-info" },
191
204
  react_1.default.createElement("div", { className: "u-marg-bottom" },
192
205
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small }, t(Translation_1.Translation.Step.General.YourCartIsEmpty))),
193
- react_1.default.createElement("div", { style: { height: '150px', position: 'relative' } },
194
- react_1.default.createElement(HotelLocationMap_1.default, null)),
206
+ react_1.default.createElement("div", { className: "rs-summary-hotel-location-map", style: { height: '150px', position: 'relative' } },
207
+ react_1.default.createElement(BEHotelLocationMapBlock_1.default, null)),
195
208
  react_1.default.createElement("div", { className: "u-marg-top" },
196
209
  react_1.default.createElement("div", { className: "u-marg-bottom rs-summary-hotel-name" },
197
210
  react_1.default.createElement(Text_1.default, { bold: true }, hotel === null || hotel === void 0 ? void 0 : hotel.name)),
@@ -1 +1 @@
1
- {"version":3,"file":"BESummary.js","sourceRoot":"/","sources":["src/components/summary/BESummary.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,8BAuMC;AApQD,iDAAiH;AACjH,2CAAsF;AACtF,4DAAoC;AACpC,+CAAuD;AACvD,iDAA+C;AAC/C,0DAAuD;AAEvD,oEAA8D;AAC9D,6EAAqD;AACrD,6EAAqD;AACrD,yDAA0D;AAC1D,+EAAuD;AACvD,iGAAyE;AACzE,kEAA2D;AAC3D,2GAAwG;AACxG,+FAAuE;AACvE,gFAA6E;AAC7E,6FAAqE;AACrE,2HAAmG;AAEnG,uGAA+E;AAC/E,wCAAqC;AACrC,wDAAiD;AACjD,6EAA0E;AAE1E,mEAAgE;AAChE,yFAAsF;AAMtF,MAAM,wCAAwC,GAAO,GAAG,EAAE;;IACtD,MAAM,gBAAgB,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAE3D,OAAO,CACH,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC,yCAAyC,EAAE;YAC7D,uBAAuB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,kBAAkB,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC;SACpI,CAAC;QAEF,8BAAC,yCAA+B,IAAC,QAAQ,SAAG,CAC1C,CACT,CAAC;AACN,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAAuB;IACpD,sBAAsB,EAAE;QACpB,SAAS,EAAE,8BAAC,wCAAwC,OAAG;QACvD,QAAQ,EAAE,CAAC;KACd;IACD,UAAU,EAAE;QACR,SAAS,EAAE,CACP,uCAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAChF,8BAAC,uCAAkB,IAAC,IAAI,EAAC,SAAS,GAAG,CACnC,CACT;QACD,QAAQ,EAAE,EAAE;KACf;CACJ,CAAC;AAEF,SAAgB,SAAS,CAAC,KAAqB;;IAC3C,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,wBAAa,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IACvC,MAAM,gBAAgB,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAA,kBAAU,EAAC,gCAAqB,CAAC,CAAC;IAExD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,kBAAkB,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IAE3D,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC;IAE7C,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,MAAM,YAAY,GAAG,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,IAAI,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,UAAU,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,0CAAE,KAAK,CAAC,CAAC;IAEzE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAA,sBAAc,EAAC,4BAAoB,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,GAAY,EAAE,EAAE;QAC/C,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,CACH,8BAAC,cAAI,IAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,IAC/B,IAAI,CACF,CACV,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,QAAkB,EAAE,QAAkB,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC;IAEpD,MAAM,WAAW,GAAG,aAAa,CAAC,mBAAmB,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;IAErD,MAAM,YAAY,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;;QAC9B,MAAM,WAAW,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;QAEnD,IAAI,KAAK,IAAI,WAAW,IAAI,CAAA,MAAA,aAAa,CAAC,WAAW,0CAAE,UAAU,EAAE,MAAK,0BAAgB,CAAC,UAAU,EAAE,EAAE,CAAC;YACpG,MAAM,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC;YAEpD,OAAO,CACH,uCAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;gBAC7D,SAAS,IAAI,8BAAC,6BAAa,OAAG;gBAC9B,SAAS,GAAG,CAAC,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI;gBACvC,6EAA6E;gBAC7E,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,uCAAK,SAAS,EAAC,QAAQ;wBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;4BAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;wBAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;4BACtB,8BAAC,kBAAQ,QAAE,SAAS,CAAY,CAC7B,CACL,CACJ,CACT;gBACA,CAAC,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI;gBAC/E,mHAAmH;gBACnH,mFAAmF;gBACnF,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,uCAAK,SAAS,EAAC,QAAQ;wBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;4BAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;wBAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;4BACtB,8BAAC,kBAAQ,QAAE,WAAW,CAAY,CAC/B,CACL,CACJ,CACT;gBACD,uCAAK,SAAS,EAAC,mBAAmB;oBAC9B,uCAAK,SAAS,EAAC,QAAQ;wBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ;wBAC9D,8BAAC,kBAAQ,IAAC,IAAI,QAAC,IAAI,EAAC,OAAO;4BACvB,8BAAC,kBAAQ,QAAE,aAAa,CAAC,aAAa,EAAE,CAAY,CAC7C,CACT;oBAEN,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK;wBACrE,8BAAC,uCAAkB,OAAG,CACnB,CACL;gBACN,uCAAK,SAAS,EAAC,0BAA0B;oBACrC,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAQ;oBAC/D,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;wBACtB,8BAAC,kBAAQ,QAAE,WAAW,CAAY,CAC/B,CACL,CACJ,CACT,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,CACH,uCAAK,SAAS,EAAC,mBAAmB;gBAC9B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK,IAC7C,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CACvB;gBACP,8BAAC,kBAAQ,IAAC,IAAI,QAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,yBAAS,CAAC,KAAK;oBAC9C,8BAAC,kBAAQ,QAAE,aAAa,CAAC,aAAa,EAAE,CAAY,CAC7C;gBACX,8BAAC,cAAI,IAAC,KAAK,EAAE,aAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,yBAAS,CAAC,KAAK;oBACrE,8BAAC,uCAAkB,OAAG,CACnB,CACL,CACT,CAAC;QACN,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,aAAa,CAAC,mBAAmB,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,EAAE,MAAA,aAAa,CAAC,WAAW,0CAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAE1K,OAAO,CACH,uCAAK,SAAS,EAAC,wBAAwB;QACnC,uCAAK,SAAS,EAAC,eAAe;YAC1B,8BAAC,kBAAQ,IAAC,IAAI,UAAE,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAY,CACrD;QAEL,eAAe,CAAC,CAAC,CAAC,CACf;YACK,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAc,EAAE,KAAa,EAAE,EAAE;gBACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAAE,OAAO;gBAC3B,OAAO,8BAAC,0BAAgB,IAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,GAAI,CAAC;YAC1G,CAAC,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB;gBACI,8BAAC,mBAAS,IAAC,SAAS,QAAC,MAAM,SAAG;gBAE9B,uCAAK,SAAS,EAAC,YAAY;oBACvB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,aAAK,CAAC,QAAQ;wBAC7C,8CAAS,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAU,CACrD,CACL;gBAGL,iDAAuB,CAAC,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,GAAG,CACjH,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE;oBAC7B,MAAM,oBAAoB,GAAG,GAAG,EAAE;wBAC9B,OAAO,aAAa,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBACrD,CAAC,CAAC;oBAEF,OAAO,CACH,8BAAC,2BAAiB,IACd,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,EAClB,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,EAChD,iBAAiB,EAAE,iBAAiB,GACtC,CACL,CAAC;gBACN,CAAC,CACJ,CACF,CACN;YAEA,SAAS,GAAG,CAAC,IAAI,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,CACvC;gBACI,uCAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAI;gBAC7E,uCAAK,SAAS,EAAC,QAAQ;oBACnB,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;;wBAAI,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;oBAC1F,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK;wBACtB,8BAAC,kBAAQ,QAAE,SAAS,CAAY,CAC7B,CACL,CACP,CACN;YACA,CAAC,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAA,IAAI,8BAAC,yCAAmB,IAAC,IAAI,EAAE,YAAY,GAAI,CACvE,CACN,CAAC,CAAC,CAAC,CACA,uCAAK,SAAS,EAAC,qCAAqC;YAChD,uCAAK,SAAS,EAAC,eAAe;gBAC1B,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAQ,CAC9E;YACN,uCAAK,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;gBACjD,8BAAC,0BAAgB,OAAG,CAClB;YACN,uCAAK,SAAS,EAAC,YAAY;gBACvB,uCAAK,SAAS,EAAC,qCAAqC;oBAChD,8BAAC,cAAI,IAAC,IAAI,UAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAQ,CAC7B;gBACL,cAAc,CAAC,YAAwB,EAAE,YAAwB,CAAC;gBAClE,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,oBAAoB,MAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,IAAI,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAQ,CAC1G,CACJ,CACT;QACA,gBAAgB;QAChB,GAAG,CAAC,eAAe,MAAK,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,CAAA,IAAI,CAC/C,8BAAC,eAAK,IAAC,eAAe,QAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,iBAAS,CAAC,SAAS;YAClE,8BAAC,cAAI,IAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,IAAG,CAAC,CAAC,yBAAW,CAAC,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAQ,CACzF,CACX;QAED,8BAAC,mBAAS,IAAC,MAAM,SAAG;QAEnB,YAAY,CACX,CACT,CAAC;AACN,CAAC","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { FC, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport HotelLocationMap from '@/components/generic/map/HotelLocationMap';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketRow from '@/models/BasketRow';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\nimport { AddonDiscountCalculator } from '@/utils/AddonDiscountCalculator';\n\nimport { OverlayLoader } from '../generic/loader/OverlayLoader';\nimport { TaxInclusionNotice } from '../generic/TaxInclusionNotice/TaxInclusionNotice';\n\nexport interface BESummaryProps {\n showImages?: boolean;\n}\n\nconst TransportDistanceFromHotelBlockContainer: FC = () => {\n const overridesContext = useContext(HotelOverridesContext);\n\n return (\n <div\n className={classNames('u-flex u-flex-column u-marg-top u-w-100', {\n 'u-flex-justify-around': Object.entries(overridesContext?.transportDistances ?? {}).filter(([key, value]) => !!value).length <= 2,\n })}\n >\n <TransportDistanceFromHotelBlock vertical />\n </div>\n );\n};\n\nexport const BESummaryLayoutOrder: OrderableReactList = {\n TransportDistanceBlock: {\n component: <TransportDistanceFromHotelBlockContainer />,\n priority: 5,\n },\n PerksBlock: {\n component: (\n <div className=\"u-marg-bottom--light u-marg-top--heavy\" style={{ marginTop: '16px' }}>\n <BESummaryPerkBlock size=\"desktop\" />\n </div>\n ),\n priority: 10,\n },\n};\n\nexport function BESummary(props: BESummaryProps) {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const overridesContext = useContext(HotelOverridesContext);\n const engineContext = useContext(FullPageEngineContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const { sortedComponents } = useElementSort(BESummaryLayoutOrder);\n\n const toString = (val: string[]) => val.filter((it) => !!it && it !== '0').join(', ');\n\n const renderLine = (line?: string, key?: string) => {\n if (line) {\n return (\n <Text key={key} type={TextType.Small}>\n {line}\n </Text>\n );\n }\n return null;\n };\n\n const combineAddress = (rawLine1: string[], rawLine2: string[]) => {\n const line1 = toString(rawLine1);\n const line2 = toString(rawLine2);\n if (line1 && line1.length > 40) return renderLine([line1, line2].filter(Boolean).join(', '));\n return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];\n };\n\n const showBasketItems = !!selectedBasketRows.length;\n\n const depositFees = basketContext.getDepositQuoteFees();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n\n const totalSection = useMemo(() => {\n const totalPayNow = basketContext.getTotalPayNow();\n\n if (hotel && totalPayNow && engineContext.currentStep?.getStepUrl() === StepConfirmation.getStepUrl()) {\n const isLoading = basketContext.isLoadingPriceQuote;\n\n return (\n <div className=\"u-marg-top--light\" style={{ position: 'relative' }}>\n {isLoading && <OverlayLoader />}\n {totalFees > 0 && !itemisedFees?.length && (\n // We only show the total fees here if we don't have itemised fees available.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n {!!itemisedFees?.length && depositFees > 0 && hotel.addDepositFeeToBookingTotal && (\n // Because we're already showing itemised fees above the totals section, we only need to show the deposit fee here.\n // And only if the hotel is configured to add the deposit fee to the booking total.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.Total)}</Text>\n <Headline bold size=\"large\">\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n </div>\n\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.PayNow)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-marg-top--light\">\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>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n );\n }\n }, [basketContext.currentBasketRows, basketContext.isLoadingPriceQuote, basketContext.getTotalPrice, hotel?.rmsUseDepositQuote, engineContext.currentStep?.getStepUrl()]);\n\n return (\n <div className=\"booking-engine-summary\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Misc.Summary)}</Headline>\n </div>\n\n {showBasketItems ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n return <BESummaryRoomRow key={row.getID()} row={row} index={index} showImages={!!props.showImages} />;\n })}\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.Step.Thanks.AddOnItems)}</strong>\n </Text>\n </div>\n\n {/* Calculate individual addon discounts using AddonDiscountCalculator. */}\n {AddonDiscountCalculator.calculateIndividualDiscounts(addons, selectedBasketRows, basketContext.promoCodeDetails).map(\n ({ addon, remainingDiscount }) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(addon);\n };\n\n return (\n <BESummaryAddonRow\n row={addon}\n key={addon.getID()}\n onRemoveClick={onRemoveClickHandler}\n promoCodeDetails={basketContext.promoCodeDetails}\n remainingDiscount={remainingDiscount}\n />\n );\n }\n )}\n </>\n )}\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n </>\n ) : (\n <div className=\"u-marg-bottom rs-summary-hotel-info\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div style={{ height: '150px', position: 'relative' }}>\n <HotelLocationMap />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom rs-summary-hotel-name\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {combineAddress(addressLine1 as string[], addressLine2 as string[])}\n {overridesContext?.phoneNumberInSummary && hotel?.phone && <Text type={TextType.Small}>{hotel?.phone}</Text>}\n </div>\n </div>\n )}\n {sortedComponents}\n {ccx.currentCurrency !== hotel?.defaultCurrency && (\n <Alert iconAlignCenter icon={IconType.Money} type={AlertType.LightGray}>\n <Text type={TextType.Small}>{t(Translation.Step.General.AlternateCurrencyInformation)}</Text>\n </Alert>\n )}\n\n <LineBreak darker />\n\n {totalSection}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"BESummary.js","sourceRoot":"/","sources":["src/components/summary/BESummary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, CompanyContext, FullPageEngineContext, HotelOverridesContext } from '@frontend/contexts';\nimport { OrderableReactList, useCurrentHotel, useElementSort } from '@frontend/hooks';\nimport classNames from 'classnames';\nimport React, { FC, useContext, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport Currency from '@/components/generic/Currency';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport LineBreak from '@/components/generic/LineBreak';\nimport BEHotelLocationMapBlock from '@/components/generic/map/BEHotelLocationMapBlock';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { ItemisedFeesListing } from '@/components/steps/common/ItemisedFeesListing/ItemisedFeesListing';\nimport BESummaryAddonRow from '@/components/summary/BESummaryAddonRow';\nimport { BESummaryPerkBlock } from '@/components/summary/BESummaryPerkBlock';\nimport BESummaryRoomRow from '@/components/summary/BESummaryRoomRow';\nimport TransportDistanceFromHotelBlock from '@/components/summary/TransportDistanceFromHotelBlock';\nimport BasketRow from '@/models/BasketRow';\nimport StepConfirmation from '@/pages/steps/StepConfirmation/StepConfirmation';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\nimport { AddonDiscountCalculator } from '@/utils/AddonDiscountCalculator';\n\nimport { OverlayLoader } from '../generic/loader/OverlayLoader';\nimport Pill, { PillType } from '../generic/Pill';\nimport { TaxInclusionNotice } from '../generic/TaxInclusionNotice/TaxInclusionNotice';\n\nexport interface BESummaryProps {\n showImages?: boolean;\n}\n\nconst TransportDistanceFromHotelBlockContainer: FC = () => {\n const overridesContext = useContext(HotelOverridesContext);\n\n return (\n <div\n className={classNames('u-flex u-flex-column u-marg-top u-w-100', {\n 'u-flex-justify-around': Object.entries(overridesContext?.transportDistances ?? {}).filter(([key, value]) => !!value).length <= 2,\n })}\n >\n <TransportDistanceFromHotelBlock vertical />\n </div>\n );\n};\n\nexport const BESummaryLayoutOrder: OrderableReactList = {\n TransportDistanceBlock: {\n component: <TransportDistanceFromHotelBlockContainer />,\n priority: 5,\n },\n PerksBlock: {\n component: (\n <div className=\"u-marg-bottom--light u-marg-top--heavy\" style={{ marginTop: '16px' }}>\n <BESummaryPerkBlock size=\"desktop\" />\n </div>\n ),\n priority: 10,\n },\n};\n\nexport function BESummary(props: BESummaryProps) {\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n const overridesContext = useContext(HotelOverridesContext);\n const engineContext = useContext(FullPageEngineContext);\n\n const { hotel } = useCurrentHotel();\n\n const selectedBasketRows = basketContext.getAllValidRows();\n\n const addons = basketContext.basketAddonRows;\n\n const { t } = useTranslation();\n\n const addressLine1 = [hotel?.address?.line1, hotel?.address?.city];\n const addressLine2 = [hotel?.address?.postalCode, hotel?.address?.state];\n\n const { sortedComponents } = useElementSort(BESummaryLayoutOrder);\n\n const toString = (val: string[]) => val.filter((it) => !!it && it !== '0').join(', ');\n\n const renderLine = (line?: string, key?: string) => {\n if (line) {\n return (\n <Text key={key} type={TextType.Small}>\n {line}\n </Text>\n );\n }\n return null;\n };\n\n const combineAddress = (rawLine1: string[], rawLine2: string[]) => {\n const line1 = toString(rawLine1);\n const line2 = toString(rawLine2);\n if (line1 && line1.length > 40) return renderLine([line1, line2].filter(Boolean).join(', '));\n return [renderLine(line1, 'addressLine1'), renderLine(line2, 'addressLine2')];\n };\n\n const showBasketItems = !!selectedBasketRows.length;\n\n const depositFees = basketContext.getDepositQuoteFees();\n const totalFees = basketContext.getTotalFees();\n const itemisedFees = basketContext.getItemisedFees();\n\n const totalSection = useMemo(() => {\n const totalPayNow = basketContext.getTotalPayNow();\n\n if (hotel && totalPayNow && engineContext.currentStep?.getStepUrl() === StepConfirmation.getStepUrl()) {\n const isLoading = basketContext.isLoadingPriceQuote;\n\n return (\n <div className=\"u-marg-top--light\" style={{ position: 'relative' }}>\n {isLoading && <OverlayLoader />}\n {totalFees > 0 && !itemisedFees?.length && (\n // We only show the total fees here if we don't have itemised fees available.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n {!!itemisedFees?.length && depositFees > 0 && hotel.addDepositFeeToBookingTotal && (\n // Because we're already showing itemised fees above the totals section, we only need to show the deposit fee here.\n // And only if the hotel is configured to add the deposit fee to the booking total.\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{depositFees}</Currency>\n </Text>\n </div>\n </div>\n )}\n <div className=\"u-marg-top--light\">\n <div className=\"u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.Total)}</Text>\n <Headline bold size=\"large\">\n <Currency>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n </div>\n\n {hotel.defaultCurrency && ccx.currentCurrency !== hotel?.defaultCurrency && (\n <div className=\"u-align-right rs-summary-currency-display-enhancements\">\n <Pill type={PillType.Grey}>\n <Text type={TextType.Small} color={Color.Navy} align={TextAlign.Right} inline>\n <Currency toCurrencyCode={hotel.defaultCurrency}>{basketContext.getTotalPrice()}</Currency>\n </Text>\n </Pill>\n </div>\n )}\n\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n <div className=\"u-marg-top--light u-flex\">\n <Text type={TextType.Small}>{t(Translation.Misc.PayNow)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalPayNow}</Currency>\n </Text>\n </div>\n </div>\n );\n } else {\n return (\n <div className=\"u-marg-top--light\">\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>{basketContext.getTotalPrice()}</Currency>\n </Headline>\n <Text color={Color.DarkGrey} type={TextType.Small} align={TextAlign.Right}>\n <TaxInclusionNotice />\n </Text>\n </div>\n );\n }\n }, [\n basketContext.currentBasketRows,\n basketContext.isLoadingPriceQuote,\n basketContext.getTotalPrice,\n hotel?.rmsUseDepositQuote,\n engineContext.currentStep?.getStepUrl(),\n ccx.currentCurrency,\n hotel?.defaultCurrency,\n ]);\n\n return (\n <div className=\"booking-engine-summary\">\n <div className=\"u-marg-bottom\">\n <Headline bold>{t(Translation.Misc.Summary)}</Headline>\n </div>\n\n {showBasketItems ? (\n <>\n {selectedBasketRows.map((row: BasketRow, index: number) => {\n if (!row.isValid()) return;\n return <BESummaryRoomRow key={row.getID()} row={row} index={index} showImages={!!props.showImages} />;\n })}\n {addons.length > 0 && (\n <>\n <LineBreak noMargins darker />\n\n <div className=\"u-marg-top\">\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <strong>{t(Translation.Step.Thanks.AddOnItems)}</strong>\n </Text>\n </div>\n\n {/* Calculate individual addon discounts using AddonDiscountCalculator. */}\n {AddonDiscountCalculator.calculateIndividualDiscounts(addons, selectedBasketRows, basketContext.promoCodeDetails).map(\n ({ addon, remainingDiscount }) => {\n const onRemoveClickHandler = () => {\n return basketContext.removeBasketAddonRow(addon);\n };\n\n return (\n <BESummaryAddonRow\n row={addon}\n key={addon.getID()}\n onRemoveClick={onRemoveClickHandler}\n promoCodeDetails={basketContext.promoCodeDetails}\n remainingDiscount={remainingDiscount}\n />\n );\n }\n )}\n </>\n )}\n {/* Fees */}\n {totalFees > 0 && !itemisedFees?.length && (\n <>\n <div className=\"line-break\" style={{ marginTop: 0, marginBottom: '24px' }} />\n <div className=\"u-flex\">\n <Text type={TextType.Small}> {t(Translation.Step.Room.Summary.CreditCardSurcharge)}</Text>\n <Text type={TextType.Small}>\n <Currency>{totalFees}</Currency>\n </Text>\n </div>\n </>\n )}\n {!!itemisedFees?.length && <ItemisedFeesListing fees={itemisedFees} />}\n </>\n ) : (\n <div className=\"u-marg-bottom rs-summary-hotel-info\">\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small}>{t(Translation.Step.General.YourCartIsEmpty)}</Text>\n </div>\n <div className=\"rs-summary-hotel-location-map\" style={{ height: '150px', position: 'relative' }}>\n <BEHotelLocationMapBlock />\n </div>\n <div className=\"u-marg-top\">\n <div className=\"u-marg-bottom rs-summary-hotel-name\">\n <Text bold>{hotel?.name}</Text>\n </div>\n {combineAddress(addressLine1 as string[], addressLine2 as string[])}\n {overridesContext?.phoneNumberInSummary && hotel?.phone && <Text type={TextType.Small}>{hotel?.phone}</Text>}\n </div>\n </div>\n )}\n {sortedComponents}\n {ccx.currentCurrency !== hotel?.defaultCurrency && (\n <Alert iconAlignCenter icon={IconType.Money} type={AlertType.LightGray}>\n <Text type={TextType.Small}>{t(Translation.Step.General.AlternateCurrencyInformation)}</Text>\n </Alert>\n )}\n\n <LineBreak darker />\n\n {totalSection}\n </div>\n );\n}\n"]}
@@ -82,6 +82,7 @@ const Debounce_1 = require("../../util/Debounce");
82
82
  const GetStepRoom_1 = __importDefault(require("../../util/GetStepRoom"));
83
83
  const StepManager_1 = __importDefault(require("../../util/StepManager"));
84
84
  const StringHelper_1 = __importDefault(require("../../util/StringHelper"));
85
+ const SyncBasketAddonRowQuantities_1 = require("../../util/SyncBasketAddonRowQuantities");
85
86
  const AddonDiscountCalculator_1 = require("../../utils/AddonDiscountCalculator");
86
87
  function BasketContextWrapper(props) {
87
88
  var _a, _b, _c, _d;
@@ -222,6 +223,28 @@ function BasketContextWrapper(props) {
222
223
  onlyBasketRow.setEndDate(endDate);
223
224
  workingContext.updateBasketRow(onlyBasketRow, false);
224
225
  }
226
+ // Handle addon rows when dates change
227
+ if (basketAddonRows.length > 0) {
228
+ const newAddonRows = basketAddonRows.filter((addonRow) => {
229
+ const addon = addonRow.getAddon();
230
+ if (!addon)
231
+ return false;
232
+ // Check if addon has any available date within [startDate, endDate)
233
+ const hasAvailabilityInRange = Object.keys(addon.availability).some((date) => {
234
+ const addonDate = (0, dayjs_1.default)(date, 'YYYY-MM-DD');
235
+ return !addonDate.isBefore(startDate, 'day') && addonDate.isBefore(endDate, 'day');
236
+ });
237
+ if (!hasAvailabilityInRange) {
238
+ return false; // Remove addon — not available in new date range
239
+ }
240
+ // Update addon dates so per-night pricing uses the correct night count
241
+ addon.checkInDate = startDate;
242
+ addon.checkOutDate = endDate;
243
+ addon.nights = endDate.diff(startDate, 'day');
244
+ return true;
245
+ });
246
+ setBasketAddonRows([...newAddonRows]);
247
+ }
225
248
  }, 500), [startDate, endDate]);
226
249
  (0, react_1.useEffect)(() => {
227
250
  debounceUseEffect();
@@ -255,6 +278,22 @@ function BasketContextWrapper(props) {
255
278
  (0, react_1.useEffect)(() => {
256
279
  updateBasketFeeRows();
257
280
  }, [currentBasketRows, basketAddonRows]);
281
+ (0, react_1.useEffect)(() => {
282
+ if (basketAddonRows.length === 0)
283
+ return;
284
+ const basketRow = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows[0];
285
+ if (!basketRow)
286
+ return;
287
+ let changed = false;
288
+ basketAddonRows.forEach((addonRow) => {
289
+ if ((0, SyncBasketAddonRowQuantities_1.syncBasketAddonRowQuantities)(addonRow, basketRow)) {
290
+ changed = true;
291
+ }
292
+ });
293
+ if (changed) {
294
+ setBasketAddonRows([...basketAddonRows]);
295
+ }
296
+ }, [currentBasketRows]);
258
297
  const checkAndApplyMemberOnlyPromo = (row, skipUpdate = false) => {
259
298
  if (row && (hotel === null || hotel === void 0 ? void 0 : hotel.memberOnlyPromoCode) && signedInUser && !row.getPromoCode()) {
260
299
  if (isExternalMemberHotel) {
@@ -1063,28 +1102,9 @@ function BasketContextWrapper(props) {
1063
1102
  addonRow.setChildQuantity((_c = quantities.child) !== null && _c !== void 0 ? _c : 0);
1064
1103
  addonRow.setSelectedDate(selectedDate);
1065
1104
  addonRow.setSelectedTime(addon.availability[selectedDate].selectorTimes ? selectedTime : undefined);
1066
- // TODO: Quick hack to fix Synxis Basic Addon quantities.
1067
- if (addon.pricingType === core_1.EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {
1068
- // TODO: Because all addons only apply to first room, we can select the 0th from the list.
1069
- const basketRow = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows[0];
1070
- if (basketRow) {
1071
- addonRow.setAdultQuantity(basketRow.getAdults());
1072
- }
1073
- }
1074
- if (addon.pricingType === core_1.EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {
1075
- // TODO: Because all addons only apply to first room, we can select the 0th from the list.
1076
- const basketRow = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows[0];
1077
- if (basketRow) {
1078
- addonRow.setChildQuantity(basketRow.getChildren());
1079
- }
1080
- }
1081
- // TODO: More hackyness to handle RMS Per Person Fee requirements
1082
- if (addon.pricingType === core_1.EAddonPricingType.PER_ALL_PERSONS || addon.pricingType === core_1.EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT) {
1083
- const basketRow = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows[0];
1084
- if (basketRow) {
1085
- addonRow.setAdultQuantity(basketRow.getAdults());
1086
- addonRow.setChildQuantity(basketRow.getChildren());
1087
- }
1105
+ const basketRow = currentBasketRows === null || currentBasketRows === void 0 ? void 0 : currentBasketRows[0];
1106
+ if (basketRow) {
1107
+ (0, SyncBasketAddonRowQuantities_1.syncBasketAddonRowQuantities)(addonRow, basketRow);
1088
1108
  }
1089
1109
  setBasketAddonRows([...basketAddonRows]);
1090
1110
  },