@roomstay/frontend 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/201.bundle.js +1 -0
  2. package/dist/279.bundle.js +1 -0
  3. package/dist/370.bundle.js +1 -0
  4. package/dist/449.bundle.js +1 -0
  5. package/dist/625.bundle.js +1 -0
  6. package/dist/661.bundle.js +1 -0
  7. package/dist/7.bundle.js +1 -0
  8. package/dist/845.bundle.js +1 -0
  9. package/dist/873.bundle.js +1 -0
  10. package/dist/876.bundle.js +1 -0
  11. package/dist/972.bundle.js +1 -0
  12. package/dist/main.bundle.js +1 -0
  13. package/dist/src/api/AvailabilityAPI.js +90 -95
  14. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  15. package/dist/src/api/BookingAPI.d.ts +2 -0
  16. package/dist/src/api/BookingAPI.js +2 -0
  17. package/dist/src/api/BookingAPI.js.map +1 -1
  18. package/dist/src/api/ErrorAPI.d.ts +9 -0
  19. package/dist/src/api/ErrorAPI.js +34 -0
  20. package/dist/src/api/ErrorAPI.js.map +1 -0
  21. package/dist/src/api/ExchangeRateAPI.d.ts +1 -0
  22. package/dist/src/api/ExchangeRateAPI.js +10 -2
  23. package/dist/src/api/ExchangeRateAPI.js.map +1 -1
  24. package/dist/src/components/generic/BackButton.d.ts +0 -1
  25. package/dist/src/components/generic/BookNowPayLaterInfoBlock.d.ts +0 -1
  26. package/dist/src/components/generic/Countdown.d.ts +0 -1
  27. package/dist/src/components/generic/Currency.d.ts +0 -1
  28. package/dist/src/components/generic/Distance.d.ts +0 -1
  29. package/dist/src/components/generic/Icon.d.ts +0 -1
  30. package/dist/src/components/generic/LineBreak.d.ts +0 -1
  31. package/dist/src/components/generic/NumberIncrement.d.ts +0 -1
  32. package/dist/src/components/generic/Placeholder.d.ts +0 -1
  33. package/dist/src/components/generic/PromoCodeInput.d.ts +0 -1
  34. package/dist/src/components/generic/RecentSearchesCard.d.ts +0 -1
  35. package/dist/src/components/generic/ScrollToTop.d.ts +1 -3
  36. package/dist/src/components/generic/Select.d.ts +0 -1
  37. package/dist/src/components/generic/badging/SSLSecureBadge.d.ts +0 -1
  38. package/dist/src/components/generic/buttons/NextStepButton.d.ts +0 -1
  39. package/dist/src/components/generic/date/DatePicker.d.ts +0 -1
  40. package/dist/src/components/generic/date/DatePickerDay.d.ts +0 -1
  41. package/dist/src/components/generic/date/DatePickerDays.d.ts +0 -1
  42. package/dist/src/components/generic/date/DatePickerMonth.d.ts +0 -1
  43. package/dist/src/components/generic/date/DatePickerWeek.d.ts +0 -1
  44. package/dist/src/components/generic/loader/LargeLoader.d.ts +0 -1
  45. package/dist/src/components/generic/loader/SmallSpinner.d.ts +0 -1
  46. package/dist/src/components/generic/map/HotelLocationMap.d.ts +0 -1
  47. package/dist/src/components/generic/modal/ConfirmationModal.d.ts +0 -1
  48. package/dist/src/components/generic/radio/RadioFields.d.ts +0 -1
  49. package/dist/src/components/iconComponents/BookNowPayLaterIcon.d.ts +0 -1
  50. package/dist/src/components/navigation/Header.d.ts +0 -1
  51. package/dist/src/components/navigation/StepSelector.d.ts +0 -1
  52. package/dist/src/components/navigation/StepSelectorModal.d.ts +0 -1
  53. package/dist/src/components/steps/DaysSelectedInformer.d.ts +0 -1
  54. package/dist/src/components/steps/MinimumNightStayPill.d.ts +0 -1
  55. package/dist/src/components/steps/addons/AddonCard.d.ts +0 -1
  56. package/dist/src/components/steps/addons/AddonList.d.ts +0 -1
  57. package/dist/src/components/steps/addons/AddonsNotFound.d.ts +0 -1
  58. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.d.ts +0 -1
  59. package/dist/src/components/steps/confirmation/AccountDetails.d.ts +0 -1
  60. package/dist/src/components/steps/confirmation/RoomContactDetails.d.ts +0 -1
  61. package/dist/src/components/steps/confirmation/StepConfirmationCheckoutDifferencesModal.d.ts +0 -1
  62. package/dist/src/components/steps/confirmation/StepConfirmationCommentsComponent.d.ts +0 -1
  63. package/dist/src/components/steps/confirmation/StepConfirmationForm.d.ts +0 -1
  64. package/dist/src/components/steps/confirmation/StepConfirmationLimitedOffer.d.ts +0 -1
  65. package/dist/src/components/steps/confirmation/StepConfirmationPoliciesSection.d.ts +0 -1
  66. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.d.ts +0 -1
  67. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffers.d.ts +0 -1
  68. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersColumn.d.ts +0 -1
  69. package/dist/src/components/steps/confirmation/additionalOffers/AdditionalOffersModal.d.ts +0 -1
  70. package/dist/src/components/steps/date/PeoplePicker.d.ts +0 -1
  71. package/dist/src/components/steps/date/PeoplePickerRow.d.ts +0 -1
  72. package/dist/src/components/steps/date/StepDatePricePerRoom.d.ts +0 -1
  73. package/dist/src/components/steps/date/StepOneDateRange.d.ts +0 -1
  74. package/dist/src/components/steps/date/StepOneDateRangePicker.d.ts +0 -1
  75. package/dist/src/components/steps/date/StepOneDateRangePickerLegend.d.ts +0 -1
  76. package/dist/src/components/steps/date/StepOneNextStepButton.d.ts +0 -1
  77. package/dist/src/components/steps/date/StepOneStatusPeople.d.ts +0 -1
  78. package/dist/src/components/steps/hotel/HotelCard.d.ts +0 -1
  79. package/dist/src/components/steps/hotel/HotelCardList.d.ts +0 -1
  80. package/dist/src/components/steps/hotel/HotelSearchParameters.d.ts +0 -1
  81. package/dist/src/components/steps/hotel/NoHotelsAvailable.d.ts +0 -1
  82. package/dist/src/components/steps/room/AvailableUpgradesModal.d.ts +0 -1
  83. package/dist/src/components/steps/room/ImageGallerySlider.d.ts +0 -1
  84. package/dist/src/components/steps/room/InactivityWindow.d.ts +0 -1
  85. package/dist/src/components/steps/room/LargeRoomCard.d.ts +0 -1
  86. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.d.ts +0 -1
  87. package/dist/src/components/steps/room/{RoomNotFound.d.ts → NoRoomsFoundBlock.d.ts} +0 -1
  88. package/dist/src/components/steps/room/{RoomNotFound.js → NoRoomsFoundBlock.js} +2 -2
  89. package/dist/src/components/steps/room/NoRoomsFoundBlock.js.map +1 -0
  90. package/dist/src/components/steps/room/RatesNotFound.d.ts +0 -1
  91. package/dist/src/components/steps/room/RoomList.d.ts +0 -1
  92. package/dist/src/components/steps/room/RoomList.js +17 -4
  93. package/dist/src/components/steps/room/RoomList.js.map +1 -1
  94. package/dist/src/components/steps/room/RoomListCrossSellBlock.d.ts +0 -1
  95. package/dist/src/components/steps/room/RoomModal.d.ts +0 -1
  96. package/dist/src/components/steps/room/StepRoomAlertBlocks.d.ts +0 -1
  97. package/dist/src/components/steps/room/StepRoomBestRateAlert.d.ts +0 -1
  98. package/dist/src/components/steps/room/StepRoomErrorForm.d.ts +1 -0
  99. package/dist/src/components/steps/room/StepRoomErrorForm.js +116 -0
  100. package/dist/src/components/steps/room/StepRoomErrorForm.js.map +1 -0
  101. package/dist/src/components/steps/room/StepRoomHotelDetails.d.ts +0 -1
  102. package/dist/src/components/steps/room/StepRoomNextStepButton.d.ts +0 -1
  103. package/dist/src/components/steps/room/StepRoomSortBy.d.ts +0 -1
  104. package/dist/src/components/steps/room/StepRoomSummaryAndButton.d.ts +0 -1
  105. package/dist/src/components/steps/room/roomBuilderProgress/NumberOfAdultsPicker.d.ts +0 -1
  106. package/dist/src/components/steps/room/roomBuilderProgress/NumberOfChildrenPicker.d.ts +0 -1
  107. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgress.d.ts +0 -1
  108. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.d.ts +0 -1
  109. package/dist/src/components/steps/room/roomDetails/RoomDetails.d.ts +0 -1
  110. package/dist/src/components/steps/room/roomDetails/RoomDetailsBedsBlock.d.ts +0 -1
  111. package/dist/src/components/steps/room/roomDetails/RoomDetailsPerkBlock.d.ts +0 -1
  112. package/dist/src/components/steps/room/roomDetails/RoomDetailsPriceBlock.d.ts +0 -1
  113. package/dist/src/components/steps/room/roomDetails/roomRates/BookNowButton.d.ts +0 -1
  114. package/dist/src/components/steps/room/roomDetails/roomRates/MembersOnlyRow.d.ts +0 -1
  115. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.d.ts +0 -1
  116. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.d.ts +0 -1
  117. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDetailsAndPriceBreakdownModal.d.ts +0 -1
  118. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRatePills.d.ts +0 -1
  119. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.d.ts +0 -1
  120. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js +3 -1
  121. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateRow.js.map +1 -1
  122. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRates.d.ts +0 -1
  123. package/dist/src/components/steps/room/roomFilter/AppliedFiltersBlock.d.ts +0 -1
  124. package/dist/src/components/steps/room/roomFilter/RoomFilterOverlay.d.ts +0 -1
  125. package/dist/src/components/steps/room/roomFilter/RoomFilterPriceSlider.d.ts +0 -1
  126. package/dist/src/components/steps/room/roomFilter/RoomFilterRateType.d.ts +0 -1
  127. package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.d.ts +0 -1
  128. package/dist/src/components/summary/BEMobileSummary.d.ts +0 -1
  129. package/dist/src/components/summary/BEMobileSummaryModal.d.ts +0 -1
  130. package/dist/src/components/summary/BESummary.d.ts +0 -1
  131. package/dist/src/components/summary/BESummaryAddonRow.d.ts +0 -1
  132. package/dist/src/components/summary/BESummaryPerkBlock.d.ts +0 -1
  133. package/dist/src/components/summary/BESummaryPrivacyPolicy.d.ts +0 -1
  134. package/dist/src/components/summary/BESummaryRoomRow.d.ts +0 -1
  135. package/dist/src/components/summary/TransportDistanceFromHotelBlock.d.ts +0 -1
  136. package/dist/src/engines/BaseEngine.d.ts +7 -1
  137. package/dist/src/engines/BaseEngine.js +10 -1
  138. package/dist/src/engines/BaseEngine.js.map +1 -1
  139. package/dist/src/engines/FullPageBookingEngine/FullPageBookingEngine.js +1 -1
  140. package/dist/src/engines/FullPageBookingEngine/FullPageBookingEngine.js.map +1 -1
  141. package/dist/src/engines/FullPageBookingEngine/FullPageBookingEngineElement.d.ts +0 -1
  142. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngine.js +1 -1
  143. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngine.js.map +1 -1
  144. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.d.ts +0 -1
  145. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngine.js +1 -1
  146. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngine.js.map +1 -1
  147. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.d.ts +0 -1
  148. package/dist/src/icons/Check.d.ts +0 -1
  149. package/dist/src/index.d.ts +2 -2
  150. package/dist/src/index.js +4 -4
  151. package/dist/src/index.js.map +1 -1
  152. package/dist/src/pages/findReservation/FindReservation.d.ts +0 -1
  153. package/dist/src/pages/findReservation/FindReservationResults.d.ts +0 -1
  154. package/dist/src/pages/findReservation/ReservationRow.d.ts +0 -1
  155. package/dist/src/pages/findReservation/ReservationRowModal.d.ts +0 -1
  156. package/dist/src/pages/hotel/HotelInfo.d.ts +0 -1
  157. package/dist/src/pages/hotel/HotelInfoPlaceholder.d.ts +0 -1
  158. package/dist/src/pages/steps/StepAddon/StepAddonComponent.d.ts +0 -1
  159. package/dist/src/pages/steps/StepAddon/StepAddonLoader.d.ts +0 -1
  160. package/dist/src/pages/steps/StepConfirmation/StepConfirmationComponent.d.ts +0 -1
  161. package/dist/src/pages/steps/StepConfirmation/StepConfirmationLoader.d.ts +0 -1
  162. package/dist/src/pages/steps/StepDate/StepDate.d.ts +1 -2
  163. package/dist/src/pages/steps/StepDate/StepDateComponent.d.ts +1 -2
  164. package/dist/src/pages/steps/StepHotel/StepHotelComponent.d.ts +0 -1
  165. package/dist/src/pages/steps/StepHotel/StepHotelLoader.d.ts +0 -1
  166. package/dist/src/pages/steps/StepRoom/StepRoomComponent.d.ts +0 -1
  167. package/dist/src/pages/steps/StepRoom/StepRoomLoader.d.ts +0 -1
  168. package/dist/src/pages/steps/StepThanks/StepThanksComponent.d.ts +0 -1
  169. package/dist/src/providers/DIProvider.d.ts +0 -1
  170. package/dist/src/routes/NaturallyProgressedStepRoute.d.ts +0 -1
  171. package/dist/src/translations/Translation.d.ts +12 -0
  172. package/dist/src/translations/Translation.js +12 -0
  173. package/dist/src/translations/Translation.js.map +1 -1
  174. package/dist/src/translations/languages/en-gb.js +12 -0
  175. package/dist/src/translations/languages/en-gb.js.map +1 -1
  176. package/dist/test.bundle.js +1 -0
  177. package/dist/tests/offline/RoomstayBestRateAlert.d.ts +0 -1
  178. package/dist/tests/offline/entry/ReactWrapper.d.ts +0 -1
  179. package/dist/tests/offline/entry/components/TestPicker.d.ts +0 -1
  180. package/dist/vendors.bundle.js +2 -0
  181. package/dist/vendors.bundle.js.LICENSE.txt +81 -0
  182. package/package.json +2 -2
  183. package/dist/src/components/steps/room/RoomNotFound.js.map +0 -1
