@roomstay/frontend 2.7.0 → 2.9.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 (165) 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/449.bundle.js +1 -1
  6. package/dist/537.bundle.js +1 -1
  7. package/dist/596.bundle.js +1 -0
  8. package/dist/625.bundle.js +1 -1
  9. package/dist/686.bundle.js +1 -1
  10. package/dist/836.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 +21 -4
  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 +13 -5
  20. package/dist/src/components/generic/Alert.js +7 -1
  21. package/dist/src/components/generic/Alert.js.map +1 -1
  22. package/dist/src/components/generic/AuxiliaryFilterControls/AuxiliaryFilterControls.d.ts +11 -0
  23. package/dist/src/components/generic/AuxiliaryFilterControls/AuxiliaryFilterControls.js +24 -0
  24. package/dist/src/components/generic/AuxiliaryFilterControls/AuxiliaryFilterControls.js.map +1 -0
  25. package/dist/src/components/generic/Currency.js +5 -30
  26. package/dist/src/components/generic/Currency.js.map +1 -1
  27. package/dist/src/components/generic/RecentSearchesCard.js +4 -2
  28. package/dist/src/components/generic/RecentSearchesCard.js.map +1 -1
  29. package/dist/src/components/generic/date/DatePicker.d.ts +5 -0
  30. package/dist/src/components/generic/date/DatePicker.js +2 -1
  31. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  32. package/dist/src/components/generic/map/BEHotelLocationMapBlock.d.ts +4 -0
  33. package/dist/src/components/generic/map/{HotelLocationMap.js → BEHotelLocationMapBlock.js} +10 -3
  34. package/dist/src/components/generic/map/BEHotelLocationMapBlock.js.map +1 -0
  35. package/dist/src/components/reservation/ReservationItem.js +3 -2
  36. package/dist/src/components/reservation/ReservationItem.js.map +1 -1
  37. package/dist/src/components/steps/DaysSelectedInformer.js +6 -4
  38. package/dist/src/components/steps/DaysSelectedInformer.js.map +1 -1
  39. package/dist/src/components/steps/confirmation/RoomContactDetails.js +32 -24
  40. package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
  41. package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js +8 -6
  42. package/dist/src/components/steps/confirmation/StepConfirmationCountrySelector.js.map +1 -1
  43. package/dist/src/components/steps/confirmation/StepConfirmationForm.js +16 -0
  44. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  45. package/dist/src/components/steps/date/BEPeoplePickerBlock.d.ts +4 -0
  46. package/dist/src/components/steps/date/{PeoplePicker.js → BEPeoplePickerBlock.js} +10 -3
  47. package/dist/src/components/steps/date/BEPeoplePickerBlock.js.map +1 -0
  48. package/dist/src/components/steps/date/StepOneDateRange.js +5 -3
  49. package/dist/src/components/steps/date/StepOneDateRange.js.map +1 -1
  50. package/dist/src/components/steps/date/StepOneDateRangePicker.d.ts +2 -1
  51. package/dist/src/components/steps/date/StepOneDateRangePicker.js +3 -3
  52. package/dist/src/components/steps/date/StepOneDateRangePicker.js.map +1 -1
  53. package/dist/src/components/steps/hotel/HotelCard.js +1 -7
  54. package/dist/src/components/steps/hotel/HotelCard.js.map +1 -1
  55. package/dist/src/components/steps/hotel/HotelCardModal.js +1 -1
  56. package/dist/src/components/steps/hotel/HotelCardModal.js.map +1 -1
  57. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +65 -59
  58. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
  59. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +4 -3
  60. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
  61. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +4 -3
  62. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  63. package/dist/src/components/steps/room/roomDetails/AuxiliaryPickerModal/AuxiliaryPickerModal.d.ts +17 -0
  64. package/dist/src/components/steps/room/roomDetails/AuxiliaryPickerModal/AuxiliaryPickerModal.js +117 -0
  65. package/dist/src/components/steps/room/roomDetails/AuxiliaryPickerModal/AuxiliaryPickerModal.js.map +1 -0
  66. package/dist/src/components/steps/room/roomDetails/RoomDetails.d.ts +0 -1
  67. package/dist/src/components/steps/room/roomDetails/RoomDetails.js +9 -2
  68. package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
  69. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.d.ts +0 -1
  70. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +1 -4
  71. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
  72. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.d.ts +0 -1
  73. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js +2 -11
  74. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.js.map +1 -1
  75. package/dist/src/components/summary/BEMobileSummary.js +3 -2
  76. package/dist/src/components/summary/BEMobileSummary.js.map +1 -1
  77. package/dist/src/components/summary/BEMobileSummaryModal.js +12 -5
  78. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  79. package/dist/src/components/summary/BESummary.js +17 -4
  80. package/dist/src/components/summary/BESummary.js.map +1 -1
  81. package/dist/src/components/summary/BESummaryAddonRow.js +2 -1
  82. package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
  83. package/dist/src/components/summary/BESummaryRoomRow.js +3 -2
  84. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  85. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +2 -1
  86. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  87. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +9 -4
  88. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  89. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +14 -5
  90. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
  91. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
  92. package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -1
  93. package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
  94. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +39 -25
  95. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  96. package/dist/src/contexts/HotelOverridesContext.js +4 -0
  97. package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
  98. package/dist/src/hooks/AutoFocusOnSelect.d.ts +11 -1
  99. package/dist/src/hooks/AutoFocusOnSelect.js +7 -7
  100. package/dist/src/hooks/AutoFocusOnSelect.js.map +1 -1
  101. package/dist/src/hooks/Currency.d.ts +25 -1
  102. package/dist/src/hooks/Currency.js +50 -5
  103. package/dist/src/hooks/Currency.js.map +1 -1
  104. package/dist/src/hooks/index.d.ts +1 -0
  105. package/dist/src/hooks/index.js +1 -0
  106. package/dist/src/hooks/index.js.map +1 -1
  107. package/dist/src/hooks/useAreaAvailability.d.ts +10 -1
  108. package/dist/src/hooks/useAreaAvailability.js +67 -30
  109. package/dist/src/hooks/useAreaAvailability.js.map +1 -1
  110. package/dist/src/hooks/useAuxiliaryFilters.d.ts +8 -0
  111. package/dist/src/hooks/useAuxiliaryFilters.js +55 -0
  112. package/dist/src/hooks/useAuxiliaryFilters.js.map +1 -0
  113. package/dist/src/hooks/useGuestDateFormat.d.ts +11 -0
  114. package/dist/src/hooks/useGuestDateFormat.js +22 -0
  115. package/dist/src/hooks/useGuestDateFormat.js.map +1 -0
  116. package/dist/src/index.d.ts +9 -9
  117. package/dist/src/index.js +17 -10
  118. package/dist/src/index.js.map +1 -1
  119. package/dist/src/models/Api/HotelDTO.d.ts +1 -0
  120. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  121. package/dist/src/models/Api/HotelOverrideDTO.d.ts +1 -0
  122. package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
  123. package/dist/src/models/BasketRow.d.ts +6 -11
  124. package/dist/src/models/BasketRow.js +4 -4
  125. package/dist/src/models/BasketRow.js.map +1 -1
  126. package/dist/src/pages/findReservation/ReservationRow.js +3 -2
  127. package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
  128. package/dist/src/pages/findReservation/ReservationRowModal.js +5 -4
  129. package/dist/src/pages/findReservation/ReservationRowModal.js.map +1 -1
  130. package/dist/src/pages/hotel/HotelInfo.js +3 -3
  131. package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
  132. package/dist/src/pages/steps/StepDate/StepDateComponent.js +15 -9
  133. package/dist/src/pages/steps/StepDate/StepDateComponent.js.map +1 -1
  134. package/dist/src/pages/steps/StepHotel/StepHotelComponent.js +1 -3
  135. package/dist/src/pages/steps/StepHotel/StepHotelComponent.js.map +1 -1
  136. package/dist/src/pages/steps/StepThanks/StepThanksComponent.d.ts +2 -0
  137. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +8 -1
  138. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
  139. package/dist/src/providers/CurrencyProvider.js +1 -1
  140. package/dist/src/providers/CurrencyProvider.js.map +1 -1
  141. package/dist/src/providers/FilterProvider.d.ts +4 -0
  142. package/dist/src/providers/FilterProvider.js +12 -0
  143. package/dist/src/providers/FilterProvider.js.map +1 -1
  144. package/dist/src/providers/RoomstayThemeEngine.js +2 -0
  145. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  146. package/dist/src/providers/feature/StepDateNextButtonAboveDatepickerFeature.d.ts +13 -1
  147. package/dist/src/providers/feature/StepDateNextButtonAboveDatepickerFeature.js +20 -0
  148. package/dist/src/providers/feature/StepDateNextButtonAboveDatepickerFeature.js.map +1 -1
  149. package/dist/src/translations/Translation.d.ts +13 -0
  150. package/dist/src/translations/Translation.js +13 -0
  151. package/dist/src/translations/Translation.js.map +1 -1
  152. package/dist/src/translations/languages/en-gb.js +13 -0
  153. package/dist/src/translations/languages/en-gb.js.map +1 -1
  154. package/dist/src/util/CurrencyHelper.js +1 -1
  155. package/dist/src/util/CurrencyHelper.js.map +1 -1
  156. package/dist/test.bundle.js +1 -1
  157. package/dist/tests/offline/entry/config/hotelSpecDefault.js +2 -2
  158. package/dist/tests/offline/entry/config/hotelSpecDefault.js.map +1 -1
  159. package/dist/vendors.bundle.js +1 -1
  160. package/package.json +2 -2
  161. package/dist/422.bundle.js +0 -1
  162. package/dist/src/components/generic/map/HotelLocationMap.d.ts +0 -2
  163. package/dist/src/components/generic/map/HotelLocationMap.js.map +0 -1
  164. package/dist/src/components/steps/date/PeoplePicker.d.ts +0 -2
  165. package/dist/src/components/steps/date/PeoplePicker.js.map +0 -1
@@ -180,7 +180,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
180
180
  yield beContext.storageProvider.setUser(undefined);
181
181
  setSignedInUser(null);
182
182
  });
