@roomstay/frontend 2.6.56 → 2.6.58

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 (134) hide show
  1. package/dist/370.bundle.js +1 -1
  2. package/dist/493.bundle.js +1 -1
  3. package/dist/537.bundle.js +1 -0
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/main.bundle.js +1 -1
  6. package/dist/src/api/AvailabilityAPI.js +13 -6
  7. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  8. package/dist/src/components/generic/Event/EventCard.js +6 -2
  9. package/dist/src/components/generic/Event/EventCard.js.map +1 -1
  10. package/dist/src/components/generic/PaymentCard/PaymentCardInput.js +19 -4
  11. package/dist/src/components/generic/PaymentCard/PaymentCardInput.js.map +1 -1
  12. package/dist/src/components/generic/RadioButtonGroup/RadioButton.d.ts +1 -0
  13. package/dist/src/components/generic/RadioButtonGroup/RadioButton.js +2 -2
  14. package/dist/src/components/generic/RadioButtonGroup/RadioButton.js.map +1 -1
  15. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.d.ts +3 -2
  16. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +10 -10
  17. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  18. package/dist/src/components/generic/date/DatePicker.d.ts +5 -0
  19. package/dist/src/components/generic/date/DatePicker.js +7 -3
  20. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  21. package/dist/src/components/generic/date/DatePickerDay.js +13 -3
  22. package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
  23. package/dist/src/components/navigation/Header.js +21 -12
  24. package/dist/src/components/navigation/Header.js.map +1 -1
  25. package/dist/src/components/reservation/ReservationItem.js +5 -2
  26. package/dist/src/components/reservation/ReservationItem.js.map +1 -1
  27. package/dist/src/components/reservation/ReservationList.js +1 -1
  28. package/dist/src/components/reservation/ReservationList.js.map +1 -1
  29. package/dist/src/components/steps/addons/AddonCard.js +2 -1
  30. package/dist/src/components/steps/addons/AddonCard.js.map +1 -1
  31. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +2 -2
  32. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
  33. package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.d.ts +6 -0
  34. package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.js +47 -0
  35. package/dist/src/components/steps/common/ItemisedFeesListing/ItemisedFeesListing.js.map +1 -0
  36. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.d.ts +6 -0
  37. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.js +44 -0
  38. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.js.map +1 -0
  39. package/dist/src/components/steps/confirmation/PaymentInformation.js +4 -1
  40. package/dist/src/components/steps/confirmation/PaymentInformation.js.map +1 -1
  41. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +13 -2
  42. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
  43. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +7 -4
  44. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
  45. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js +3 -1
  46. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.js.map +1 -1
  47. package/dist/src/components/summary/BEMobileSummaryModal.js +6 -2
  48. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  49. package/dist/src/components/summary/BESummary.js +19 -3
  50. package/dist/src/components/summary/BESummary.js.map +1 -1
  51. package/dist/src/components/summary/BESummaryAddonRow.js +14 -5
  52. package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
  53. package/dist/src/components/summary/BESummaryRoomRow.js +7 -3
  54. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  55. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +5 -0
  56. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  57. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +180 -2
  58. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  59. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +3 -0
  60. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  61. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +9 -7
  62. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  63. package/dist/src/contexts/DatePickerContext.d.ts +1 -0
  64. package/dist/src/contexts/DatePickerContext.js.map +1 -1
  65. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js +8 -2
  66. package/dist/src/contexts/Members/AuthenticationContext/AuthenticationContextProvider.js.map +1 -1
  67. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js +48 -8
  68. package/dist/src/contexts/Members/RoomstayMemberContext/RoomstayMemberContextProvider.js.map +1 -1
  69. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +1 -1
  70. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  71. package/dist/src/handlers/payment/PaymentHandler.d.ts +1 -0
  72. package/dist/src/handlers/payment/PaymentHandler.js.map +1 -1
  73. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js +13 -35
  74. package/dist/src/handlers/payment/VGSMemberPaymentHandler.js.map +1 -1
  75. package/dist/src/hooks/UpdateQueryParameters.d.ts +1 -1
  76. package/dist/src/hooks/UpdateQueryParameters.js +8 -3
  77. package/dist/src/hooks/UpdateQueryParameters.js.map +1 -1
  78. package/dist/src/models/Addon/Addon.d.ts +11 -1
  79. package/dist/src/models/Addon/Addon.js.map +1 -1
  80. package/dist/src/models/Api/HotelDTO.d.ts +2 -1
  81. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  82. package/dist/src/models/Api/ReservationsDTO.d.ts +7 -0
  83. package/dist/src/models/Api/ReservationsDTO.js.map +1 -1
  84. package/dist/src/models/BasketAddonRow.d.ts +2 -0
  85. package/dist/src/models/BasketAddonRow.js +25 -1
  86. package/dist/src/models/BasketAddonRow.js.map +1 -1
  87. package/dist/src/models/BasketRow.d.ts +4 -7
  88. package/dist/src/models/BasketRow.js +32 -25
  89. package/dist/src/models/BasketRow.js.map +1 -1
  90. package/dist/src/models/Client/Hotel/Hotel.d.ts +8 -0
  91. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  92. package/dist/src/models/Confirmation.d.ts +1 -2
  93. package/dist/src/models/Confirmation.js.map +1 -1
  94. package/dist/src/models/Fee.d.ts +32 -0
  95. package/dist/src/models/Fee.js +50 -0
  96. package/dist/src/models/Fee.js.map +1 -0
  97. package/dist/src/models/Room/Room.d.ts +7 -0
  98. package/dist/src/models/Room/Room.js +13 -0
  99. package/dist/src/models/Room/Room.js.map +1 -1
  100. package/dist/src/models/Room/RoomRate.d.ts +2 -0
  101. package/dist/src/models/Room/RoomRate.js +14 -0
  102. package/dist/src/models/Room/RoomRate.js.map +1 -1
  103. package/dist/src/models/Room/RoomRateNight.d.ts +3 -0
  104. package/dist/src/models/Room/RoomRateNight.js +3 -0
  105. package/dist/src/models/Room/RoomRateNight.js.map +1 -1
  106. package/dist/src/pages/account/Reservations/AccountReservationSinglePage.js.map +1 -1
  107. package/dist/src/pages/findReservation/FindReservationResults.js +18 -6
  108. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  109. package/dist/src/pages/findReservation/ReservationRow.js +3 -3
  110. package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
  111. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +6 -0
  112. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
  113. package/dist/src/providers/RoomstayThemeEngine.d.ts +1 -1
  114. package/dist/src/providers/RoomstayThemeEngine.js +20 -5
  115. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  116. package/dist/src/stories/RadioButtonGroup.stories.d.ts +1 -1
  117. package/dist/src/util/Analytics/GoogleAnalytics4.js +27 -12
  118. package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
  119. package/dist/src/util/Analytics/UniversalAnalytics.js +3 -3
  120. package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
  121. package/dist/src/util/DataLayer.d.ts +5 -1
  122. package/dist/src/util/DataLayer.js +9 -2
  123. package/dist/src/util/DataLayer.js.map +1 -1
  124. package/dist/src/util/EventsHelper.d.ts +4 -1
  125. package/dist/src/util/EventsHelper.js +15 -4
  126. package/dist/src/util/EventsHelper.js.map +1 -1
  127. package/dist/src/util/TotalCalculator.d.ts +1 -0
  128. package/dist/src/util/TotalCalculator.js +47 -9
  129. package/dist/src/util/TotalCalculator.js.map +1 -1
  130. package/dist/test.bundle.js +1 -1
  131. package/dist/vendors.bundle.js +1 -1
  132. package/package.json +2 -2
  133. package/dist/586.bundle.js +0 -1
  134. package/dist/850.bundle.js +0 -1