@@ -15,11 +15,10 @@ const BaseAPI_1 = require("./BaseAPI");
15
15
  const RoomRate_1 = require("../models/Room/RoomRate");
16
16
  const RoomRateNight_1 = require("../models/Room/RoomRateNight");
17
17
  const RoomstayThemeEngine_1 = require("../providers/RoomstayThemeEngine");
18
- const NotificationContext_1 = require("../contexts/NotificationContext");
19
- const Icon_1 = require("../components/generic/Icon");
20
18
  const BasketContextErrorHandler_1 = require("../handlers/BasketContextErrorHandler");
21
19
  const NoHotelSelectedError_1 = require("../errors/NoHotelSelectedError");
22
20
  const GetAvailabilityError_1 = require("../errors/GetAvailabilityError");
21
+ const RoomstayError_1 = require("errors/RoomstayError");
23
22
  class AvailabilityAPI extends BaseAPI_1.default {
24
23
  constructor() {
25
24
  super();
@@ -237,111 +236,107 @@ class AvailabilityAPI extends BaseAPI_1.default {
237
236
  else {
238
237
  this.fetchDataPromise[id] = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
239
238
  var _d;
240
- const json = yield this.get(BaseAPI_1.APIEndpoint.Availability, {
241
- checkInDate: fromDate,
242
- checkOutDate: toDate,
243
- adults,
244
- children,
245
- promoCode,
246
- promoOnly,
247
- }, '', hotelId);
248
- this.fetchDataPromise[id] = null;
249
- const dateToObject = (data) => {
250
- data.validUntil = dayjs(data.validUntil);
251
- data.cachedSince = dayjs(data.cachedSince);
252
- return data;
253
- };
254
- if (json.guaranteePolicies) {
255
- Object.keys(json.guaranteePolicies).map((code) => {
256
- AvailabilityAPI.policyMappings.guarantee[code] = json.guaranteePolicies[code];
257
- });
258
- }
259
- if (json.cancelPolicies) {
260
- Object.keys(json.cancelPolicies).map((code) => {
261
- AvailabilityAPI.policyMappings.cancel[code] = json.cancelPolicies[code];
262
- });
263
- }
264
- if (json.roomTypes) {
265
- const allRoomsByKey = Object.keys(json.roomTypes);
266
- if (allRoomsByKey.length) {
267
- this.roomTypesData = dateToObject(json.roomTypes);
268
- allRoomsByKey.forEach((roomCode) => {
269
- this.roomTypesData[roomCode].code = roomCode;
270
- this.rooms[roomCode] = Room_1.Room.fromData(this.roomTypesData[roomCode]);
239
+ try {
240
+ const json = yield this.get(BaseAPI_1.APIEndpoint.Availability, {
241
+ checkInDate: fromDate,
242
+ checkOutDate: toDate,
243
+ adults,
244
+ children,
245
+ promoCode,
246
+ promoOnly,
247
+ }, '', hotelId);
248
+ this.fetchDataPromise[id] = null;
249
+ const dateToObject = (data) => {
250
+ data.validUntil = dayjs(data.validUntil);
251
+ data.cachedSince = dayjs(data.cachedSince);
252
+ return data;
253
+ };
254
+ if (json.guaranteePolicies) {
255
+ Object.keys(json.guaranteePolicies).map((code) => {
256
+ AvailabilityAPI.policyMappings.guarantee[code] = json.guaranteePolicies[code];
271
257
  });
272
258
  }
273
- }
274
- if (json.ratePlans) {
275
- const allRatesByKey = Object.keys(json.ratePlans);
276
- if (allRatesByKey.length) {
277
- this.ratePlansData = dateToObject(json.ratePlans);
278
- allRatesByKey.forEach((rateCode) => {
279
- this.ratePlansData[rateCode].code = rateCode;
280
- this.rates[rateCode] = RoomRate_1.RoomRate.fromData(this.ratePlansData[rateCode]);
259
+ if (json.cancelPolicies) {
260
+ Object.keys(json.cancelPolicies).map((code) => {
261
+ AvailabilityAPI.policyMappings.cancel[code] = json.cancelPolicies[code];
281
262
  });
282
263
  }
283
- }
284
- if (json.roomNights) {
285
- const roomNights = json.roomNights;
286
- const rooms = {};
287
- const allNightsByKey = Object.keys(roomNights);
288
- let first = true;
289
- if (allNightsByKey.length) {
290
- allNightsByKey.forEach((date) => {
291
- const day = dayjs(date);
292
- Object.keys(roomNights[date]).forEach((roomCode) => {
293
- if (first) {
294
- const room = Room_1.Room.fromData(this.roomTypesData[roomCode]);
295
- room.code = roomCode;
296
- rooms[roomCode] = room;
297
- }
298
- Object.keys(roomNights[date][roomCode].rates).forEach((rateKey) => {
299
- const nightData = roomNights[date][roomCode].rates[rateKey];
264
+ if (json.roomTypes) {
265
+ const allRoomsByKey = Object.keys(json.roomTypes);
266
+ if (allRoomsByKey.length) {
267
+ this.roomTypesData = dateToObject(json.roomTypes);
268
+ allRoomsByKey.forEach((roomCode) => {
269
+ this.roomTypesData[roomCode].code = roomCode;
270
+ this.rooms[roomCode] = Room_1.Room.fromData(this.roomTypesData[roomCode]);
271
+ });
272
+ }
273
+ }
274
+ if (json.ratePlans) {
275
+ const allRatesByKey = Object.keys(json.ratePlans);
276
+ if (allRatesByKey.length) {
277
+ this.ratePlansData = dateToObject(json.ratePlans);
278
+ allRatesByKey.forEach((rateCode) => {
279
+ this.ratePlansData[rateCode].code = rateCode;
280
+ this.rates[rateCode] = RoomRate_1.RoomRate.fromData(this.ratePlansData[rateCode]);
281
+ });
282
+ }
283
+ }
284
+ if (json.roomNights) {
285
+ const roomNights = json.roomNights;
286
+ const rooms = {};
287
+ const allNightsByKey = Object.keys(roomNights);
288
+ let first = true;
289
+ if (allNightsByKey.length) {
290
+ allNightsByKey.forEach((date) => {
291
+ const day = dayjs(date);
292
+ Object.keys(roomNights[date]).forEach((roomCode) => {
300
293
  if (first) {
301
- const rate = RoomRate_1.RoomRate.fromData(this.ratePlansData[rateKey]);
302
- rate.code = rateKey;
303
- rooms[roomCode].addRate(rate);
304
- }
305
- if (oneNightStay && Object.keys(rooms[roomCode].getRate(rateKey).nightRates).length) {
306
- return;
294
+ const room = Room_1.Room.fromData(this.roomTypesData[roomCode]);
295
+ room.code = roomCode;
296
+ rooms[roomCode] = room;
307
297
  }
308
- const rateNight = new RoomRateNight_1.default();
309
- rateNight.available = roomNights[date][roomCode].available;
310
- rateNight.cost = nightData.cost;
311
- rateNight.discount = nightData.discount;
312
- rateNight.total = nightData.total;
313
- rateNight.tax = nightData.tax;
314
- rateNight.fee = nightData.fee;
315
- rateNight.date = day;
316
- rooms[roomCode].getRate(rateKey).nightRates[date] = rateNight;
298
+ Object.keys(roomNights[date][roomCode].rates).forEach((rateKey) => {
299
+ const nightData = roomNights[date][roomCode].rates[rateKey];
300
+ if (first) {
301
+ const rate = RoomRate_1.RoomRate.fromData(this.ratePlansData[rateKey]);
302
+ rate.code = rateKey;
303
+ rooms[roomCode].addRate(rate);
304
+ }
305
+ if (oneNightStay && Object.keys(rooms[roomCode].getRate(rateKey).nightRates).length) {
306
+ return;
307
+ }
308
+ const rateNight = new RoomRateNight_1.default();
309
+ rateNight.available = roomNights[date][roomCode].available;
310
+ rateNight.cost = nightData.cost;
311
+ rateNight.discount = nightData.discount;
312
+ rateNight.total = nightData.total;
313
+ rateNight.tax = nightData.tax;
314
+ rateNight.fee = nightData.fee;
315
+ rateNight.date = day;
316
+ rooms[roomCode].getRate(rateKey).nightRates[date] = rateNight;
317
+ });
317
318
  });
319
+ first = false;
318
320
  });
319
- first = false;
320
- });
321
+ }
322
+ const roomArray = Object.values(rooms);
323
+ this.cachedAvailability[id] = roomArray;
324
+ resolve(roomArray);
325
+ }
326
+ if ((_d = json.warnings) === null || _d === void 0 ? void 0 : _d.length) {
327
+ this.availabilityWarnings[id] = json.warnings;
328
+ BasketContextErrorHandler_1.BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);
329
+ }
330
+ else {
331
+ BasketContextErrorHandler_1.BasketContextErrorHandler.handlePromoSuccess(promoCode);
321
332
  }
322
- const roomArray = Object.values(rooms);
323
- this.cachedAvailability[id] = roomArray;
324
- resolve(roomArray);
333
+ resolve([]);
325
334
  }
326
- if ((_d = json.warnings) === null || _d === void 0 ? void 0 : _d.length) {
327
- this.availabilityWarnings[id] = json.warnings;
328
- BasketContextErrorHandler_1.BasketContextErrorHandler.handleAvailabilityWarnings(json.warnings);
335
+ catch (ex) {
336
+ reject();
329
337
  }
330
- else {
331
- BasketContextErrorHandler_1.BasketContextErrorHandler.handlePromoSuccess(promoCode);
332
- }
333
- resolve([]);
334
338
  })).catch((reason) => {
335
- var _a;
336
- // Don't parse warnings when we're making a cross-hotel availability request
337
- if (!isCrossSell) {
338
- NotificationContext_1.NotificationHandler.add({
339
- ttl: 3000,
340
- icon: Icon_1.IconType.Error,
341
- children: (_a = reason === null || reason === void 0 ? void 0 : reason.Message) !== null && _a !== void 0 ? _a : 'Room request failed',
342
- });
343
- }
344
- return [];
339
+ throw new RoomstayError_1.RoomstayError('Failed to load calendar availability');
345
340
  });
346
341
  return this.fetchDataPromise[id];
347
342
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AvailabilityAPI.js","sourceRoot":"/","sources":["src/api/AvailabilityAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dayjs from 'dayjs';\nimport { Room } from '../models/Room/Room';\nimport BaseAPI, { API_DATE_FORMAT, APIEndpoint } from './BaseAPI';\nimport { RoomRate } from '../models/Room/RoomRate';\nimport BasketRow from '../models/BasketRow';\nimport RoomRateNight from '../models/Room/RoomRateNight';\nimport RoomstayThemeEngine from '../providers/RoomstayThemeEngine';\nimport { NotificationHandler } from '../contexts/NotificationContext';\nimport { IconType } from '../components/generic/Icon';\nimport { BasketContextErrorHandler } from '../handlers/BasketContextErrorHandler';\nimport { NoHotelSelectedError } from '../errors/NoHotelSelectedError';\nimport GetAvailabilityError from '../errors/GetAvailabilityError';\n\nexport default class AvailabilityAPI extends BaseAPI {\n private roomTypesData: any = null;\n private ratePlansData: any = null;\n\n private cachedMinNightStay: { [id: string]: any } = {};\n private cachedAvailability: { [id: string]: Room[] };\n private calendar: { [id: string]: { range: { min: number; max: number }; prices: { [date: string]: number } } } = {};\n private crossSellHotelInfo: { [hotelId: string]: any } = {};\n\n private calendarWarnings: { [id: string]: string[] } = {};\n private availabilityWarnings: { [id: string]: string[] } = {};\n\n private rooms: { [code: string]: Room };\n private rates: { [code: string]: RoomRate };\n\n private fetchDataPromise: { [dateRange: string]: Promise<Room[]> } = {};\n\n private calendarPromises: { [id: string]: Promise<Response> } = {};\n\n private cachedMidNightStayPromises: { [id: string]: Promise<any> } = {};\n\n public static policyMappings: { guarantee: { [name: string]: string }; cancel: { [name: string]: string } } = { guarantee: {}, cancel: {} };\n\n public static maxNightPrice = 0;\n public static minNightPrice: number = null;\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 promoCode: string,\n hotelId: string,\n isCrossSell = false\n ): Promise<{ [date: string]: number }> => {\n let dayPricingData = null;\n if (fromDate === undefined) {\n return {};\n }\n\n try {\n dayPricingData = await this.fetchCalendar(fromDate, adults, children, promoCode, hotelId, undefined, isCrossSell);\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 (day: dayjs.Dayjs, adults: number, children: number, promoCode: string, hotelID: string, parseErrors = true): Promise<any> => {\n if (day.isBefore(dayjs(), 'date')) return false;\n\n let dataForQuery = null;\n try {\n dataForQuery = await this.fetchCalendar(day, adults, children, promoCode, hotelID, parseErrors);\n } catch (ex) {\n console.log(ex);\n }\n\n if (!dataForQuery) {\n return false;\n }\n\n const priceForDay = dataForQuery[day.format(API_DATE_FORMAT)];\n\n return {\n price: priceForDay,\n perCent: 0,\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 public fetchCalendar = async (\n month: dayjs.Dayjs,\n adults: number,\n children: number,\n promoCode: string,\n hotelId: string,\n parseErrors = true,\n isCrossSell = false\n ): Promise<any> => {\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, promoCode, isCrossSell]);\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 this.calendar[id];\n }\n\n if (this.calendarPromises[id]) {\n return this.calendarPromises[id];\n }\n\n this.calendarPromises[id] = new Promise(async (resolve, reject) => {\n let response;\n\n response = await fetch(\n `${this.getApiPath()}availability/calendar/${targetHotel}?checkInDate=${fromDatePretty}&checkOutDate=${toDatePretty}&adults=${adults}&children=${children}&promoCode=${promoCode}&includeHotelInfo=${\n isCrossSell ? 0 : 1\n }`,\n {\n credentials: 'omit',\n }\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\n resolve((this.calendar[id] = json.prices));\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 promoCode = basketRow.getPromoCode();\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, RoomstayThemeEngine.selectedLang, oneNightStay]);\n delete this.cachedAvailability[id];\n };\n\n public fetchMinNightStayData = async (basketRow: BasketRow, hotelID: 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 promoCode = basketRow.getPromoCode();\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, RoomstayThemeEngine.selectedLang, oneNightStay]);\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 promoCode,\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 public fetchAvailabilityData = async (basketRow: BasketRow, hotelId: string, isCrossSell = 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 promoCode = basketRow.getPromoCode();\n const promoOnly = basketRow.getPromoOnly();\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, RoomstayThemeEngine.selectedLang, oneNightStay]);\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 const json = await this.get(\n APIEndpoint.Availability,\n {\n checkInDate: fromDate,\n checkOutDate: toDate,\n\n adults,\n children,\n promoCode,\n promoOnly,\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).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((reason) => {\n // Don't parse warnings when we're making a cross-hotel availability request\n if (!isCrossSell) {\n NotificationHandler.add({\n ttl: 3000,\n icon: IconType.Error,\n children: reason?.Message ?? 'Room request failed',\n });\n }\n return [];\n });\n\n return this.fetchDataPromise[id];\n }\n };\n}\n"]}
1
+ {"version":3,"file":"AvailabilityAPI.js","sourceRoot":"/","sources":["src/api/AvailabilityAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dayjs from 'dayjs';\nimport { Room } from '../models/Room/Room';\nimport BaseAPI, { API_DATE_FORMAT, APIEndpoint } from './BaseAPI';\nimport { RoomRate } from '../models/Room/RoomRate';\nimport BasketRow from '../models/BasketRow';\nimport RoomRateNight from '../models/Room/RoomRateNight';\nimport RoomstayThemeEngine from '../providers/RoomstayThemeEngine';\nimport { NotificationHandler } from '../contexts/NotificationContext';\nimport { IconType } from '../components/generic/Icon';\nimport { BasketContextErrorHandler } from '../handlers/BasketContextErrorHandler';\nimport { NoHotelSelectedError } from '../errors/NoHotelSelectedError';\nimport GetAvailabilityError from '../errors/GetAvailabilityError';\nimport { RoomstayError } from 'errors/RoomstayError';\n\nexport default class AvailabilityAPI extends BaseAPI {\n private roomTypesData: any = null;\n private ratePlansData: any = null;\n\n private cachedMinNightStay: { [id: string]: any } = {};\n private cachedAvailability: { [id: string]: Room[] };\n private calendar: { [id: string]: { range: { min: number; max: number }; prices: { [date: string]: number } } } = {};\n private crossSellHotelInfo: { [hotelId: string]: any } = {};\n\n private calendarWarnings: { [id: string]: string[] } = {};\n private availabilityWarnings: { [id: string]: string[] } = {};\n\n private rooms: { [code: string]: Room };\n private rates: { [code: string]: RoomRate };\n\n private fetchDataPromise: { [dateRange: string]: Promise<Room[]> } = {};\n\n private calendarPromises: { [id: string]: Promise<Response> } = {};\n\n private cachedMidNightStayPromises: { [id: string]: Promise<any> } = {};\n\n public static policyMappings: { guarantee: { [name: string]: string }; cancel: { [name: string]: string } } = { guarantee: {}, cancel: {} };\n\n public static maxNightPrice = 0;\n public static minNightPrice: number = null;\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 promoCode: string,\n hotelId: string,\n isCrossSell = false\n ): Promise<{ [date: string]: number }> => {\n let dayPricingData = null;\n if (fromDate === undefined) {\n return {};\n }\n\n try {\n dayPricingData = await this.fetchCalendar(fromDate, adults, children, promoCode, hotelId, undefined, isCrossSell);\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 (day: dayjs.Dayjs, adults: number, children: number, promoCode: string, hotelID: string, parseErrors = true): Promise<any> => {\n if (day.isBefore(dayjs(), 'date')) return false;\n\n let dataForQuery = null;\n try {\n dataForQuery = await this.fetchCalendar(day, adults, children, promoCode, hotelID, parseErrors);\n } catch (ex) {\n console.log(ex);\n }\n\n if (!dataForQuery) {\n return false;\n }\n\n const priceForDay = dataForQuery[day.format(API_DATE_FORMAT)];\n\n return {\n price: priceForDay,\n perCent: 0,\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 public fetchCalendar = async (\n month: dayjs.Dayjs,\n adults: number,\n children: number,\n promoCode: string,\n hotelId: string,\n parseErrors = true,\n isCrossSell = false\n ): Promise<any> => {\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, promoCode, isCrossSell]);\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 this.calendar[id];\n }\n\n if (this.calendarPromises[id]) {\n return this.calendarPromises[id];\n }\n\n this.calendarPromises[id] = new Promise(async (resolve, reject) => {\n let response;\n\n response = await fetch(\n `${this.getApiPath()}availability/calendar/${targetHotel}?checkInDate=${fromDatePretty}&checkOutDate=${toDatePretty}&adults=${adults}&children=${children}&promoCode=${promoCode}&includeHotelInfo=${\n isCrossSell ? 0 : 1\n }`,\n {\n credentials: 'omit',\n }\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\n resolve((this.calendar[id] = json.prices));\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 promoCode = basketRow.getPromoCode();\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, RoomstayThemeEngine.selectedLang, oneNightStay]);\n delete this.cachedAvailability[id];\n };\n\n public fetchMinNightStayData = async (basketRow: BasketRow, hotelID: 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 promoCode = basketRow.getPromoCode();\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, RoomstayThemeEngine.selectedLang, oneNightStay]);\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 promoCode,\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 public fetchAvailabilityData = async (basketRow: BasketRow, hotelId: string, isCrossSell = 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 promoCode = basketRow.getPromoCode();\n const promoOnly = basketRow.getPromoOnly();\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, RoomstayThemeEngine.selectedLang, oneNightStay]);\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 promoCode,\n promoOnly,\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).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"]}
@@ -5,6 +5,7 @@ import AddonAPI from './AddonAPI';
5
5
  import MockAddonAPI from '../mockApi/AddonAPI';
6
6
  import ExchangeRateAPI from './ExchangeRateAPI';
7
7
  import MemberAPI from './MemberAPI';
8
+ import ErrorAPI from './ErrorAPI';
8
9
  declare const API: {
9
10
  Availability: AvailabilityAPI;
10
11
  Reservation: ReservationAPI;
@@ -12,6 +13,7 @@ declare const API: {
12
13
  Addons: AddonAPI | MockAddonAPI;
13
14
  Member: MemberAPI;
14
15
  Hotel: HotelAPI;
16
+ Error: ErrorAPI;
15
17
  enableMocks: () => void;
16
18
  };
17
19
  export default API;
@@ -7,6 +7,7 @@ const AddonAPI_1 = require("./AddonAPI");
7
7
  const ExchangeRateAPI_1 = require("./ExchangeRateAPI");
8
8
  const MemberAPI_1 = require("./MemberAPI");
9
9
  const BookingAPI_1 = require("../mockApi/BookingAPI");
10
+ const ErrorAPI_1 = require("./ErrorAPI");
10
11
  const API = {
11
12
  Availability: new AvailabilityAPI_1.default(),
12
13
  Hotel: new HotelAPI_1.default(),
@@ -14,6 +15,7 @@ const API = {
14
15
  Addons: new AddonAPI_1.default(),
15
16
  ExchangeRate: new ExchangeRateAPI_1.default(),
16
17
  Member: new MemberAPI_1.default(),
18
+ Error: new ErrorAPI_1.default(),
17
19
  enableMocks: () => {
18
20
  API.Addons = BookingAPI_1.default.Addons;
19
21
  },
@@ -1 +1 @@
1
- {"version":3,"file":"BookingAPI.js","sourceRoot":"/","sources":["src/api/BookingAPI.ts"],"names":[],"mappings":";;AAAA,uDAAgD;AAChD,yCAAkC;AAClC,qDAA8C;AAC9C,yCAAkC;AAElC,uDAAgD;AAChD,2CAAoC;AACpC,sDAA4C;AAE5C,MAAM,GAAG,GAQL;IACA,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,IAAI,wBAAc,EAAE;IACjC,MAAM,EAAE,IAAI,kBAAQ,EAAE;IACtB,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,MAAM,EAAE,IAAI,mBAAS,EAAE;IACvB,WAAW,EAAE,GAAG,EAAE;QACd,GAAG,CAAC,MAAM,GAAG,oBAAO,CAAC,MAAM,CAAC;IAChC,CAAC;CACJ,CAAC;AAEF,kBAAe,GAAG,CAAC","sourcesContent":["import AvailabilityAPI from './AvailabilityAPI';\nimport HotelAPI from './HotelAPI';\nimport ReservationAPI from './ReservationAPI';\nimport AddonAPI from './AddonAPI';\nimport MockAddonAPI from '../mockApi/AddonAPI';\nimport ExchangeRateAPI from './ExchangeRateAPI';\nimport MemberAPI from './MemberAPI';\nimport MockAPI from '../mockApi/BookingAPI';\n\nconst API: {\n Availability: AvailabilityAPI;\n Reservation: ReservationAPI;\n ExchangeRate: ExchangeRateAPI;\n Addons: AddonAPI | MockAddonAPI;\n Member: MemberAPI;\n Hotel: HotelAPI;\n enableMocks: () => void;\n} = {\n Availability: new AvailabilityAPI(),\n Hotel: new HotelAPI(),\n Reservation: new ReservationAPI(),\n Addons: new AddonAPI(),\n ExchangeRate: new ExchangeRateAPI(),\n Member: new MemberAPI(),\n enableMocks: () => {\n API.Addons = MockAPI.Addons;\n },\n};\n\nexport default API;\n"]}
1
+ {"version":3,"file":"BookingAPI.js","sourceRoot":"/","sources":["src/api/BookingAPI.ts"],"names":[],"mappings":";;AAAA,uDAAgD;AAChD,yCAAkC;AAClC,qDAA8C;AAC9C,yCAAkC;AAElC,uDAAgD;AAChD,2CAAoC;AACpC,sDAA4C;AAC5C,yCAAkC;AAElC,MAAM,GAAG,GASL;IACA,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,IAAI,wBAAc,EAAE;IACjC,MAAM,EAAE,IAAI,kBAAQ,EAAE;IACtB,YAAY,EAAE,IAAI,yBAAe,EAAE;IACnC,MAAM,EAAE,IAAI,mBAAS,EAAE;IACvB,KAAK,EAAE,IAAI,kBAAQ,EAAE;IACrB,WAAW,EAAE,GAAG,EAAE;QACd,GAAG,CAAC,MAAM,GAAG,oBAAO,CAAC,MAAM,CAAC;IAChC,CAAC;CACJ,CAAC;AAEF,kBAAe,GAAG,CAAC","sourcesContent":["import AvailabilityAPI from './AvailabilityAPI';\nimport HotelAPI from './HotelAPI';\nimport ReservationAPI from './ReservationAPI';\nimport AddonAPI from './AddonAPI';\nimport MockAddonAPI from '../mockApi/AddonAPI';\nimport ExchangeRateAPI from './ExchangeRateAPI';\nimport MemberAPI from './MemberAPI';\nimport MockAPI from '../mockApi/BookingAPI';\nimport ErrorAPI from './ErrorAPI';\n\nconst API: {\n Availability: AvailabilityAPI;\n Reservation: ReservationAPI;\n ExchangeRate: ExchangeRateAPI;\n Addons: AddonAPI | MockAddonAPI;\n Member: MemberAPI;\n Hotel: HotelAPI;\n Error: ErrorAPI;\n enableMocks: () => void;\n} = {\n Availability: new AvailabilityAPI(),\n Hotel: new HotelAPI(),\n Reservation: new ReservationAPI(),\n Addons: new AddonAPI(),\n ExchangeRate: new ExchangeRateAPI(),\n Member: new MemberAPI(),\n Error: new ErrorAPI(),\n enableMocks: () => {\n API.Addons = MockAPI.Addons;\n },\n};\n\nexport default API;\n"]}
@@ -0,0 +1,9 @@
1
+ import BaseAPI from './BaseAPI';
2
+ export default class ErrorAPI extends BaseAPI {
3
+ sendRoomFallbackForm: (hotelId: string, object: {
4
+ name: string;
5
+ telephone: string;
6
+ email: string;
7
+ searchQuery: string;
8
+ }) => Promise<void>;
9
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const RoomstayError_1 = require("errors/RoomstayError");
13
+ const BaseAPI_1 = require("./BaseAPI");
14
+ class ErrorAPI extends BaseAPI_1.default {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.sendRoomFallbackForm = (hotelId, object) => __awaiter(this, void 0, void 0, function* () {
18
+ try {
19
+ const response = yield fetch(this.getApiPath() + `error/${hotelId}/rate-fallback-form`, {
20
+ method: 'POST',
21
+ body: JSON.stringify(object),
22
+ });
23
+ if (response.status !== 200) {
24
+ throw new RoomstayError_1.RoomstayError('Failed to post details');
25
+ }
26
+ }
27
+ catch (ex) {
28
+ throw new RoomstayError_1.RoomstayError('Failed to post details');
29
+ }
30
+ });
31
+ }
32
+ }
33
+ exports.default = ErrorAPI;
34
+ //# sourceMappingURL=ErrorAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorAPI.js","sourceRoot":"/","sources":["src/api/ErrorAPI.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,wDAAqD;AACrD,uCAAgC;AAEhC,MAAqB,QAAS,SAAQ,iBAAO;IAA7C;;QACW,yBAAoB,GAAG,CAAO,OAAe,EAAE,MAA+E,EAAiB,EAAE;YACpJ,IAAI;gBACA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,OAAO,qBAAqB,EAAE;oBACpF,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;iBAC/B,CAAC,CAAC;gBAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;oBACzB,MAAM,IAAI,6BAAa,CAAC,wBAAwB,CAAC,CAAC;iBACrD;aACJ;YAAC,OAAO,EAAE,EAAE;gBACT,MAAM,IAAI,6BAAa,CAAC,wBAAwB,CAAC,CAAC;aACrD;QACL,CAAC,CAAA,CAAC;IACN,CAAC;CAAA;AAfD,2BAeC","sourcesContent":["import { RoomstayError } from 'errors/RoomstayError';\nimport BaseAPI from './BaseAPI';\n\nexport default class ErrorAPI extends BaseAPI {\n public sendRoomFallbackForm = async (hotelId: string, object: { name: string; telephone: string; email: string; searchQuery: string }): Promise<void> => {\n try {\n const response = await fetch(this.getApiPath() + `error/${hotelId}/rate-fallback-form`, {\n method: 'POST',\n body: JSON.stringify(object),\n });\n\n if (response.status !== 200) {\n throw new RoomstayError('Failed to post details');\n }\n } catch (ex) {\n throw new RoomstayError('Failed to post details');\n }\n };\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import BaseAPI from './BaseAPI';
2
2
  import { ExchangeRateDTO } from '../models/Api/ExchangeRateDTO';
3
3
  export default class ExchangeRateAPI extends BaseAPI {
4
+ private cache;
4
5
  fetchData: (currencyCode: string) => Promise<ExchangeRateDTO>;
5
6
  }
@@ -13,9 +13,17 @@ const BaseAPI_1 = require("./BaseAPI");
13
13
  class ExchangeRateAPI extends BaseAPI_1.default {
14
14
  constructor() {
15
15
  super(...arguments);
16
+ this.cache = {};
16
17
  this.fetchData = (currencyCode) => __awaiter(this, void 0, void 0, function* () {
17
- const response = yield fetch(this.getApiPath() + `exchange-rates/${currencyCode}`);
18
- return response.json();
18
+ if (this.cache[currencyCode]) {
19
+ return yield this.cache[currencyCode];
20
+ }
21
+ const responseObject = (() => __awaiter(this, void 0, void 0, function* () {
22
+ const response = yield fetch(this.getApiPath() + `exchange-rates/${currencyCode}`);
23
+ return response.json();
24
+ }))();
25
+ this.cache[currencyCode] = responseObject;
26
+ return yield this.cache[currencyCode];
19
27
  });
20
28
  }
21
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ExchangeRateAPI.js","sourceRoot":"/","sources":["src/api/ExchangeRateAPI.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAAgC;AAGhC,MAAqB,eAAgB,SAAQ,iBAAO;IAApD;;QACW,cAAS,GAAG,CAAO,YAAoB,EAA4B,EAAE;YACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,kBAAkB,YAAY,EAAE,CAAC,CAAC;YAEnF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAA,CAAC;IACN,CAAC;CAAA;AAND,kCAMC","sourcesContent":["import BaseAPI from './BaseAPI';\nimport { ExchangeRateDTO } from '../models/Api/ExchangeRateDTO';\n\nexport default class ExchangeRateAPI extends BaseAPI {\n public fetchData = async (currencyCode: string): Promise<ExchangeRateDTO> => {\n const response = await fetch(this.getApiPath() + `exchange-rates/${currencyCode}`);\n\n return response.json();\n };\n}\n"]}
1
+ {"version":3,"file":"ExchangeRateAPI.js","sourceRoot":"/","sources":["src/api/ExchangeRateAPI.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,uCAAgC;AAGhC,MAAqB,eAAgB,SAAQ,iBAAO;IAApD;;QACY,UAAK,GAAmE,EAAE,CAAC;QAE5E,cAAS,GAAG,CAAO,YAAoB,EAA4B,EAAE;YACxE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBAC1B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;aACzC;YAED,MAAM,cAAc,GAA6B,CAAC,GAAS,EAAE;gBACzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,kBAAkB,YAAY,EAAE,CAAC,CAAC;gBAEnF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC,CAAA,CAAC,EAAE,CAAC;YAEL,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC;YAE1C,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAA,CAAC;IACN,CAAC;CAAA;AAlBD,kCAkBC","sourcesContent":["import BaseAPI from './BaseAPI';\nimport { ExchangeRateDTO } from '../models/Api/ExchangeRateDTO';\n\nexport default class ExchangeRateAPI extends BaseAPI {\n private cache: { [name: string]: Promise<ExchangeRateDTO> | ExchangeRateDTO } = {};\n\n public fetchData = async (currencyCode: string): Promise<ExchangeRateDTO> => {\n if (this.cache[currencyCode]) {\n return await this.cache[currencyCode];\n }\n\n const responseObject: Promise<ExchangeRateDTO> = (async () => {\n const response = await fetch(this.getApiPath() + `exchange-rates/${currencyCode}`);\n\n return response.json();\n })();\n\n this.cache[currencyCode] = responseObject;\n\n return await this.cache[currencyCode];\n };\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface BackButtonProps {
3
2
  onClick?: () => void;
4
3
  }
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
1
  export declare function BookNowPayLaterInfoBlock(): JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import * as dayjs from 'dayjs';
3
2
  interface CountdownProps {
4
3
  endTimeDate: dayjs.Dayjs;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface CurrencyProps {
3
2
  removeCurrencyAfterChar?: number;
4
3
  shortenThousandsAfter?: number;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface DistanceProps {
3
2
  distance: number | string;
4
3
  }
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Color } from '../../util/Color';
3
2
  export declare enum IconType {
4
3
  Email = "Email",
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export interface LineBreakProps {
3
2
  darker?: boolean;
4
3
  noMargins?: boolean;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export interface NumberIncrementProps {
3
2
  number?: number;
4
3
  onChange?: (value: number) => void;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare type StringScreenSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
2
  export interface PlaceholderProps {
4
3
  type: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface PromoCodeInputProps {
3
2
  value: string;
4
3
  onChange: (code: string) => void;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import BasketRow from '../../models/BasketRow';
3
2
  interface RecentSearchesCardProps {
4
3
  basketRow: BasketRow;
@@ -1,4 +1,2 @@
1
- /// <reference types="react" />
2
- declare function ScrollToTop(props: any): null;
3
- declare const _default: import("react").ComponentClass<Pick<any, string | number | symbol>, any> & import("react-router").WithRouterStatics<typeof ScrollToTop>;
1
+ declare const _default: any;
4
2
  export default _default;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface SelectItem {
3
2
  value: string | number;
4
3
  text: any;
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
1
  export default function SSLSecureBadge(): JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import Step from '../../../pages/steps/Step';
3
2
  export interface NextStepButtonProps {
4
3
  text: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import * as dayjs from 'dayjs';
3
2
  export interface DatePickerProps {
4
3
  showMonthOnLoad?: dayjs.Dayjs;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import * as dayjs from 'dayjs';
3
2
  interface DatePickerDayProps {
4
3
  text: any;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import * as dayjs from 'dayjs';
3
2
  interface DatePickerDaysProps {
4
3
  showingMonth: dayjs.Dayjs;