@roomstay/frontend 2.6.79-1 → 2.6.79

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 (94) hide show
  1. package/dist/430.bundle.js +1 -1
  2. package/dist/537.bundle.js +1 -1
  3. package/dist/659.bundle.js +1 -0
  4. package/dist/978.bundle.js +1 -1
  5. package/dist/984.bundle.js +1 -0
  6. package/dist/main.bundle.js +1 -1
  7. package/dist/src/api/BookingAPI.d.ts +0 -2
  8. package/dist/src/api/BookingAPI.js +0 -2
  9. package/dist/src/api/BookingAPI.js.map +1 -1
  10. package/dist/src/api/ReservationAPI.js +9 -12
  11. package/dist/src/api/ReservationAPI.js.map +1 -1
  12. package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +0 -1
  13. package/dist/src/components/generic/BookingWizard/BookingWizard.js +1 -7
  14. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  15. package/dist/src/components/generic/Event/EventCard.js +8 -16
  16. package/dist/src/components/generic/Event/EventCard.js.map +1 -1
  17. package/dist/src/components/generic/Event/EventCarousel.js +1 -3
  18. package/dist/src/components/generic/Event/EventCarousel.js.map +1 -1
  19. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js +2 -9
  20. package/dist/src/components/generic/RadioButtonGroup/RadioButtonGroup.js.map +1 -1
  21. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +10 -11
  22. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
  23. package/dist/src/components/steps/confirmation/StepConfirmationForm.js +4 -11
  24. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  25. package/dist/src/components/steps/room/AvailableUpgradesModal.js +5 -0
  26. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  27. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +2 -2
  28. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
  29. package/dist/src/components/summary/BESummaryRoomRow.js +1 -1
  30. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  31. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +11 -63
  32. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  33. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +0 -1
  34. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  35. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +2 -5
  36. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  37. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +2 -10
  38. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  39. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +0 -1
  40. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  41. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +0 -1
  42. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
  43. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +0 -3
  44. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  45. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +0 -1
  46. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  47. package/dist/src/index.d.ts +0 -1
  48. package/dist/src/index.js +2 -4
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/models/Api/HotelDTO.d.ts +0 -1
  51. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  52. package/dist/src/models/BasketRow.d.ts +1 -2
  53. package/dist/src/models/BasketRow.js +2 -32
  54. package/dist/src/models/BasketRow.js.map +1 -1
  55. package/dist/src/models/Client/Hotel/Hotel.d.ts +0 -1
  56. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  57. package/dist/src/models/RoomstaySession.d.ts +0 -1
  58. package/dist/src/models/RoomstaySession.js.map +1 -1
  59. package/dist/src/providers/FeatureProvider.js +0 -2
  60. package/dist/src/providers/FeatureProvider.js.map +1 -1
  61. package/dist/src/providers/feature/Feature.d.ts +0 -2
  62. package/dist/src/providers/feature/Feature.js +0 -4
  63. package/dist/src/providers/feature/Feature.js.map +1 -1
  64. package/dist/src/providers/storage/SessionProvider.js +0 -2
  65. package/dist/src/providers/storage/SessionProvider.js.map +1 -1
  66. package/dist/src/translations/Translation.d.ts +0 -18
  67. package/dist/src/translations/Translation.js +0 -18
  68. package/dist/src/translations/Translation.js.map +1 -1
  69. package/dist/src/translations/languages/en-gb.js +0 -18
  70. package/dist/src/translations/languages/en-gb.js.map +1 -1
  71. package/dist/src/util/TotalCalculator.js.map +1 -1
  72. package/dist/test.bundle.js +1 -1
  73. package/dist/vendors.bundle.js +1 -1
  74. package/package.json +2 -2
  75. package/dist/456.bundle.js +0 -1
  76. package/dist/977.bundle.js +0 -1
  77. package/dist/src/api/TrueRewardsAPI.d.ts +0 -4
  78. package/dist/src/api/TrueRewardsAPI.js +0 -37
  79. package/dist/src/api/TrueRewardsAPI.js.map +0 -1
  80. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.d.ts +0 -7
  81. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js +0 -54
  82. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js.map +0 -1
  83. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.d.ts +0 -2
  84. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js +0 -53
  85. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsLabel.js.map +0 -1
  86. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.d.ts +0 -2
  87. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +0 -115
  88. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +0 -1
  89. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.d.ts +0 -2
  90. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js +0 -44
  91. package/dist/src/handlers/payment/TrueRewardsPaymentHandler.js.map +0 -1
  92. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.d.ts +0 -10
  93. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js +0 -13
  94. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js.map +0 -1
@@ -27,23 +27,6 @@ class BasketRow {
27
27
  };
28
28
  this.enableRoomCodeFilter = false; // Enable room code filter when the the URL's room parameter is present
29
29
  this.roomCode = ''; // Indicates availability for a specific room extracted from the URL's room parameter
30
- this.getAveragePrice = (getCost = false) => {
31
- if (this.quoteDetails) {
32
- // If deposit is required, get the average price from quote details
33
- const total = this.getTotalPrice(getCost);
34
- const rate = this.getRate();
35
- if (!total || !rate)
36
- return 0;
37
- return total / Object.keys(rate.nightRates).length;
38
- }
39
- else {
40
- // Otherwise, calculate the average price from Rate
41
- const rate = this.getRate();
42
- if (!rate)
43
- return 0;
44
- return rate.getAveragePrice(getCost);
45
- }
46
- };
47
30
  /*
48
31
  * Rate is optional since we can create row entries on first step, where there is no ability to select rate.
49
32
  */