@@ -157,12 +157,14 @@ class AvailabilityAPI extends BaseAPI_1.default {
157
157
  if (response.ok) {
158
158
  const json = yield response.json();
159
159
  // Don't parse warnings when we're making a cross-hotel availability request
160
- if (json.warnings && json.warnings.length) {
161
- BasketContextErrorHandler_1.BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);
162
- this.calendarWarnings[id] = json.warnings;
163
- }
164
- else {
165
- BasketContextErrorHandler_1.BasketContextErrorHandler.handlePromoSuccess(promoCode);
160
+ if (parseErrors) {
161
+ if (json.warnings && json.warnings.length) {
162
+ BasketContextErrorHandler_1.BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);
163
+ this.calendarWarnings[id] = json.warnings;
164
+ }
165
+ else {
166
+ BasketContextErrorHandler_1.BasketContextErrorHandler.handlePromoSuccess(promoCode);
167
+ }
166
168
  }
167
169
  Object.values(json.prices).forEach((price) => {
168
170
  if (!AvailabilityAPI.minNightPrice || Number(price) < AvailabilityAPI.minNightPrice) {
@@ -373,6 +375,11 @@ class AvailabilityAPI extends BaseAPI_1.default {
373
375
  rateNight.tax = nightData.tax;
374
376
  rateNight.fee = nightData.fee;
375
377
  rateNight.date = day;
378
+ if (nightData.fees) {
379
+ for (const fee of nightData.fees) {
380
+ rateNight.fees.push({ name: fee.name, amount: fee.amount });
381
+ }
382
+ }
376
383
  rooms[roomCode].getRate(rateKey).nightRates[date] = rateNight;
377
384
  });
378
385
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AvailabilityAPI.js","sourceRoot":"/","sources":["src/api/AvailabilityAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport GetAvailabilityError from 'errors/GetAvailabilityError';\nimport { NoHotelSelectedError } from 'errors/NoHotelSelectedError';\nimport { RoomstayError } from 'errors/RoomstayError';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\n\nimport BaseAPI, { API_DATE_FORMAT, APIEndpoint } from '@/api/BaseAPI';\nimport BasketRow from '@/models/BasketRow';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomRateNight from '@/models/Room/RoomRateNight';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\ninterface IPriceByDay {\n [date: string]: number;\n}\ninterface INightStayByDay {\n [date: string]: number;\n}\n\ntype AvailabilityParams = {\n checkInDate: string;\n checkOutDate: string;\n adults: string;\n children: string;\n infants: string;\n promoCode?: string;\n promoOnly?: string;\n roomCode?: string;\n memberNumber?: string;\n includeHotelInfo: string;\n};\n\nexport default class AvailabilityAPI extends BaseAPI {\n public static policyMappings: { guarantee: { [name: string]: string }; cancel: { [name: string]: string } } = { guarantee: {}, cancel: {} };\n public static maxNightPrice = 0;\n public static minNightPrice: number | null = null;\n private roomTypesData: any = null;\n private ratePlansData: any = null;\n private cachedMinNightStay: { [id: string]: any } = {};\n private cachedAvailability: { [id: string]: Room[] };\n private calendar: { [id: string]: IPriceByDay } = {};\n private arrivalMinNightStay: { [id: string]: INightStayByDay } = {};\n private arrivalMaxNightStay: { [id: string]: INightStayByDay } = {};\n private crossSellHotelInfo: { [hotelId: string]: any } = {};\n private calendarWarnings: { [id: string]: string[] } = {};\n private availabilityWarnings: { [id: string]: string[] } = {};\n private rooms: { [code: string]: Room };\n private rates: { [code: string]: RoomRate };\n private fetchDataPromise: { [dateRange: string]: Promise<Room[]> | null } = {};\n private calendarPromises: {\n [id: string]: Promise<{\n prices: IPriceByDay;\n arrivalMinNightStay: INightStayByDay;\n arrivalMaxNightStay: INightStayByDay;\n }>;\n } = {};\n private cachedMidNightStayPromises: { [id: string]: Promise<any> } = {};\n\n public constructor() {\n super();\n\n this.rooms = {};\n this.rates = {};\n\n this.cachedAvailability = {};\n }\n\n public getCrossSellHotelInfo(hotelId: number | string) {\n return this.crossSellHotelInfo[String(hotelId)] ?? {};\n }\n\n public getCheapestPricePerDay = async (\n fromDate: dayjs.Dayjs,\n toDate: dayjs.Dayjs,\n adults: number,\n children: number,\n infants: number,\n promoCode: string,\n roomCode: string,\n hotelId: string,\n memberNumber: string | number = '',\n isCrossSell = false\n ): Promise<{ [date: string]: number }> => {\n let dayPricingData = null;\n if (fromDate === undefined) {\n return {};\n }\n\n try {\n const response = await this.fetchCalendar(fromDate, adults, children, infants, promoCode, roomCode, hotelId, memberNumber, undefined, isCrossSell);\n dayPricingData = response?.prices;\n } catch (ex) {\n if (!(ex instanceof GetAvailabilityError)) {\n throw ex;\n } else {\n return {};\n }\n }\n\n if (!dayPricingData) {\n return {};\n }\n\n const daysBetween = toDate.diff(fromDate, 'day');\n const prices: any = {};\n\n for (let i = 0; i <= daysBetween; i++) {\n const currentDay = fromDate.add(i, 'day');\n prices[currentDay.format(API_DATE_FORMAT)] = dayPricingData[currentDay.format(API_DATE_FORMAT)];\n }\n\n return prices;\n };\n\n public getCheapestPriceForDay = async (\n day: dayjs.Dayjs,\n adults: number,\n children: number,\n infants: number,\n promoCode: string,\n roomCode: string,\n hotelID: string,\n memberNumber: string | number = '',\n parseErrors = true\n ): Promise<{\n price: number;\n perCent: number;\n arrivalMinNightStay: number;\n arrivalMaxNightStay: number;\n } | null> => {\n if (!day || day.isBefore(dayjs(), 'date')) return null;\n\n let dataForQuery = null;\n try {\n dataForQuery = await this.fetchCalendar(day, adults, children, infants, promoCode, roomCode, hotelID, memberNumber, parseErrors, false);\n } catch (ex) {\n console.log(ex);\n }\n\n if (!dataForQuery?.prices) {\n return null;\n }\n\n const priceForDay = dataForQuery.prices[day.format(API_DATE_FORMAT)];\n const arrivalMinNightStay = dataForQuery.arrivalMinNightStay[day.format(API_DATE_FORMAT)];\n const arrivalMaxNightStay = dataForQuery.arrivalMaxNightStay[day.format(API_DATE_FORMAT)];\n\n return {\n price: priceForDay,\n perCent: 0,\n arrivalMinNightStay,\n arrivalMaxNightStay,\n };\n };\n\n public fetchCalendar = async (\n month: dayjs.Dayjs,\n adults: number,\n children: number,\n infants: number,\n promoCode: string,\n roomCode: string,\n hotelId: string,\n memberNumber: number | string = '',\n parseErrors = true,\n isCrossSell = false\n ): Promise<{\n prices: IPriceByDay;\n arrivalMinNightStay: INightStayByDay;\n arrivalMaxNightStay: INightStayByDay;\n } | null> => {\n month = month ?? dayjs();\n\n let fromMonth = month.startOf('month');\n fromMonth = Number(fromMonth.format('M')) % 2 === 0 ? fromMonth.subtract(1, 'month') : (fromMonth = month);\n\n fromMonth = fromMonth.startOf('month');\n\n const now = dayjs();\n if (fromMonth.isBefore(now, 'date')) {\n fromMonth = now;\n }\n\n const toMonth = fromMonth.add(1, 'month').endOf('month');\n\n const fromDatePretty = fromMonth.format(API_DATE_FORMAT);\n const toDatePretty = toMonth.format(API_DATE_FORMAT);\n\n const targetHotel = hotelId;\n\n if (!targetHotel) {\n return null;\n }\n\n const id = this.getQueryID([targetHotel, fromDatePretty, toDatePretty, adults, children, infants, promoCode, roomCode, isCrossSell, memberNumber]);\n\n // Don't parse warnings when we're making a cross-hotel availability request\n if (this.calendar[id] && parseErrors) {\n if (this.calendarWarnings[id]) {\n BasketContextErrorHandler.handleAvailabilityWarnings(this.calendarWarnings[id]);\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n return {\n prices: this.calendar[id],\n arrivalMinNightStay: this.arrivalMinNightStay[id],\n arrivalMaxNightStay: this.arrivalMaxNightStay[id],\n };\n }\n\n if (!!this.calendarPromises[id]) {\n return this.calendarPromises[id];\n }\n\n this.calendarPromises[id] = new Promise(async (resolve, reject) => {\n const searchParams: AvailabilityParams = {\n checkInDate: fromDatePretty,\n checkOutDate: toDatePretty,\n adults: `${adults}`,\n children: `${children}`,\n infants: `${infants}`,\n promoCode: `${promoCode}`,\n includeHotelInfo: isCrossSell ? `0` : `1`,\n memberNumber: `${memberNumber}`,\n ...(roomCode ? { roomCode } : {}),\n };\n const queryParams = new URLSearchParams(searchParams);\n\n const apiPath = `${this.getApiPath()}availability/calendar/${targetHotel}?${queryParams.toString()}`;\n\n const response = await fetch(apiPath, {\n credentials: 'omit',\n headers: await BaseAPI.getBaseHeaders(),\n });\n\n if (response.ok) {\n const json = await response.json();\n\n // Don't parse warnings when we're making a cross-hotel availability request\n if (json.warnings && json.warnings.length) {\n BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);\n this.calendarWarnings[id] = json.warnings;\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n Object.values(json.prices).forEach((price: any) => {\n if (!AvailabilityAPI.minNightPrice || Number(price) < AvailabilityAPI.minNightPrice) {\n AvailabilityAPI.minNightPrice = Number(price);\n }\n\n if (AvailabilityAPI.maxNightPrice < Number(price)) {\n AvailabilityAPI.maxNightPrice = Number(price);\n }\n });\n\n if (hotelId) {\n this.crossSellHotelInfo[String(hotelId)] = json.hotel;\n }\n this.arrivalMinNightStay[id] = json?.arrivalMinNightStay ?? {};\n this.arrivalMaxNightStay[id] = json?.arrivalMaxNightStay ?? {};\n this.calendar[id] = json.prices;\n resolve({\n prices: this.calendar[id],\n arrivalMinNightStay: this.arrivalMinNightStay[id],\n arrivalMaxNightStay: this.arrivalMaxNightStay[id],\n });\n } else {\n reject(new GetAvailabilityError(fromMonth, toMonth));\n }\n });\n\n return this.calendarPromises[id];\n };\n\n public invalidateAvailability = async (basketRow: BasketRow, hotelId: string) => {\n const today = dayjs();\n\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const infants = basketRow.getInfants();\n const promoCode = basketRow.getPromoCode();\n const roomCode = basketRow.getRoomCode();\n\n let toDate = basketRow.getEndDate();\n const fromDate = basketRow.getStartDate()?.isBefore(today, 'day') ? today : basketRow.getStartDate();\n\n let oneNightStay = false;\n if (fromDate.isSameOrAfter(toDate, 'date')) {\n oneNightStay = true;\n toDate = fromDate.add(1, 'day');\n }\n\n const id = this.getQueryID([hotelId, fromDate, toDate, adults, children, infants, promoCode, roomCode, RoomstayThemeEngine.selectedLang, oneNightStay]);\n delete this.cachedAvailability[id];\n };\n\n public fetchMinNightStayData = async (basketRow: BasketRow, hotelID: string, memberNumber?: string) => {\n // TODO: refactor this breakdown.\n\n if (!basketRow) {\n return;\n }\n\n if (!hotelID) {\n throw new NoHotelSelectedError();\n }\n\n const today = dayjs();\n\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const infants = basketRow.getInfants();\n const promoCode = basketRow.getPromoCode();\n const roomCode = basketRow.getRoomCode();\n\n let toDate = basketRow.getEndDate();\n const fromDate = basketRow.getStartDate()?.isBefore(today, 'day') ? today : basketRow.getStartDate();\n\n let oneNightStay = false;\n if (fromDate.isSameOrAfter(toDate, 'date')) {\n oneNightStay = true;\n toDate = fromDate.add(1, 'day');\n }\n\n const id = this.getQueryID([hotelID, fromDate, toDate, adults, children, promoCode, roomCode, RoomstayThemeEngine.selectedLang, oneNightStay, memberNumber]);\n\n if (this.cachedMinNightStay[id]) {\n return this.cachedMinNightStay[id];\n }\n\n if (!!this.cachedMidNightStayPromises[id]) {\n return this.cachedMidNightStayPromises[id];\n }\n\n this.cachedMidNightStayPromises[id] = new Promise(async (resolve) => {\n const json = await this.get(\n APIEndpoint.MinNightStay,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n infants,\n promoCode,\n memberNumber,\n ...(roomCode ? { roomCode } : {}),\n },\n '',\n hotelID\n );\n\n delete this.cachedMidNightStayPromises[id];\n this.cachedMinNightStay[id] = json;\n\n resolve(this.cachedMinNightStay[id]);\n });\n\n return this.cachedMidNightStayPromises[id];\n };\n\n /**\n * Fetches availability data.\n *\n * @param basketRow - The basket row containing booking details.\n * @param hotelId - The unique identifier of the hotel.\n * @param memberNumber - (Optional) The membership number of the user.\n * @param ignoreRoomFilter - If true, skips sending the room code filter in the API request. Default: false.\n * @returns The fetched availability data.\n */\n public fetchAvailabilityData = async (basketRow: BasketRow, hotelId: string, memberNumber?: string, ignoreRoomFilter = false) => {\n const today = dayjs();\n\n if (!basketRow) {\n return;\n }\n\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const infants = basketRow.getInfants();\n const promoCode = basketRow.getPromoCode();\n const promoOnly = basketRow.getPromoOnly();\n const enableRoomCodeFilter = basketRow.getEnableRoomCodeFilter();\n // If ignoreRoomFilter true, skips sending the room code filter\n // Otherwise, if the the URL's room parameter is present, send the room code filter\n const roomCodeParam = ignoreRoomFilter ? '' : enableRoomCodeFilter ? basketRow.getRoomCode() : '';\n\n let toDate = basketRow.getEndDate();\n const fromDate = basketRow.getStartDate()?.isBefore(today, 'day') ? today : basketRow.getStartDate();\n\n let oneNightStay = false;\n if (fromDate.isSameOrAfter(toDate, 'date')) {\n oneNightStay = true;\n toDate = fromDate.add(1, 'day');\n }\n\n const id = this.getQueryID([hotelId, fromDate, toDate, adults, children, infants, promoCode, roomCodeParam, RoomstayThemeEngine.selectedLang, oneNightStay, memberNumber]);\n\n // Don't parse warnings when we're making a cross-hotel availability request\n if (this.cachedAvailability[id]) {\n if (this.availabilityWarnings[id]) {\n BasketContextErrorHandler.handleAvailabilityWarnings(this.availabilityWarnings[id]);\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n return this.cachedAvailability[id];\n }\n\n if (!!this.fetchDataPromise[id]) {\n return this.fetchDataPromise[id];\n } else {\n this.fetchDataPromise[id] = new Promise<Room[]>(async (resolve, reject) => {\n try {\n const json = await this.get(\n APIEndpoint.Availability,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n infants,\n promoCode,\n promoOnly,\n memberNumber,\n ...(roomCodeParam ? { roomCode: roomCodeParam } : {}),\n },\n '',\n hotelId\n );\n\n this.fetchDataPromise[id] = null;\n\n const dateToObject = (data: any) => {\n data.validUntil = dayjs(data.validUntil);\n data.cachedSince = dayjs(data.cachedSince);\n\n return data;\n };\n\n if (json.guaranteePolicies) {\n Object.keys(json.guaranteePolicies).map((code) => {\n AvailabilityAPI.policyMappings.guarantee[code] = json.guaranteePolicies[code];\n });\n }\n\n if (json.cancelPolicies) {\n Object.keys(json.cancelPolicies).map((code) => {\n AvailabilityAPI.policyMappings.cancel[code] = json.cancelPolicies[code];\n });\n }\n\n if (json.roomTypes) {\n const allRoomsByKey = Object.keys(json.roomTypes);\n if (allRoomsByKey.length) {\n this.roomTypesData = dateToObject(json.roomTypes);\n\n allRoomsByKey.forEach((roomCode: any) => {\n this.roomTypesData[roomCode].code = roomCode;\n this.rooms[roomCode] = Room.fromData(this.roomTypesData[roomCode]);\n });\n }\n }\n\n if (json.ratePlans) {\n const allRatesByKey = Object.keys(json.ratePlans);\n if (allRatesByKey.length) {\n this.ratePlansData = dateToObject(json.ratePlans);\n\n allRatesByKey.forEach((rateCode: any) => {\n this.ratePlansData[rateCode].code = rateCode;\n\n this.rates[rateCode] = RoomRate.fromData(this.ratePlansData[rateCode]);\n });\n }\n }\n\n if (json.roomNights) {\n const roomNights = json.roomNights;\n\n const rooms: { [rate: string]: Room } = {};\n\n const allNightsByKey = Object.keys(roomNights);\n\n let first = true;\n if (allNightsByKey.length) {\n allNightsByKey.forEach((date: string) => {\n const day = dayjs(date);\n Object.keys(roomNights[date]).forEach((roomCode: string) => {\n if (first) {\n const room = Room.fromData(this.roomTypesData[roomCode]);\n room.code = roomCode;\n rooms[roomCode] = room;\n }\n\n Object.keys(roomNights[date][roomCode].rates).forEach((rateKey) => {\n const nightData = roomNights[date][roomCode].rates[rateKey];\n\n if (first) {\n const rate = RoomRate.fromData(this.ratePlansData[rateKey]);\n rate.code = rateKey;\n rooms[roomCode].addRate(rate);\n }\n\n if (oneNightStay && Object.keys(rooms[roomCode]?.getRate(rateKey)?.nightRates ?? {}).length) {\n return;\n }\n\n const rateNight = new RoomRateNight();\n rateNight.available = roomNights[date][roomCode].available;\n rateNight.cost = nightData.cost;\n rateNight.discount = nightData.discount;\n rateNight.total = nightData.total;\n rateNight.tax = nightData.tax;\n rateNight.fee = nightData.fee;\n rateNight.date = day;\n\n (rooms[roomCode].getRate(rateKey) as RoomRate).nightRates[date] = rateNight;\n });\n });\n\n first = false;\n });\n }\n\n const roomArray = Object.values(rooms);\n\n this.cachedAvailability[id] = roomArray;\n resolve(roomArray);\n }\n\n if (json.warnings?.length) {\n this.availabilityWarnings[id] = json.warnings;\n BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n resolve([]);\n } catch (ex) {\n reject();\n }\n }).catch((reason) => {\n throw new RoomstayError('Failed to load calendar availability');\n });\n\n return this.fetchDataPromise[id];\n }\n };\n\n public fetchAvailability = async ({\n fromDate,\n toDate,\n adults,\n children,\n infants,\n promoCode,\n roomCode,\n promoOnly,\n hotelId,\n }: {\n fromDate: dayjs.Dayjs;\n toDate: dayjs.Dayjs;\n adults: number;\n children?: number;\n infants: number;\n promoCode?: string;\n roomCode?: string;\n promoOnly?: boolean;\n hotelId: string;\n }) => {\n if (!fromDate || !toDate) return;\n\n return await this.get(\n APIEndpoint.Availability,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n infants,\n promoCode,\n promoOnly,\n ...(roomCode ? { roomCode } : {}),\n },\n '',\n hotelId\n );\n };\n\n private getQueryID = (params: any[]) => {\n return params.map((param) => (param && param.format ? param.format(API_DATE_FORMAT) : param)).join('-');\n };\n}\n"]}
1
+ {"version":3,"file":"AvailabilityAPI.js","sourceRoot":"/","sources":["src/api/AvailabilityAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport GetAvailabilityError from 'errors/GetAvailabilityError';\nimport { NoHotelSelectedError } from 'errors/NoHotelSelectedError';\nimport { RoomstayError } from 'errors/RoomstayError';\nimport { BasketContextErrorHandler } from 'handlers/BasketContextErrorHandler';\n\nimport BaseAPI, { API_DATE_FORMAT, APIEndpoint } from '@/api/BaseAPI';\nimport BasketRow from '@/models/BasketRow';\nimport { Room } from '@/models/Room/Room';\nimport { RoomRate } from '@/models/Room/RoomRate';\nimport RoomRateNight from '@/models/Room/RoomRateNight';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\ninterface IPriceByDay {\n [date: string]: number;\n}\ninterface INightStayByDay {\n [date: string]: number;\n}\n\ntype AvailabilityParams = {\n checkInDate: string;\n checkOutDate: string;\n adults: string;\n children: string;\n infants: string;\n promoCode?: string;\n promoOnly?: string;\n roomCode?: string;\n memberNumber?: string;\n includeHotelInfo: string;\n};\n\nexport default class AvailabilityAPI extends BaseAPI {\n public static policyMappings: { guarantee: { [name: string]: string }; cancel: { [name: string]: string } } = { guarantee: {}, cancel: {} };\n public static maxNightPrice = 0;\n public static minNightPrice: number | null = null;\n private roomTypesData: any = null;\n private ratePlansData: any = null;\n private cachedMinNightStay: { [id: string]: any } = {};\n private cachedAvailability: { [id: string]: Room[] };\n private calendar: { [id: string]: IPriceByDay } = {};\n private arrivalMinNightStay: { [id: string]: INightStayByDay } = {};\n private arrivalMaxNightStay: { [id: string]: INightStayByDay } = {};\n private crossSellHotelInfo: { [hotelId: string]: any } = {};\n private calendarWarnings: { [id: string]: string[] } = {};\n private availabilityWarnings: { [id: string]: string[] } = {};\n private rooms: { [code: string]: Room };\n private rates: { [code: string]: RoomRate };\n private fetchDataPromise: { [dateRange: string]: Promise<Room[]> | null } = {};\n private calendarPromises: {\n [id: string]: Promise<{\n prices: IPriceByDay;\n arrivalMinNightStay: INightStayByDay;\n arrivalMaxNightStay: INightStayByDay;\n }>;\n } = {};\n private cachedMidNightStayPromises: { [id: string]: Promise<any> } = {};\n\n public constructor() {\n super();\n\n this.rooms = {};\n this.rates = {};\n\n this.cachedAvailability = {};\n }\n\n public getCrossSellHotelInfo(hotelId: number | string) {\n return this.crossSellHotelInfo[String(hotelId)] ?? {};\n }\n\n public getCheapestPricePerDay = async (\n fromDate: dayjs.Dayjs,\n toDate: dayjs.Dayjs,\n adults: number,\n children: number,\n infants: number,\n promoCode: string,\n roomCode: string,\n hotelId: string,\n memberNumber: string | number = '',\n isCrossSell = false\n ): Promise<{ [date: string]: number }> => {\n let dayPricingData = null;\n if (fromDate === undefined) {\n return {};\n }\n\n try {\n const response = await this.fetchCalendar(fromDate, adults, children, infants, promoCode, roomCode, hotelId, memberNumber, undefined, isCrossSell);\n dayPricingData = response?.prices;\n } catch (ex) {\n if (!(ex instanceof GetAvailabilityError)) {\n throw ex;\n } else {\n return {};\n }\n }\n\n if (!dayPricingData) {\n return {};\n }\n\n const daysBetween = toDate.diff(fromDate, 'day');\n const prices: any = {};\n\n for (let i = 0; i <= daysBetween; i++) {\n const currentDay = fromDate.add(i, 'day');\n prices[currentDay.format(API_DATE_FORMAT)] = dayPricingData[currentDay.format(API_DATE_FORMAT)];\n }\n\n return prices;\n };\n\n public getCheapestPriceForDay = async (\n day: dayjs.Dayjs,\n adults: number,\n children: number,\n infants: number,\n promoCode: string,\n roomCode: string,\n hotelID: string,\n memberNumber: string | number = '',\n parseErrors = true\n ): Promise<{\n price: number;\n perCent: number;\n arrivalMinNightStay: number;\n arrivalMaxNightStay: number;\n } | null> => {\n if (!day || day.isBefore(dayjs(), 'date')) return null;\n\n let dataForQuery = null;\n try {\n dataForQuery = await this.fetchCalendar(day, adults, children, infants, promoCode, roomCode, hotelID, memberNumber, parseErrors, false);\n } catch (ex) {\n console.log(ex);\n }\n\n if (!dataForQuery?.prices) {\n return null;\n }\n\n const priceForDay = dataForQuery.prices[day.format(API_DATE_FORMAT)];\n const arrivalMinNightStay = dataForQuery.arrivalMinNightStay[day.format(API_DATE_FORMAT)];\n const arrivalMaxNightStay = dataForQuery.arrivalMaxNightStay[day.format(API_DATE_FORMAT)];\n\n return {\n price: priceForDay,\n perCent: 0,\n arrivalMinNightStay,\n arrivalMaxNightStay,\n };\n };\n\n public fetchCalendar = async (\n month: dayjs.Dayjs,\n adults: number,\n children: number,\n infants: number,\n promoCode: string,\n roomCode: string,\n hotelId: string,\n memberNumber: number | string = '',\n parseErrors = true,\n isCrossSell = false\n ): Promise<{\n prices: IPriceByDay;\n arrivalMinNightStay: INightStayByDay;\n arrivalMaxNightStay: INightStayByDay;\n } | null> => {\n month = month ?? dayjs();\n\n let fromMonth = month.startOf('month');\n fromMonth = Number(fromMonth.format('M')) % 2 === 0 ? fromMonth.subtract(1, 'month') : (fromMonth = month);\n\n fromMonth = fromMonth.startOf('month');\n\n const now = dayjs();\n if (fromMonth.isBefore(now, 'date')) {\n fromMonth = now;\n }\n\n const toMonth = fromMonth.add(1, 'month').endOf('month');\n\n const fromDatePretty = fromMonth.format(API_DATE_FORMAT);\n const toDatePretty = toMonth.format(API_DATE_FORMAT);\n\n const targetHotel = hotelId;\n\n if (!targetHotel) {\n return null;\n }\n\n const id = this.getQueryID([targetHotel, fromDatePretty, toDatePretty, adults, children, infants, promoCode, roomCode, isCrossSell, memberNumber]);\n\n // Don't parse warnings when we're making a cross-hotel availability request\n if (this.calendar[id] && parseErrors) {\n if (this.calendarWarnings[id]) {\n BasketContextErrorHandler.handleAvailabilityWarnings(this.calendarWarnings[id]);\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n return {\n prices: this.calendar[id],\n arrivalMinNightStay: this.arrivalMinNightStay[id],\n arrivalMaxNightStay: this.arrivalMaxNightStay[id],\n };\n }\n\n if (!!this.calendarPromises[id]) {\n return this.calendarPromises[id];\n }\n\n this.calendarPromises[id] = new Promise(async (resolve, reject) => {\n const searchParams: AvailabilityParams = {\n checkInDate: fromDatePretty,\n checkOutDate: toDatePretty,\n adults: `${adults}`,\n children: `${children}`,\n infants: `${infants}`,\n promoCode: `${promoCode}`,\n includeHotelInfo: isCrossSell ? `0` : `1`,\n memberNumber: `${memberNumber}`,\n ...(roomCode ? { roomCode } : {}),\n };\n const queryParams = new URLSearchParams(searchParams);\n\n const apiPath = `${this.getApiPath()}availability/calendar/${targetHotel}?${queryParams.toString()}`;\n\n const response = await fetch(apiPath, {\n credentials: 'omit',\n headers: await BaseAPI.getBaseHeaders(),\n });\n\n if (response.ok) {\n const json = await response.json();\n\n // Don't parse warnings when we're making a cross-hotel availability request\n if (parseErrors) {\n if (json.warnings && json.warnings.length) {\n BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);\n this.calendarWarnings[id] = json.warnings;\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n }\n\n Object.values(json.prices).forEach((price: any) => {\n if (!AvailabilityAPI.minNightPrice || Number(price) < AvailabilityAPI.minNightPrice) {\n AvailabilityAPI.minNightPrice = Number(price);\n }\n\n if (AvailabilityAPI.maxNightPrice < Number(price)) {\n AvailabilityAPI.maxNightPrice = Number(price);\n }\n });\n\n if (hotelId) {\n this.crossSellHotelInfo[String(hotelId)] = json.hotel;\n }\n this.arrivalMinNightStay[id] = json?.arrivalMinNightStay ?? {};\n this.arrivalMaxNightStay[id] = json?.arrivalMaxNightStay ?? {};\n this.calendar[id] = json.prices;\n resolve({\n prices: this.calendar[id],\n arrivalMinNightStay: this.arrivalMinNightStay[id],\n arrivalMaxNightStay: this.arrivalMaxNightStay[id],\n });\n } else {\n reject(new GetAvailabilityError(fromMonth, toMonth));\n }\n });\n\n return this.calendarPromises[id];\n };\n\n public invalidateAvailability = async (basketRow: BasketRow, hotelId: string) => {\n const today = dayjs();\n\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const infants = basketRow.getInfants();\n const promoCode = basketRow.getPromoCode();\n const roomCode = basketRow.getRoomCode();\n\n let toDate = basketRow.getEndDate();\n const fromDate = basketRow.getStartDate()?.isBefore(today, 'day') ? today : basketRow.getStartDate();\n\n let oneNightStay = false;\n if (fromDate.isSameOrAfter(toDate, 'date')) {\n oneNightStay = true;\n toDate = fromDate.add(1, 'day');\n }\n\n const id = this.getQueryID([hotelId, fromDate, toDate, adults, children, infants, promoCode, roomCode, RoomstayThemeEngine.selectedLang, oneNightStay]);\n delete this.cachedAvailability[id];\n };\n\n public fetchMinNightStayData = async (basketRow: BasketRow, hotelID: string, memberNumber?: string) => {\n // TODO: refactor this breakdown.\n\n if (!basketRow) {\n return;\n }\n\n if (!hotelID) {\n throw new NoHotelSelectedError();\n }\n\n const today = dayjs();\n\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const infants = basketRow.getInfants();\n const promoCode = basketRow.getPromoCode();\n const roomCode = basketRow.getRoomCode();\n\n let toDate = basketRow.getEndDate();\n const fromDate = basketRow.getStartDate()?.isBefore(today, 'day') ? today : basketRow.getStartDate();\n\n let oneNightStay = false;\n if (fromDate.isSameOrAfter(toDate, 'date')) {\n oneNightStay = true;\n toDate = fromDate.add(1, 'day');\n }\n\n const id = this.getQueryID([hotelID, fromDate, toDate, adults, children, promoCode, roomCode, RoomstayThemeEngine.selectedLang, oneNightStay, memberNumber]);\n\n if (this.cachedMinNightStay[id]) {\n return this.cachedMinNightStay[id];\n }\n\n if (!!this.cachedMidNightStayPromises[id]) {\n return this.cachedMidNightStayPromises[id];\n }\n\n this.cachedMidNightStayPromises[id] = new Promise(async (resolve) => {\n const json = await this.get(\n APIEndpoint.MinNightStay,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n infants,\n promoCode,\n memberNumber,\n ...(roomCode ? { roomCode } : {}),\n },\n '',\n hotelID\n );\n\n delete this.cachedMidNightStayPromises[id];\n this.cachedMinNightStay[id] = json;\n\n resolve(this.cachedMinNightStay[id]);\n });\n\n return this.cachedMidNightStayPromises[id];\n };\n\n /**\n * Fetches availability data.\n *\n * @param basketRow - The basket row containing booking details.\n * @param hotelId - The unique identifier of the hotel.\n * @param memberNumber - (Optional) The membership number of the user.\n * @param ignoreRoomFilter - If true, skips sending the room code filter in the API request. Default: false.\n * @returns The fetched availability data.\n */\n public fetchAvailabilityData = async (basketRow: BasketRow, hotelId: string, memberNumber?: string, ignoreRoomFilter = false) => {\n const today = dayjs();\n\n if (!basketRow) {\n return;\n }\n\n const adults = basketRow.getAdults();\n const children = basketRow.getChildren();\n const infants = basketRow.getInfants();\n const promoCode = basketRow.getPromoCode();\n const promoOnly = basketRow.getPromoOnly();\n const enableRoomCodeFilter = basketRow.getEnableRoomCodeFilter();\n // If ignoreRoomFilter true, skips sending the room code filter\n // Otherwise, if the the URL's room parameter is present, send the room code filter\n const roomCodeParam = ignoreRoomFilter ? '' : enableRoomCodeFilter ? basketRow.getRoomCode() : '';\n\n let toDate = basketRow.getEndDate();\n const fromDate = basketRow.getStartDate()?.isBefore(today, 'day') ? today : basketRow.getStartDate();\n\n let oneNightStay = false;\n if (fromDate.isSameOrAfter(toDate, 'date')) {\n oneNightStay = true;\n toDate = fromDate.add(1, 'day');\n }\n\n const id = this.getQueryID([hotelId, fromDate, toDate, adults, children, infants, promoCode, roomCodeParam, RoomstayThemeEngine.selectedLang, oneNightStay, memberNumber]);\n\n // Don't parse warnings when we're making a cross-hotel availability request\n if (this.cachedAvailability[id]) {\n if (this.availabilityWarnings[id]) {\n BasketContextErrorHandler.handleAvailabilityWarnings(this.availabilityWarnings[id]);\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n return this.cachedAvailability[id];\n }\n\n if (!!this.fetchDataPromise[id]) {\n return this.fetchDataPromise[id];\n } else {\n this.fetchDataPromise[id] = new Promise<Room[]>(async (resolve, reject) => {\n try {\n const json = await this.get(\n APIEndpoint.Availability,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n infants,\n promoCode,\n promoOnly,\n memberNumber,\n ...(roomCodeParam ? { roomCode: roomCodeParam } : {}),\n },\n '',\n hotelId\n );\n\n this.fetchDataPromise[id] = null;\n\n const dateToObject = (data: any) => {\n data.validUntil = dayjs(data.validUntil);\n data.cachedSince = dayjs(data.cachedSince);\n\n return data;\n };\n\n if (json.guaranteePolicies) {\n Object.keys(json.guaranteePolicies).map((code) => {\n AvailabilityAPI.policyMappings.guarantee[code] = json.guaranteePolicies[code];\n });\n }\n\n if (json.cancelPolicies) {\n Object.keys(json.cancelPolicies).map((code) => {\n AvailabilityAPI.policyMappings.cancel[code] = json.cancelPolicies[code];\n });\n }\n\n if (json.roomTypes) {\n const allRoomsByKey = Object.keys(json.roomTypes);\n if (allRoomsByKey.length) {\n this.roomTypesData = dateToObject(json.roomTypes);\n\n allRoomsByKey.forEach((roomCode: any) => {\n this.roomTypesData[roomCode].code = roomCode;\n this.rooms[roomCode] = Room.fromData(this.roomTypesData[roomCode]);\n });\n }\n }\n\n if (json.ratePlans) {\n const allRatesByKey = Object.keys(json.ratePlans);\n if (allRatesByKey.length) {\n this.ratePlansData = dateToObject(json.ratePlans);\n\n allRatesByKey.forEach((rateCode: any) => {\n this.ratePlansData[rateCode].code = rateCode;\n\n this.rates[rateCode] = RoomRate.fromData(this.ratePlansData[rateCode]);\n });\n }\n }\n\n if (json.roomNights) {\n const roomNights = json.roomNights;\n\n const rooms: { [rate: string]: Room } = {};\n\n const allNightsByKey = Object.keys(roomNights);\n\n let first = true;\n if (allNightsByKey.length) {\n allNightsByKey.forEach((date: string) => {\n const day = dayjs(date);\n Object.keys(roomNights[date]).forEach((roomCode: string) => {\n if (first) {\n const room = Room.fromData(this.roomTypesData[roomCode]);\n room.code = roomCode;\n rooms[roomCode] = room;\n }\n\n Object.keys(roomNights[date][roomCode].rates).forEach((rateKey) => {\n const nightData = roomNights[date][roomCode].rates[rateKey];\n\n if (first) {\n const rate = RoomRate.fromData(this.ratePlansData[rateKey]);\n rate.code = rateKey;\n rooms[roomCode].addRate(rate);\n }\n\n if (oneNightStay && Object.keys(rooms[roomCode]?.getRate(rateKey)?.nightRates ?? {}).length) {\n return;\n }\n\n const rateNight = new RoomRateNight();\n rateNight.available = roomNights[date][roomCode].available;\n rateNight.cost = nightData.cost;\n rateNight.discount = nightData.discount;\n rateNight.total = nightData.total;\n rateNight.tax = nightData.tax;\n rateNight.fee = nightData.fee;\n rateNight.date = day;\n\n if (nightData.fees) {\n for (const fee of nightData.fees) {\n rateNight.fees.push({ name: fee.name, amount: fee.amount });\n }\n }\n\n (rooms[roomCode].getRate(rateKey) as RoomRate).nightRates[date] = rateNight;\n });\n });\n\n first = false;\n });\n }\n\n const roomArray = Object.values(rooms);\n\n this.cachedAvailability[id] = roomArray;\n resolve(roomArray);\n }\n\n if (json.warnings?.length) {\n this.availabilityWarnings[id] = json.warnings;\n BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);\n } else {\n BasketContextErrorHandler.handlePromoSuccess(promoCode);\n }\n\n resolve([]);\n } catch (ex) {\n reject();\n }\n }).catch((reason) => {\n throw new RoomstayError('Failed to load calendar availability');\n });\n\n return this.fetchDataPromise[id];\n }\n };\n\n public fetchAvailability = async ({\n fromDate,\n toDate,\n adults,\n children,\n infants,\n promoCode,\n roomCode,\n promoOnly,\n hotelId,\n }: {\n fromDate: dayjs.Dayjs;\n toDate: dayjs.Dayjs;\n adults: number;\n children?: number;\n infants: number;\n promoCode?: string;\n roomCode?: string;\n promoOnly?: boolean;\n hotelId: string;\n }) => {\n if (!fromDate || !toDate) return;\n\n return await this.get(\n APIEndpoint.Availability,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n infants,\n promoCode,\n promoOnly,\n ...(roomCode ? { roomCode } : {}),\n },\n '',\n hotelId\n );\n };\n\n private getQueryID = (params: any[]) => {\n return params.map((param) => (param && param.format ? param.format(API_DATE_FORMAT) : param)).join('-');\n };\n}\n"]}
@@ -39,7 +39,11 @@ const EventCard_module_scss_1 = __importDefault(require("./EventCard.module.scss
39
39
  const EventCard = ({ event, ratio }) => {
40
40
  var _a, _b, _c, _d, _e, _f;
41
41
  const [collapsed, setCollapsed] = (0, react_1.useState)(true);
42
- const toggleCollapse = () => setCollapsed(!collapsed);
42
+ const toggleCollapse = (_event) => {
43
+ setCollapsed(!collapsed);
44
+ _event.preventDefault();
45
+ _event.stopPropagation();
46
+ };
43
47
  const displayEventTime = () => {
44
48
  const startDate = event.startDate ? (0, dayjs_1.default)(event.startDate) : undefined;
45
49
  const endDate = event.endDate ? (0, dayjs_1.default)(event.endDate) : undefined;
@@ -75,7 +79,7 @@ const EventCard = ({ event, ratio }) => {
75
79
  react_1.default.createElement("div", { className: "u-pad-top--light" },
76
80
  react_1.default.createElement(Text_1.default, { type: Text_1.TextType.Small, color: Color_1.Color.Accent }, [(_d = event === null || event === void 0 ? void 0 : event.address) === null || _d === void 0 ? void 0 : _d.line1, (_e = event === null || event === void 0 ? void 0 : event.address) === null || _e === void 0 ? void 0 : _e.line2, (_f = event === null || event === void 0 ? void 0 : event.address) === null || _f === void 0 ? void 0 : _f.city].filter((item) => !!item).join(', ')),
77
81
  react_1.default.createElement(Text_1.default, { className: "u-text-overflow-ellipsis-3", color: Color_1.Color.DarkGrey, type: Text_1.TextType.Small }, event.summary)),
78
- event.url && (react_1.default.createElement("a", { href: event.url, target: "_blank", rel: "noreferrer" },
82
+ event.url && (react_1.default.createElement("a", { href: event.url, target: "_blank", rel: "noreferrer", className: (0, classnames_1.default)(EventCard_module_scss_1.default.link) },
79
83
  react_1.default.createElement(Text_1.default, { className: (0, classnames_1.default)(EventCard_module_scss_1.default.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center'), type: Text_1.TextType.Label, color: Color_1.Color.Accent },
80
84
  react_1.default.createElement("div", null, "More Info"),
81
85
  react_1.default.createElement(Icon_1.default, { icon: Icon_1.IconType.ArrowRight }))))))));
@@ -1 +1 @@
1
- {"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const toggleCollapse = () => setCollapsed(!collapsed);\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header, 'u-cursor-pointer')} onClick={toggleCollapse}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <div className={styles.collapButton}>\n <Icon color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </div>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n {event.url && (\n <a href={event.url} target=\"_blank\" rel=\"noreferrer\">\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n {/*TODO translation*/}\n <div>More Info</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </a>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
1
+ {"version":3,"file":"EventCard.js","sourceRoot":"/","sources":["src/components/generic/Event/EventCard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayEvent } from '@roomstay/core';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { FC, useState } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport RatioImage from '@/components/generic/RatioImage/RatioImage';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { Color } from '@/util/Color';\nimport { TextAlign } from '@/util/TextAlignment';\n\nimport styles from './EventCard.module.scss';\n\nexport interface EventCardInterface {\n ratio: number;\n event: IRoomstayEvent;\n}\n\nconst EventCard: FC<EventCardInterface> = ({ event, ratio }) => {\n const [collapsed, setCollapsed] = useState<boolean>(true);\n\n const toggleCollapse = (_event: any) => {\n setCollapsed(!collapsed);\n _event.preventDefault();\n _event.stopPropagation();\n };\n\n const displayEventTime = () => {\n const startDate = event.startDate ? dayjs(event.startDate) : undefined;\n const endDate = event.endDate ? dayjs(event.endDate) : undefined;\n if ([startDate, endDate].some((date) => !date)) {\n return `${startDate ? startDate.format(`ddd, MMM D, h:mmA`) : 'Now'}${endDate ? ` - ${endDate.format(`ddd, MMM D, h:mmA`)}` : ''}`;\n } else {\n if (startDate!.isSame(endDate, 'date')) {\n return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`h:mmA`)}`;\n } else return `${startDate!.format(`ddd, MMM D, h:mmA`)} - ${endDate!.format(`ddd, MMM D, h:mmA`)}`;\n }\n };\n\n return (\n <div className={styles.root}>\n <RatioImage\n src={`${event?.image?.url}`}\n ratio={ratio}\n style={{\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'top center',\n }}\n />\n <div className={styles.categoryMask}>\n <Text align={TextAlign.Right} color={Color.White} bold>\n {event.tags?.[0]?.display_name}\n </Text>\n </div>\n <div className={styles.content}>\n <div className={classNames(styles.header, 'u-cursor-pointer')} onClick={toggleCollapse}>\n <div>\n <Text\n className={classNames({\n 'u-text-overflow-ellipsis-1': collapsed,\n 'u-text-overflow-ellipsis-2': !collapsed,\n })}\n bold\n color={Color.Navy}\n >\n {event.name}\n </Text>\n <Text color={Color.Accent} bold>\n {event.eventTimeDescription ? event.eventTimeDescription : displayEventTime()}\n </Text>\n </div>\n <div className={styles.collapButton}>\n <Icon color={Color.Accent} icon={collapsed ? IconType.ArrowUp3 : IconType.ArrowDown3} size=\"18px\" />\n </div>\n </div>\n <AutoAutoHeight open={!collapsed}>\n <div className=\"u-pad-top--light\">\n <Text type={TextType.Small} color={Color.Accent}>\n {[event?.address?.line1, event?.address?.line2, event?.address?.city].filter((item) => !!item).join(', ')}\n </Text>\n <Text className=\"u-text-overflow-ellipsis-3\" color={Color.DarkGrey} type={TextType.Small}>\n {event.summary}\n </Text>\n </div>\n\n {event.url && (\n <a href={event.url} target=\"_blank\" rel=\"noreferrer\" className={classNames(styles.link)}>\n <Text className={classNames(styles.footer, 'u-flex', 'u-flex-gap--light', 'u-flex-align-center')} type={TextType.Label} color={Color.Accent}>\n {/*TODO translation*/}\n <div>More Info</div>\n <Icon icon={IconType.ArrowRight} />\n </Text>\n </a>\n )}\n </AutoAutoHeight>\n </div>\n </div>\n );\n};\n\nexport default EventCard;\n"]}
@@ -54,6 +54,7 @@ const Fade_1 = __importDefault(require("../../../animations/Fade"));
54
54
  const BEButton_1 = __importDefault(require("../BEButton"));
55
55
  const PaymentCardInput_module_scss_1 = __importDefault(require("./PaymentCardInput.module.scss"));
56
56
  const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultClicked }) => {
57
+ var _a, _b;
57
58
  const { user, fullName } = (0, LoggedInUserHook_1.useMember)();
58
59
  const { t } = (0, react_i18next_1.useTranslation)();
59
60
  const [errors, setErrors] = (0, react_1.useState)({});
@@ -63,6 +64,15 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
63
64
  const [isMarkingAsDefault, setIsMarkingAsDefault] = (0, react_1.useState)(false);
64
65
  const isCardDefault = (user === null || user === void 0 ? void 0 : user.defaultCard) === (card === null || card === void 0 ? void 0 : card.cardId);
65
66
  const inputsDisabled = !!(card === null || card === void 0 ? void 0 : card.cardId);
67
+ const formatExpiry = (expiry) => {
68
+ if (!/^\d{4}$/.test(expiry)) {
69
+ return '••/••';
70
+ }
71
+ const month = expiry.slice(0, 2);
72
+ const year = expiry.slice(2);
73
+ return `${month}/${year}`;
74
+ };
75
+ const last4Digits = (_a = card === null || card === void 0 ? void 0 : card.cardNumber) === null || _a === void 0 ? void 0 : _a.substring(((_b = card === null || card === void 0 ? void 0 : card.cardNumber) === null || _b === void 0 ? void 0 : _b.length) - 4);
66
76
  const css = {
67
77
  fontSize: '13px',
68
78
  lineHeight: '18px',
@@ -83,7 +93,7 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
83
93
  successColor: '#4F8A10',
84
94
  errorColor: '#D8000C',
85
95
  showCardIcon: false,
86
- placeholder: '5913 2207 9578 4291',
96
+ placeholder: inputsDisabled ? `•••• •••• •••• ${last4Digits}` : '5913 2207 9578 4291',
87
97
  disabled: inputsDisabled,
88
98
  },
89
99
  },
@@ -91,7 +101,12 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
91
101
  name: 'card-name',
92
102
  label: t(Translation_1.Translation.Step.Confirmation.Inputs.NameOnCard),
93
103
  type: 'text',
94
- vgsProps: { validations: ['required'], css, disabled: inputsDisabled, placeholder: fullName },
104
+ vgsProps: {
105
+ validations: ['required'],
106
+ css,
107
+ disabled: inputsDisabled,
108
+ placeholder: inputsDisabled ? '—' : fullName,
109
+ },
95
110
  },
96
111
  {
97
112
  name: 'expiration-date',
@@ -101,7 +116,7 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
101
116
  validations: ['required', 'validCardExpirationDate'],
102
117
  css,
103
118
  disabled: inputsDisabled,
104
- placeholder: '12/27',
119
+ placeholder: inputsDisabled ? formatExpiry(card.expiry) : '12/27',
105
120
  },
106
121
  },
107
122
  {
@@ -112,7 +127,7 @@ const PaymentCardInput = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultCl
112
127
  validations: ['required', 'validCardSecurityCode'],
113
128
  css,
114
129
  disabled: inputsDisabled,
115
- placeholder: '552',
130
+ placeholder: inputsDisabled ? '•••' : '552',
116
131
  },
117
132
  },
118
133
  ], 'members');
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentCardInput.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/PaymentCardInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport { CardTypeSelect } from '@/components/generic/PaymentCard/CardTypeSelect';\nimport { PaymentCard as GenericPaymentCard } from '@/components/generic/PaymentCard/PaymentCard';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useMember } from '@/hooks/LoggedInUserHook';\nimport { useVgsCollect } from '@/hooks/VGSHooks';\nimport { ECardType } from '@/models/PaymentCard';\nimport { Translation } from '@/translations/Translation';\nimport { getAuth } from '@/util/AsyncAuth';\nimport { Color } from '@/util/Color';\n\nimport FadeAnimation from '../../../animations/Fade';\nimport BEButton from '../BEButton';\nimport styles from './PaymentCardInput.module.scss';\n\nexport interface PaymentCardInputProps {\n card: IRoomstayMemberCards;\n onSubmit?: (card: IRoomstayMemberCards) => Promise<IRoomstayMemberCards>;\n onDeleteClicked: (card: IRoomstayMemberCards) => Promise<void>;\n onMarkedAsDefaultClicked: (card: IRoomstayMemberCards) => Promise<void>;\n}\n\nexport const PaymentCardInput: FC<PaymentCardInputProps> = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultClicked }) => {\n const { user, fullName } = useMember();\n const { t } = useTranslation();\n\n const [errors, setErrors] = useState<{ [x: string]: string }>({});\n const [cardType, setCardType] = useState<ECardType | null>(null);\n\n const [isSavingVGSDetails, setIsSavingVGSDetails] = useState(false);\n const [isDeletingCard, setIsDeletingCard] = useState(false);\n const [isMarkingAsDefault, setIsMarkingAsDefault] = useState(false);\n\n const isCardDefault = user?.defaultCard === card?.cardId;\n\n const inputsDisabled = !!card?.cardId;\n\n const css = {\n fontSize: '13px',\n lineHeight: '18px',\n '&::placeholder': {\n color: '#8B8F9A',\n opacity: 1,\n },\n };\n\n const {\n fields: [cardNumber, cardHolder, expiryDate, securityCode],\n triggerFieldUpdate,\n vgsForm,\n } = useVgsCollect(\n [\n {\n name: 'credit-card',\n label: t(Translation.Step.Confirmation.Inputs.CardNumber),\n type: 'card-number',\n vgsProps: {\n validations: ['required', 'validCardNumber'],\n css,\n autoComplete: ['cc-number'],\n successColor: '#4F8A10',\n errorColor: '#D8000C',\n showCardIcon: false,\n placeholder: '5913 2207 9578 4291',\n disabled: inputsDisabled,\n },\n },\n {\n name: 'card-name',\n label: t(Translation.Step.Confirmation.Inputs.NameOnCard),\n type: 'text',\n vgsProps: { validations: ['required'], css, disabled: inputsDisabled, placeholder: fullName },\n },\n {\n name: 'expiration-date',\n label: t(Translation.Step.Confirmation.Inputs.CardExpiry),\n type: 'card-expiration-date',\n vgsProps: {\n validations: ['required', 'validCardExpirationDate'],\n css,\n disabled: inputsDisabled,\n placeholder: '12/27',\n },\n },\n {\n name: 'security-code',\n label: t(Translation.Step.Confirmation.Inputs.SecurityCode),\n type: 'card-security-code',\n vgsProps: {\n validations: ['required', 'validCardSecurityCode'],\n css,\n disabled: inputsDisabled,\n placeholder: '552',\n },\n },\n ],\n 'members'\n );\n\n useEffect(() => {\n triggerFieldUpdate();\n }, [card]);\n\n useEffect(() => {\n if (cardNumber?.state.cardType) {\n setCardType(cardNumber.state.cardType);\n }\n }, [cardNumber]);\n\n const inputNames = ['credit-card', 'card-name', 'expiration-date', 'security-code'];\n const setErrorsOnFaults = (faults: any) => {\n const newErrors: { [x: string]: string } = {};\n\n Object.keys(faults).forEach((input) => {\n let name = '';\n\n switch (input) {\n case 'credit-card':\n name = t(Translation.Step.Confirmation.Inputs.CardNumber);\n break;\n case 'expiration-date':\n name = t(Translation.Step.Confirmation.Inputs.CardExpiry);\n break;\n case 'security-code':\n name = t(Translation.Step.Confirmation.Inputs.SecurityCode);\n break;\n default:\n name = t(Translation.Step.Confirmation.Inputs.NameOnCard);\n break;\n }\n\n newErrors[input] = name + ' ' + faults[input].errorMessages[faults[input].errorMessages.length - 1];\n });\n\n setErrors(newErrors);\n };\n\n const onChangeSubmit = async (): Promise<void> => {\n const Auth = await getAuth();\n if (vgsForm) {\n setIsSavingVGSDetails(true);\n Auth.currentAuthenticatedUser().then((cognitoData: any) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n vgsForm.submit(\n '/members/vgs-hide',\n {\n serializer: 'deep',\n methods: 'POST',\n headers: {\n Authorization: jwtToken,\n },\n },\n async (status: any, cardData: any) => {\n const expMatch = cardData['expiration-date'].match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n if (!expMatch || expMatch[1].length > 2 || (expMatch[2].length !== 4 && expMatch[2].length !== 2)) {\n setErrorsOnFaults({\n 'expiration-date': {\n errorMessages: [t(Translation.Step.Confirmation.InputErrors.CardExpiry.Invalid)],\n },\n });\n return;\n }\n\n const expiration = (expMatch[1].length === 1 ? '0' : '') + expMatch[1] + (expMatch[2].length === 2 ? expMatch[2] : expMatch[2].substr(2));\n const newCard: IRoomstayMemberCards = {\n username: card.username,\n cardId: card.cardId as string,\n securityCode: cardData['security-code'],\n expiry: expiration,\n name: cardData['card-name'],\n\n cardNumber: cardData['credit-card'],\n type: cardType as ECardType,\n };\n\n const newAddedCard = await onSubmit?.(newCard);\n onMarkAsDefault(newAddedCard as IRoomstayMemberCards);\n vgsForm.reset();\n setIsSavingVGSDetails(false);\n },\n (error: any) => {\n setErrorsOnFaults(error);\n setIsSavingVGSDetails(false);\n }\n );\n });\n } else {\n console.error('VGS not on element, problem has occurred');\n }\n };\n\n const onDeleteCardClicked = () => {\n setIsDeletingCard(true);\n\n onDeleteClicked?.(card as IRoomstayMemberCards).finally(() => {\n setIsDeletingCard(false);\n });\n };\n\n const onMarkAsDefault = (newCard: IRoomstayMemberCards) => {\n setIsMarkingAsDefault(true);\n\n onMarkedAsDefaultClicked?.(newCard as IRoomstayMemberCards).finally(() => {\n setIsMarkingAsDefault(false);\n });\n };\n\n const onMarkAsDefaultClicked = () => {\n onMarkAsDefault(card);\n };\n\n return (\n <>\n <div className={styles['card-inputs']}>\n <div className=\"u-marg-bottom--medium u-marg-top--heavy@l-\">\n <CardTypeSelect value={cardType || undefined} />\n </div>\n <div className=\"u-margin-bottom\">\n {inputNames.map((name) => {\n const errorMessage = errors[name];\n return (\n <AutoAutoHeight open={!!errorMessage} key={name}>\n <div className=\"u-flex\">\n <Alert type={AlertType.Danger} icon={IconType.Error}>\n <Text type={TextType.Small}>{errorMessage}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardNumber)}\n </Text>\n </div>\n <div className={cardNumber.getClasses()} ref={cardNumber.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n <InputGroup dimensions=\"2/2\">\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardExpiry)}\n </Text>\n </div>\n <div className={expiryDate.getClasses()} ref={expiryDate.ref} />\n </>\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.SecurityCode)}\n </Text>\n </div>\n <div className={securityCode.getClasses()} ref={securityCode.ref} />\n </>\n </InputGroup>\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.NameOnCard)}\n </Text>\n </div>\n <div className={cardHolder.getClasses()} ref={cardHolder.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n {card?.cardId ? (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isDeletingCard}\n textColor={Color.Danger}\n isText\n icon={IconType.Delete}\n onClick={onDeleteCardClicked}\n stopIconAnimation\n >\n {t(Translation.UserPortal.PaymentInformationScreen.DeleteCard)}\n </BEButton>\n ) : (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isSavingVGSDetails}\n rounded\n primary\n filled\n mobileWidth\n onClick={onChangeSubmit}\n >\n {t(Translation.UserPortal.PaymentInformationScreen.SaveCard)}\n </BEButton>\n )}\n </div>\n </div>\n <FadeAnimation open={!!card?.cardId}>\n <div className={styles['card-large']}>\n <GenericPaymentCard card={card} />\n <div className=\"u-marg-top u-marg-top--heavy@l-\">\n <BEButton onClick={onMarkAsDefaultClicked} isLoading={isMarkingAsDefault} disabled={isCardDefault} filled primary size=\"small\">\n Mark as Default\n </BEButton>\n </div>\n </div>\n </FadeAnimation>\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"PaymentCardInput.js","sourceRoot":"/","sources":["src/components/generic/PaymentCard/PaymentCardInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IRoomstayMemberCards } from '@roomstay/core';\nimport React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\nimport Alert, { AlertType } from '@/components/generic/Alert';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport { CardTypeSelect } from '@/components/generic/PaymentCard/CardTypeSelect';\nimport { PaymentCard as GenericPaymentCard } from '@/components/generic/PaymentCard/PaymentCard';\nimport Text, { TextType } from '@/components/generic/Text';\nimport { useMember } from '@/hooks/LoggedInUserHook';\nimport { useVgsCollect } from '@/hooks/VGSHooks';\nimport { ECardType } from '@/models/PaymentCard';\nimport { Translation } from '@/translations/Translation';\nimport { getAuth } from '@/util/AsyncAuth';\nimport { Color } from '@/util/Color';\n\nimport FadeAnimation from '../../../animations/Fade';\nimport BEButton from '../BEButton';\nimport styles from './PaymentCardInput.module.scss';\n\nexport interface PaymentCardInputProps {\n card: IRoomstayMemberCards;\n onSubmit?: (card: IRoomstayMemberCards) => Promise<IRoomstayMemberCards>;\n onDeleteClicked: (card: IRoomstayMemberCards) => Promise<void>;\n onMarkedAsDefaultClicked: (card: IRoomstayMemberCards) => Promise<void>;\n}\n\nexport const PaymentCardInput: FC<PaymentCardInputProps> = ({ card, onSubmit, onDeleteClicked, onMarkedAsDefaultClicked }) => {\n const { user, fullName } = useMember();\n const { t } = useTranslation();\n\n const [errors, setErrors] = useState<{ [x: string]: string }>({});\n const [cardType, setCardType] = useState<ECardType | null>(null);\n\n const [isSavingVGSDetails, setIsSavingVGSDetails] = useState(false);\n const [isDeletingCard, setIsDeletingCard] = useState(false);\n const [isMarkingAsDefault, setIsMarkingAsDefault] = useState(false);\n\n const isCardDefault = user?.defaultCard === card?.cardId;\n\n const inputsDisabled = !!card?.cardId;\n\n const formatExpiry = (expiry: string) => {\n if (!/^\\d{4}$/.test(expiry)) {\n return '••/••';\n }\n const month = expiry.slice(0, 2);\n const year = expiry.slice(2);\n return `${month}/${year}`;\n };\n\n const last4Digits = card?.cardNumber?.substring(card?.cardNumber?.length - 4);\n\n const css = {\n fontSize: '13px',\n lineHeight: '18px',\n '&::placeholder': {\n color: '#8B8F9A',\n opacity: 1,\n },\n };\n\n const {\n fields: [cardNumber, cardHolder, expiryDate, securityCode],\n triggerFieldUpdate,\n vgsForm,\n } = useVgsCollect(\n [\n {\n name: 'credit-card',\n label: t(Translation.Step.Confirmation.Inputs.CardNumber),\n type: 'card-number',\n vgsProps: {\n validations: ['required', 'validCardNumber'],\n css,\n autoComplete: ['cc-number'],\n successColor: '#4F8A10',\n errorColor: '#D8000C',\n showCardIcon: false,\n placeholder: inputsDisabled ? `•••• •••• •••• ${last4Digits}` : '5913 2207 9578 4291',\n disabled: inputsDisabled,\n },\n },\n {\n name: 'card-name',\n label: t(Translation.Step.Confirmation.Inputs.NameOnCard),\n type: 'text',\n vgsProps: {\n validations: ['required'],\n css,\n disabled: inputsDisabled,\n placeholder: inputsDisabled ? '—' : fullName,\n },\n },\n {\n name: 'expiration-date',\n label: t(Translation.Step.Confirmation.Inputs.CardExpiry),\n type: 'card-expiration-date',\n vgsProps: {\n validations: ['required', 'validCardExpirationDate'],\n css,\n disabled: inputsDisabled,\n placeholder: inputsDisabled ? formatExpiry(card.expiry) : '12/27',\n },\n },\n {\n name: 'security-code',\n label: t(Translation.Step.Confirmation.Inputs.SecurityCode),\n type: 'card-security-code',\n vgsProps: {\n validations: ['required', 'validCardSecurityCode'],\n css,\n disabled: inputsDisabled,\n placeholder: inputsDisabled ? '•••' : '552',\n },\n },\n ],\n 'members'\n );\n\n useEffect(() => {\n triggerFieldUpdate();\n }, [card]);\n\n useEffect(() => {\n if (cardNumber?.state.cardType) {\n setCardType(cardNumber.state.cardType);\n }\n }, [cardNumber]);\n\n const inputNames = ['credit-card', 'card-name', 'expiration-date', 'security-code'];\n const setErrorsOnFaults = (faults: any) => {\n const newErrors: { [x: string]: string } = {};\n\n Object.keys(faults).forEach((input) => {\n let name = '';\n\n switch (input) {\n case 'credit-card':\n name = t(Translation.Step.Confirmation.Inputs.CardNumber);\n break;\n case 'expiration-date':\n name = t(Translation.Step.Confirmation.Inputs.CardExpiry);\n break;\n case 'security-code':\n name = t(Translation.Step.Confirmation.Inputs.SecurityCode);\n break;\n default:\n name = t(Translation.Step.Confirmation.Inputs.NameOnCard);\n break;\n }\n\n newErrors[input] = name + ' ' + faults[input].errorMessages[faults[input].errorMessages.length - 1];\n });\n\n setErrors(newErrors);\n };\n\n const onChangeSubmit = async (): Promise<void> => {\n const Auth = await getAuth();\n if (vgsForm) {\n setIsSavingVGSDetails(true);\n Auth.currentAuthenticatedUser().then((cognitoData: any) => {\n const jwtToken = cognitoData.signInUserSession.idToken.jwtToken;\n\n vgsForm.submit(\n '/members/vgs-hide',\n {\n serializer: 'deep',\n methods: 'POST',\n headers: {\n Authorization: jwtToken,\n },\n },\n async (status: any, cardData: any) => {\n const expMatch = cardData['expiration-date'].match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n if (!expMatch || expMatch[1].length > 2 || (expMatch[2].length !== 4 && expMatch[2].length !== 2)) {\n setErrorsOnFaults({\n 'expiration-date': {\n errorMessages: [t(Translation.Step.Confirmation.InputErrors.CardExpiry.Invalid)],\n },\n });\n return;\n }\n\n const expiration = (expMatch[1].length === 1 ? '0' : '') + expMatch[1] + (expMatch[2].length === 2 ? expMatch[2] : expMatch[2].substr(2));\n const newCard: IRoomstayMemberCards = {\n username: card.username,\n cardId: card.cardId as string,\n securityCode: cardData['security-code'],\n expiry: expiration,\n name: cardData['card-name'],\n\n cardNumber: cardData['credit-card'],\n type: cardType as ECardType,\n };\n\n const newAddedCard = await onSubmit?.(newCard);\n onMarkAsDefault(newAddedCard as IRoomstayMemberCards);\n vgsForm.reset();\n setIsSavingVGSDetails(false);\n },\n (error: any) => {\n setErrorsOnFaults(error);\n setIsSavingVGSDetails(false);\n }\n );\n });\n } else {\n console.error('VGS not on element, problem has occurred');\n }\n };\n\n const onDeleteCardClicked = () => {\n setIsDeletingCard(true);\n\n onDeleteClicked?.(card as IRoomstayMemberCards).finally(() => {\n setIsDeletingCard(false);\n });\n };\n\n const onMarkAsDefault = (newCard: IRoomstayMemberCards) => {\n setIsMarkingAsDefault(true);\n\n onMarkedAsDefaultClicked?.(newCard as IRoomstayMemberCards).finally(() => {\n setIsMarkingAsDefault(false);\n });\n };\n\n const onMarkAsDefaultClicked = () => {\n onMarkAsDefault(card);\n };\n\n return (\n <>\n <div className={styles['card-inputs']}>\n <div className=\"u-marg-bottom--medium u-marg-top--heavy@l-\">\n <CardTypeSelect value={cardType || undefined} />\n </div>\n <div className=\"u-margin-bottom\">\n {inputNames.map((name) => {\n const errorMessage = errors[name];\n return (\n <AutoAutoHeight open={!!errorMessage} key={name}>\n <div className=\"u-flex\">\n <Alert type={AlertType.Danger} icon={IconType.Error}>\n <Text type={TextType.Small}>{errorMessage}</Text>\n </Alert>\n </div>\n </AutoAutoHeight>\n );\n })}\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardNumber)}\n </Text>\n </div>\n <div className={cardNumber.getClasses()} ref={cardNumber.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n <InputGroup dimensions=\"2/2\">\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.CardExpiry)}\n </Text>\n </div>\n <div className={expiryDate.getClasses()} ref={expiryDate.ref} />\n </>\n <>\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.SecurityCode)}\n </Text>\n </div>\n <div className={securityCode.getClasses()} ref={securityCode.ref} />\n </>\n </InputGroup>\n </div>\n <div className=\"u-marg-bottom\">\n <div className=\"u-marg-bottom--light\">\n <Text type={TextType.Label} color={Color.Navy} bold>\n {t(Translation.Step.Confirmation.Inputs.NameOnCard)}\n </Text>\n </div>\n <div className={cardHolder.getClasses()} ref={cardHolder.ref} />\n </div>\n <div className=\"u-marg-bottom\">\n {card?.cardId ? (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isDeletingCard}\n textColor={Color.Danger}\n isText\n icon={IconType.Delete}\n onClick={onDeleteCardClicked}\n stopIconAnimation\n >\n {t(Translation.UserPortal.PaymentInformationScreen.DeleteCard)}\n </BEButton>\n ) : (\n <BEButton\n className=\"u-marg-top--heavier@l u-marg-top--heavy@l- u-flex u-flex-justify-center\"\n isLoading={isSavingVGSDetails}\n rounded\n primary\n filled\n mobileWidth\n onClick={onChangeSubmit}\n >\n {t(Translation.UserPortal.PaymentInformationScreen.SaveCard)}\n </BEButton>\n )}\n </div>\n </div>\n <FadeAnimation open={!!card?.cardId}>\n <div className={styles['card-large']}>\n <GenericPaymentCard card={card} />\n <div className=\"u-marg-top u-marg-top--heavy@l-\">\n <BEButton onClick={onMarkAsDefaultClicked} isLoading={isMarkingAsDefault} disabled={isCardDefault} filled primary size=\"small\">\n Mark as Default\n </BEButton>\n </div>\n </div>\n </FadeAnimation>\n </>\n );\n};\n"]}
@@ -7,6 +7,7 @@ export interface RadioButtonProps {
7
7
  renderContent?: () => ReactNode;
8
8
  className?: string;
9
9
  headerRef?: LegacyRef<HTMLDivElement>;
10
+ style?: React.CSSProperties;
10
11
  }
11
12
  declare const ForwardedRefRadioButton: React.ForwardRefExoticComponent<RadioButtonProps & React.RefAttributes<HTMLDivElement>>;
12
13
  export { ForwardedRefRadioButton as RadioButton };
@@ -31,11 +31,11 @@ const classnames_1 = __importDefault(require("classnames"));
31
31
  const react_1 = __importStar(require("react"));
32
32
  const AutoAutoHeight_1 = __importDefault(require("../../../animations/AutoAutoHeight"));
33
33
  const RadioButton_module_scss_1 = __importDefault(require("./RadioButton.module.scss"));
34
- const RadioButton = ({ checked, onChange, disabled, label, renderContent, className, headerRef }, ref) => {
34
+ const RadioButton = ({ checked, onChange, disabled, label, renderContent, className, headerRef, style }, ref) => {
35
35
  return (react_1.default.createElement("div", { className: (0, classnames_1.default)(RadioButton_module_scss_1.default.root, className, {
36
36
  [RadioButton_module_scss_1.default.disabled]: disabled,
37
37
  [RadioButton_module_scss_1.default.checked]: checked,
38
- }), onClick: onChange, ref: ref },
38
+ }), onClick: onChange, ref: ref, style: style },
39
39
  react_1.default.createElement("div", { className: RadioButton_module_scss_1.default.header, ref: headerRef },
40
40
  react_1.default.createElement("div", { className: RadioButton_module_scss_1.default.design }),
41
41
  react_1.default.createElement("div", { className: RadioButton_module_scss_1.default.text }, label)),
@@ -1 +1 @@
1
- {"version":3,"file":"RadioButton.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA0F;AAE1F,iFAAyD;AAEzD,wFAA+C;AAY/C,MAAM,WAAW,GAA+D,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE;IACjK,OAAO,CACH,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC,iCAAM,CAAC,IAAI,EAAE,SAAS,EAAE;YAC1C,CAAC,iCAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC3B,CAAC,iCAAM,CAAC,OAAO,CAAC,EAAE,OAAO;SAC5B,CAAC,EACF,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,GAAG;QAER,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS;YACzC,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,GAAI;YACjC,uCAAK,SAAS,EAAE,iCAAM,CAAC,IAAI,IAAG,KAAK,CAAO,CACxC;QACL,aAAa,IAAI,OAAO,IAAI,CACzB,8BAAC,wBAAc,IAAC,IAAI;YAChB,uCAAK,SAAS,EAAE,iCAAM,CAAC,OAAO,IAAG,aAAa,EAAE,CAAO,CAC1C,CACpB,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;AAEpB,8CAAW","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, ForwardRefRenderFunction, LegacyRef, ReactNode } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\n\nimport styles from './RadioButton.module.scss';\n\nexport interface RadioButtonProps {\n checked: boolean;\n onChange: JSX.IntrinsicElements['div']['onChange'];\n label?: ReactNode;\n disabled?: boolean;\n renderContent?: () => ReactNode;\n className?: string;\n headerRef?: LegacyRef<HTMLDivElement>;\n}\n\nconst RadioButton: ForwardRefRenderFunction<HTMLDivElement, RadioButtonProps> = ({ checked, onChange, disabled, label, renderContent, className, headerRef }, ref) => {\n return (\n <div\n className={classNames(styles.root, className, {\n [styles.disabled]: disabled,\n [styles.checked]: checked,\n })}\n onClick={onChange}\n ref={ref}\n >\n <div className={styles.header} ref={headerRef}>\n <div className={styles.design} />\n <div className={styles.text}>{label}</div>\n </div>\n {renderContent && checked && (\n <AutoAutoHeight open>\n <div className={styles.content}>{renderContent()}</div>\n </AutoAutoHeight>\n )}\n </div>\n );\n};\n\nconst ForwardedRefRadioButton = forwardRef(RadioButton);\n\nexport { ForwardedRefRadioButton as RadioButton };\n"]}
1
+ {"version":3,"file":"RadioButton.js","sourceRoot":"/","sources":["src/components/generic/RadioButtonGroup/RadioButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAoC;AACpC,+CAA0F;AAE1F,iFAAyD;AAEzD,wFAA+C;AAa/C,MAAM,WAAW,GAA+D,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACxK,OAAO,CACH,uCACI,SAAS,EAAE,IAAA,oBAAU,EAAC,iCAAM,CAAC,IAAI,EAAE,SAAS,EAAE;YAC1C,CAAC,iCAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC3B,CAAC,iCAAM,CAAC,OAAO,CAAC,EAAE,OAAO;SAC5B,CAAC,EACF,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK;QAEZ,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS;YACzC,uCAAK,SAAS,EAAE,iCAAM,CAAC,MAAM,GAAI;YACjC,uCAAK,SAAS,EAAE,iCAAM,CAAC,IAAI,IAAG,KAAK,CAAO,CACxC;QACL,aAAa,IAAI,OAAO,IAAI,CACzB,8BAAC,wBAAc,IAAC,IAAI;YAChB,uCAAK,SAAS,EAAE,iCAAM,CAAC,OAAO,IAAG,aAAa,EAAE,CAAO,CAC1C,CACpB,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;AAEpB,8CAAW","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, ForwardRefRenderFunction, LegacyRef, ReactNode } from 'react';\n\nimport AutoAutoHeight from '@/animations/AutoAutoHeight';\n\nimport styles from './RadioButton.module.scss';\n\nexport interface RadioButtonProps {\n checked: boolean;\n onChange: JSX.IntrinsicElements['div']['onChange'];\n label?: ReactNode;\n disabled?: boolean;\n renderContent?: () => ReactNode;\n className?: string;\n headerRef?: LegacyRef<HTMLDivElement>;\n style?: React.CSSProperties;\n}\n\nconst RadioButton: ForwardRefRenderFunction<HTMLDivElement, RadioButtonProps> = ({ checked, onChange, disabled, label, renderContent, className, headerRef, style }, ref) => {\n return (\n <div\n className={classNames(styles.root, className, {\n [styles.disabled]: disabled,\n [styles.checked]: checked,\n })}\n onClick={onChange}\n ref={ref}\n style={style}\n >\n <div className={styles.header} ref={headerRef}>\n <div className={styles.design} />\n <div className={styles.text}>{label}</div>\n </div>\n {renderContent && checked && (\n <AutoAutoHeight open>\n <div className={styles.content}>{renderContent()}</div>\n </AutoAutoHeight>\n )}\n </div>\n );\n};\n\nconst ForwardedRefRadioButton = forwardRef(RadioButton);\n\nexport { ForwardedRefRadioButton as RadioButton };\n"]}
@@ -11,8 +11,9 @@ export interface IRadioButtonOption<TValue extends string = string> {
11
11
  export interface IRadioButtonGroupProps<TValue extends string = string> {
12
12
  options?: IRadioButtonOption<TValue>[];
13
13
  value?: TValue;
14
- onChange?: (value: TValue) => void;
14
+ onChange?: (value: TValue, optionValue?: TValue) => void;
15
15
  renderChildrenContent?: boolean;
16
+ isSubGroup?: boolean;
16
17
  }
17
- declare const RadioButtonGroup: <TValue extends string = string>({ options, value: valueProp, onChange, renderChildrenContent, }: IRadioButtonGroupProps<TValue>) => ReactElement | null;
18
+ declare const RadioButtonGroup: <TValue extends string = string>({ options, value: valueProp, onChange, renderChildrenContent, isSubGroup, }: IRadioButtonGroupProps<TValue>) => ReactElement | null;
18
19
  export default RadioButtonGroup;
@@ -43,19 +43,19 @@ const Overlay_1 = require("../Overlay/Overlay");
43
43
  const RadioButton_1 = require("./RadioButton");
44
44
  const Tooltip_1 = __importDefault(require("../Tooltip/Tooltip"));
45
45
  const RadioButtonGroup_module_scss_1 = __importDefault(require("./RadioButtonGroup.module.scss"));
46
- const Option = ({ option: optionProp, value: valueProp, onChange, renderChildrenContent, }) => {
46
+ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildrenContent, isSubOption, }) => {
47
47
  const options = optionProp.options;
48
48
  const isGroup = !!(options === null || options === void 0 ? void 0 : options.length);
49
49
  const [ref, setRef] = (0, react_1.useState)(null);
50
50
  const [open, setOpen] = (0, react_1.useState)(false);
51
51
  const option = isGroup && valueProp ? options.find(({ value }) => value === valueProp) || optionProp : optionProp;
52
- const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
52
+ const radioButton = (react_1.default.createElement(RadioButton_1.RadioButton, { headerRef: setRef, className: RadioButtonGroup_module_scss_1.default.item, style: isSubOption ? undefined : { paddingRight: '35px' }, key: option === null || option === void 0 ? void 0 : option.value, checked: !(option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.value) === valueProp, onChange: () => {
53
53
  if (option === null || option === void 0 ? void 0 : option.disabled)
54
54
  return;
55
55
  if (isGroup)
56
56
  setOpen(!open);
57
57
  else if ((option === null || option === void 0 ? void 0 : option.value) && (option === null || option === void 0 ? void 0 : option.value) !== valueProp)
58
- onChange === null || onChange === void 0 ? void 0 : onChange(option.value);
58
+ onChange === null || onChange === void 0 ? void 0 : onChange(option.value, optionProp.value);
59
59
  }, label: option === null || option === void 0 ? void 0 : option.label, disabled: option === null || option === void 0 ? void 0 : option.disabled, renderContent: option === null || option === void 0 ? void 0 : option.renderContent }));
60
60
  if ((option === null || option === void 0 ? void 0 : option.disabled) && (option === null || option === void 0 ? void 0 : option.disabledReason)) {
61
61
  return (react_1.default.createElement(Tooltip_1.default, { key: option === null || option === void 0 ? void 0 : option.value, wrapperClasses: RadioButtonGroup_module_scss_1.default.wrapper, title: option === null || option === void 0 ? void 0 : option.disabledReason }, radioButton));
@@ -63,21 +63,21 @@ const Option = ({ option: optionProp, value: valueProp, onChange, renderChildren
63
63
  return (react_1.default.createElement(react_1.default.Fragment, null,
64
64
  react_1.default.createElement("div", { key: option === null || option === void 0 ? void 0 : option.value, className: RadioButtonGroup_module_scss_1.default.wrapper },
65
65
  radioButton,
66
- options && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator },
66
+ !isSubOption && (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.childrenIndicator, style: (!options && (option === null || option === void 0 ? void 0 : option.value) === valueProp) || (options && open) ? { transform: 'scaleY(-1) translateY(2px)' } : undefined },
67
67
  react_1.default.createElement(Icon_1.default, { size: "24px", icon: Icon_1.IconType.Dropdown })))),
68
- options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "top-start" },
68
+ options && (react_1.default.createElement(Overlay_1.Overlay, { onClose: () => setOpen(false), className: RadioButtonGroup_module_scss_1.default.overlay, hideStyles: true, containerClassName: "u-w-100", open: open, followElement: ref || undefined, offset: [0, 0], placement: "bottom-start" },
69
69
  react_1.default.createElement(RadioButtonGroup, { options: options.map((option) => {
70
70
  const { renderContent } = option, rest = __rest(option, ["renderContent"]);
71
71
  if (!renderChildrenContent)
72
72
  return rest;
73
73
  return option;
74
- }), onChange: (value) => {
75
- onChange === null || onChange === void 0 ? void 0 : onChange(value);
74
+ }), onChange: (subValue) => {
75
+ onChange === null || onChange === void 0 ? void 0 : onChange(optionProp.value, subValue);
76
76
  setOpen(false);
77
- }, value: valueProp })))));
77
+ }, value: valueProp, isSubGroup: true })))));
78
78
  };
79
- const RadioButtonGroup = ({ options = [], value: valueProp, onChange, renderChildrenContent, }) => {
80
- return (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map((rawOption) => (react_1.default.createElement(Option, { key: rawOption.value, option: rawOption, value: valueProp, onChange: onChange, renderChildrenContent: renderChildrenContent })))));
79
+ const RadioButtonGroup = ({ options = [], value: valueProp, onChange, renderChildrenContent, isSubGroup, }) => {
80
+ return (react_1.default.createElement("div", { className: RadioButtonGroup_module_scss_1.default.root }, options.map((rawOption) => (react_1.default.createElement(Option, { key: rawOption.value, option: rawOption, value: valueProp, onChange: onChange, renderChildrenContent: renderChildrenContent, isSubOption: isSubGroup })))));
81
81
  };
82
82
  exports.default = RadioButtonGroup;
83
83
  //# sourceMappingURL=RadioButtonGroup.js.map