183
- const getHotel = (0, react_1.useCallback)((hotelId) => new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
183
+ const getHotel = (0, react_1.useCallback)((hotelId, preloadedHotelDTO) => new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
184
184
  const currentHotelVersion = getHotelFromID(hotelId);
185
185
  const newHotel = Object.assign(Object.assign({}, currentHotelVersion), {
186
186
  // Fixed: Specified Hotel not found
@@ -188,7 +188,7 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
188
188
  hotelID: hotelId });
189
189
  let details;
190
190
  try {
191
- details = yield BookingAPI_1.default.Hotel.fetchData(currentLanguage, newHotel);
191
+ details = preloadedHotelDTO ? preloadedHotelDTO : yield BookingAPI_1.default.Hotel.fetchData(currentLanguage, newHotel);
192
192
  }
193
193
  catch (ex) {
194
194
  if (ex instanceof APIError_1.APIError) {
@@ -400,6 +400,19 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
400
400
  }, [company, selectedHotel]);
401
401
  // TODO: Add Hotel Details fetch
402
402
  // TODO: re-do fetch on language change
403
+ const updateLowestPriceByTargetHotel = (targetHotel, value, isLoading) => {
404
+ updateHotel(targetHotel, (hotel) => (Object.assign(Object.assign({}, hotel), { lowestPrice: { value, isLoading } })));
405
+ };
406
+ const getLowestPrice = (rooms) => {
407
+ if (!(rooms === null || rooms === void 0 ? void 0 : rooms.length))
408
+ return 0;
409
+ const lowestDisplayPrice = rooms.reduce((min, room) => {
410
+ // Get the lowest raw price for each room (see RoomDetails.tsx for reference)
411
+ const lowestRawPrice = room.getLowestPrice(false, true);
412
+ return lowestRawPrice != null && lowestRawPrice > 0 ? Math.min(min, lowestRawPrice) : min;
413
+ }, Infinity);
414
+ return isFinite(lowestDisplayPrice) ? lowestDisplayPrice : 0;
415
+ };
403
416
  const workingContext = {
404
417
  currentLanguage,
405
418
  currentCurrency,
@@ -414,31 +427,32 @@ const CompanyContextWrapper = ({ configCompany: company, children }) => {
414
427
  hotels,
415
428
  signedInUser,
416
429
  selectedHotelID: selectedHotelID,
417
- updateLowestPricePerNight: (hotel, row) => {
418
- const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');
419
- if (targetHotel && row) {
420
- const updatePrice = (value, isLoading) => {
421
- updateHotel(targetHotel, (hotel) => (Object.assign(Object.assign({}, hotel), { lowestPrice: { value, isLoading } })));
422
- };
430
+ updateLowestPricePerNightByHotelIds: (hotelIds, row) => __awaiter(void 0, void 0, void 0, function* () {
431
+ hotelIds.forEach((hotelId) => {
432
+ const targetHotel = getHotelFromID(hotelId);
433
+ updateLowestPriceByTargetHotel(targetHotel, 0, true);
434
+ });
435
+ try {
423
436
  const filters = Object.values(beContext.currentFilters).filter(Boolean);
424
- // Start loading with price = 0
425
- updatePrice(0, true);
426
- FilterProvider_1.default.getRoomList(row, filters, targetHotel.hotelID, signedInUser === null || signedInUser === void 0 ? void 0 : signedInUser.memberNumber)
427
- .then((availableRooms) => {
428
- var _a;
429
- const lowest = (_a = availableRooms === null || availableRooms === void 0 ? void 0 : availableRooms.reduce((min, room) => {
430
- const price = room.getLowestPrice();
431
- // Skip null, undefined, and 0 prices. Return the lowest positive price.
432
- return price != null && price > 0 ? Math.min(min, price) : min;
433
- }, Infinity)) !== null && _a !== void 0 ? _a : Infinity;
434
- const finalLowest = isFinite(lowest) ? lowest : 0;
435
- updatePrice(finalLowest, false);
436
- })
437
- .catch(() => {
438
- updatePrice(0, false);
439
- });
437
+ const data = yield FilterProvider_1.default.getRoomListByHotelIds(row, filters, hotelIds, signedInUser === null || signedInUser === void 0 ? void 0 : signedInUser.memberNumber);
438
+ for (const [hotelId, hotelData] of Object.entries(data)) {
439
+ const { hotel: latestHotelDTO, rooms } = hotelData;
440
+ try {
441
+ yield getHotel(hotelId, latestHotelDTO);
442
+ const targetHotel = getHotelFromID(hotelId);
443
+ const finalLowest = getLowestPrice(rooms);
444
+ updateLowestPriceByTargetHotel(targetHotel, finalLowest, false);
445
+ }
446
+ catch (_a) {
447
+ const targetHotel = getHotelFromID(hotelId);
448
+ updateLowestPriceByTargetHotel(targetHotel, 0, false);
449
+ }
450
+ }
440
451
  }
441
- },
452
+ catch (error) {
453
+ console.error(error);
454
+ }
455
+ }),
442
456
  changeHotel: (hotel) => {
443
457
  if (hotel === null) {
444
458
  setSelectedHotelID(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"CompanyContextWrapper.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, CompanyContextType, SignInUser } from '@frontend/contexts';\nimport { InitialHotelDetailsEvent, SelectedHotelChangeEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { EMembershipProvider, IHotelColorScheme } from '@roomstay/core';\nimport React, { ReactChild, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport { MemberPortalWidget } from '@/engines/MemberPortalWidget/MemberPortalWidget';\nimport { APIError } from '@/errors/APIError';\nimport { MemberOnlyFenceSignUp } from '@/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\nimport { big4MemberHandler } from '@/handlers/membership/Big4MemberHandler';\nimport { gdayMemberHandler } from '@/handlers/membership/GdayMemberHandler';\nimport { memberJungleMemberHandler } from '@/handlers/membership/MemberJungleMemberHandler';\nimport { racMemberHandler } from '@/handlers/membership/RACMemberHandler';\nimport { salesforceMemberHandler } from '@/handlers/membership/SalesforceMemberHandler';\nimport { top10MemberHandler } from '@/handlers/membership/Top10MemberHandler';\nimport { HotelDTO } from '@/models/Api/HotelDTO';\nimport BasketRow from '@/models/BasketRow';\nimport type { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport type { ConfigHotel, Hotel, InitialHotelDetailsEventPayload } from '@/models/Client/Hotel/Hotel';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport Filter from '@/models/Room/Filters/Filter';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport CurrencyProvider from '@/providers/CurrencyProvider';\nimport FilterProvider from '@/providers/FilterProvider';\nimport { Language } from '@/providers/LanguageProvider';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\nimport AnalyticsEvents from '@/util/AnalyticsEvents/AnalyticsEvents';\nimport * as currencyHelper from '@/util/CurrencyHelper';\nimport DataLayer from '@/util/DataLayer';\nimport StepManager from '@/util/StepManager';\nimport TimeHelper from '@/util/TimeHelper';\n\ninterface CompanyContextWrapperProps {\n children: ReactChild;\n configCompany: ConfigCompany;\n}\n\nexport const CompanyContextWrapper = ({ configCompany: company, children }: CompanyContextWrapperProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const getSelectedHotel = () => {\n for (const hotel of hotels) {\n if (selectedHotelID + '' === hotel.hotelID + '') {\n return hotel;\n }\n }\n };\n\n const [companyId, setCompanyId] = useState(company.companyId);\n const [name, setName] = useState(company.name);\n const [companyShort, setCompanyShort] = useState(company.companyShort);\n const [logo, setLogo] = useState(company.logo);\n const [colors, setColors] = useState(company.colors);\n const [hotels, setHotels] = useState<Hotel[]>(company.hotels as Hotel[]);\n const [logoLink, setLogoLink] = useState(company.logoLink);\n const [privacyPolicyUrl, setPrivacyPolicyUrl] = useState(company.privacyPolicyUrl);\n\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const selectedHotel = useMemo(() => {\n for (const companyHotel of hotels) {\n if (selectedHotelID + '' === companyHotel.hotelID + '') {\n return companyHotel;\n }\n }\n }, [hotels, selectedHotelID]);\n\n const searchParams = new URLSearchParams(window.location.search);\n const currencyParam = searchParams.get('currency');\n\n const [currentCurrency, setCurrentCurrency] = useState<string>(currencyParam ?? getSelectedHotel()?.defaultCurrency ?? 'AUD');\n const [currentLanguage, setCurrentLanguage] = useState<Language>(getSelectedHotel()?.defaultLanguage ?? Language.en_us);\n\n const [memberOnlyModalPromotion, setMemberOnlyModalPromotion] = useState<IPromotion | null>(null);\n\n const [signedInUser, setSignedInUser] = useState<SignInUser | null>(null);\n\n const [memberProviderSigningIn, setMemberProviderSigningIn] = useState<EMembershipProvider | null>(null);\n\n const allExternalMembershipHandlers = [\n big4MemberHandler(selectedHotel),\n top10MemberHandler(selectedHotel),\n memberJungleMemberHandler(selectedHotel),\n gdayMemberHandler(selectedHotel),\n salesforceMemberHandler(selectedHotel),\n racMemberHandler(selectedHotel),\n ];\n\n useEffect(() => {\n raise(new SelectedHotelChangeEvent(selectedHotel));\n }, [selectedHotel]);\n\n const { raise } = useEvent();\n\n const getHotelFromArrayWithId = (id: string, arrayOfHotels: Hotel[] | ConfigHotel[]) => {\n for (const nextHotel of arrayOfHotels) {\n if (nextHotel.hotelID + '' === id + '') {\n return nextHotel;\n }\n }\n };\n const getHotelFromID = (id: string): Hotel => {\n return getHotelFromArrayWithId(id, hotels) as Hotel;\n };\n\n const updateHotel = (newHotel: Hotel, callback?: (hotel: Hotel) => Hotel) => {\n setHotels((oldHotels) => {\n let modified = false;\n const newHotelArray = oldHotels.map((mappingHotel) => {\n if (mappingHotel.hotelID + '' === newHotel.hotelID + '') {\n modified = true;\n\n const hotelDetails: InitialHotelDetailsEventPayload = {\n name: newHotel.name,\n hotelID: newHotel.hotelID,\n hotelUrl: newHotel.hotelUrl,\n currency: newHotel.defaultCurrency,\n language: newHotel.defaultLanguage,\n address: newHotel.address,\n };\n\n const event = new InitialHotelDetailsEvent(hotelDetails);\n raise(event);\n\n if (callback) {\n return { ...callback(mappingHotel) };\n }\n\n return { ...newHotel };\n }\n\n return { ...mappingHotel };\n });\n\n if (!modified) {\n newHotelArray.push(newHotel);\n if (callback) {\n // Fixed: Ensure the callback returns the hotel; otherwise, the UI may receive undefined.\n callback(newHotel);\n }\n }\n\n return newHotelArray;\n });\n };\n\n const signUserIn = async (user: SignInUser) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion as IPromotion, user));\n\n DataLayer.instance.sendMemberSignUp();\n\n workingContext.closeMemberSignupModal();\n\n await beContext.sessionProvider.updateSession({ user: user, memberId: user.memberNumber });\n\n setSignedInUser(user);\n\n // Set external ID for analytics tracking\n if (user.memberNumber) {\n AnalyticsEvents.setExternalId(user.memberNumber);\n }\n\n if (user.saveState) {\n await beContext.storageProvider.setUser(user);\n }\n };\n\n const signUserOut = async () => {\n await beContext.sessionProvider.updateSession({ user: undefined, memberId: undefined });\n await beContext.storageProvider.setUser(undefined);\n setSignedInUser(null);\n };\n\n const getHotel = useCallback(\n (hotelId: string) =>\n new Promise<Hotel>(async (resolve, reject) => {\n const currentHotelVersion: Hotel | undefined = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n // Fixed: Specified Hotel not found\n // Ensure hotelID is set explicitly in case currentHotelVersion is undefined or missing it.\n hotelID: hotelId,\n };\n let details: HotelDTO | undefined;\n\n try {\n details = await API.Hotel.fetchData(currentLanguage, newHotel);\n } catch (ex) {\n if (ex instanceof APIError) {\n console.error(ex);\n return;\n } else {\n return reject(ex);\n }\n }\n\n if (!details) {\n return;\n }\n\n updateHotel(newHotel, (updatedHotel) => {\n updatedHotel.name = details.name;\n updatedHotel.address = details.address;\n\n updatedHotel.latitude = Number(details.latitude);\n updatedHotel.longitude = Number(details.longitude);\n updatedHotel.phone = details.phone;\n\n updatedHotel.checkInTime = TimeHelper.convert24To12hr(details.checkInTime);\n updatedHotel.checkOutTime = TimeHelper.convert24To12hr(details.checkOutTime);\n\n updatedHotel.paymentCardTypes = details.paymentCardTypes;\n updatedHotel.description = details.description;\n updatedHotel.locationDescription = details.locationDescription;\n updatedHotel.policies = details.policies;\n\n updatedHotel.hotelServices = details.hotelServices;\n updatedHotel.businessServices = details.businessServices;\n updatedHotel.rooms = details.rooms;\n\n updatedHotel.hasLoadedDetails = true;\n updatedHotel.dataSource = details.dataSource;\n\n updatedHotel.defaultCurrency = details.currencyCode;\n updatedHotel.cardProcessor = details.cardProcessor;\n updatedHotel.paymentMethods = details.paymentMethods;\n updatedHotel.planpay = details.planpay;\n updatedHotel.windcave = details.windcave;\n updatedHotel.hotelUrl = details.hotelUrl || updatedHotel.hotelUrl || '';\n updatedHotel.heroImage = details.heroImage || updatedHotel.heroImage || '';\n updatedHotel.images = details.images || [];\n\n updatedHotel.email = details.email;\n updatedHotel.roomGroups = details.roomGroups;\n updatedHotel.rmsUseDepositQuote = details.rmsUseDepositQuote;\n updatedHotel.checkAreaAvailabilityOnRoomStep = details.checkAreaAvailabilityOnRoomStep;\n updatedHotel.enableCreditCardSurcharge = details.enableCreditCardSurcharge;\n updatedHotel.integrations = details.integrations;\n updatedHotel.availableCountries = details.availableCountries;\n updatedHotel.preventCancellation = details.preventCancellation;\n updatedHotel.enableRoomUpsells = details.enableRoomUpsells;\n updatedHotel.enableRateUpsells = details.enableRateUpsells;\n\n if (updatedHotel.dataSource === HotelDataSource.Roomstay) {\n if (details.logo) {\n updatedHotel.logo = details.logo;\n }\n\n if (details.colors) {\n updatedHotel.colors = details.colors as IHotelColorScheme;\n }\n\n if (details.distanceUnitType) {\n updatedHotel.distanceUnitType = details.distanceUnitType;\n }\n\n if (details.weekdayStartsOn) {\n updatedHotel.startsWeekOnDay = details.weekdayStartsOn;\n }\n\n if (details.crossSellHotelIds) {\n updatedHotel.crossSellHotelIds = details.crossSellHotelIds;\n }\n\n if (details.stateFieldConfiguration) {\n updatedHotel.stateFieldConfiguration = details.stateFieldConfiguration;\n }\n }\n\n if (currentHotelVersion?.maxAdults) {\n //using HotelSpec maxAdults from frontend\n updatedHotel.maxAdults = currentHotelVersion.maxAdults;\n }\n\n if (details.maxAdults !== undefined) {\n updatedHotel.maxAdults = details.maxAdults;\n }\n\n if (details.maxChildren !== undefined) {\n updatedHotel.maxChildren = details.maxChildren;\n }\n\n if (details.maxInfants !== undefined) {\n updatedHotel.maxInfants = details.maxInfants;\n }\n\n if (details.rooms) {\n //dymanic maxOccupancy from rooms database\n const roomArray = Object.values(details.rooms);\n\n if (roomArray.length) {\n updatedHotel.maxOccupancy = roomArray.reduce((previousMax, current) => {\n return Math.max(previousMax, current.maxOccupancy);\n }, 0);\n }\n }\n\n updatedHotel.childConfiguration = details.childConfiguration;\n\n /**\n * Prioritized perks from roomstay-clients than roomstay-admin\n */\n updatedHotel.perks = updatedHotel.perks?.length ? updatedHotel.perks : details.perks;\n updatedHotel.perkTitle = updatedHotel.perkTitle ?? details.perkTitle;\n\n updatedHotel.countryPrefix = details.countryPrefix ?? updatedHotel.countryPrefix ?? '';\n updatedHotel.quoteImageDesktop = details.quoteImageDesktop ?? updatedHotel.quoteImageDesktop ?? '';\n updatedHotel.quoteImageMobile = details.quoteImageMobile ?? updatedHotel.quoteImageMobile ?? '';\n updatedHotel.memberOnlyImage = details.memberOnlyImage ?? updatedHotel.memberOnlyImage ?? '';\n if (details.memberOnlyRenderRateLast !== undefined) {\n updatedHotel.memberOnlyRenderRateLast = details.memberOnlyRenderRateLast;\n }\n updatedHotel.captureChildAge = details.captureChildAge;\n\n updatedHotel.fees = details.fees;\n updatedHotel.addDepositFeeToBookingTotal = details.addDepositFeeToBookingTotal;\n\n updatedHotel.company = details.company;\n\n updatedHotel.itineraryNote = details.itineraryNote;\n\n updatedHotel.minAdultAge = details.minAdultAge;\n updatedHotel.maxAdultAge = details.maxAdultAge;\n updatedHotel.countInfantsInOccupancy = details.countInfantsInOccupancy;\n updatedHotel.occupancyLimits = details.occupancyLimits;\n updatedHotel.preferProviderBookingId = details.preferProviderBookingId;\n updatedHotel.disableSavedPayments = details.disableSavedPayments;\n updatedHotel.showUnavailableRooms = details.showUnavailableRooms;\n updatedHotel.isRACMemberNoRequired = details.isRACMemberNoRequired;\n updatedHotel.countryCode = details.countryCode;\n updatedHotel.calendarHighlights = details.calendarHighlights;\n updatedHotel.addressRequirement = details.addressRequirement;\n updatedHotel.maxRoomsPerBooking = details.maxRoomsPerBooking;\n updatedHotel.bookingFlow = details.bookingFlow;\n updatedHotel.metaPixelId = details.metaPixelId;\n updatedHotel.enableAnalyticsDebug = details.enableAnalyticsDebug;\n\n resolve(updatedHotel);\n\n return updatedHotel;\n });\n }),\n []\n );\n\n useEffect(() => {\n setCompanyId(company.companyId);\n setName(company.name);\n setCompanyShort(company.companyShort);\n setLogo(company.logo);\n setColors(company.colors);\n setLogoLink(company.logoLink);\n setPrivacyPolicyUrl(company.privacyPolicyUrl);\n\n const configHotels = company.hotels.map((hotel: ConfigHotel) => {\n return { ...hotel, hasLoadedDetails: false, hotelID: `${hotel.hotelID}` } as Hotel;\n });\n setHotels(configHotels);\n\n if (company.selectedHotel) {\n const hotelId = typeof company.selectedHotel === 'string' ? company.selectedHotel : company.selectedHotel.hotelID + '';\n const targetHotel: ConfigHotel | undefined = getHotelFromArrayWithId(hotelId, configHotels);\n if (targetHotel) {\n setSelectedHotelID(hotelId);\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n }\n } else {\n /*\n We need to check if for some reason HotelStep isn't set as the first step,\n to automatically select a hotel, so engine doesn't fall over\n\n Possible TODO: We might need to do this on a new Step level, instead of here, as dynamically checking if StepHotel\n is first is probably not a great idea...\n */\n\n // Don't select hotel for MemberPortalWidget with groupWidgetConfig\n const isMemberPortalWithGroup = beContext.engine instanceof MemberPortalWidget && beContext.engine.getConfig().groupWidgetConfig;\n\n if (StepManager.getFirstStep() !== StepHotel && !isMemberPortalWithGroup) {\n setSelectedHotelID(configHotels[0].hotelID);\n console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);\n } else {\n RoomstayThemeEngine.registerStyles(company.colors);\n }\n }\n }, [company]);\n\n const onSelectedHotelIDChanged = React.useCallback(async () => {\n if (selectedHotelID) {\n const selectedHotel = await getHotel(selectedHotelID);\n\n if (selectedHotel) {\n currencyHelper.loadExchangeRates(selectedHotel.defaultCurrency ?? 'AUD');\n\n StaticContextProvider.MemberOnlyRateCodes = selectedHotel.memberOnlyRates ?? [];\n\n // Prep session based storage\n const sessionProvider = beContext.engine.getSessionProvider();\n await sessionProvider.setHotelID(selectedHotelID);\n\n // Prep local storage (non-session based)\n beContext.storageProvider.setHotelId(selectedHotelID);\n\n // Reload current user?\n const user = await beContext.storageProvider.getUser();\n\n if (user) {\n await signUserIn(user);\n }\n\n if (currencyParam && CurrencyProvider.getSymbol(currencyParam)) {\n setCurrentCurrency(currencyParam);\n } else {\n setCurrentCurrency(selectedHotel.defaultCurrency);\n }\n\n selectedHotel?.onLoad?.();\n }\n }\n }, [selectedHotelID]);\n\n useEffect(() => {\n onSelectedHotelIDChanged();\n }, [onSelectedHotelIDChanged]);\n\n useEffect(() => {\n const selectedHotel = getSelectedHotel();\n\n DataLayer.instance.setCurrencyCodes(currentCurrency, selectedHotel?.defaultCurrency ?? currentCurrency);\n }, [currentCurrency, selectedHotelID]);\n\n useEffect(() => {\n // Single-source GTM initialisation\n DataLayer.instance.initialiseGTM(company, selectedHotel);\n }, [company, selectedHotel]);\n\n // TODO: Add Hotel Details fetch\n // TODO: re-do fetch on language change\n\n const workingContext: CompanyContextType = {\n currentLanguage,\n currentCurrency,\n\n memberOnlyModalPromotion,\n\n companyId,\n name,\n companyShort,\n logo,\n logoLink,\n privacyPolicyUrl,\n\n colors,\n hotels,\n\n signedInUser,\n\n selectedHotelID: selectedHotelID as string,\n\n updateLowestPricePerNight: (hotel: string | Hotel, row: BasketRow) => {\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel && row) {\n const updatePrice = (value: number, isLoading: boolean) => {\n updateHotel(targetHotel, (hotel) => ({\n ...hotel,\n lowestPrice: { value, isLoading },\n }));\n };\n\n const filters: Filter[] = Object.values(beContext.currentFilters).filter(Boolean) as Filter[];\n\n // Start loading with price = 0\n updatePrice(0, true);\n\n FilterProvider.getRoomList(row, filters, targetHotel.hotelID as string, signedInUser?.memberNumber)\n .then((availableRooms) => {\n const lowest =\n availableRooms?.reduce((min, room) => {\n const price = room.getLowestPrice();\n // Skip null, undefined, and 0 prices. Return the lowest positive price.\n return price != null && price > 0 ? Math.min(min, price) : min;\n }, Infinity) ?? Infinity;\n\n const finalLowest = isFinite(lowest) ? lowest : 0;\n updatePrice(finalLowest, false);\n })\n .catch(() => {\n updatePrice(0, false);\n });\n }\n },\n\n changeHotel: (hotel: string | Hotel | null) => {\n if (hotel === null) {\n setSelectedHotelID(undefined);\n return true;\n }\n\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel) {\n setSelectedHotelID(targetHotel.hotelID);\n return true;\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n return false;\n }\n },\n\n closeMemberSignupModal: () => {\n setMemberProviderSigningIn(null);\n setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (provider?: EMembershipProvider) => {\n if (provider) {\n setMemberProviderSigningIn(provider);\n } else {\n const firstConfiguredHandler = allExternalMembershipHandlers.find((handler) => handler.isAvailable);\n\n if (firstConfiguredHandler) {\n // If any external handler is available, default to that\n setMemberProviderSigningIn(firstConfiguredHandler.provider);\n } else {\n setMemberProviderSigningIn(EMembershipProvider.Internal);\n }\n }\n },\n\n signUserIn,\n signUserOut,\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n selectedHotel,\n\n memberProviderSigningIn,\n\n isExternalMemberHotel: allExternalMembershipHandlers.some((handler) => handler.isAvailable),\n externalMembershipHandlers: allExternalMembershipHandlers.filter((handler) => handler.isAvailable),\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
1
+ {"version":3,"file":"CompanyContextWrapper.js","sourceRoot":"/","sources":["src/contexts/CompanyContext/CompanyContextWrapper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BookingEngineContext, CompanyContext, CompanyContextType, SignInUser } from '@frontend/contexts';\nimport { InitialHotelDetailsEvent, SelectedHotelChangeEvent } from '@frontend/events';\nimport { useEvent } from '@frontend/hooks';\nimport { EMembershipProvider, IHotelColorScheme } from '@roomstay/core';\nimport React, { ReactChild, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport API from '@/api/BookingAPI';\nimport { MemberPortalWidget } from '@/engines/MemberPortalWidget/MemberPortalWidget';\nimport { APIError } from '@/errors/APIError';\nimport { MemberOnlyFenceSignUp } from '@/events/actions/MemberOnlyFence/MemberOnlyFenceSignUp';\nimport { big4MemberHandler } from '@/handlers/membership/Big4MemberHandler';\nimport { gdayMemberHandler } from '@/handlers/membership/GdayMemberHandler';\nimport { memberJungleMemberHandler } from '@/handlers/membership/MemberJungleMemberHandler';\nimport { racMemberHandler } from '@/handlers/membership/RACMemberHandler';\nimport { salesforceMemberHandler } from '@/handlers/membership/SalesforceMemberHandler';\nimport { top10MemberHandler } from '@/handlers/membership/Top10MemberHandler';\nimport { HotelDTO } from '@/models/Api/HotelDTO';\nimport BasketRow from '@/models/BasketRow';\nimport type { ConfigCompany } from '@/models/Client/Hotel/Company';\nimport type { ConfigHotel, Hotel, InitialHotelDetailsEventPayload } from '@/models/Client/Hotel/Hotel';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { IPromotion } from '@/models/Promotion/IPromotion.type';\nimport Filter from '@/models/Room/Filters/Filter';\nimport { Room } from '@/models/Room/Room';\nimport StepHotel from '@/pages/steps/StepHotel/StepHotel';\nimport CurrencyProvider from '@/providers/CurrencyProvider';\nimport FilterProvider from '@/providers/FilterProvider';\nimport { Language } from '@/providers/LanguageProvider';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport StaticContextProvider from '@/providers/StaticContextProvider';\nimport AnalyticsEvents from '@/util/AnalyticsEvents/AnalyticsEvents';\nimport * as currencyHelper from '@/util/CurrencyHelper';\nimport DataLayer from '@/util/DataLayer';\nimport StepManager from '@/util/StepManager';\nimport TimeHelper from '@/util/TimeHelper';\n\ninterface CompanyContextWrapperProps {\n children: ReactChild;\n configCompany: ConfigCompany;\n}\n\nexport const CompanyContextWrapper = ({ configCompany: company, children }: CompanyContextWrapperProps) => {\n const beContext = useContext(BookingEngineContext);\n\n const getSelectedHotel = () => {\n for (const hotel of hotels) {\n if (selectedHotelID + '' === hotel.hotelID + '') {\n return hotel;\n }\n }\n };\n\n const [companyId, setCompanyId] = useState(company.companyId);\n const [name, setName] = useState(company.name);\n const [companyShort, setCompanyShort] = useState(company.companyShort);\n const [logo, setLogo] = useState(company.logo);\n const [colors, setColors] = useState(company.colors);\n const [hotels, setHotels] = useState<Hotel[]>(company.hotels as Hotel[]);\n const [logoLink, setLogoLink] = useState(company.logoLink);\n const [privacyPolicyUrl, setPrivacyPolicyUrl] = useState(company.privacyPolicyUrl);\n\n const [selectedHotelID, setSelectedHotelID] = useState<string>();\n\n const selectedHotel = useMemo(() => {\n for (const companyHotel of hotels) {\n if (selectedHotelID + '' === companyHotel.hotelID + '') {\n return companyHotel;\n }\n }\n }, [hotels, selectedHotelID]);\n\n const searchParams = new URLSearchParams(window.location.search);\n const currencyParam = searchParams.get('currency');\n\n const [currentCurrency, setCurrentCurrency] = useState<string>(currencyParam ?? getSelectedHotel()?.defaultCurrency ?? 'AUD');\n const [currentLanguage, setCurrentLanguage] = useState<Language>(getSelectedHotel()?.defaultLanguage ?? Language.en_us);\n\n const [memberOnlyModalPromotion, setMemberOnlyModalPromotion] = useState<IPromotion | null>(null);\n\n const [signedInUser, setSignedInUser] = useState<SignInUser | null>(null);\n\n const [memberProviderSigningIn, setMemberProviderSigningIn] = useState<EMembershipProvider | null>(null);\n\n const allExternalMembershipHandlers = [\n big4MemberHandler(selectedHotel),\n top10MemberHandler(selectedHotel),\n memberJungleMemberHandler(selectedHotel),\n gdayMemberHandler(selectedHotel),\n salesforceMemberHandler(selectedHotel),\n racMemberHandler(selectedHotel),\n ];\n\n useEffect(() => {\n raise(new SelectedHotelChangeEvent(selectedHotel));\n }, [selectedHotel]);\n\n const { raise } = useEvent();\n\n const getHotelFromArrayWithId = (id: string, arrayOfHotels: Hotel[] | ConfigHotel[]) => {\n for (const nextHotel of arrayOfHotels) {\n if (nextHotel.hotelID + '' === id + '') {\n return nextHotel;\n }\n }\n };\n const getHotelFromID = (id: string): Hotel => {\n return getHotelFromArrayWithId(id, hotels) as Hotel;\n };\n\n const updateHotel = (newHotel: Hotel, callback?: (hotel: Hotel) => Hotel) => {\n setHotels((oldHotels) => {\n let modified = false;\n const newHotelArray = oldHotels.map((mappingHotel) => {\n if (mappingHotel.hotelID + '' === newHotel.hotelID + '') {\n modified = true;\n\n const hotelDetails: InitialHotelDetailsEventPayload = {\n name: newHotel.name,\n hotelID: newHotel.hotelID,\n hotelUrl: newHotel.hotelUrl,\n currency: newHotel.defaultCurrency,\n language: newHotel.defaultLanguage,\n address: newHotel.address,\n };\n\n const event = new InitialHotelDetailsEvent(hotelDetails);\n raise(event);\n\n if (callback) {\n return { ...callback(mappingHotel) };\n }\n\n return { ...newHotel };\n }\n\n return { ...mappingHotel };\n });\n\n if (!modified) {\n newHotelArray.push(newHotel);\n if (callback) {\n // Fixed: Ensure the callback returns the hotel; otherwise, the UI may receive undefined.\n callback(newHotel);\n }\n }\n\n return newHotelArray;\n });\n };\n\n const signUserIn = async (user: SignInUser) => {\n raise(new MemberOnlyFenceSignUp(memberOnlyModalPromotion as IPromotion, user));\n\n DataLayer.instance.sendMemberSignUp();\n\n workingContext.closeMemberSignupModal();\n\n await beContext.sessionProvider.updateSession({ user: user, memberId: user.memberNumber });\n\n setSignedInUser(user);\n\n // Set external ID for analytics tracking\n if (user.memberNumber) {\n AnalyticsEvents.setExternalId(user.memberNumber);\n }\n\n if (user.saveState) {\n await beContext.storageProvider.setUser(user);\n }\n };\n\n const signUserOut = async () => {\n await beContext.sessionProvider.updateSession({ user: undefined, memberId: undefined });\n await beContext.storageProvider.setUser(undefined);\n setSignedInUser(null);\n };\n\n const getHotel = useCallback(\n (hotelId: string, preloadedHotelDTO?: HotelDTO) =>\n new Promise<Hotel>(async (resolve, reject) => {\n const currentHotelVersion: Hotel | undefined = getHotelFromID(hotelId) as Hotel;\n const newHotel: Hotel = {\n ...currentHotelVersion,\n // Fixed: Specified Hotel not found\n // Ensure hotelID is set explicitly in case currentHotelVersion is undefined or missing it.\n hotelID: hotelId,\n };\n let details: HotelDTO | undefined;\n\n try {\n details = preloadedHotelDTO ? preloadedHotelDTO : await API.Hotel.fetchData(currentLanguage, newHotel);\n } catch (ex) {\n if (ex instanceof APIError) {\n console.error(ex);\n return;\n } else {\n return reject(ex);\n }\n }\n\n if (!details) {\n return;\n }\n\n updateHotel(newHotel, (updatedHotel) => {\n updatedHotel.name = details.name;\n updatedHotel.address = details.address;\n\n updatedHotel.latitude = Number(details.latitude);\n updatedHotel.longitude = Number(details.longitude);\n updatedHotel.phone = details.phone;\n\n updatedHotel.checkInTime = TimeHelper.convert24To12hr(details.checkInTime);\n updatedHotel.checkOutTime = TimeHelper.convert24To12hr(details.checkOutTime);\n\n updatedHotel.paymentCardTypes = details.paymentCardTypes;\n updatedHotel.description = details.description;\n updatedHotel.locationDescription = details.locationDescription;\n updatedHotel.policies = details.policies;\n\n updatedHotel.hotelServices = details.hotelServices;\n updatedHotel.businessServices = details.businessServices;\n updatedHotel.rooms = details.rooms;\n\n updatedHotel.hasLoadedDetails = true;\n updatedHotel.dataSource = details.dataSource;\n\n updatedHotel.defaultCurrency = details.currencyCode;\n updatedHotel.cardProcessor = details.cardProcessor;\n updatedHotel.paymentMethods = details.paymentMethods;\n updatedHotel.planpay = details.planpay;\n updatedHotel.windcave = details.windcave;\n updatedHotel.hotelUrl = details.hotelUrl || updatedHotel.hotelUrl || '';\n updatedHotel.heroImage = details.heroImage || updatedHotel.heroImage || '';\n updatedHotel.images = details.images || [];\n\n updatedHotel.email = details.email;\n updatedHotel.roomGroups = details.roomGroups;\n updatedHotel.rmsUseDepositQuote = details.rmsUseDepositQuote;\n updatedHotel.checkAreaAvailabilityOnRoomStep = details.checkAreaAvailabilityOnRoomStep;\n updatedHotel.enableCreditCardSurcharge = details.enableCreditCardSurcharge;\n updatedHotel.integrations = details.integrations;\n updatedHotel.availableCountries = details.availableCountries;\n updatedHotel.preventCancellation = details.preventCancellation;\n updatedHotel.enableRoomUpsells = details.enableRoomUpsells;\n updatedHotel.enableRateUpsells = details.enableRateUpsells;\n\n if (updatedHotel.dataSource === HotelDataSource.Roomstay) {\n if (details.logo) {\n updatedHotel.logo = details.logo;\n }\n\n if (details.colors) {\n updatedHotel.colors = details.colors as IHotelColorScheme;\n }\n\n if (details.distanceUnitType) {\n updatedHotel.distanceUnitType = details.distanceUnitType;\n }\n\n if (details.weekdayStartsOn) {\n updatedHotel.startsWeekOnDay = details.weekdayStartsOn;\n }\n\n if (details.crossSellHotelIds) {\n updatedHotel.crossSellHotelIds = details.crossSellHotelIds;\n }\n\n if (details.stateFieldConfiguration) {\n updatedHotel.stateFieldConfiguration = details.stateFieldConfiguration;\n }\n }\n\n if (currentHotelVersion?.maxAdults) {\n //using HotelSpec maxAdults from frontend\n updatedHotel.maxAdults = currentHotelVersion.maxAdults;\n }\n\n if (details.maxAdults !== undefined) {\n updatedHotel.maxAdults = details.maxAdults;\n }\n\n if (details.maxChildren !== undefined) {\n updatedHotel.maxChildren = details.maxChildren;\n }\n\n if (details.maxInfants !== undefined) {\n updatedHotel.maxInfants = details.maxInfants;\n }\n\n if (details.rooms) {\n //dymanic maxOccupancy from rooms database\n const roomArray = Object.values(details.rooms);\n\n if (roomArray.length) {\n updatedHotel.maxOccupancy = roomArray.reduce((previousMax, current) => {\n return Math.max(previousMax, current.maxOccupancy);\n }, 0);\n }\n }\n\n updatedHotel.childConfiguration = details.childConfiguration;\n\n /**\n * Prioritized perks from roomstay-clients than roomstay-admin\n */\n updatedHotel.perks = updatedHotel.perks?.length ? updatedHotel.perks : details.perks;\n updatedHotel.perkTitle = updatedHotel.perkTitle ?? details.perkTitle;\n\n updatedHotel.countryPrefix = details.countryPrefix ?? updatedHotel.countryPrefix ?? '';\n updatedHotel.quoteImageDesktop = details.quoteImageDesktop ?? updatedHotel.quoteImageDesktop ?? '';\n updatedHotel.quoteImageMobile = details.quoteImageMobile ?? updatedHotel.quoteImageMobile ?? '';\n updatedHotel.memberOnlyImage = details.memberOnlyImage ?? updatedHotel.memberOnlyImage ?? '';\n if (details.memberOnlyRenderRateLast !== undefined) {\n updatedHotel.memberOnlyRenderRateLast = details.memberOnlyRenderRateLast;\n }\n updatedHotel.captureChildAge = details.captureChildAge;\n\n updatedHotel.fees = details.fees;\n updatedHotel.addDepositFeeToBookingTotal = details.addDepositFeeToBookingTotal;\n\n updatedHotel.company = details.company;\n\n updatedHotel.itineraryNote = details.itineraryNote;\n\n updatedHotel.minAdultAge = details.minAdultAge;\n updatedHotel.maxAdultAge = details.maxAdultAge;\n updatedHotel.countInfantsInOccupancy = details.countInfantsInOccupancy;\n updatedHotel.occupancyLimits = details.occupancyLimits;\n updatedHotel.preferProviderBookingId = details.preferProviderBookingId;\n updatedHotel.disableSavedPayments = details.disableSavedPayments;\n updatedHotel.showUnavailableRooms = details.showUnavailableRooms;\n updatedHotel.isRACMemberNoRequired = details.isRACMemberNoRequired;\n updatedHotel.countryCode = details.countryCode;\n updatedHotel.calendarHighlights = details.calendarHighlights;\n updatedHotel.addressRequirement = details.addressRequirement;\n updatedHotel.maxRoomsPerBooking = details.maxRoomsPerBooking;\n updatedHotel.bookingFlow = details.bookingFlow;\n updatedHotel.metaPixelId = details.metaPixelId;\n updatedHotel.enableAnalyticsDebug = details.enableAnalyticsDebug;\n\n resolve(updatedHotel);\n\n return updatedHotel;\n });\n }),\n []\n );\n\n useEffect(() => {\n setCompanyId(company.companyId);\n setName(company.name);\n setCompanyShort(company.companyShort);\n setLogo(company.logo);\n setColors(company.colors);\n setLogoLink(company.logoLink);\n setPrivacyPolicyUrl(company.privacyPolicyUrl);\n\n const configHotels = company.hotels.map((hotel: ConfigHotel) => {\n return { ...hotel, hasLoadedDetails: false, hotelID: `${hotel.hotelID}` } as Hotel;\n });\n setHotels(configHotels);\n\n if (company.selectedHotel) {\n const hotelId = typeof company.selectedHotel === 'string' ? company.selectedHotel : company.selectedHotel.hotelID + '';\n const targetHotel: ConfigHotel | undefined = getHotelFromArrayWithId(hotelId, configHotels);\n if (targetHotel) {\n setSelectedHotelID(hotelId);\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n }\n } else {\n /*\n We need to check if for some reason HotelStep isn't set as the first step,\n to automatically select a hotel, so engine doesn't fall over\n\n Possible TODO: We might need to do this on a new Step level, instead of here, as dynamically checking if StepHotel\n is first is probably not a great idea...\n */\n\n // Don't select hotel for MemberPortalWidget with groupWidgetConfig\n const isMemberPortalWithGroup = beContext.engine instanceof MemberPortalWidget && beContext.engine.getConfig().groupWidgetConfig;\n\n if (StepManager.getFirstStep() !== StepHotel && !isMemberPortalWithGroup) {\n setSelectedHotelID(configHotels[0].hotelID);\n console.log(`No selected hotel found - defaulting to ${configHotels[0].name}`);\n } else {\n RoomstayThemeEngine.registerStyles(company.colors);\n }\n }\n }, [company]);\n\n const onSelectedHotelIDChanged = React.useCallback(async () => {\n if (selectedHotelID) {\n const selectedHotel = await getHotel(selectedHotelID);\n\n if (selectedHotel) {\n currencyHelper.loadExchangeRates(selectedHotel.defaultCurrency ?? 'AUD');\n\n StaticContextProvider.MemberOnlyRateCodes = selectedHotel.memberOnlyRates ?? [];\n\n // Prep session based storage\n const sessionProvider = beContext.engine.getSessionProvider();\n await sessionProvider.setHotelID(selectedHotelID);\n\n // Prep local storage (non-session based)\n beContext.storageProvider.setHotelId(selectedHotelID);\n\n // Reload current user?\n const user = await beContext.storageProvider.getUser();\n\n if (user) {\n await signUserIn(user);\n }\n\n if (currencyParam && CurrencyProvider.getSymbol(currencyParam)) {\n setCurrentCurrency(currencyParam);\n } else {\n setCurrentCurrency(selectedHotel.defaultCurrency);\n }\n\n selectedHotel?.onLoad?.();\n }\n }\n }, [selectedHotelID]);\n\n useEffect(() => {\n onSelectedHotelIDChanged();\n }, [onSelectedHotelIDChanged]);\n\n useEffect(() => {\n const selectedHotel = getSelectedHotel();\n\n DataLayer.instance.setCurrencyCodes(currentCurrency, selectedHotel?.defaultCurrency ?? currentCurrency);\n }, [currentCurrency, selectedHotelID]);\n\n useEffect(() => {\n // Single-source GTM initialisation\n DataLayer.instance.initialiseGTM(company, selectedHotel);\n }, [company, selectedHotel]);\n\n // TODO: Add Hotel Details fetch\n // TODO: re-do fetch on language change\n\n const updateLowestPriceByTargetHotel = (targetHotel: Hotel, value: number, isLoading: boolean) => {\n updateHotel(targetHotel, (hotel) => ({\n ...hotel,\n lowestPrice: { value, isLoading },\n }));\n };\n\n const getLowestPrice = (rooms?: Room[]) => {\n if (!rooms?.length) return 0;\n\n const lowestDisplayPrice = rooms.reduce((min, room) => {\n // Get the lowest raw price for each room (see RoomDetails.tsx for reference)\n const lowestRawPrice = room.getLowestPrice(false, true);\n return lowestRawPrice != null && lowestRawPrice > 0 ? Math.min(min, lowestRawPrice) : min;\n }, Infinity);\n\n return isFinite(lowestDisplayPrice) ? lowestDisplayPrice : 0;\n };\n\n const workingContext: CompanyContextType = {\n currentLanguage,\n currentCurrency,\n\n memberOnlyModalPromotion,\n\n companyId,\n name,\n companyShort,\n logo,\n logoLink,\n privacyPolicyUrl,\n\n colors,\n hotels,\n\n signedInUser,\n\n selectedHotelID: selectedHotelID as string,\n\n updateLowestPricePerNightByHotelIds: async (hotelIds: string[], row: BasketRow) => {\n hotelIds.forEach((hotelId) => {\n const targetHotel = getHotelFromID(hotelId);\n updateLowestPriceByTargetHotel(targetHotel, 0, true);\n });\n\n try {\n const filters: Filter[] = Object.values(beContext.currentFilters).filter(Boolean) as Filter[];\n const data = await FilterProvider.getRoomListByHotelIds(row, filters, hotelIds, signedInUser?.memberNumber);\n for (const [hotelId, hotelData] of Object.entries(data)) {\n const { hotel: latestHotelDTO, rooms } = hotelData;\n try {\n await getHotel(hotelId, latestHotelDTO);\n const targetHotel = getHotelFromID(hotelId);\n const finalLowest = getLowestPrice(rooms);\n updateLowestPriceByTargetHotel(targetHotel, finalLowest, false);\n } catch {\n const targetHotel = getHotelFromID(hotelId);\n updateLowestPriceByTargetHotel(targetHotel, 0, false);\n }\n }\n } catch (error) {\n console.error(error);\n }\n },\n\n changeHotel: (hotel: string | Hotel | null) => {\n if (hotel === null) {\n setSelectedHotelID(undefined);\n return true;\n }\n\n const targetHotel = getHotelFromID(typeof hotel === 'string' ? hotel : hotel.hotelID + '');\n\n if (targetHotel) {\n setSelectedHotelID(targetHotel.hotelID);\n return true;\n } else {\n // TODO: add centralized error logging\n console.log(`Unable to set selected hotel automatically. No Hotel found with ID: ${company.selectedHotel}`);\n return false;\n }\n },\n\n closeMemberSignupModal: () => {\n setMemberProviderSigningIn(null);\n setMemberOnlyModalPromotion(null);\n },\n openMemberSignupModal: (provider?: EMembershipProvider) => {\n if (provider) {\n setMemberProviderSigningIn(provider);\n } else {\n const firstConfiguredHandler = allExternalMembershipHandlers.find((handler) => handler.isAvailable);\n\n if (firstConfiguredHandler) {\n // If any external handler is available, default to that\n setMemberProviderSigningIn(firstConfiguredHandler.provider);\n } else {\n setMemberProviderSigningIn(EMembershipProvider.Internal);\n }\n }\n },\n\n signUserIn,\n signUserOut,\n\n setCurrentCurrency,\n setCurrentLanguage,\n\n getHotel,\n selectedHotel,\n\n memberProviderSigningIn,\n\n isExternalMemberHotel: allExternalMembershipHandlers.some((handler) => handler.isAvailable),\n externalMembershipHandlers: allExternalMembershipHandlers.filter((handler) => handler.isAvailable),\n };\n\n return <CompanyContext.Provider value={workingContext}>{children}</CompanyContext.Provider>;\n};\n"]}
@@ -125,6 +125,9 @@ const useHotelOverrides = () => {
125
125
  const showPromocodeFieldInCheckout = (0, react_1.useMemo)(() => {
126
126
  return !!(overrides === null || overrides === void 0 ? void 0 : overrides.showPromocodeFieldInCheckout);
127
127
  }, [overrides === null || overrides === void 0 ? void 0 : overrides.showPromocodeFieldInCheckout]);
128
+ const showDayNameInDates = (0, react_1.useMemo)(() => {
129
+ return !!(overrides === null || overrides === void 0 ? void 0 : overrides.showDayNameInDates);
130
+ }, [overrides === null || overrides === void 0 ? void 0 : overrides.showDayNameInDates]);
128
131
  const messages = (0, react_1.useMemo)(() => {
129
132
  var _a;
130
133
  if ((_a = overrides === null || overrides === void 0 ? void 0 : overrides.messages) === null || _a === void 0 ? void 0 : _a.enable) {
@@ -173,6 +176,7 @@ const useHotelOverrides = () => {
173
176
  disableGroupRoomsAllTab,
174
177
  orderUnavailableRoomsLast,
175
178
  showPromocodeFieldInCheckout,
179
+ showDayNameInDates,
176
180
  };
177
181
  };
178
182
  const HotelOverridesContextWrapper = ({ children }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"HotelOverridesContext.js","sourceRoot":"/","sources":["src/contexts/HotelOverridesContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport i18n from 'i18next';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { HotelOverrideDTO } from '@/models/Api/HotelOverrideDTO';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { Language } from '@/providers/LanguageProvider';\n\ninterface IHotelOverridesContext extends Omit<HotelOverrideDTO, 'overrideDistanceUnitType'> {\n loading: boolean;\n getPricesIncludeFeesMessage: (hotelId: string) => Promise<string>;\n}\n\nexport const HotelOverridesContext = createContext<IHotelOverridesContext>({} as IHotelOverridesContext);\n\nconst useHotelOverrides = (): IHotelOverridesContext => {\n const companyContext = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n const [loading, loadingSet] = useState<boolean>(false);\n const [overrides, overridesSet] = useState<HotelOverrideDTO | null>(null);\n\n const fetchApiData = useCallback(async () => {\n if (companyContext.selectedHotelID) {\n loadingSet(true);\n try {\n const apiData = await API.Hotel.fetchOverrides(companyContext.selectedHotelID);\n\n loadingSet(false);\n overridesSet(apiData);\n } catch (error) {\n console.error('Failed to fetch hotel overrides', error);\n }\n }\n }, [companyContext.selectedHotelID]);\n\n const hideByLine: boolean = useMemo(() => {\n return !!overrides?.hideByLine || !!hotel?.hideByLine;\n }, [overrides?.hideByLine]);\n\n const distanceUnitType: DistanceUnitType = useMemo(() => {\n // Metric by default\n return (overrides?.overrideDistanceUnitType && overrides?.distanceUnitType) || hotel?.distanceUnitType || DistanceUnitType.Metric;\n }, [overrides?.distanceUnitType, hotel?.distanceUnitType, hotel?.hasLoadedDetails]);\n\n const transportDistances = useMemo(() => {\n return overrides?.transportDistances ?? hotel?.transportDistances;\n }, [overrides?.transportDistances]);\n\n const phoneNumberInSummary = useMemo(() => {\n return overrides?.phoneNumberInSummary;\n }, [overrides?.phoneNumberInSummary]);\n\n const enabledEventIds = useMemo(() => {\n return overrides?.enabledEventIds;\n }, [overrides?.enabledEventIds]);\n\n const { showYearOnCalendar, yearDisplayOption } = useMemo(() => {\n return {\n showYearOnCalendar: !!overrides?.showYearOnCalendar,\n yearDisplayOption: !!overrides?.showYearOnCalendar ? overrides?.yearDisplayOption : '',\n };\n }, [overrides?.showYearOnCalendar, overrides?.yearDisplayOption]);\n\n const { showPromoCodeAlert, promoCodeAlertType } = useMemo(() => {\n return {\n showPromoCodeAlert: !!overrides?.showPromoCodeAlert,\n promoCodeAlertType: !!overrides?.showPromoCodeAlert ? overrides?.promoCodeAlertType : undefined,\n };\n }, [overrides?.showPromoCodeAlert, overrides?.promoCodeAlertType]);\n\n const pageTitle = useMemo(() => {\n return overrides?.pageTitle;\n }, [overrides?.pageTitle]);\n\n const showPromoCodeDescription: boolean = useMemo(() => {\n return !!overrides?.showPromoCodeDescription;\n }, [overrides?.showPromoCodeDescription]);\n\n const alwaysShowDecimals: boolean = useMemo(() => {\n return !!overrides?.alwaysShowDecimals;\n }, [overrides?.alwaysShowDecimals]);\n\n const roomModalDescSideBySide: boolean = useMemo(() => {\n return !!overrides?.roomModalDescSideBySide;\n }, [overrides?.roomModalDescSideBySide]);\n\n const disableGroupRoomsAllTab = useMemo(() => {\n return !!overrides?.disableGroupRoomsAllTab;\n }, [overrides?.disableGroupRoomsAllTab]);\n\n const orderUnavailableRoomsLast: boolean = useMemo(() => {\n return !!overrides?.orderUnavailableRoomsLast;\n }, [overrides?.orderUnavailableRoomsLast]);\n\n const showPromocodeFieldInCheckout: boolean = useMemo(() => {\n return !!overrides?.showPromocodeFieldInCheckout;\n }, [overrides?.showPromocodeFieldInCheckout]);\n\n const messages = useMemo(() => {\n if (overrides?.messages?.enable) {\n if (overrides.messages.pricesIncludeFeesMessage) {\n i18n.addResource(Language.en_us, 'translation', Translation.Step.Room.RoomInfo.IncludesTaxes, overrides.messages.pricesIncludeFeesMessage);\n }\n\n return overrides.messages;\n }\n return undefined;\n }, [overrides?.messages]);\n\n const getPricesIncludeFeesMessage = async (hotelId: string): Promise<string> => {\n if (hotelId === hotel?.hotelID) {\n const translated = t(Translation.Step.Room.RoomInfo.IncludesTaxes);\n return translated;\n }\n\n try {\n const overrideData = await API.Hotel.fetchOverrides(hotelId);\n const msg = overrideData?.messages?.pricesIncludeFeesMessage || DefaultPricesIncludeFeesMessage;\n return msg;\n } catch {\n return DefaultPricesIncludeFeesMessage;\n }\n };\n\n useEffect(() => {\n fetchApiData();\n }, [fetchApiData]);\n\n return {\n loading,\n hideByLine,\n distanceUnitType,\n transportDistances,\n phoneNumberInSummary,\n enabledEventIds,\n showYearOnCalendar,\n yearDisplayOption,\n showPromoCodeAlert,\n promoCodeAlertType,\n pageTitle,\n showPromoCodeDescription,\n alwaysShowDecimals,\n messages,\n roomModalDescSideBySide,\n\n getPricesIncludeFeesMessage,\n disableGroupRoomsAllTab,\n orderUnavailableRoomsLast,\n showPromocodeFieldInCheckout,\n };\n};\n\nexport const HotelOverridesContextWrapper = ({ children }: { children?: React.ReactNode }) => {\n const hotelOverrides = useHotelOverrides();\n return <HotelOverridesContext.Provider value={hotelOverrides}>{children}</HotelOverridesContext.Provider>;\n};\n\nconst DefaultPricesIncludeFeesMessage = 'Including taxes & fees.';\n"]}
1
+ {"version":3,"file":"HotelOverridesContext.js","sourceRoot":"/","sources":["src/contexts/HotelOverridesContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { useCurrentHotel } from '@frontend/hooks';\nimport i18n from 'i18next';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport { HotelOverrideDTO } from '@/models/Api/HotelOverrideDTO';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { Language } from '@/providers/LanguageProvider';\n\ninterface IHotelOverridesContext extends Omit<HotelOverrideDTO, 'overrideDistanceUnitType'> {\n loading: boolean;\n getPricesIncludeFeesMessage: (hotelId: string) => Promise<string>;\n}\n\nexport const HotelOverridesContext = createContext<IHotelOverridesContext>({} as IHotelOverridesContext);\n\nconst useHotelOverrides = (): IHotelOverridesContext => {\n const companyContext = useContext(CompanyContext);\n const { hotel } = useCurrentHotel();\n const { t } = useTranslation();\n const [loading, loadingSet] = useState<boolean>(false);\n const [overrides, overridesSet] = useState<HotelOverrideDTO | null>(null);\n\n const fetchApiData = useCallback(async () => {\n if (companyContext.selectedHotelID) {\n loadingSet(true);\n try {\n const apiData = await API.Hotel.fetchOverrides(companyContext.selectedHotelID);\n\n loadingSet(false);\n overridesSet(apiData);\n } catch (error) {\n console.error('Failed to fetch hotel overrides', error);\n }\n }\n }, [companyContext.selectedHotelID]);\n\n const hideByLine: boolean = useMemo(() => {\n return !!overrides?.hideByLine || !!hotel?.hideByLine;\n }, [overrides?.hideByLine]);\n\n const distanceUnitType: DistanceUnitType = useMemo(() => {\n // Metric by default\n return (overrides?.overrideDistanceUnitType && overrides?.distanceUnitType) || hotel?.distanceUnitType || DistanceUnitType.Metric;\n }, [overrides?.distanceUnitType, hotel?.distanceUnitType, hotel?.hasLoadedDetails]);\n\n const transportDistances = useMemo(() => {\n return overrides?.transportDistances ?? hotel?.transportDistances;\n }, [overrides?.transportDistances]);\n\n const phoneNumberInSummary = useMemo(() => {\n return overrides?.phoneNumberInSummary;\n }, [overrides?.phoneNumberInSummary]);\n\n const enabledEventIds = useMemo(() => {\n return overrides?.enabledEventIds;\n }, [overrides?.enabledEventIds]);\n\n const { showYearOnCalendar, yearDisplayOption } = useMemo(() => {\n return {\n showYearOnCalendar: !!overrides?.showYearOnCalendar,\n yearDisplayOption: !!overrides?.showYearOnCalendar ? overrides?.yearDisplayOption : '',\n };\n }, [overrides?.showYearOnCalendar, overrides?.yearDisplayOption]);\n\n const { showPromoCodeAlert, promoCodeAlertType } = useMemo(() => {\n return {\n showPromoCodeAlert: !!overrides?.showPromoCodeAlert,\n promoCodeAlertType: !!overrides?.showPromoCodeAlert ? overrides?.promoCodeAlertType : undefined,\n };\n }, [overrides?.showPromoCodeAlert, overrides?.promoCodeAlertType]);\n\n const pageTitle = useMemo(() => {\n return overrides?.pageTitle;\n }, [overrides?.pageTitle]);\n\n const showPromoCodeDescription: boolean = useMemo(() => {\n return !!overrides?.showPromoCodeDescription;\n }, [overrides?.showPromoCodeDescription]);\n\n const alwaysShowDecimals: boolean = useMemo(() => {\n return !!overrides?.alwaysShowDecimals;\n }, [overrides?.alwaysShowDecimals]);\n\n const roomModalDescSideBySide: boolean = useMemo(() => {\n return !!overrides?.roomModalDescSideBySide;\n }, [overrides?.roomModalDescSideBySide]);\n\n const disableGroupRoomsAllTab = useMemo(() => {\n return !!overrides?.disableGroupRoomsAllTab;\n }, [overrides?.disableGroupRoomsAllTab]);\n\n const orderUnavailableRoomsLast: boolean = useMemo(() => {\n return !!overrides?.orderUnavailableRoomsLast;\n }, [overrides?.orderUnavailableRoomsLast]);\n\n const showPromocodeFieldInCheckout: boolean = useMemo(() => {\n return !!overrides?.showPromocodeFieldInCheckout;\n }, [overrides?.showPromocodeFieldInCheckout]);\n\n const showDayNameInDates: boolean = useMemo(() => {\n return !!overrides?.showDayNameInDates;\n }, [overrides?.showDayNameInDates]);\n\n const messages = useMemo(() => {\n if (overrides?.messages?.enable) {\n if (overrides.messages.pricesIncludeFeesMessage) {\n i18n.addResource(Language.en_us, 'translation', Translation.Step.Room.RoomInfo.IncludesTaxes, overrides.messages.pricesIncludeFeesMessage);\n }\n\n return overrides.messages;\n }\n return undefined;\n }, [overrides?.messages]);\n\n const getPricesIncludeFeesMessage = async (hotelId: string): Promise<string> => {\n if (hotelId === hotel?.hotelID) {\n const translated = t(Translation.Step.Room.RoomInfo.IncludesTaxes);\n return translated;\n }\n\n try {\n const overrideData = await API.Hotel.fetchOverrides(hotelId);\n const msg = overrideData?.messages?.pricesIncludeFeesMessage || DefaultPricesIncludeFeesMessage;\n return msg;\n } catch {\n return DefaultPricesIncludeFeesMessage;\n }\n };\n\n useEffect(() => {\n fetchApiData();\n }, [fetchApiData]);\n\n return {\n loading,\n hideByLine,\n distanceUnitType,\n transportDistances,\n phoneNumberInSummary,\n enabledEventIds,\n showYearOnCalendar,\n yearDisplayOption,\n showPromoCodeAlert,\n promoCodeAlertType,\n pageTitle,\n showPromoCodeDescription,\n alwaysShowDecimals,\n messages,\n roomModalDescSideBySide,\n\n getPricesIncludeFeesMessage,\n disableGroupRoomsAllTab,\n orderUnavailableRoomsLast,\n showPromocodeFieldInCheckout,\n showDayNameInDates,\n };\n};\n\nexport const HotelOverridesContextWrapper = ({ children }: { children?: React.ReactNode }) => {\n const hotelOverrides = useHotelOverrides();\n return <HotelOverridesContext.Provider value={hotelOverrides}>{children}</HotelOverridesContext.Provider>;\n};\n\nconst DefaultPricesIncludeFeesMessage = 'Including taxes & fees.';\n"]}
@@ -18,9 +18,19 @@ export interface UseAutoFocusOnSelectProps {
18
18
  */
19
19
  focusOnSelected?: boolean;
20
20
  /**
21
- * If `true`, disables automatically opening the dropdown
21
+ * If `true`, prevents the dropdown from automatically opening
22
22
  * when the input element receives focus.
23
23
  *
24
+ * Examples:
25
+ * - `EnhancedPhoneNumberField` has two parts: the flag selector and the number input.
26
+ * Clicking the number input should not trigger the flag selector to open,
27
+ * so set `disableOpenOnFocus = true`.
28
+ *
29
+ * - When validating the form at the Confirmation step, if the country input
30
+ * is required but empty, the form may automatically focus the country input.
31
+ * In this case, set `disableOpenOnFocus = true` to prevent the dropdown
32
+ * from opening automatically during validation focus.
33
+ *
24
34
  * @default false
25
35
  */
26
36
  disableOpenOnFocus?: boolean;
@@ -9,10 +9,12 @@ const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOn
9
9
  const [isDropdownOpen, setIsDropdownOpen] = (0, react_1.useState)(false);
10
10
  const lockOpen = (0, react_1.useRef)(false);
11
11
  const timeout = (0, react_1.useRef)();
12
- (0, react_1.useEffect)(() => clearTimeout(timeout.current), []);
12
+ const isFocusedRef = (0, react_1.useRef)(isFocused);
13
+ (0, react_1.useEffect)(() => () => clearTimeout(timeout.current), []);
13
14
  const debounceSetFocus = (0, react_1.useCallback)((0, Debounce_1.debounce)((value) => {
15
+ isFocusedRef.current = value;
14
16
  setIsFocused(value);
15
- }, duration), []);
17
+ }, duration), [isFocusedRef, setIsFocused]);
16
18
  const onTriggerClicked = () => {
17
19
  setIsDropdownOpen(true);
18
20
  debounceSetFocus(true);
@@ -36,7 +38,7 @@ const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOn
36
38
  ref === null || ref === void 0 ? void 0 : ref.blur();
37
39
  };
38
40
  const _onFocus = (0, react_1.useCallback)(() => {
39
- if (!isFocused) {
41
+ if (!isFocusedRef.current) {
40
42
  if (!onlyAutoOpenWhenInputEmpty || !(ref === null || ref === void 0 ? void 0 : ref.value)) {
41
43
  setIsDropdownOpen(!disableOpenOnFocus);
42
44
  lockOpen.current = true;
@@ -46,10 +48,10 @@ const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOn
46
48
  }
47
49
  }
48
50
  debounceSetFocus(true);
49
- }, [setIsFocused, isFocused, isDropdownOpen, setIsDropdownOpen, disableOpenOnFocus]);
51
+ }, [onlyAutoOpenWhenInputEmpty, disableOpenOnFocus, ref, isFocusedRef, setIsDropdownOpen, lockOpen, timeout]);
50
52
  const _onBlur = (0, react_1.useCallback)(() => {
51
53
  debounceSetFocus(false);
52
- }, [setIsFocused]);
54
+ }, [debounceSetFocus]);
53
55
  (0, react_1.useEffect)(() => {
54
56
  if (!ref)
55
57
  return;
@@ -57,8 +59,6 @@ const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOn
57
59
  ref.addEventListener('blur', _onBlur);
58
60
  ref.addEventListener('click', _onFocus);
59
61
  return () => {
60
- if (!ref)
61
- return;
62
62
  ref.removeEventListener('focus', _onFocus);
63
63
  ref.removeEventListener('blur', _onBlur);
64
64
  ref.removeEventListener('click', _onFocus);
@@ -1 +1 @@
1
- {"version":3,"file":"AutoFocusOnSelect.js","sourceRoot":"/","sources":["src/hooks/AutoFocusOnSelect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { debounce } from '../util/Debounce';\n\nexport interface UseAutoFocusOnSelectProps {\n /**\n * Reference to the input element that should be managed by the hook.\n * Required for attaching focus, blur, and click event listeners.\n */\n ref: HTMLInputElement | null;\n /**\n * If `true`, the dropdown will only auto-open when the input field is empty.\n *\n * @default false\n */\n onlyAutoOpenWhenInputEmpty?: boolean;\n /**\n * If `true`, the input will regain focus after an item is selected.\n * If `false`, the input will blur after selection.\n *\n * @default true\n */\n focusOnSelected?: boolean;\n /**\n * If `true`, disables automatically opening the dropdown\n * when the input element receives focus.\n *\n * @default false\n */\n disableOpenOnFocus?: boolean;\n}\n\nconst duration = 300;\n\nexport const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOnSelected = true, disableOpenOnFocus = false }: UseAutoFocusOnSelectProps) => {\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const lockOpen = useRef<boolean>(false);\n const timeout = useRef<NodeJS.Timeout>();\n\n useEffect(() => clearTimeout(timeout.current), []);\n\n const debounceSetFocus = useCallback(\n debounce((value) => {\n setIsFocused(value);\n }, duration),\n []\n );\n\n const onTriggerClicked = () => {\n setIsDropdownOpen(true);\n debounceSetFocus(true);\n };\n\n const onDropdownClosed = (e: Event) => {\n const composedPath = e.composedPath() as HTMLElement[];\n if (composedPath.some((el) => el.isSameNode?.(ref))) {\n return;\n }\n if (!lockOpen.current) {\n setIsDropdownOpen(false);\n }\n debounceSetFocus(false);\n };\n\n const onItemSelected = () => {\n if (!lockOpen.current) setIsDropdownOpen(false);\n if (focusOnSelected) ref?.focus();\n else ref?.blur();\n };\n\n const _onFocus = useCallback(() => {\n if (!isFocused) {\n if (!onlyAutoOpenWhenInputEmpty || !ref?.value) {\n setIsDropdownOpen(!disableOpenOnFocus);\n lockOpen.current = true;\n timeout.current = setTimeout(() => {\n lockOpen.current = false;\n }, duration);\n }\n }\n debounceSetFocus(true);\n }, [setIsFocused, isFocused, isDropdownOpen, setIsDropdownOpen, disableOpenOnFocus]);\n\n const _onBlur = useCallback(() => {\n debounceSetFocus(false);\n }, [setIsFocused]);\n\n useEffect(() => {\n if (!ref) return;\n ref.addEventListener('focus', _onFocus);\n ref.addEventListener('blur', _onBlur);\n ref.addEventListener('click', _onFocus);\n return () => {\n if (!ref) return;\n ref.removeEventListener('focus', _onFocus);\n ref.removeEventListener('blur', _onBlur);\n ref.removeEventListener('click', _onFocus);\n };\n }, [ref, _onFocus, _onBlur]);\n return {\n isFocused,\n isDropdownOpen,\n onDropdownClosed,\n onTriggerClicked,\n onItemSelected,\n setIsDropdownOpen,\n };\n};\n"]}
1
+ {"version":3,"file":"AutoFocusOnSelect.js","sourceRoot":"/","sources":["src/hooks/AutoFocusOnSelect.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { debounce } from '../util/Debounce';\n\nexport interface UseAutoFocusOnSelectProps {\n /**\n * Reference to the input element that should be managed by the hook.\n * Required for attaching focus, blur, and click event listeners.\n */\n ref: HTMLInputElement | null;\n /**\n * If `true`, the dropdown will only auto-open when the input field is empty.\n *\n * @default false\n */\n onlyAutoOpenWhenInputEmpty?: boolean;\n /**\n * If `true`, the input will regain focus after an item is selected.\n * If `false`, the input will blur after selection.\n *\n * @default true\n */\n focusOnSelected?: boolean;\n /**\n * If `true`, prevents the dropdown from automatically opening\n * when the input element receives focus.\n *\n * Examples:\n * - `EnhancedPhoneNumberField` has two parts: the flag selector and the number input.\n * Clicking the number input should not trigger the flag selector to open,\n * so set `disableOpenOnFocus = true`.\n *\n * - When validating the form at the Confirmation step, if the country input\n * is required but empty, the form may automatically focus the country input.\n * In this case, set `disableOpenOnFocus = true` to prevent the dropdown\n * from opening automatically during validation focus.\n *\n * @default false\n */\n disableOpenOnFocus?: boolean;\n}\n\nconst duration = 300;\n\nexport const useAutoFocusOnSelect = ({ ref, onlyAutoOpenWhenInputEmpty = false, focusOnSelected = true, disableOpenOnFocus = false }: UseAutoFocusOnSelectProps) => {\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const lockOpen = useRef<boolean>(false);\n const timeout = useRef<NodeJS.Timeout>();\n const isFocusedRef = useRef(isFocused);\n\n useEffect(() => () => clearTimeout(timeout.current), []);\n\n const debounceSetFocus = useCallback(\n debounce((value: boolean) => {\n isFocusedRef.current = value;\n setIsFocused(value);\n }, duration),\n [isFocusedRef, setIsFocused]\n );\n\n const onTriggerClicked = () => {\n setIsDropdownOpen(true);\n debounceSetFocus(true);\n };\n\n const onDropdownClosed = (e: Event) => {\n const composedPath = e.composedPath() as HTMLElement[];\n if (composedPath.some((el) => el.isSameNode?.(ref))) {\n return;\n }\n if (!lockOpen.current) {\n setIsDropdownOpen(false);\n }\n debounceSetFocus(false);\n };\n\n const onItemSelected = () => {\n if (!lockOpen.current) setIsDropdownOpen(false);\n if (focusOnSelected) ref?.focus();\n else ref?.blur();\n };\n\n const _onFocus = useCallback(() => {\n if (!isFocusedRef.current) {\n if (!onlyAutoOpenWhenInputEmpty || !ref?.value) {\n setIsDropdownOpen(!disableOpenOnFocus);\n lockOpen.current = true;\n timeout.current = setTimeout(() => {\n lockOpen.current = false;\n }, duration);\n }\n }\n debounceSetFocus(true);\n }, [onlyAutoOpenWhenInputEmpty, disableOpenOnFocus, ref, isFocusedRef, setIsDropdownOpen, lockOpen, timeout]);\n\n const _onBlur = useCallback(() => {\n debounceSetFocus(false);\n }, [debounceSetFocus]);\n\n useEffect(() => {\n if (!ref) return;\n ref.addEventListener('focus', _onFocus);\n ref.addEventListener('blur', _onBlur);\n ref.addEventListener('click', _onFocus);\n return () => {\n ref.removeEventListener('focus', _onFocus);\n ref.removeEventListener('blur', _onBlur);\n ref.removeEventListener('click', _onFocus);\n };\n }, [ref, _onFocus, _onBlur]);\n\n return {\n isFocused,\n isDropdownOpen,\n onDropdownClosed,\n onTriggerClicked,\n onItemSelected,\n setIsDropdownOpen,\n };\n};\n"]}
@@ -5,8 +5,32 @@ export interface UseCurrencyProps {
5
5
  hideDecimals?: boolean;
6
6
  disableLocalization?: boolean;
7
7
  disableLoading?: boolean;
8
- originalCurrencyCode?: string;
8
+ fromCurrencyCode?: string;
9
+ toCurrencyCode?: string;
9
10
  }
11
+ export type UseCurrencyDisplayProps = UseCurrencyProps & {
12
+ forceHideDecimals?: boolean;
13
+ };
14
+ /**
15
+ * Public hook for displaying a converted, formatted currency value.
16
+ *
17
+ * Resolves decimal visibility by reconciling the caller's `hideDecimals`
18
+ * prop with the hotel-level `alwaysShowDecimals` override from
19
+ * `HotelOverridesContext`, then delegates to the internal `useCurrency` hook.
20
+ *
21
+ * @param props - See {@link UseCurrencyDisplayProps}
22
+ * @returns `{ isLoading, symbol, prettyValue, value }` — see `useCurrency`
23
+ *
24
+ * @example
25
+ * const { symbol, prettyValue } = useCurrencyDisplay({ children: 1200, hideDecimals: true });
26
+ * // → { symbol: '$', prettyValue: '1,200' }
27
+ */
28
+ export declare const useCurrencyDisplay: (props: UseCurrencyDisplayProps) => {
29
+ isLoading: boolean;
30
+ symbol: string;
31
+ prettyValue: string | number;
32
+ value: number;
33
+ };
10
34
  declare const useCurrency: (props: UseCurrencyProps) => {
11
35
  isLoading: boolean;
12
36
  symbol: string;
@@ -1,16 +1,62 @@
1
1
  "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
2
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
15
  };
5
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.useCurrencyDisplay = void 0;
6
18
  const react_1 = require("react");
7
19
  const contexts_1 = require("../contexts");
8
20
  const CurrentHotelHook_1 = require("./CurrentHotelHook");
9
21
  const CurrencyProvider_1 = __importDefault(require("../providers/CurrencyProvider"));
22
+ /**
23
+ * Public hook for displaying a converted, formatted currency value.
24
+ *
25
+ * Resolves decimal visibility by reconciling the caller's `hideDecimals`
26
+ * prop with the hotel-level `alwaysShowDecimals` override from
27
+ * `HotelOverridesContext`, then delegates to the internal `useCurrency` hook.
28
+ *
29
+ * @param props - See {@link UseCurrencyDisplayProps}
30
+ * @returns `{ isLoading, symbol, prettyValue, value }` — see `useCurrency`
31
+ *
32
+ * @example
33
+ * const { symbol, prettyValue } = useCurrencyDisplay({ children: 1200, hideDecimals: true });
34
+ * // → { symbol: '$', prettyValue: '1,200' }
35
+ */
36
+ const useCurrencyDisplay = (props) => {
37
+ const { hideDecimals, forceHideDecimals } = props, rest = __rest(props, ["hideDecimals", "forceHideDecimals"]);
38
+ const hotelOverridesContext = (0, react_1.useContext)(contexts_1.HotelOverridesContext);
39
+ const hideEntryDecimals = (0, react_1.useMemo)(() => {
40
+ // First we check if decimals must absolutely not be displayed
41
+ if (forceHideDecimals === true) {
42
+ return true;
43
+ }
44
+ // Then we check if the API overrides the default currency display state
45
+ if (hotelOverridesContext.alwaysShowDecimals === true) {
46
+ return false;
47
+ }
48
+ // Then we rely on how developers origally intened the UI to funciton.
49
+ return hideDecimals;
50
+ }, [forceHideDecimals, hideDecimals, hotelOverridesContext.alwaysShowDecimals]);
51
+ return useCurrency(Object.assign(Object.assign({}, rest), { hideDecimals: hideEntryDecimals }));
52
+ };
53
+ exports.useCurrencyDisplay = useCurrencyDisplay;
10
54
  const useCurrency = (props) => {
11
55
  var _a;
12
56
  const { currentCurrency } = (0, react_1.useContext)(contexts_1.CompanyContext);
13
57
  const { hotel } = (0, CurrentHotelHook_1.useCurrentHotel)();
58
+ const toCurrencyCode = props.toCurrencyCode ? props.toCurrencyCode : currentCurrency;
59
+ const fromCurrencyCode = (_a = props.fromCurrencyCode) !== null && _a !== void 0 ? _a : hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency;
14
60
  const [value, setValue] = (0, react_1.useState)(0);
15
61
  const [isLoading, setIsLoading] = (0, react_1.useState)(false);
16
62
  const toLocalString = (original, toFixed) => {
@@ -26,14 +72,13 @@ const useCurrency = (props) => {
26
72
  let isCancelled = false;
27
73
  setIsLoading(true);
28
74
  setTimeout(() => {
29
- var _a;
30
75
  if (!isCancelled) {
31
76
  setIsLoading(false);
32
77
  if (isNaN(props.children)) {
33
78
  setValue(props.children);
34
79
  }
35
80
  else {
36
- const totalValue = CurrencyProvider_1.default.convertPrice(props.children, !props.hideDecimals, currentCurrency, (_a = props.originalCurrencyCode) !== null && _a !== void 0 ? _a : hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency);
81
+ const totalValue = CurrencyProvider_1.default.convertPrice(props.children, !props.hideDecimals, toCurrencyCode, fromCurrencyCode);
37
82
  if (!isCancelled) {
38
83
  setValue(totalValue);
39
84
  }
@@ -44,14 +89,14 @@ const useCurrency = (props) => {
44
89
  setIsLoading(false);
45
90
  isCancelled = true;
46
91
  };
47
- }, [props.children, currentCurrency, props.originalCurrencyCode, CurrencyProvider_1.default.getRatesForCurrencyCode((_a = props.originalCurrencyCode) !== null && _a !== void 0 ? _a : hotel === null || hotel === void 0 ? void 0 : hotel.defaultCurrency)]);
92
+ }, [props.children, props.hideDecimals, toCurrencyCode, fromCurrencyCode, CurrencyProvider_1.default.getRatesForCurrencyCode(fromCurrencyCode)]);
48
93
  return (0, react_1.useMemo)(() => {
49
94
  const stringVal = props.disableLocalization ? value.toString() : value === null || value === void 0 ? void 0 : value.toLocaleString();
50
- let symbol = CurrencyProvider_1.default.getSymbol(currentCurrency);
95
+ let symbol = CurrencyProvider_1.default.getSymbol(toCurrencyCode);
51
96
  if (props.removeCurrencyAfterChar) {
52
97
  const priceLength = String(value).length;
53
98
  if (priceLength + symbol.length > props.removeCurrencyAfterChar) {
54
- symbol = CurrencyProvider_1.default.getShortSymbol(currentCurrency);
99
+ symbol = CurrencyProvider_1.default.getShortSymbol(toCurrencyCode);
55
100
  if (priceLength + symbol.length > props.removeCurrencyAfterChar) {
56
101
  symbol = '';
57
102
  }