@@ -222,25 +205,12 @@ class BasketRow {
222
205
  getPreUpsellRoomRate() {
223
206
  return this.preUpsellRoomRate;
224
207
  }
225
- getTotalPrice(beforeTax = false) {
208
+ getTotalPrice(getCost = false) {
226
209
  var _a;
227
- if (this.quoteDetails) {
228
- // If deposit is required, get the total Base rate before fees from quote details
229
- let totalPrice = this.quoteDetails.totalRate;
230
- if (!beforeTax) {
231
- // **Previous logic**: totalPrice = total Base rate + Fees on Deposit amount
232
- // totalPrice += this.quoteDetails.totalFees;
233
- // **Updated logic** : totalPrice = total Base rate + its fees
234
- totalPrice = this.quoteDetails.fullPaymentAmount;
235
- }
236
- return totalPrice;
237
- }
238
- // Otherwise, calculate the total price from Rate
239
- return (_a = this.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice(beforeTax);
210
+ return (_a = this.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice(getCost);
240
211
  }
241
212
  checkDiffFromReservation(res) {
242
213
  const differences = {};
243
- const beforeTax = false;
244
214
  if (res.total.beforeFees) {
245
215
  // This beforeFees field will be included when we're using Itemised Fees. Because fees can be a part of
246
216
  // rates, we'll just confirm that the price excluding fees is correct for now.
@@ -1 +1 @@
1
- {"version":3,"file":"BasketRow.js","sourceRoot":"/","sources":["src/models/BasketRow.ts"],"names":[],"mappings":"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","sourcesContent":["import { IBookingQuoteResponse } from '@roomstay/core';\nimport dayjs from 'dayjs';\n\nimport { ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport BasketRowDifferences from '@/models/BasketRowDifferences';\nimport type { Room } from '@/models/Room/Room';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport UserProfile from '@/models/UserProfile';\nimport { getQueryParamFromHash } from '@/util/CalendarHelper';\nimport { Color } from '@/util/Color';\nimport { DEFAULT_VALUES } from '@/util/DefaultValueManager';\n\nimport { EAppQueryParameters } from './AppQueryParameters';\nexport default class BasketRow {\n private uniqId: string;\n\n private room!: Room;\n private rate!: RoomRate | null;\n private isStale!: boolean;\n private adults: number;\n private children: number;\n private infants: number;\n private preGuestsState: {\n adults: number;\n children: number;\n infants: number;\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n } = {\n adults: 0,\n children: 0,\n infants: 0,\n startDate: dayjs(),\n endDate: dayjs(),\n };\n\n private promoCode: string;\n private promoCodeStatus: 'valid' | 'invalid' | 'new';\n private manualInputPromoCode: boolean;\n\n private enableRoomCodeFilter = false; // Enable room code filter when the the URL's room parameter is present\n private roomCode = ''; // Indicates availability for a specific room extracted from the URL's room parameter\n\n private startDate!: dayjs.Dayjs;\n private endDate!: dayjs.Dayjs;\n\n private promoOnly: boolean;\n\n private preUpsellRoomRate?: RoomRate;\n\n public quoteDetails?: NonNullable<IBookingQuoteResponse>['rows'][number];\n public pencilId?: string;\n\n public checkoutDefaults?: Partial<UserProfile>;\n\n public auxiliaryFilter?: { [id: string]: string | number };\n\n /**\n *\n * @param rate - Optional `RoomRate` object associated with the basket row.\n * @param uniqId - Optional unique identifier for this basket row instance.\n * @param shouldEnableRoomCodeFilter - Whether to check the URL for a room code and enable filtering accordingly.\n * Defaults to `true`.\n */\n public constructor(rate?: RoomRate, uniqId?: string, shouldEnableRoomCodeFilter = true) {\n /*\n * Rate is optional since we can create row entries on first step, where there is no ability to select rate.\n */\n if (rate) {\n this.setRate(rate);\n }\n\n this.adults = DEFAULT_VALUES.ADULTS ?? 1;\n this.children = DEFAULT_VALUES.CHILDREN ?? 0;\n this.infants = DEFAULT_VALUES.INFANTS ?? 0;\n\n this.promoCode = '';\n this.promoCodeStatus = 'new';\n this.promoOnly = false;\n if (shouldEnableRoomCodeFilter) {\n const roomCode = getQueryParamFromHash(EAppQueryParameters.Room); // Extract the the URL's room parameter\n this.enableRoomCodeFilter = !!roomCode;\n this.roomCode = roomCode || '';\n }\n\n this.manualInputPromoCode = false;\n\n this.uniqId = uniqId ? uniqId : btoa(((Date.now() % 1000) / 1000) * Math.random() + '');\n }\n\n public getStale() {\n return this.isStale;\n }\n\n public getRate() {\n return this.rate;\n }\n\n public getPromoCode(memberOnlyPromoCode?: string) {\n if (!memberOnlyPromoCode) {\n return this.promoCode.toUpperCase();\n }\n\n if (memberOnlyPromoCode !== this.promoCode.toUpperCase() || this.isManualInputPromoCode()) {\n return this.promoCode.toUpperCase();\n }\n\n return '';\n }\n\n public getPromoOnly() {\n return this.promoOnly;\n }\n\n public getPromoCodeColour() {\n if (this.promoCodeStatus === 'valid') {\n return Color.Success;\n } else if (this.promoCodeStatus === 'invalid') {\n return Color.Alert;\n }\n\n return Color.Navy;\n }\n\n public isPromoCodeValid() {\n const rate = this.getRate();\n\n return (rate?.getAveragePrice(true) as number) < (rate?.getAveragePriceBeforeDiscount(true) as number) && this.getPromoCode() && this.getPromoCodeStatus() === 'valid';\n }\n\n public isManualInputPromoCode() {\n return this.manualInputPromoCode;\n }\n\n public setManualInputPromoCode(value: boolean) {\n this.manualInputPromoCode = value;\n }\n\n public getNumberOfDays() {\n if (this.endDate && this.startDate) {\n return this.endDate.diff(this.startDate, 'day');\n }\n\n return 0;\n }\n\n public getRoom() {\n return this.room;\n }\n\n public getStartDate() {\n return this.startDate;\n }\n\n public getEndDate() {\n return this.endDate;\n }\n\n public getArrivalDate() {\n if (this.startDate) {\n return this.startDate.format('D MMM');\n }\n\n return null;\n }\n\n public getDepartureDate() {\n if (this.endDate) {\n return this.endDate.format('D MMM');\n }\n\n return null;\n }\n\n public getStayDateRange(format = 'ddd D MMM', separator = ',') {\n if (this.startDate && this.endDate) {\n return `${this.startDate.format(format)}${separator} ${this.endDate.format(format)}`;\n }\n }\n\n public getAdults() {\n return this.adults;\n }\n\n public getChildren() {\n return this.children;\n }\n\n public getInfants() {\n return this.infants;\n }\n\n public getPreGuestsState() {\n return this.preGuestsState;\n }\n\n public getID() {\n return this.uniqId;\n }\n\n public getPromoCodeStatus() {\n return this.promoCodeStatus;\n }\n\n public isValid(): boolean {\n return this.startDate && this.endDate && !!this.rate;\n }\n\n public setPromoCode(code: string) {\n if (this.promoCode !== code.toUpperCase()) {\n this.setPromoCodeStatus('new');\n this.promoOnly = false;\n }\n\n this.promoCode = code.toUpperCase();\n }\n\n public setPromoOnly(value: boolean) {\n this.promoOnly = value;\n }\n\n public setStale(status: boolean) {\n this.isStale = status;\n }\n\n public setPromoCodeStatus(status: 'valid' | 'invalid' | 'new') {\n this.promoCodeStatus = this.promoCode ? status : 'new';\n }\n\n public setStartDate(date: dayjs.Dayjs) {\n if (date?.isValid() || date === undefined) {\n this.startDate = date;\n }\n }\n\n public setEndDate(date: dayjs.Dayjs) {\n if (date?.isValid() || date === undefined) {\n this.endDate = date;\n }\n }\n\n public setAdults(adults: number) {\n this.adults = adults;\n }\n\n public setChildren(children: number) {\n this.children = children;\n }\n\n public setInfants(infants: number) {\n this.infants = infants;\n }\n\n public setPreGuestsState() {\n this.preGuestsState.adults = this.adults;\n this.preGuestsState.children = this.children;\n this.preGuestsState.infants = this.infants;\n this.preGuestsState.startDate = this.startDate;\n this.preGuestsState.endDate = this.endDate;\n }\n\n public discardGuestsState() {\n this.setAdults(this.preGuestsState.adults);\n this.setChildren(this.preGuestsState.children);\n this.setInfants(this.preGuestsState.infants);\n this.setStartDate(this.preGuestsState.startDate);\n this.setEndDate(this.preGuestsState.endDate);\n }\n\n public setRate(rate: RoomRate | null, upsellEnabled?: boolean) {\n if (upsellEnabled && this.rate) {\n this.setPreUpsellRoomRate(this.rate);\n }\n\n this.rate = rate;\n\n if (rate) {\n const room = rate.getRoom();\n this.room = room;\n if (room.code) {\n this.roomCode = room.code; // [step/room] Update Indicates availability for a specific room\n }\n }\n }\n\n private setPreUpsellRoomRate(roomRate: RoomRate) {\n this.preUpsellRoomRate = roomRate;\n }\n\n public getPreUpsellRoomRate() {\n return this.preUpsellRoomRate;\n }\n\n public getTotalPrice(beforeTax = false) {\n if (this.quoteDetails) {\n // If deposit is required, get the total Base rate before fees from quote details\n let totalPrice = this.quoteDetails.totalRate;\n if (!beforeTax) {\n // **Previous logic**: totalPrice = total Base rate + Fees on Deposit amount\n // totalPrice += this.quoteDetails.totalFees;\n // **Updated logic** : totalPrice = total Base rate + its fees\n totalPrice = this.quoteDetails.fullPaymentAmount;\n }\n return totalPrice;\n }\n // Otherwise, calculate the total price from Rate\n return this.getRate()?.getTotalPrice(beforeTax);\n }\n\n public getAveragePrice = (getCost = false): number => {\n if (this.quoteDetails) {\n // If deposit is required, get the average price from quote details\n const total = this.getTotalPrice(getCost);\n const rate = this.getRate();\n if (!total || !rate) return 0;\n\n return total / Object.keys(rate.nightRates).length;\n } else {\n // Otherwise, calculate the average price from Rate\n const rate = this.getRate();\n if (!rate) return 0;\n return rate.getAveragePrice(getCost);\n }\n };\n\n public checkDiffFromReservation(res: ReservationDTO) {\n const differences: BasketRowDifferences = {};\n const beforeTax = false;\n\n if (res.total.beforeFees) {\n // This beforeFees field will be included when we're using Itemised Fees. Because fees can be a part of\n // rates, we'll just confirm that the price excluding fees is correct for now.\n if (Number(res.total.beforeFees).toFixed(2) !== Number(this.getTotalPrice(true)).toFixed(2)) {\n differences.totalPrice = {\n before: this.getTotalPrice(true),\n after: res.total.beforeFees,\n };\n }\n } else {\n if (Number(res.total.afterTax).toFixed(2) !== Number(this.getTotalPrice()).toFixed(2)) {\n differences.totalPrice = {\n before: this.getTotalPrice(),\n after: res.total.afterTax,\n };\n }\n }\n\n if (Object.keys(differences).length) {\n differences.id = this.getID();\n\n return differences;\n } else {\n return false;\n }\n }\n\n public setAuxiliaryFilter(value: { [id: string]: any }) {\n this.auxiliaryFilter = value;\n }\n\n public getAuxiliaryFilter() {\n return this.auxiliaryFilter;\n }\n\n public getEnableRoomCodeFilter() {\n return this.enableRoomCodeFilter;\n }\n\n public setEnableRoomCodeFilter(enable: boolean) {\n this.enableRoomCodeFilter = enable;\n }\n\n public getRoomCode() {\n return this.roomCode || '';\n }\n\n public setRoomCode(roomCode: string) {\n this.roomCode = roomCode;\n }\n}\n"]}
1
+ {"version":3,"file":"BasketRow.js","sourceRoot":"/","sources":["src/models/BasketRow.ts"],"names":[],"mappings":"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","sourcesContent":["import { IBookingQuoteResponse } from '@roomstay/core';\nimport dayjs from 'dayjs';\n\nimport { ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport BasketRowDifferences from '@/models/BasketRowDifferences';\nimport type { Room } from '@/models/Room/Room';\nimport type { RoomRate } from '@/models/Room/RoomRate';\nimport UserProfile from '@/models/UserProfile';\nimport { getQueryParamFromHash } from '@/util/CalendarHelper';\nimport { Color } from '@/util/Color';\nimport { DEFAULT_VALUES } from '@/util/DefaultValueManager';\n\nimport { EAppQueryParameters } from './AppQueryParameters';\nexport default class BasketRow {\n private uniqId: string;\n\n private room!: Room;\n private rate!: RoomRate | null;\n private isStale!: boolean;\n private adults: number;\n private children: number;\n private infants: number;\n private preGuestsState: {\n adults: number;\n children: number;\n infants: number;\n startDate: dayjs.Dayjs;\n endDate: dayjs.Dayjs;\n } = {\n adults: 0,\n children: 0,\n infants: 0,\n startDate: dayjs(),\n endDate: dayjs(),\n };\n\n private promoCode: string;\n private promoCodeStatus: 'valid' | 'invalid' | 'new';\n private manualInputPromoCode: boolean;\n\n private enableRoomCodeFilter = false; // Enable room code filter when the the URL's room parameter is present\n private roomCode = ''; // Indicates availability for a specific room extracted from the URL's room parameter\n\n private startDate!: dayjs.Dayjs;\n private endDate!: dayjs.Dayjs;\n\n private promoOnly: boolean;\n\n private preUpsellRoomRate?: RoomRate;\n\n public quoteDetails?: NonNullable<IBookingQuoteResponse>['rows'][number];\n public pencilId?: string;\n\n public checkoutDefaults?: Partial<UserProfile>;\n\n public auxiliaryFilter?: { [id: string]: string | number };\n\n /**\n *\n * @param rate - Optional `RoomRate` object associated with the basket row.\n * @param uniqId - Optional unique identifier for this basket row instance.\n * @param shouldEnableRoomCodeFilter - Whether to check the URL for a room code and enable filtering accordingly.\n * Defaults to `true`.\n */\n public constructor(rate?: RoomRate, uniqId?: string, shouldEnableRoomCodeFilter = true) {\n /*\n * Rate is optional since we can create row entries on first step, where there is no ability to select rate.\n */\n if (rate) {\n this.setRate(rate);\n }\n\n this.adults = DEFAULT_VALUES.ADULTS ?? 1;\n this.children = DEFAULT_VALUES.CHILDREN ?? 0;\n this.infants = DEFAULT_VALUES.INFANTS ?? 0;\n\n this.promoCode = '';\n this.promoCodeStatus = 'new';\n this.promoOnly = false;\n if (shouldEnableRoomCodeFilter) {\n const roomCode = getQueryParamFromHash(EAppQueryParameters.Room); // Extract the the URL's room parameter\n this.enableRoomCodeFilter = !!roomCode;\n this.roomCode = roomCode || '';\n }\n\n this.manualInputPromoCode = false;\n\n this.uniqId = uniqId ? uniqId : btoa(((Date.now() % 1000) / 1000) * Math.random() + '');\n }\n\n public getStale() {\n return this.isStale;\n }\n\n public getRate() {\n return this.rate;\n }\n\n public getPromoCode(memberOnlyPromoCode?: string) {\n if (!memberOnlyPromoCode) {\n return this.promoCode.toUpperCase();\n }\n\n if (memberOnlyPromoCode !== this.promoCode.toUpperCase() || this.isManualInputPromoCode()) {\n return this.promoCode.toUpperCase();\n }\n\n return '';\n }\n\n public getPromoOnly() {\n return this.promoOnly;\n }\n\n public getPromoCodeColour() {\n if (this.promoCodeStatus === 'valid') {\n return Color.Success;\n } else if (this.promoCodeStatus === 'invalid') {\n return Color.Alert;\n }\n\n return Color.Navy;\n }\n\n public isPromoCodeValid() {\n const rate = this.getRate();\n\n return (rate?.getAveragePrice(true) as number) < (rate?.getAveragePriceBeforeDiscount(true) as number) && this.getPromoCode() && this.getPromoCodeStatus() === 'valid';\n }\n\n public isManualInputPromoCode() {\n return this.manualInputPromoCode;\n }\n\n public setManualInputPromoCode(value: boolean) {\n this.manualInputPromoCode = value;\n }\n\n public getNumberOfDays() {\n if (this.endDate && this.startDate) {\n return this.endDate.diff(this.startDate, 'day');\n }\n\n return 0;\n }\n\n public getRoom() {\n return this.room;\n }\n\n public getStartDate() {\n return this.startDate;\n }\n\n public getEndDate() {\n return this.endDate;\n }\n\n public getArrivalDate() {\n if (this.startDate) {\n return this.startDate.format('D MMM');\n }\n\n return null;\n }\n\n public getDepartureDate() {\n if (this.endDate) {\n return this.endDate.format('D MMM');\n }\n\n return null;\n }\n\n public getStayDateRange(format = 'ddd D MMM', separator = ',') {\n if (this.startDate && this.endDate) {\n return `${this.startDate.format(format)}${separator} ${this.endDate.format(format)}`;\n }\n }\n\n public getAdults() {\n return this.adults;\n }\n\n public getChildren() {\n return this.children;\n }\n\n public getInfants() {\n return this.infants;\n }\n\n public getPreGuestsState() {\n return this.preGuestsState;\n }\n\n public getID() {\n return this.uniqId;\n }\n\n public getPromoCodeStatus() {\n return this.promoCodeStatus;\n }\n\n public isValid(): boolean {\n return this.startDate && this.endDate && !!this.rate;\n }\n\n public setPromoCode(code: string) {\n if (this.promoCode !== code.toUpperCase()) {\n this.setPromoCodeStatus('new');\n this.promoOnly = false;\n }\n\n this.promoCode = code.toUpperCase();\n }\n\n public setPromoOnly(value: boolean) {\n this.promoOnly = value;\n }\n\n public setStale(status: boolean) {\n this.isStale = status;\n }\n\n public setPromoCodeStatus(status: 'valid' | 'invalid' | 'new') {\n this.promoCodeStatus = this.promoCode ? status : 'new';\n }\n\n public setStartDate(date: dayjs.Dayjs) {\n if (date?.isValid() || date === undefined) {\n this.startDate = date;\n }\n }\n\n public setEndDate(date: dayjs.Dayjs) {\n if (date?.isValid() || date === undefined) {\n this.endDate = date;\n }\n }\n\n public setAdults(adults: number) {\n this.adults = adults;\n }\n\n public setChildren(children: number) {\n this.children = children;\n }\n\n public setInfants(infants: number) {\n this.infants = infants;\n }\n\n public setPreGuestsState() {\n this.preGuestsState.adults = this.adults;\n this.preGuestsState.children = this.children;\n this.preGuestsState.infants = this.infants;\n this.preGuestsState.startDate = this.startDate;\n this.preGuestsState.endDate = this.endDate;\n }\n\n public discardGuestsState() {\n this.setAdults(this.preGuestsState.adults);\n this.setChildren(this.preGuestsState.children);\n this.setInfants(this.preGuestsState.infants);\n this.setStartDate(this.preGuestsState.startDate);\n this.setEndDate(this.preGuestsState.endDate);\n }\n\n public setRate(rate: RoomRate | null, upsellEnabled?: boolean) {\n if (upsellEnabled && this.rate) {\n this.setPreUpsellRoomRate(this.rate);\n }\n\n this.rate = rate;\n\n if (rate) {\n const room = rate.getRoom();\n this.room = room;\n if (room.code) {\n this.roomCode = room.code; // [step/room] Update Indicates availability for a specific room\n }\n }\n }\n\n private setPreUpsellRoomRate(roomRate: RoomRate) {\n this.preUpsellRoomRate = roomRate;\n }\n\n public getPreUpsellRoomRate() {\n return this.preUpsellRoomRate;\n }\n\n public getTotalPrice(getCost = false) {\n return this.getRate()?.getTotalPrice(getCost);\n }\n\n public checkDiffFromReservation(res: ReservationDTO) {\n const differences: BasketRowDifferences = {};\n\n if (res.total.beforeFees) {\n // This beforeFees field will be included when we're using Itemised Fees. Because fees can be a part of\n // rates, we'll just confirm that the price excluding fees is correct for now.\n if (Number(res.total.beforeFees).toFixed(2) !== Number(this.getTotalPrice(true)).toFixed(2)) {\n differences.totalPrice = {\n before: this.getTotalPrice(true),\n after: res.total.beforeFees,\n };\n }\n } else {\n if (Number(res.total.afterTax).toFixed(2) !== Number(this.getTotalPrice()).toFixed(2)) {\n differences.totalPrice = {\n before: this.getTotalPrice(),\n after: res.total.afterTax,\n };\n }\n }\n\n if (Object.keys(differences).length) {\n differences.id = this.getID();\n\n return differences;\n } else {\n return false;\n }\n }\n\n public setAuxiliaryFilter(value: { [id: string]: any }) {\n this.auxiliaryFilter = value;\n }\n\n public getAuxiliaryFilter() {\n return this.auxiliaryFilter;\n }\n\n public getEnableRoomCodeFilter() {\n return this.enableRoomCodeFilter;\n }\n\n public setEnableRoomCodeFilter(enable: boolean) {\n this.enableRoomCodeFilter = enable;\n }\n\n public getRoomCode() {\n return this.roomCode || '';\n }\n\n public setRoomCode(roomCode: string) {\n this.roomCode = roomCode;\n }\n}\n"]}
@@ -203,7 +203,6 @@ export type Hotel = ConfigHotel & {
203
203
  isLoading: boolean;
204
204
  };
205
205
  integrations?: EIntegration[];
206
- languageContext?: string;
207
206
  isRACMemberNoRequired?: boolean;
208
207
  };
209
208
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAmBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport { EBookingFlow, EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport { Property } from 'csstype';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/members/SignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { HotelFee } from '@/models/Fee';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin -- TODO: Move to Roomstay Core\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n minAdultAge?: number;\n maxAdultAge?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n countInfantsInOccupancy?: boolean;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n bookingFlow: EBookingFlow;\n\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n perks?: HotelPerk[];\n perkTitle?: string;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n\n countryPrefix?: string;\n quoteImageDesktop?: string;\n quoteImageMobile?: string;\n memberOnlyImage?: string;\n captureChildAge?: boolean;\n itineraryNote: string;\n\n fees?: HotelFee[];\n addDepositFeeToBookingTotal?: boolean;\n\n company: {\n url?: string;\n logo?: string;\n };\n\n facebookUrl: string;\n instagramUrl: string;\n linkedinUrl: string;\n preferProviderBookingId: boolean;\n disableSavedPayments?: boolean;\n showUnavailableRooms?: boolean;\n isRACMemberNoRequired?: boolean;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlyRenderRateLast?: boolean;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks?: HotelPerk[];\n perkTitle?: string;\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n /**\n * Order available rooms\n */\n currentRoomSort?: RoomSort;\n /**\n * Order available rates\n */\n currentRoomRateSort?: RoomSort | undefined;\n maxAdults?: number; //fixed from frontend\n mobileDefaultRatesClosed?: boolean;\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\n languageContext?: string;\n\n // TODO: Should be a better way to use this configuration.\n isRACMemberNoRequired?: boolean;\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
1
+ {"version":3,"file":"Hotel.js","sourceRoot":"/","sources":["src/models/Client/Hotel/Hotel.ts"],"names":[],"mappings":";;;AAmBA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,+BAAW,CAAA;IACX,qCAAiB,CAAA;IACjB,8BAAU,CAAA;IACV,0CAAsB,CAAA;IACtB,qCAAiB,CAAA;IACjB,mCAAe,CAAA;AACnB,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport { EBookingFlow, EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IHotelColorScheme } from '@roomstay/core';\nimport { Property } from 'csstype';\nimport type { ReactChild } from 'react';\n\nimport type { InternalMemberSignInInputs } from '@/components/members/SignInModal/InternalMemberSignInModal.types';\nimport type { HotelRoomGroupsDTO, HotelRoomsDTO, HotelServiceDTO } from '@/models/Api/HotelDTO';\nimport type { TransportDistances } from '@/models/Api/HotelOverrideDTO';\nimport type { HasDatalayerTags } from '@/models/Client/Hotel/Company';\nimport type { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport type HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport type { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport type { HotelPerk } from '@/models/Client/Hotel/HotelPerk';\nimport type { HotelRoomOverwrite } from '@/models/Client/Hotel/HotelRoomOverwrite';\nimport type { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\nimport { HotelFee } from '@/models/Fee';\nimport type { Language } from '@/providers/LanguageProvider';\nimport { RoomSort } from '@/providers/RoomSortProvider';\n\nexport enum EPaymentCardType {\n Visa = 'VI',\n Mastercard = 'MC',\n JCB = 'JC',\n AmericanExpress = 'AX',\n DinersClub = 'DN',\n UnionPay = 'UP',\n}\n\nexport interface IVGSVaultNames {\n standard: string;\n members: string;\n}\n\n/**\n * This config comes from admin -- TODO: Move to Roomstay Core\n */\nexport interface AdminHotelConfig {\n hotelID: string;\n name: string;\n address?: HotelAddress;\n latitude?: number;\n longitude?: number;\n phone?: string;\n email?: string;\n checkInTime?: string;\n checkOutTime?: string;\n paymentCardTypes?: EPaymentCardType[];\n description?: string;\n locationDescription?: string;\n policies?: string;\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n rooms: HotelRoomsDTO;\n hasLoadedDetails?: boolean;\n dataSource: HotelDataSource;\n defaultCurrency: string;\n paymentMethods: EBookingPaymentMethod[];\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n hotelUrl: string;\n heroImage: string;\n memberOnlyModalImage?: string;\n memberOnlyModalImageSize: Property.ObjectFit;\n images?: string[];\n logo: string | ReactChild;\n colors: IHotelColorScheme;\n distanceUnitType: DistanceUnitType;\n startsWeekOnDay?: WeekdayStartsOn;\n crossSellHotelIds?: string[];\n maxOccupancy?: number;\n minAdultAge?: number;\n maxAdultAge?: number;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n countInfantsInOccupancy?: boolean;\n hideByLine?: boolean;\n transportDistances?: TransportDistances;\n roomGroups: HotelRoomGroupsDTO;\n cardProcessor: EHotelCardProcessor;\n\n requireDeposit?: boolean;\n bookingFlow: EBookingFlow;\n\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n\n childConfiguration?: {\n supportChildren?: boolean;\n supportInfants: boolean;\n childRange: { min: number; max: number };\n infantRange: { min: number; max: number };\n };\n preventCancellation?: boolean;\n\n perks?: HotelPerk[];\n perkTitle?: string;\n\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n\n countryPrefix?: string;\n quoteImageDesktop?: string;\n quoteImageMobile?: string;\n memberOnlyImage?: string;\n captureChildAge?: boolean;\n itineraryNote: string;\n\n fees?: HotelFee[];\n addDepositFeeToBookingTotal?: boolean;\n\n company: {\n url?: string;\n logo?: string;\n };\n\n facebookUrl: string;\n instagramUrl: string;\n linkedinUrl: string;\n preferProviderBookingId: boolean;\n disableSavedPayments?: boolean;\n showUnavailableRooms?: boolean;\n isRACMemberNoRequired?: boolean;\n}\n\n/**\n * This config comes from hard static local file\n */\nexport interface ClientHotelConfig {\n providerHotelID: string;\n shortName?: string;\n defaultDatepickerType?: 'Month' | 'Week';\n // TODO: need to do magic to see if we need to append / prepend stuff, for now we assume that it's only used while on the site.\n checkoutUrl?: string;\n defaultLanguage: Language;\n privacyPolicyUrl: string;\n bookNowPayLaterUrl?: string;\n bestRateNoBSUrl?: string;\n\n memberOnlyRates?: string[];\n memberOnlyPromoCode?: string;\n memberOnlyRenderRateLast?: boolean;\n memberOnlySignupInputs?: InternalMemberSignInInputs;\n googleMapsImage?: string;\n /**\n * Whether to show the Breakfast / Lunch / Dinner included\n */\n showMealPill?: boolean;\n perks?: HotelPerk[];\n perkTitle?: string;\n /**\n * Hide perks on room row\n */\n perksHideOnRoomRow?: boolean;\n /**\n * Hide perks on room detail modal\n */\n perksHideOnRoomDetail?: boolean;\n perksShowDisclaimer?: boolean;\n /** @deprecated Use the vgs.vaultNames.standard property now */\n vgsVaultName?: string;\n vgs?: {\n vaultNames: IVGSVaultNames;\n };\n showAddonLoader: boolean;\n overwrites?: { [code: string]: Partial<HotelRoomOverwrite> };\n forwardFindReservationToSynxis?: boolean;\n additionalOptions?: { [name: string]: any };\n googleReCaptcha?: {\n loadForMembers?: boolean;\n siteKey?: string;\n };\n /**\n * Show description on RoomDetails\n */\n showDescriptionOnRoomDetails?: boolean;\n /**\n * Customize the Member modal colours. Specifically replacing the green (success) with the primary color of hotel (accent)\n */\n memberOnlyModalUsePrimaryColor?: boolean;\n /**\n * Callback to trigger specific events on load of a hotel.\n *\n * This is where you can specify custom fields, language overrides, feature toggles etc.\n */\n onLoad?: () => void;\n /**\n * Order available rooms\n */\n currentRoomSort?: RoomSort;\n /**\n * Order available rates\n */\n currentRoomRateSort?: RoomSort | undefined;\n maxAdults?: number; //fixed from frontend\n mobileDefaultRatesClosed?: boolean;\n}\n\nexport interface ConfigHotel extends ClientHotelConfig, AdminHotelConfig, HasDatalayerTags {}\n\nexport type Hotel = ConfigHotel & {\n lowestPrice?: {\n value: number;\n isLoading: boolean;\n };\n integrations?: EIntegration[];\n\n // TODO: Should be a better way to use this configuration.\n isRACMemberNoRequired?: boolean;\n};\n\n/**\n * Used for DetailsHotel event\n */\nexport type InitialHotelDetailsEventPayload = {\n name: string;\n hotelID: number | string;\n hotelUrl: string;\n currency: string;\n language: Language;\n address?: HotelAddress;\n};\n"]}
@@ -49,7 +49,6 @@ export type SerializedRoomstaySessionBasketRow = {
49
49
  infants: number;
50
50
  promoCode: string;
51
51
  promoCodeStatus: string;
52
- roomCode: string;
53
52
  room: IRoom;
54
53
  rate: IRoomRate;
55
54
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RoomstaySession.js","sourceRoot":"/","sources":["src/models/RoomstaySession.ts"],"names":[],"mappings":";;;AAqEa,QAAA,sBAAsB,GAAG,YAAY,CAAC","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport { IBookingPayment } from '@roomstay/core';\nimport dayjs from 'dayjs';\n\nimport type BasketRow from '@/models/BasketRow';\nimport type { IRoom } from '@/models/Room/Room';\nimport type { IRoomRate } from '@/models/Room/RoomRate';\nimport UserProfile from '@/models/UserProfile';\n\nimport ReservationsDTO from './Api/ReservationsDTO';\n\n/**\n * Booking engine state object, that is stored, can be loaded and unloaded\n */\nexport type RoomstaySession = {\n id: number;\n step: string;\n startDate: dayjs.Dayjs | null;\n endDate: dayjs.Dayjs | null;\n hotelID: number | string;\n source: string;\n user?: SignInUser;\n memberId?: string;\n pencilId?: string;\n\n basketRows: BasketRow[];\n\n reservationRequest?: {\n userProfiles: UserProfile[];\n payment: IBookingPayment;\n comments: string;\n };\n reservation?: ReservationsDTO;\n};\n\nexport type SerializedRoomstaySession = {\n id: number;\n step: string;\n startDate: string;\n endDate: string;\n hotelID: number | string;\n source: string;\n user?: string;\n memberId?: string;\n\n basketRows: SerializedRoomstaySessionBasketRow[];\n\n reservation?: ReservationsDTO;\n reservationRequest?: RoomstaySession['reservationRequest'];\n};\n\nexport type SerializedRoomstaySessionBasketRow = {\n uniqId: string;\n startDate: string;\n endDate: string;\n\n adults: number;\n children: number;\n infants: number;\n\n promoCode: string;\n promoCodeStatus: string;\n\n roomCode: string;\n\n room: IRoom;\n rate: IRoomRate;\n};\n\nexport const SERIALIZED_DATE_FORMAT = 'YYYY/MM/DD';\n"]}
1
+ {"version":3,"file":"RoomstaySession.js","sourceRoot":"/","sources":["src/models/RoomstaySession.ts"],"names":[],"mappings":";;;AAmEa,QAAA,sBAAsB,GAAG,YAAY,CAAC","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport { IBookingPayment } from '@roomstay/core';\nimport dayjs from 'dayjs';\n\nimport type BasketRow from '@/models/BasketRow';\nimport type { IRoom } from '@/models/Room/Room';\nimport type { IRoomRate } from '@/models/Room/RoomRate';\nimport UserProfile from '@/models/UserProfile';\n\nimport ReservationsDTO from './Api/ReservationsDTO';\n\n/**\n * Booking engine state object, that is stored, can be loaded and unloaded\n */\nexport type RoomstaySession = {\n id: number;\n step: string;\n startDate: dayjs.Dayjs | null;\n endDate: dayjs.Dayjs | null;\n hotelID: number | string;\n source: string;\n user?: SignInUser;\n memberId?: string;\n pencilId?: string;\n\n basketRows: BasketRow[];\n\n reservationRequest?: {\n userProfiles: UserProfile[];\n payment: IBookingPayment;\n comments: string;\n };\n reservation?: ReservationsDTO;\n};\n\nexport type SerializedRoomstaySession = {\n id: number;\n step: string;\n startDate: string;\n endDate: string;\n hotelID: number | string;\n source: string;\n user?: string;\n memberId?: string;\n\n basketRows: SerializedRoomstaySessionBasketRow[];\n\n reservation?: ReservationsDTO;\n reservationRequest?: RoomstaySession['reservationRequest'];\n};\n\nexport type SerializedRoomstaySessionBasketRow = {\n uniqId: string;\n startDate: string;\n endDate: string;\n\n adults: number;\n children: number;\n infants: number;\n\n promoCode: string;\n promoCodeStatus: string;\n\n room: IRoom;\n rate: IRoomRate;\n};\n\nexport const SERIALIZED_DATE_FORMAT = 'YYYY/MM/DD';\n"]}
@@ -17,7 +17,6 @@ const NumberOfPeopleBookedPillFeature_1 = __importDefault(require("./feature/Num
17
17
  const PlanPayPricePreviewFeature_1 = __importDefault(require("./feature/PlanPayPricePreviewFeature"));
18
18
  const RoomUpsellFeature_1 = __importDefault(require("./feature/RoomUpsellFeature"));
19
19
  const ShowIATANumberOnCheckoutFeature_1 = __importDefault(require("./feature/ShowIATANumberOnCheckoutFeature"));
20
- const ConfirmationImportantInformationFeature_1 = __importDefault(require("./feature/ConfirmationImportantInformationFeature"));
21
20
  const DerbysoftClickTrackingFeature_1 = __importDefault(require("./feature/DerbysoftClickTrackingFeature"));
22
21
  const RoomRateReadMoreVersionFeature_1 = __importDefault(require("./feature/RoomRateReadMoreVersionFeature"));
23
22
  class FeatureProvider {
@@ -53,7 +52,6 @@ FeatureProvider.features = [
53
52
  RoomRateReadMoreVersionFeature_1.default,
54
53
  DerbysoftClickTrackingFeature_1.default,
55
54
  GuestTitleFieldFeature_1.default,
56
- ConfirmationImportantInformationFeature_1.default,
57
55
  HotelGroupFeature_1.default,
58
56
  ];
59
57
  //# sourceMappingURL=FeatureProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureProvider.js","sourceRoot":"/","sources":["src/providers/FeatureProvider.ts"],"names":[],"mappings":";;;;;AAAA,8GAAsF;AACtF,sGAA8E;AAC9E,kHAA0F;AAC1F,oGAA4E;AAC5E,8HAAsG;AACtG,wGAAgF;AAChF,8FAAsE;AACtE,wGAAgF;AAChF,kGAA0E;AAC1E,oGAA4E;AAC5E,0HAAkG;AAClG,gHAAwF;AACxF,8FAAsE;AACtE,0HAAkG;AAElG,gIAAwG;AACxG,4GAAoF;AACpF,8GAAsF;AAEtF,MAAqB,eAAe;IAqBzB,MAAM,CAAC,IAAI,CAAC,IAAuF,EAAE,OAAa;QACrH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACzB;SACJ;IACL,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAuF;QACxG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,MAAM,EAAE,CAAC;aACpB;SACJ;IACL,CAAC;;AAnCL,kCAoCC;AAnCkB,wBAAQ,GAAG;IACtB,gCAAsB;IACtB,+BAAqB;IACrB,2BAAiB;IACjB,8BAAoB;IACpB,mCAAyB;IACzB,yCAA+B;IAC/B,qCAA2B;IAC3B,6BAAmB;IACnB,yCAA+B;IAC/B,2CAAiC;IACjC,8BAAoB;IACpB,oCAA0B;IAC1B,wCAA8B;IAC9B,uCAA6B;IAC7B,gCAAsB;IACtB,iDAAuC;IACvC,2BAAiB;CACpB,CAAC","sourcesContent":["import ConfirmationVerifyFeature from '@/providers/feature/ConfirmationVerifyFeature';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport E164PhoneNumberFieldFeature from '@/providers/feature/E164PhoneNumberFieldFeature';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport FullPageEngineSmallSpacingFeature from '@/providers/feature/FullPageEngineSmallSpacingFeature';\nimport GuestTitleFieldFeature from '@/providers/feature/GuestTitleFieldFeature';\nimport HotelGroupFeature from '@/providers/feature/HotelGroupFeature';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport PlanPayPricePreviewFeature from '@/providers/feature/PlanPayPricePreviewFeature';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport ShowIATANumberOnCheckoutFeature from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\n\nimport ConfirmationImportantInformationFeature from './feature/ConfirmationImportantInformationFeature';\nimport DerbysoftClickTrackingFeature from './feature/DerbysoftClickTrackingFeature';\nimport RoomRateReadMoreVersionFeature from './feature/RoomRateReadMoreVersionFeature';\n\nexport default class FeatureProvider {\n private static features = [\n InlineAddonStepFeature,\n DatePickerTypeFeature,\n RoomUpsellFeature,\n FeaturedPromoFeature,\n ConfirmationVerifyFeature,\n ShowIATANumberOnCheckoutFeature,\n E164PhoneNumberFieldFeature,\n MemberPortalFeature,\n NumberOfPeopleBookedPillFeature,\n FullPageEngineSmallSpacingFeature,\n ModifyBookingFeature,\n PlanPayPricePreviewFeature,\n RoomRateReadMoreVersionFeature,\n DerbysoftClickTrackingFeature,\n GuestTitleFieldFeature,\n ConfirmationImportantInformationFeature,\n HotelGroupFeature,\n ];\n\n public static load(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features], options?: any) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.load(options);\n }\n }\n }\n\n public static unLoad(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features]) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.unLoad();\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"FeatureProvider.js","sourceRoot":"/","sources":["src/providers/FeatureProvider.ts"],"names":[],"mappings":";;;;;AAAA,8GAAsF;AACtF,sGAA8E;AAC9E,kHAA0F;AAC1F,oGAA4E;AAC5E,8HAAsG;AACtG,wGAAgF;AAChF,8FAAsE;AACtE,wGAAgF;AAChF,kGAA0E;AAC1E,oGAA4E;AAC5E,0HAAkG;AAClG,gHAAwF;AACxF,8FAAsE;AACtE,0HAAkG;AAElG,4GAAoF;AACpF,8GAAsF;AAEtF,MAAqB,eAAe;IAoBzB,MAAM,CAAC,IAAI,CAAC,IAAuF,EAAE,OAAa;QACrH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACzB;SACJ;IACL,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,IAAuF;QACxG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,EAAE;gBAChD,OAAO,CAAC,MAAM,EAAE,CAAC;aACpB;SACJ;IACL,CAAC;;AAlCL,kCAmCC;AAlCkB,wBAAQ,GAAG;IACtB,gCAAsB;IACtB,+BAAqB;IACrB,2BAAiB;IACjB,8BAAoB;IACpB,mCAAyB;IACzB,yCAA+B;IAC/B,qCAA2B;IAC3B,6BAAmB;IACnB,yCAA+B;IAC/B,2CAAiC;IACjC,8BAAoB;IACpB,oCAA0B;IAC1B,wCAA8B;IAC9B,uCAA6B;IAC7B,gCAAsB;IACtB,2BAAiB;CACpB,CAAC","sourcesContent":["import ConfirmationVerifyFeature from '@/providers/feature/ConfirmationVerifyFeature';\nimport DatePickerTypeFeature from '@/providers/feature/DatePickerTypeFeature';\nimport E164PhoneNumberFieldFeature from '@/providers/feature/E164PhoneNumberFieldFeature';\nimport FeaturedPromoFeature from '@/providers/feature/FeaturedPromoFeature';\nimport FullPageEngineSmallSpacingFeature from '@/providers/feature/FullPageEngineSmallSpacingFeature';\nimport GuestTitleFieldFeature from '@/providers/feature/GuestTitleFieldFeature';\nimport HotelGroupFeature from '@/providers/feature/HotelGroupFeature';\nimport InlineAddonStepFeature from '@/providers/feature/InlineAddonStepFeature';\nimport MemberPortalFeature from '@/providers/feature/MemberPortalFeature';\nimport ModifyBookingFeature from '@/providers/feature/ModifyBookingFeature';\nimport NumberOfPeopleBookedPillFeature from '@/providers/feature/NumberOfPeopleBookedPillFeature';\nimport PlanPayPricePreviewFeature from '@/providers/feature/PlanPayPricePreviewFeature';\nimport RoomUpsellFeature from '@/providers/feature/RoomUpsellFeature';\nimport ShowIATANumberOnCheckoutFeature from '@/providers/feature/ShowIATANumberOnCheckoutFeature';\n\nimport DerbysoftClickTrackingFeature from './feature/DerbysoftClickTrackingFeature';\nimport RoomRateReadMoreVersionFeature from './feature/RoomRateReadMoreVersionFeature';\n\nexport default class FeatureProvider {\n private static features = [\n InlineAddonStepFeature,\n DatePickerTypeFeature,\n RoomUpsellFeature,\n FeaturedPromoFeature,\n ConfirmationVerifyFeature,\n ShowIATANumberOnCheckoutFeature,\n E164PhoneNumberFieldFeature,\n MemberPortalFeature,\n NumberOfPeopleBookedPillFeature,\n FullPageEngineSmallSpacingFeature,\n ModifyBookingFeature,\n PlanPayPricePreviewFeature,\n RoomRateReadMoreVersionFeature,\n DerbysoftClickTrackingFeature,\n GuestTitleFieldFeature,\n HotelGroupFeature,\n ];\n\n public static load(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features], options?: any) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.load(options);\n }\n }\n }\n\n public static unLoad(name: string | (typeof FeatureProvider.features)[keyof typeof FeatureProvider.features]) {\n for (const feature of this.features) {\n if (feature.getName() === name || name === feature) {\n feature.unLoad();\n }\n }\n }\n}\n"]}
@@ -1,10 +1,8 @@
1
1
  export declare abstract class Feature<TOptions = any> {
2
2
  private name;
3
3
  private active;
4
- private options?;
5
4
  constructor(name: string);
6
5
  getName(): string;
7
- getOptions(): TOptions | undefined;
8
6
  isActive(): boolean;
9
7
  load(options?: TOptions): void;
10
8
  unLoad(): void;
@@ -9,9 +9,6 @@ class Feature {
9
9
  getName() {
10
10
  return this.name;
11
11
  }
12
- getOptions() {
13
- return this.options;
14
- }
15
12
  isActive() {
16
13
  return this.active;
17
14
  }
@@ -25,7 +22,6 @@ class Feature {
25
22
  }
26
23
  onLoad(options) {
27
24
  // Empty function to be overwritten
28
- this.options = options;
29
25
  }
30
26
  onUnLoad() {
31
27
  // Empty function to be overwritten
@@ -1 +1 @@
1
- {"version":3,"file":"Feature.js","sourceRoot":"/","sources":["src/providers/feature/Feature.ts"],"names":[],"mappings":";;;AAAA,MAAsB,OAAO;IAKzB,YAAmB,IAAY;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,IAAI,CAAC,OAAkB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAES,MAAM,CAAC,OAAkB;QAC/B,mCAAmC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAES,QAAQ;QACd,mCAAmC;IACvC,CAAC;CACJ;AAzCD,0BAyCC","sourcesContent":["export abstract class Feature<TOptions = any> {\n private name: string;\n private active: boolean;\n private options?: TOptions;\n\n public constructor(name: string) {\n this.name = name;\n this.active = false;\n }\n\n public getName() {\n return this.name;\n }\n\n public getOptions() {\n return this.options;\n }\n\n public isActive() {\n return this.active;\n }\n\n public load(options?: TOptions) {\n this.active = true;\n this.onLoad(options);\n }\n\n public unLoad() {\n this.active = false;\n\n this.onUnLoad();\n }\n\n protected onLoad(options?: TOptions): void {\n // Empty function to be overwritten\n this.options = options;\n }\n\n protected onUnLoad() {\n // Empty function to be overwritten\n }\n}\n"]}
1
+ {"version":3,"file":"Feature.js","sourceRoot":"/","sources":["src/providers/feature/Feature.ts"],"names":[],"mappings":";;;AAAA,MAAsB,OAAO;IAIzB,YAAmB,IAAY;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,IAAI,CAAC,OAAkB;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAES,MAAM,CAAC,OAAkB;QAC/B,mCAAmC;IACvC,CAAC;IAES,QAAQ;QACd,mCAAmC;IACvC,CAAC;CACJ;AAnCD,0BAmCC","sourcesContent":["export abstract class Feature<TOptions = any> {\n private name: string;\n private active: boolean;\n\n public constructor(name: string) {\n this.name = name;\n this.active = false;\n }\n\n public getName() {\n return this.name;\n }\n\n public isActive() {\n return this.active;\n }\n\n public load(options?: TOptions) {\n this.active = true;\n this.onLoad(options);\n }\n\n public unLoad() {\n this.active = false;\n\n this.onUnLoad();\n }\n\n protected onLoad(options?: TOptions): void {\n // Empty function to be overwritten\n }\n\n protected onUnLoad() {\n // Empty function to be overwritten\n }\n}\n"]}
@@ -209,7 +209,6 @@ class SessionProvider {
209
209
  children: unSerializeBasketRow.getChildren(),
210
210
  infants: unSerializeBasketRow.getInfants(),
211
211
  promoCode: unSerializeBasketRow.getPromoCode(),
212
- roomCode: unSerializeBasketRow.getRoomCode(),
213
212
  promoCodeStatus: unSerializeBasketRow.getPromoCodeStatus(),
214
213
  rate: serializedRate,
215
214
  room: serializedRoom,
@@ -262,7 +261,6 @@ class SessionProvider {
262
261
  basketRow.setAdults(serializedBasketRow.adults);
263
262
  basketRow.setChildren(serializedBasketRow.children);
264
263
  basketRow.setInfants(serializedBasketRow.infants);
265
- basketRow.setRoomCode(serializedBasketRow.roomCode);
266
264
  basketRows.push(basketRow);
267
265
  });
268
266
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SessionProvider.js","sourceRoot":"/","sources":["src/providers/storage/SessionProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport dayjs from 'dayjs';\n\nimport BasketRow from '@/models/BasketRow';\nimport { IRoom, Room } from '@/models/Room/Room';\nimport { IRoomRate, RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession, SERIALIZED_DATE_FORMAT, SerializedRoomstaySession, SerializedRoomstaySessionBasketRow } from '@/models/RoomstaySession';\nimport { StorageProvider } from '@/providers/storage/StorageProvider';\nimport { debounce, delay } from '@/util/Debounce';\n\n/**\n * Session provider is in charge of handling the loading, saving and passing of the current Engine Session.\n *\n * Desired flow:\n * * App Opened\n * * Session Provider loaded\n * * New User Session Created\n * * User moves through the app, updating the session with vital details (current step, basket context )\n * * User refreshes browser - session is re-loaded and user resumes where they left off\n * * User proceeds to checkout.\n * * Session is saved.\n *\n * Mini Booking Widget:\n * * User loads mini booking widget, selects dates, people\n * * Rates are loaded, and user selects a rate, redirecting to Full Booking Engine\n * * Session Provider creates a SessionID to pass to redirected path\n * * Session Provider loads the passed SessionID and loads the correct session\n * * Resume to Desired Flow\n *\n * Re-targeting:\n * ---Since re-targeting will happen on client site, under client domain, localStorage will be preserved, ergo we can load the previous incomplete sessions back to the user\n * * User lands on client Homepage\n * * Session Provider loads previous incomplete sessions\n * * A slider with details of previous baskets is shown back to the user\n * * User clicks on a previous session and is brought to the Booking Engine\n * * Resume to Desired Flow\n */\n\nexport default class SessionProvider {\n private currentSessionID!: number;\n private hotelID!: string;\n private cachedSession: Partial<RoomstaySession> = {};\n\n private syncSession = async () => {\n try {\n const currentSession = await this.getSession();\n const cachedSession = this.cachedSession;\n this.cachedSession = {};\n await this.saveSession({\n ...currentSession,\n ...cachedSession,\n });\n } catch (error) {\n console.error('Failed to sync session:', error);\n }\n };\n\n private debouncedUpdateSession = debounce(async () => {\n await this.syncSession();\n }, 300);\n\n private async updateSessionWithAsync() {\n await delay(300); // 300 milliseconds delay -- Why is a delay necessary?\n await this.syncSession();\n }\n\n public async setHotelID(hotelID: string) {\n this.hotelID = hotelID;\n this.updateSession({ hotelID });\n }\n\n public async initialize(sessionID?: number, source?: string) {\n await this.setSessionID(sessionID, source);\n }\n\n public async setSessionID(sessionID?: number, source?: string) {\n const foundSession = await this.findOrCreateSessionID(sessionID as number, source as string);\n\n if (foundSession) {\n this.currentSessionID = foundSession;\n\n // Never read?\n const storage = new StorageProvider(sessionStorage);\n await storage.write('currentSession', this.currentSessionID);\n }\n }\n\n /**\n * @returns the current session ID\n */\n public getCurrentSessionID(): number {\n return this.currentSessionID;\n }\n\n public getSession(): RoomstaySession {\n const storage = new StorageProvider();\n\n const sessionFromStorage = storage.read<SerializedRoomstaySession>(this.getSessionKey());\n\n if (sessionFromStorage) {\n return this.unSerializeSession(sessionFromStorage);\n } else {\n return this.generateNewSession('');\n }\n }\n\n public async saveSession(changedSession: RoomstaySession) {\n if (!changedSession) {\n return console.log('Attempted to save empty session');\n }\n\n const storage = new StorageProvider();\n\n const serializedSession = this.serializeSession(changedSession);\n\n await storage.write(this.getSessionKey(serializedSession.id), serializedSession);\n }\n\n public async updateSession(partialSession: Partial<RoomstaySession>) {\n Object.assign(this.cachedSession, partialSession);\n this.debouncedUpdateSession();\n }\n\n public async updateSessionAsync(partialSession: Partial<RoomstaySession>) {\n Object.assign(this.cachedSession, partialSession);\n await this.updateSessionWithAsync();\n }\n\n public async deleteSession() {\n const storage = new StorageProvider();\n storage.delete(this.getSessionKey());\n }\n\n public async getAllSessions() {\n const storage = new StorageProvider();\n const sessionKeys = storage.getAllKeys((name) => name.startsWith('roomstay-session'));\n\n return (await storage.readAll<SerializedRoomstaySession>(sessionKeys)).map((session) => this.unSerializeSession(session));\n }\n\n /**\n * Function to find the right session from session storage, or local storage\n *\n * If one isn't found it is then created.\n */\n private async findOrCreateSessionID(sessionID: number, source: string) {\n let session: RoomstaySession;\n\n if (sessionID) {\n session = (await this.findSession(sessionID)) as RoomstaySession;\n\n if (session) {\n return session.id;\n }\n }\n\n session = await this.generateNewSession(source);\n\n return session.id;\n }\n\n private async findSession(sessionID: number): Promise<RoomstaySession | undefined> {\n const storage = new StorageProvider();\n const session = await storage.read<SerializedRoomstaySession>(this.getSessionKey(sessionID));\n\n if (session) {\n return this.unSerializeSession(session);\n }\n }\n\n private generateNewSession(source: string): RoomstaySession {\n const sessionId = new Date().getTime();\n\n const session: RoomstaySession = {\n id: sessionId,\n startDate: null,\n endDate: null,\n step: '',\n hotelID: this.hotelID ?? null,\n basketRows: [],\n source,\n };\n\n this.saveSession(session);\n\n return session;\n }\n\n private serializeSession(session: RoomstaySession): SerializedRoomstaySession {\n const basketRows: SerializedRoomstaySessionBasketRow[] = [];\n\n // TODO possibly refactor BasketRow to serialize itself, or instead make a serializer that can do all this.\n session.basketRows.forEach((unSerializeBasketRow: BasketRow) => {\n const rate = unSerializeBasketRow.getRate();\n const room = unSerializeBasketRow.getRoom();\n\n let serializedRate = null;\n let serializedRoom = null;\n\n if (rate) {\n serializedRate = rate.serialize();\n }\n\n if (room) {\n serializedRoom = room.serialize();\n }\n\n basketRows.push({\n uniqId: unSerializeBasketRow.getID(),\n startDate: unSerializeBasketRow.getStartDate()?.format(SERIALIZED_DATE_FORMAT),\n endDate: unSerializeBasketRow.getEndDate()?.format(SERIALIZED_DATE_FORMAT),\n adults: unSerializeBasketRow.getAdults(),\n children: unSerializeBasketRow.getChildren(),\n infants: unSerializeBasketRow.getInfants(),\n promoCode: unSerializeBasketRow.getPromoCode(),\n roomCode: unSerializeBasketRow.getRoomCode(),\n promoCodeStatus: unSerializeBasketRow.getPromoCodeStatus(),\n rate: serializedRate as IRoomRate,\n room: serializedRoom as IRoom,\n });\n });\n\n return {\n id: session.id,\n startDate: session.startDate?.format(SERIALIZED_DATE_FORMAT) as string,\n endDate: session.endDate?.format(SERIALIZED_DATE_FORMAT) as string,\n step: session.step,\n hotelID: session.hotelID,\n basketRows,\n source: session.source,\n user: JSON.stringify(session.user),\n memberId: session.memberId,\n reservation: session.reservation,\n reservationRequest: session.reservationRequest,\n };\n }\n\n private unSerializeSession(session: SerializedRoomstaySession): RoomstaySession {\n const basketRows: BasketRow[] = [];\n let startDate: dayjs.Dayjs | null = null;\n let endDate: dayjs.Dayjs | null = null;\n\n if (session.startDate) {\n startDate = dayjs(session.startDate, SERIALIZED_DATE_FORMAT);\n }\n\n if (session.endDate) {\n endDate = dayjs(session.endDate, SERIALIZED_DATE_FORMAT);\n }\n\n session.basketRows?.forEach((serializedBasketRow) => {\n let rate;\n let room;\n\n if (serializedBasketRow.room) {\n room = new Room();\n room.unSerialize(serializedBasketRow.room);\n }\n\n if (serializedBasketRow.rate && room) {\n rate = new RoomRate();\n rate.unSerialize(serializedBasketRow.rate);\n rate.setRoom(room);\n }\n\n const basketRow = new BasketRow(rate, serializedBasketRow.uniqId);\n\n if (serializedBasketRow.startDate) {\n basketRow.setStartDate(dayjs(serializedBasketRow.startDate, SERIALIZED_DATE_FORMAT));\n }\n if (serializedBasketRow.endDate) {\n basketRow.setEndDate(dayjs(serializedBasketRow.endDate, SERIALIZED_DATE_FORMAT));\n }\n\n basketRow.setAdults(serializedBasketRow.adults);\n basketRow.setChildren(serializedBasketRow.children);\n basketRow.setInfants(serializedBasketRow.infants);\n basketRow.setRoomCode(serializedBasketRow.roomCode);\n\n basketRows.push(basketRow);\n });\n\n return {\n id: session.id,\n startDate,\n endDate,\n step: session.step,\n hotelID: session.hotelID,\n basketRows,\n source: session.source,\n user: session.user ? (JSON.parse(session.user) as SignInUser) : undefined,\n memberId: session.memberId,\n reservation: session.reservation,\n reservationRequest: session.reservationRequest,\n };\n }\n\n private getSessionKey(sessionId?: number): string {\n return `session-${sessionId ?? this.currentSessionID}`;\n }\n}\n"]}
1
+ {"version":3,"file":"SessionProvider.js","sourceRoot":"/","sources":["src/providers/storage/SessionProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { SignInUser } from '@frontend/contexts';\nimport dayjs from 'dayjs';\n\nimport BasketRow from '@/models/BasketRow';\nimport { IRoom, Room } from '@/models/Room/Room';\nimport { IRoomRate, RoomRate } from '@/models/Room/RoomRate';\nimport { RoomstaySession, SERIALIZED_DATE_FORMAT, SerializedRoomstaySession, SerializedRoomstaySessionBasketRow } from '@/models/RoomstaySession';\nimport { StorageProvider } from '@/providers/storage/StorageProvider';\nimport { debounce, delay } from '@/util/Debounce';\n\n/**\n * Session provider is in charge of handling the loading, saving and passing of the current Engine Session.\n *\n * Desired flow:\n * * App Opened\n * * Session Provider loaded\n * * New User Session Created\n * * User moves through the app, updating the session with vital details (current step, basket context )\n * * User refreshes browser - session is re-loaded and user resumes where they left off\n * * User proceeds to checkout.\n * * Session is saved.\n *\n * Mini Booking Widget:\n * * User loads mini booking widget, selects dates, people\n * * Rates are loaded, and user selects a rate, redirecting to Full Booking Engine\n * * Session Provider creates a SessionID to pass to redirected path\n * * Session Provider loads the passed SessionID and loads the correct session\n * * Resume to Desired Flow\n *\n * Re-targeting:\n * ---Since re-targeting will happen on client site, under client domain, localStorage will be preserved, ergo we can load the previous incomplete sessions back to the user\n * * User lands on client Homepage\n * * Session Provider loads previous incomplete sessions\n * * A slider with details of previous baskets is shown back to the user\n * * User clicks on a previous session and is brought to the Booking Engine\n * * Resume to Desired Flow\n */\n\nexport default class SessionProvider {\n private currentSessionID!: number;\n private hotelID!: string;\n private cachedSession: Partial<RoomstaySession> = {};\n\n private syncSession = async () => {\n try {\n const currentSession = await this.getSession();\n const cachedSession = this.cachedSession;\n this.cachedSession = {};\n await this.saveSession({\n ...currentSession,\n ...cachedSession,\n });\n } catch (error) {\n console.error('Failed to sync session:', error);\n }\n };\n\n private debouncedUpdateSession = debounce(async () => {\n await this.syncSession();\n }, 300);\n\n private async updateSessionWithAsync() {\n await delay(300); // 300 milliseconds delay -- Why is a delay necessary?\n await this.syncSession();\n }\n\n public async setHotelID(hotelID: string) {\n this.hotelID = hotelID;\n this.updateSession({ hotelID });\n }\n\n public async initialize(sessionID?: number, source?: string) {\n await this.setSessionID(sessionID, source);\n }\n\n public async setSessionID(sessionID?: number, source?: string) {\n const foundSession = await this.findOrCreateSessionID(sessionID as number, source as string);\n\n if (foundSession) {\n this.currentSessionID = foundSession;\n\n // Never read?\n const storage = new StorageProvider(sessionStorage);\n await storage.write('currentSession', this.currentSessionID);\n }\n }\n\n /**\n * @returns the current session ID\n */\n public getCurrentSessionID(): number {\n return this.currentSessionID;\n }\n\n public getSession(): RoomstaySession {\n const storage = new StorageProvider();\n\n const sessionFromStorage = storage.read<SerializedRoomstaySession>(this.getSessionKey());\n\n if (sessionFromStorage) {\n return this.unSerializeSession(sessionFromStorage);\n } else {\n return this.generateNewSession('');\n }\n }\n\n public async saveSession(changedSession: RoomstaySession) {\n if (!changedSession) {\n return console.log('Attempted to save empty session');\n }\n\n const storage = new StorageProvider();\n\n const serializedSession = this.serializeSession(changedSession);\n\n await storage.write(this.getSessionKey(serializedSession.id), serializedSession);\n }\n\n public async updateSession(partialSession: Partial<RoomstaySession>) {\n Object.assign(this.cachedSession, partialSession);\n this.debouncedUpdateSession();\n }\n\n public async updateSessionAsync(partialSession: Partial<RoomstaySession>) {\n Object.assign(this.cachedSession, partialSession);\n await this.updateSessionWithAsync();\n }\n\n public async deleteSession() {\n const storage = new StorageProvider();\n storage.delete(this.getSessionKey());\n }\n\n public async getAllSessions() {\n const storage = new StorageProvider();\n const sessionKeys = storage.getAllKeys((name) => name.startsWith('roomstay-session'));\n\n return (await storage.readAll<SerializedRoomstaySession>(sessionKeys)).map((session) => this.unSerializeSession(session));\n }\n\n /**\n * Function to find the right session from session storage, or local storage\n *\n * If one isn't found it is then created.\n */\n private async findOrCreateSessionID(sessionID: number, source: string) {\n let session: RoomstaySession;\n\n if (sessionID) {\n session = (await this.findSession(sessionID)) as RoomstaySession;\n\n if (session) {\n return session.id;\n }\n }\n\n session = await this.generateNewSession(source);\n\n return session.id;\n }\n\n private async findSession(sessionID: number): Promise<RoomstaySession | undefined> {\n const storage = new StorageProvider();\n const session = await storage.read<SerializedRoomstaySession>(this.getSessionKey(sessionID));\n\n if (session) {\n return this.unSerializeSession(session);\n }\n }\n\n private generateNewSession(source: string): RoomstaySession {\n const sessionId = new Date().getTime();\n\n const session: RoomstaySession = {\n id: sessionId,\n startDate: null,\n endDate: null,\n step: '',\n hotelID: this.hotelID ?? null,\n basketRows: [],\n source,\n };\n\n this.saveSession(session);\n\n return session;\n }\n\n private serializeSession(session: RoomstaySession): SerializedRoomstaySession {\n const basketRows: SerializedRoomstaySessionBasketRow[] = [];\n\n // TODO possibly refactor BasketRow to serialize itself, or instead make a serializer that can do all this.\n session.basketRows.forEach((unSerializeBasketRow: BasketRow) => {\n const rate = unSerializeBasketRow.getRate();\n const room = unSerializeBasketRow.getRoom();\n\n let serializedRate = null;\n let serializedRoom = null;\n\n if (rate) {\n serializedRate = rate.serialize();\n }\n\n if (room) {\n serializedRoom = room.serialize();\n }\n\n basketRows.push({\n uniqId: unSerializeBasketRow.getID(),\n startDate: unSerializeBasketRow.getStartDate()?.format(SERIALIZED_DATE_FORMAT),\n endDate: unSerializeBasketRow.getEndDate()?.format(SERIALIZED_DATE_FORMAT),\n adults: unSerializeBasketRow.getAdults(),\n children: unSerializeBasketRow.getChildren(),\n infants: unSerializeBasketRow.getInfants(),\n promoCode: unSerializeBasketRow.getPromoCode(),\n promoCodeStatus: unSerializeBasketRow.getPromoCodeStatus(),\n rate: serializedRate as IRoomRate,\n room: serializedRoom as IRoom,\n });\n });\n\n return {\n id: session.id,\n startDate: session.startDate?.format(SERIALIZED_DATE_FORMAT) as string,\n endDate: session.endDate?.format(SERIALIZED_DATE_FORMAT) as string,\n step: session.step,\n hotelID: session.hotelID,\n basketRows,\n source: session.source,\n user: JSON.stringify(session.user),\n memberId: session.memberId,\n reservation: session.reservation,\n reservationRequest: session.reservationRequest,\n };\n }\n\n private unSerializeSession(session: SerializedRoomstaySession): RoomstaySession {\n const basketRows: BasketRow[] = [];\n let startDate: dayjs.Dayjs | null = null;\n let endDate: dayjs.Dayjs | null = null;\n\n if (session.startDate) {\n startDate = dayjs(session.startDate, SERIALIZED_DATE_FORMAT);\n }\n\n if (session.endDate) {\n endDate = dayjs(session.endDate, SERIALIZED_DATE_FORMAT);\n }\n\n session.basketRows?.forEach((serializedBasketRow) => {\n let rate;\n let room;\n\n if (serializedBasketRow.room) {\n room = new Room();\n room.unSerialize(serializedBasketRow.room);\n }\n\n if (serializedBasketRow.rate && room) {\n rate = new RoomRate();\n rate.unSerialize(serializedBasketRow.rate);\n rate.setRoom(room);\n }\n\n const basketRow = new BasketRow(rate, serializedBasketRow.uniqId);\n\n if (serializedBasketRow.startDate) {\n basketRow.setStartDate(dayjs(serializedBasketRow.startDate, SERIALIZED_DATE_FORMAT));\n }\n if (serializedBasketRow.endDate) {\n basketRow.setEndDate(dayjs(serializedBasketRow.endDate, SERIALIZED_DATE_FORMAT));\n }\n\n basketRow.setAdults(serializedBasketRow.adults);\n basketRow.setChildren(serializedBasketRow.children);\n basketRow.setInfants(serializedBasketRow.infants);\n\n basketRows.push(basketRow);\n });\n\n return {\n id: session.id,\n startDate,\n endDate,\n step: session.step,\n hotelID: session.hotelID,\n basketRows,\n source: session.source,\n user: session.user ? (JSON.parse(session.user) as SignInUser) : undefined,\n memberId: session.memberId,\n reservation: session.reservation,\n reservationRequest: session.reservationRequest,\n };\n }\n\n private getSessionKey(sessionId?: number): string {\n return `session-${sessionId ?? this.currentSessionID}`;\n }\n}\n"]}
@@ -373,10 +373,6 @@ export declare const Translation: {
373
373
  YouCanAddAndEditRooms: string;
374
374
  AddMoreRooms: string;
375
375
  EmailSpecialOffers: string;
376
- ImportantInformation: string;
377
- ImportantInformationNotes: string;
378
- ImportantInformationIHaveUnderstood: string;
379
- ImportantInformationError: string;
380
376
  Acknowledgement: string;
381
377
  IHaveUnderstoodPrivacyPolicy: string;
382
378
  PrivacyPolicy: string;
@@ -406,19 +402,6 @@ export declare const Translation: {
406
402
  BeingHeldFor: string;
407
403
  PrivacyPolicyDetail: string;
408
404
  EditThisProperty: string;
409
- GiftCard: string;
410
- EnterCode: string;
411
- ApplyCode: string;
412
- CodeApplied: string;
413
- YourBalance: string;
414
- Remaining: string;
415
- TrueRewardsCoversFullBooking: string;
416
- TrueRewardsCoversFullInstructions: string;
417
- TrueRewardsInsufficient: string;
418
- TrueRewardsInsufficientInstructions: string;
419
- TrueRewardsInputHelperText: string;
420
- TrueRewardsInvalid: string;
421
- TrueRewardsFailed: string;
422
405
  };
423
406
  Thanks: {
424
407
  AddOnItems: string;
@@ -576,7 +559,6 @@ export declare const Translation: {
576
559
  ApplyNow: string;
577
560
  PerksDisclaimer: string;
578
561
  LoadMoreDates: string;
579
- MoreInfo: string;
580
562
  };
581
563
  FindReservation: {
582
564
  FindYourReservation: string;
@@ -376,10 +376,6 @@ exports.Translation = {
376
376
  YouCanAddAndEditRooms: 'Step.Confirmation.YouCanAddAndEditRooms',
377
377
  AddMoreRooms: 'Step.Confirmation.AddMoreRooms',
378
378
  EmailSpecialOffers: 'Step.Confirmation.EmailSpecialOffers',
379
- ImportantInformation: 'Step.Confirmation.ImportantInformation',
380
- ImportantInformationNotes: 'Step.Confirmation.ImportantInformationNotes',
381
- ImportantInformationIHaveUnderstood: 'Step.Confirmation.ImportantInformationIHaveUnderstood',
382
- ImportantInformationError: 'Step.Confirmation.ImportantInformationError',
383
379
  Acknowledgement: 'Step.Confirmation.Acknowledgement',
384
380
  IHaveUnderstoodPrivacyPolicy: 'Step.Confirmation.IHaveUnderstoodPrivacyPolicy',
385
381
  PrivacyPolicy: 'Step.Confirmation.PrivacyPolicy',
@@ -409,19 +405,6 @@ exports.Translation = {
409
405
  BeingHeldFor: 'Step.Confirmation.BeingHeldFor',
410
406
  PrivacyPolicyDetail: 'Step.Confirmation.PrivacyPolicyDetail',
411
407
  EditThisProperty: 'Step.Confirmation.EditThisProperty',
412
- GiftCard: 'Step.Confirmation.GiftCard',
413
- EnterCode: 'Step.Confirmation.EnterCode',
414
- ApplyCode: 'Step.Confirmation.ApplyCode',
415
- CodeApplied: 'Step.Confirmation.CodeApplied',
416
- YourBalance: 'Step.Confirmation.YourBalance',
417
- Remaining: 'Step.Confirmation.Remaining',
418
- TrueRewardsCoversFullBooking: 'Step.Confirmation.TrueRewardsCoversFullBooking',
419
- TrueRewardsCoversFullInstructions: 'Step.Confirmation.TrueRewardsCoversFullInstructions',
420
- TrueRewardsInsufficient: 'Step.Confirmation.TrueRewardsInsufficient',
421
- TrueRewardsInsufficientInstructions: 'Step.Confirmation.TrueRewardsInsufficientInstructions',
422
- TrueRewardsInputHelperText: 'Step.Confirmation.TrueRewardsInputHelperText',
423
- TrueRewardsInvalid: 'Step.Confirmation.TrueRewardsInvalid',
424
- TrueRewardsFailed: 'Step.Confirmation.TrueRewardsFailed',
425
408
  },
426
409
  Thanks: {
427
410
  AddOnItems: 'Step.Thanks.AddOnItems',
@@ -579,7 +562,6 @@ exports.Translation = {
579
562
  ApplyNow: 'Misc.ApplyNow',
580
563
  PerksDisclaimer: 'Misc.PerksDisclaimer',
581
564
  LoadMoreDates: 'Misc.LoadMoreDates',
582
- MoreInfo: 'Misc.MoreInfo',
583
565
  },
584
566
  FindReservation: {
585
567
  FindYourReservation: 'FindReservation.FindYourReservation',