@roomstay/frontend 2.6.79-1 → 2.6.80

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 (151) hide show
  1. package/dist/177.bundle.js +1 -1
  2. package/dist/288.bundle.js +1 -1
  3. package/dist/380.bundle.js +1 -0
  4. package/dist/449.bundle.js +1 -1
  5. package/dist/537.bundle.js +1 -1
  6. package/dist/984.bundle.js +1 -0
  7. package/dist/main.bundle.js +1 -1
  8. package/dist/src/api/AvailabilityAPI.d.ts +3 -1
  9. package/dist/src/api/AvailabilityAPI.js +97 -81
  10. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  11. package/dist/src/api/ReservationAPI.d.ts +1 -2
  12. package/dist/src/api/ReservationAPI.js +9 -12
  13. package/dist/src/api/ReservationAPI.js.map +1 -1
  14. package/dist/src/components/generic/BEButton.d.ts +1 -0
  15. package/dist/src/components/generic/BEButton.js +2 -1
  16. package/dist/src/components/generic/BEButton.js.map +1 -1
  17. package/dist/src/components/generic/BookingWizard/BookingWizard.d.ts +0 -1
  18. package/dist/src/components/generic/BookingWizard/BookingWizard.js +1 -7
  19. package/dist/src/components/generic/BookingWizard/BookingWizard.js.map +1 -1
  20. package/dist/src/components/generic/PromoCodeInput.d.ts +2 -0
  21. package/dist/src/components/generic/PromoCodeInput.js +2 -4
  22. package/dist/src/components/generic/PromoCodeInput.js.map +1 -1
  23. package/dist/src/components/members/InlineSignUpSection.d.ts +1 -1
  24. package/dist/src/components/members/InlineSignUpSection.js.map +1 -1
  25. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.d.ts +1 -1
  26. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js +2 -2
  27. package/dist/src/components/steps/common/CommonAddonSummary/CommonAddonSummary.js.map +1 -1
  28. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.d.ts +1 -1
  29. package/dist/src/components/steps/common/ItemisedFeesSummary/ItemisedFeesSummary.js.map +1 -1
  30. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js +10 -11
  31. package/dist/src/components/steps/confirmation/StepConfirmationAcknowledgement.js.map +1 -1
  32. package/dist/src/components/steps/confirmation/StepConfirmationForm.js +4 -11
  33. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  34. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js +1 -1
  35. package/dist/src/components/steps/confirmation/TrueRewardsPaymentOption/TrueRewardsPaymentMethod.js.map +1 -1
  36. package/dist/src/components/steps/date/PeoplePicker.js +2 -2
  37. package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
  38. package/dist/src/components/steps/hotel/HotelSearchParameters.js +5 -13
  39. package/dist/src/components/steps/hotel/HotelSearchParameters.js.map +1 -1
  40. package/dist/src/components/steps/room/AvailableUpgradesModal.js +5 -0
  41. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  42. package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.d.ts +1 -1
  43. package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.js +2 -1
  44. package/dist/src/components/steps/room/UserSearchSummary/PromoCodeVerificationAlert.js.map +1 -1
  45. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js +3 -13
  46. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js.map +1 -1
  47. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +5 -15
  48. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  49. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js +2 -2
  50. package/dist/src/components/steps/room/roomDetails/roomRates/PriceBreakdownBlock.js.map +1 -1
  51. package/dist/src/components/summary/BESummaryAddonRow.js +1 -1
  52. package/dist/src/components/summary/BESummaryAddonRow.js.map +1 -1
  53. package/dist/src/components/summary/BESummaryPerkBlock.js.map +1 -1
  54. package/dist/src/components/summary/BESummaryRoomRow.js +1 -1
  55. package/dist/src/components/summary/BESummaryRoomRow.js.map +1 -1
  56. package/dist/src/contexts/BasketContext/BasketContextType.d.ts +1 -1
  57. package/dist/src/contexts/BasketContext/BasketContextType.js.map +1 -1
  58. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +48 -83
  59. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  60. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +0 -1
  61. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  62. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextTypes.d.ts +1 -1
  63. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextTypes.js.map +1 -1
  64. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +2 -3
  65. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  66. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js +2 -10
  67. package/dist/src/contexts/FullPageEngineContext/FullPageEngineContextWrapper.js.map +1 -1
  68. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.d.ts +0 -1
  69. package/dist/src/engines/BookingWizardEngine/BookingWizardEngine.js.map +1 -1
  70. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js +0 -1
  71. package/dist/src/engines/BookingWizardEngine/BookingWizardEngineElement.js.map +1 -1
  72. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.d.ts +3 -1
  73. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +10 -24
  74. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  75. package/dist/src/events/actions/PlacedBookingEvent.d.ts +1 -1
  76. package/dist/src/events/actions/PlacedBookingEvent.js.map +1 -1
  77. package/dist/src/events/views/CommittedBookingEvent.d.ts +1 -1
  78. package/dist/src/events/views/CommittedBookingEvent.js.map +1 -1
  79. package/dist/src/events/views/RolledBackBookingEvent.d.ts +1 -1
  80. package/dist/src/events/views/RolledBackBookingEvent.js.map +1 -1
  81. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +0 -1
  82. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  83. package/dist/src/index.d.ts +0 -1
  84. package/dist/src/index.js +2 -4
  85. package/dist/src/index.js.map +1 -1
  86. package/dist/src/mockApi/ReservationAPI.d.ts +1 -1
  87. package/dist/src/mockApi/ReservationAPI.js.map +1 -1
  88. package/dist/src/models/Addon/Addon.d.ts +0 -24
  89. package/dist/src/models/Addon/Addon.js.map +1 -1
  90. package/dist/src/models/Api/HotelDTO.d.ts +0 -1
  91. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  92. package/dist/src/models/BasketAddonRow.js +3 -5
  93. package/dist/src/models/BasketAddonRow.js.map +1 -1
  94. package/dist/src/models/BasketRow.d.ts +61 -6
  95. package/dist/src/models/BasketRow.js +76 -37
  96. package/dist/src/models/BasketRow.js.map +1 -1
  97. package/dist/src/models/Client/Hotel/Hotel.d.ts +0 -1
  98. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  99. package/dist/src/models/Fee.d.ts +1 -9
  100. package/dist/src/models/Fee.js.map +1 -1
  101. package/dist/src/models/Room/RoomRateNight.d.ts +1 -1
  102. package/dist/src/models/Room/RoomRateNight.js.map +1 -1
  103. package/dist/src/models/RoomstaySession.d.ts +1 -3
  104. package/dist/src/models/RoomstaySession.js.map +1 -1
  105. package/dist/src/pages/findReservation/FindReservationResults.js +2 -2
  106. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  107. package/dist/src/pages/findReservation/ReservationRow.d.ts +1 -1
  108. package/dist/src/pages/findReservation/ReservationRow.js.map +1 -1
  109. package/dist/src/pages/findReservation/ReservationRowModal.d.ts +1 -1
  110. package/dist/src/pages/findReservation/ReservationRowModal.js.map +1 -1
  111. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js +2 -2
  112. package/dist/src/pages/steps/StepThanks/StepThanksComponent.js.map +1 -1
  113. package/dist/src/providers/FeatureProvider.js +0 -2
  114. package/dist/src/providers/FeatureProvider.js.map +1 -1
  115. package/dist/src/providers/feature/Feature.d.ts +0 -2
  116. package/dist/src/providers/feature/Feature.js +0 -4
  117. package/dist/src/providers/feature/Feature.js.map +1 -1
  118. package/dist/src/providers/storage/SessionProvider.js +0 -2
  119. package/dist/src/providers/storage/SessionProvider.js.map +1 -1
  120. package/dist/src/translations/Translation.d.ts +0 -4
  121. package/dist/src/translations/Translation.js +0 -4
  122. package/dist/src/translations/Translation.js.map +1 -1
  123. package/dist/src/translations/languages/en-gb.js +0 -4
  124. package/dist/src/translations/languages/en-gb.js.map +1 -1
  125. package/dist/src/util/Analytics/Analytics.d.ts +1 -1
  126. package/dist/src/util/Analytics/Analytics.js.map +1 -1
  127. package/dist/src/util/Analytics/GoogleAnalytics4.d.ts +2 -2
  128. package/dist/src/util/Analytics/GoogleAnalytics4.js.map +1 -1
  129. package/dist/src/util/Analytics/UniversalAnalytics.d.ts +1 -1
  130. package/dist/src/util/Analytics/UniversalAnalytics.js.map +1 -1
  131. package/dist/src/util/DataLayer.d.ts +1 -1
  132. package/dist/src/util/DataLayer.js.map +1 -1
  133. package/dist/src/util/DerbysoftPixel.d.ts +1 -1
  134. package/dist/src/util/DerbysoftPixel.js.map +1 -1
  135. package/dist/test.bundle.js +1 -1
  136. package/dist/vendors.bundle.js +1 -1
  137. package/package.json +2 -2
  138. package/dist/456.bundle.js +0 -1
  139. package/dist/977.bundle.js +0 -1
  140. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.d.ts +0 -7
  141. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js +0 -54
  142. package/dist/src/components/steps/confirmation/StepConfirmationImportantInformation.js.map +0 -1
  143. package/dist/src/models/Api/ReservationsDTO.d.ts +0 -80
  144. package/dist/src/models/Api/ReservationsDTO.js +0 -3
  145. package/dist/src/models/Api/ReservationsDTO.js.map +0 -1
  146. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.d.ts +0 -10
  147. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js +0 -13
  148. package/dist/src/providers/feature/ConfirmationImportantInformationFeature.js.map +0 -1
  149. package/dist/src/util/TotalCalculator.d.ts +0 -24
  150. package/dist/src/util/TotalCalculator.js +0 -157
  151. package/dist/src/util/TotalCalculator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/mockApi/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import MockAPI, { APIEndpoint } from 'mockApi/MockAPI';\n\nimport ReservationsDTO, { ReservationDTO } from '@/models/Api/ReservationsDTO';\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport PaymentCard from '@/models/PaymentCard';\nimport UserProfile from '@/models/UserProfile';\n\nexport default class ReservationAPI extends MockAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n public bookNow = async (\n basketRows: BasketRow[],\n profiles: UserProfile[],\n card: PaymentCard,\n addonRows: BasketAddonRow[],\n comments: string,\n specialReq: string | undefined = undefined\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n RoomType: row.getRoom().code,\n RatePlan: row.getRate()?.code,\n PromoCode: row.getPromoCode(),\n Adults: row.getAdults(),\n Children: row.getChildren(),\n CheckInDate: row.getStartDate().format('YYYY-MM-DD'),\n CheckOutDate: row.getEndDate().format('YYYY-MM-DD'),\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n Code: addon.code,\n StartDate: row.getSelectedDate(),\n };\n if (row.getAddon().ratePlanCode) {\n response.RatePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.StartTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.Quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.Adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.Children = row.getChildQuantity();\n }\n\n return response;\n });\n\n return this.post(APIEndpoint.Reservations, {\n Rooms: rooms,\n Profiles: profiles,\n PaymentCard: card,\n Services: addons,\n SpecialRequest: specialReq,\n Comments: comments,\n });\n };\n\n public commit = async (reservations: string[]): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n reservationIds: reservations,\n },\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[]): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n reservationIds: reservations,\n },\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, { email }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email?: string, hotelId?: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email }, id, hotelId as string);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"ReservationAPI.js","sourceRoot":"/","sources":["src/mockApi/ReservationAPI.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReservationDTO, ReservationsDTO } from '@roomstay/core';\nimport MockAPI, { APIEndpoint } from 'mockApi/MockAPI';\n\nimport BasketAddonRow from '@/models/BasketAddonRow';\nimport BasketRow from '@/models/BasketRow';\nimport PaymentCard from '@/models/PaymentCard';\nimport UserProfile from '@/models/UserProfile';\n\nexport default class ReservationAPI extends MockAPI {\n private storedReservations: { [ref: string]: any } = {};\n\n public bookNow = async (\n basketRows: BasketRow[],\n profiles: UserProfile[],\n card: PaymentCard,\n addonRows: BasketAddonRow[],\n comments: string,\n specialReq: string | undefined = undefined\n ): Promise<ReservationsDTO> => {\n const rooms: any[] = [];\n\n basketRows.forEach((row) => {\n const room = {\n RoomType: row.getRoom().code,\n RatePlan: row.getRate()?.code,\n PromoCode: row.getPromoCode(),\n Adults: row.getAdults(),\n Children: row.getChildren(),\n CheckInDate: row.getStartDate().format('YYYY-MM-DD'),\n CheckOutDate: row.getEndDate().format('YYYY-MM-DD'),\n };\n\n rooms.push(room);\n });\n\n const addons = addonRows.map((row) => {\n const addon = row.getAddon();\n const priceInfo = addon.availability[row.getSelectedDate()];\n\n const response: any = {\n Code: addon.code,\n StartDate: row.getSelectedDate(),\n };\n if (row.getAddon().ratePlanCode) {\n response.RatePlanCode = row.getAddon().ratePlanCode;\n }\n if (row.getSelectedTime()) {\n response.StartTime = row.getSelectedTime();\n }\n\n if (priceInfo.price) {\n response.Quantity = row.getQuantity();\n }\n if (priceInfo.adultPrice) {\n response.Adults = row.getAdultQuantity();\n }\n if (priceInfo.childPrice) {\n response.Children = row.getChildQuantity();\n }\n\n return response;\n });\n\n return this.post(APIEndpoint.Reservations, {\n Rooms: rooms,\n Profiles: profiles,\n PaymentCard: card,\n Services: addons,\n SpecialRequest: specialReq,\n Comments: comments,\n });\n };\n\n public commit = async (reservations: string[]): Promise<ReservationsDTO> => {\n return this.post(\n APIEndpoint.Reservations,\n {\n reservationIds: reservations,\n },\n {},\n 'commit'\n );\n };\n\n public rollback = async (reservations: string[]): Promise<boolean> => {\n await this.post(\n APIEndpoint.Reservations,\n {\n reservationIds: reservations,\n },\n {},\n 'rollback'\n );\n\n return true;\n };\n\n public cancelReservation = (id: string, email: string): Promise<boolean> =>\n new Promise(async (resolve, reject) => {\n try {\n const response = await this.delete(APIEndpoint.Reservations, {}, { email }, id);\n\n this.storedReservations[id]?.reservations?.forEach((reservation: ReservationDTO) => {\n if (reservation.reservationNumber === id) {\n reservation.status = 'Cancelled';\n }\n });\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n\n public findReservation = (id: string, email?: string, hotelId?: string): Promise<ReservationsDTO> =>\n new Promise(async (resolve, reject) => {\n /*\n resolve with locally cached data, so we don't have to re-query this again\n */\n if (this.storedReservations[id]) {\n return resolve(this.storedReservations[id]);\n }\n\n try {\n const response = await this.get(APIEndpoint.Reservations, { email }, id, hotelId as string);\n\n this.storedReservations[id] = response;\n\n resolve(response);\n } catch (ex) {\n reject(ex);\n }\n });\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  import { EAddonPricingType, IPriceInfo } from '@roomstay/core';
2
2
  import dayjs from 'dayjs';
3
- import { SimpleItemisedFee } from '../Fee';
4
3
  interface IAddon {
5
4
  code: string;
6
5
  /**
@@ -91,27 +90,4 @@ export type PriceInfo = IPriceInfo & {
91
90
  value: string;
92
91
  }[];
93
92
  };
94
- export type BasketAddonDTO = {
95
- availability: any;
96
- code: string;
97
- inclusive: false;
98
- pricingType: string;
99
- quantity: number;
100
- adultQuantity: number;
101
- childQuantity?: number;
102
- description: string;
103
- name: string;
104
- category: string;
105
- image: string;
106
- price: number;
107
- adultPrice?: number;
108
- childPrice?: number;
109
- fee: number;
110
- adultFee?: number;
111
- childFee?: number;
112
- fees?: SimpleItemisedFee[];
113
- adultFees?: SimpleItemisedFee[];
114
- childFees?: SimpleItemisedFee[];
115
- nights?: number;
116
- };
117
93
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Addon.js","sourceRoot":"/","sources":["src/models/Addon/Addon.ts"],"names":[],"mappings":";;;;;;AAAA,yCAA+D;AAC/D,kDAAqC;AAkDxB,QAAA,qBAAqB,GAAG;IACjC,wBAAiB,CAAC,SAAS;IAC3B,wBAAiB,CAAC,oBAAoB;IAEtC,wBAAiB,CAAC,2BAA2B;IAC7C,wBAAiB,CAAC,2BAA2B;IAC7C,wBAAiB,CAAC,8BAA8B;IAChD,wBAAiB,CAAC,6BAA6B;IAC/C,wBAAiB,CAAC,6BAA6B;IAE/C,wBAAiB,CAAC,yBAAyB;CAC9C,CAAC;AAEW,QAAA,gCAAgC,GAAG;IAC5C,wBAAiB,CAAC,oBAAoB;IACtC,wBAAiB,CAAC,8BAA8B;IAChD,wBAAiB,CAAC,6BAA6B;IAC/C,wBAAiB,CAAC,6BAA6B;CAClD,CAAC;AAEF,MAAa,KAAK;IAuDd,YAAmB,KAAc;QA3CjC;;;WAGG;QACI,cAAS,GAAG,KAAK,CAAC;QAwBlB,iBAAY,GAAkC,EAAE,CAAC;QAIjD,kBAAa,GAAsC,EAAE,CAAC;QAYzD,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACzB;IACL,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAS;QAC5B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QAEzB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,SAAS,CAAC,IAAY;;QACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;YAC9B,IAAY,CAAC,GAAG,CAAC,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE;gBAChE,SAAS;aACZ;YAED,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,KAAK,GAAG,KAAK,CAAC;aACjB;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1C,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC;YAC7B,MAAA,SAAS,CAAC,SAAS,0CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;;gBAClC,MAAM,UAAU,GAAG,2BAA2B,CAAC;gBAC/C,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAEhD,IAAI,SAAS,IAAI,OAAO,EAAE;oBACtB,MAAM,KAAK,GAAG,IAAA,eAAK,GAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC7H,MAAM,GAAG,GAAG,IAAA,eAAK,GAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAErH,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAI,IAAI,CAAC,SAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;oBAEtG,MAAM,SAAS,GAAG,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAEzG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE;wBACxE,SAAS,CAAC,aAAmD,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;qBACxI;iBACJ;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;YACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;SACjE;IACL,CAAC;CACJ;AAjHD,sBAiHC","sourcesContent":["import { EAddonPricingType, IPriceInfo } from '@roomstay/core';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport { SimpleItemisedFee } from '@/models/Fee';\n\ninterface IAddon {\n code: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n ratePlanCode: string;\n\n name: string;\n\n description: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n inclusive: boolean;\n\n image?: string;\n\n url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n pricingType: EAddonPricingType;\n\n hideDatePicker?: boolean;\n\n category: string;\n\n cancelPenalty?: string;\n\n guaranteeDescription?: string;\n\n availability: { [date: string]: PriceInfo };\n\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n}\n\nexport const ADDON_PER_NIGHT_TYPES = [\n EAddonPricingType.PER_NIGHT,\n EAddonPricingType.PER_PERSON_PER_NIGHT,\n\n EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT,\n EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT,\n EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n\n EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n];\n\nexport const ADDON_PER_PERSON_PER_NIGHT_TYPES = [\n EAddonPricingType.PER_PERSON_PER_NIGHT,\n EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport class Addon {\n public code!: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n public ratePlanCode!: string;\n\n public name!: string;\n\n public description!: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n public inclusive = false;\n\n public image?: string;\n\n public url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n public pricingType!: EAddonPricingType;\n\n public hideDatePicker!: false;\n\n public category!: string;\n\n public cancelPenalty?: string;\n\n public guaranteeDescription?: string;\n\n public availability: { [date: string]: PriceInfo } = {};\n\n public selected?: boolean;\n\n public selectorDates: { text: string; value: string }[] = [];\n\n public firstDate?: string;\n\n public checkInDate!: dayjs.Dayjs;\n public checkOutDate!: dayjs.Dayjs;\n\n public nights!: number;\n\n public order?: number;\n\n public constructor(props?: IAddon) {\n if (props) {\n this.applyData(props);\n }\n }\n\n public static fromData(data: any) {\n const addon = new this();\n\n addon.applyData(data);\n\n return addon;\n }\n\n public applyData(data: IAddon) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n\n let first = true;\n for (const date in this.availability) {\n if (!Object.prototype.hasOwnProperty.call(this.availability, date)) {\n continue;\n }\n\n const day = dayjs(date, 'YYYY-MM-DD');\n this.selectorDates.push({ text: day.format('D MMM'), value: date });\n if (first) {\n this.firstDate = date;\n first = false;\n }\n\n const priceInfo = this.availability[date];\n priceInfo.selectorTimes = [];\n priceInfo.timeSlots?.forEach((slot) => {\n const timeRegExp = /T(\\d{2}):(\\d{2}):(\\d{2})$/;\n const startTime = slot.startTime?.match(timeRegExp);\n const endTime = slot.endTime?.match(timeRegExp);\n\n if (startTime && endTime) {\n const start = dayjs().hour(parseInt(startTime[1], 10)).minute(parseInt(startTime[2], 10)).second(parseInt(startTime[3], 10));\n const end = dayjs().hour(parseInt(endTime[1], 10)).minute(parseInt(endTime[2], 10)).second(parseInt(endTime[3], 10));\n\n const [hours, minutes, seconds] = (slot.increment as string).split(':').map((it) => parseInt(it, 10));\n\n const increment = (time: Dayjs) => time.add(hours, 'hour').add(minutes, 'minute').add(seconds, 'second');\n\n for (let time = start; time.isBefore(end, 'second'); time = increment(time)) {\n (priceInfo.selectorTimes as { text: string; value: string }[]).push({ text: time.format('h:mma'), value: time.format('THH:mm:ss') });\n }\n }\n });\n }\n\n if (data.checkInDate && data.checkOutDate) {\n this.nights = data.checkOutDate.diff(data.checkInDate, 'day');\n }\n }\n}\n\nexport type PriceInfo = IPriceInfo & {\n fee?: number;\n adultFee?: number;\n childFee?: number;\n selectorTimes?: { text: string; value: string }[];\n};\n\nexport type BasketAddonDTO = {\n availability: any;\n code: string;\n inclusive: false;\n pricingType: string;\n quantity: number;\n adultQuantity: number;\n childQuantity?: number;\n description: string;\n name: string;\n category: string;\n image: string;\n\n price: number;\n adultPrice?: number;\n childPrice?: number;\n\n fee: number;\n adultFee?: number;\n childFee?: number;\n\n fees?: SimpleItemisedFee[];\n adultFees?: SimpleItemisedFee[];\n childFees?: SimpleItemisedFee[];\n\n nights?: number;\n};\n"]}
1
+ {"version":3,"file":"Addon.js","sourceRoot":"/","sources":["src/models/Addon/Addon.ts"],"names":[],"mappings":"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","sourcesContent":["import { EAddonPricingType, IPriceInfo } from '@roomstay/core';\nimport dayjs, { Dayjs } from 'dayjs';\n\ninterface IAddon {\n code: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n ratePlanCode: string;\n\n name: string;\n\n description: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n inclusive: boolean;\n\n image?: string;\n\n url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n pricingType: EAddonPricingType;\n\n hideDatePicker?: boolean;\n\n category: string;\n\n cancelPenalty?: string;\n\n guaranteeDescription?: string;\n\n availability: { [date: string]: PriceInfo };\n\n checkInDate: dayjs.Dayjs;\n checkOutDate: dayjs.Dayjs;\n}\n\nexport const ADDON_PER_NIGHT_TYPES = [\n EAddonPricingType.PER_NIGHT,\n EAddonPricingType.PER_PERSON_PER_NIGHT,\n\n EAddonPricingType.PER_QUANTITY_NAME_PER_NIGHT,\n EAddonPricingType.PER_ROOM_QUANTITY_PER_NIGHT,\n EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n\n EAddonPricingType.PER_ALL_PERSONS_PER_NIGHT,\n];\n\nexport const ADDON_PER_PERSON_PER_NIGHT_TYPES = [\n EAddonPricingType.PER_PERSON_PER_NIGHT,\n EAddonPricingType.PER_PERSON_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT,\n EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT,\n];\n\nexport class Addon {\n public code!: string;\n\n /**\n * The SynXis CR RatePlan Code associated with the Package if the Package is restricted to certain RatePlans\n */\n public ratePlanCode!: string;\n\n public name!: string;\n\n public description!: string;\n\n /**\n * Whether the price for this package is included in the room rate.\n * (Always `false` unless the price is zero)\n */\n public inclusive = false;\n\n public image?: string;\n\n public url?: string;\n\n /**\n * Defines how a service is priced.\n * Values:\n * Per Stay\n * Per Night\n * Per Person\n * Per Person Per Night\n */\n public pricingType!: EAddonPricingType;\n\n public hideDatePicker!: false;\n\n public category!: string;\n\n public cancelPenalty?: string;\n\n public guaranteeDescription?: string;\n\n public availability: { [date: string]: PriceInfo } = {};\n\n public selected?: boolean;\n\n public selectorDates: { text: string; value: string }[] = [];\n\n public firstDate?: string;\n\n public checkInDate!: dayjs.Dayjs;\n public checkOutDate!: dayjs.Dayjs;\n\n public nights!: number;\n\n public order?: number;\n\n public constructor(props?: IAddon) {\n if (props) {\n this.applyData(props);\n }\n }\n\n public static fromData(data: any) {\n const addon = new this();\n\n addon.applyData(data);\n\n return addon;\n }\n\n public applyData(data: IAddon) {\n Object.keys(data).map((key: any) => {\n (this as any)[key] = (data as any)[key];\n }, this);\n\n let first = true;\n for (const date in this.availability) {\n if (!Object.prototype.hasOwnProperty.call(this.availability, date)) {\n continue;\n }\n\n const day = dayjs(date, 'YYYY-MM-DD');\n this.selectorDates.push({ text: day.format('D MMM'), value: date });\n if (first) {\n this.firstDate = date;\n first = false;\n }\n\n const priceInfo = this.availability[date];\n priceInfo.selectorTimes = [];\n priceInfo.timeSlots?.forEach((slot) => {\n const timeRegExp = /T(\\d{2}):(\\d{2}):(\\d{2})$/;\n const startTime = slot.startTime?.match(timeRegExp);\n const endTime = slot.endTime?.match(timeRegExp);\n\n if (startTime && endTime) {\n const start = dayjs().hour(parseInt(startTime[1], 10)).minute(parseInt(startTime[2], 10)).second(parseInt(startTime[3], 10));\n const end = dayjs().hour(parseInt(endTime[1], 10)).minute(parseInt(endTime[2], 10)).second(parseInt(endTime[3], 10));\n\n const [hours, minutes, seconds] = (slot.increment as string).split(':').map((it) => parseInt(it, 10));\n\n const increment = (time: Dayjs) => time.add(hours, 'hour').add(minutes, 'minute').add(seconds, 'second');\n\n for (let time = start; time.isBefore(end, 'second'); time = increment(time)) {\n (priceInfo.selectorTimes as { text: string; value: string }[]).push({ text: time.format('h:mma'), value: time.format('THH:mm:ss') });\n }\n }\n });\n }\n\n if (data.checkInDate && data.checkOutDate) {\n this.nights = data.checkOutDate.diff(data.checkInDate, 'day');\n }\n }\n}\n\nexport type PriceInfo = IPriceInfo & {\n fee?: number;\n adultFee?: number;\n childFee?: number;\n selectorTimes?: { text: string; value: string }[];\n};\n"]}
@@ -113,7 +113,6 @@ export type HotelDTO = {
113
113
  maxInfants?: number;
114
114
  stateFieldConfiguration?: EHotelStateFieldConfiguration;
115
115
  itineraryNote: string;
116
- languageContext?: string;
117
116
  disableSavedPayments: boolean;
118
117
  } & Pick<AdminHotelConfig, 'childConfiguration' | 'perks' | 'perkTitle' | 'countryPrefix' | 'quoteImageDesktop' | 'quoteImageMobile' | 'memberOnlyImage' | 'captureChildAge' | 'company' | 'fees' | 'addDepositFeeToBookingTotal' | 'minAdultAge' | 'maxAdultAge' | 'countInfantsInOccupancy' | 'preferProviderBookingId' | 'showUnavailableRooms' | 'isRACMemberNoRequired'> & Pick<ClientHotelConfig, 'memberOnlyRenderRateLast'>;
119
118
  export declare enum VGSCardName {
@@ -1 +1 @@
1
- {"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AAMA,uDAAiH;AAoJjH,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,wCAAyB,CAAA;IACzB,0BAAW,CAAA;IACX,wCAAyB,CAAA;IACzB,uCAAwB,CAAA;IACxB,oCAAqB,CAAA;AACzB,CAAC,EAPW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAOtB;AAEY,QAAA,0BAA0B,GAAsD;IACzF,CAAC,wBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI;IACzC,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG;IACvC,CAAC,wBAAgB,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,eAAe;IAC/D,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ;CACpD,CAAC","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport type { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IAuxiliaryFilter } from '@roomstay/core';\nimport { DeepPartial } from 'react-hook-form';\n\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { AdminHotelConfig, ClientHotelConfig, ConfigHotel, EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\nexport type HotelServiceDTO = {\n detail: string;\n included: boolean;\n name: string;\n onsite: boolean;\n};\n\nexport type HotelRoomsDTO = {\n [roomTypeCode: string]: HotelRoomDTO;\n};\n\nexport type HotelRoomGroupsDTO = {\n groupName: string;\n id: string;\n checkInTime?: string | null;\n checkOutTime?: string | null;\n filters: {\n [id: string]: {\n name: string;\n type: 'select';\n includeAllAbove: boolean;\n requireInput: boolean;\n options: IAuxiliaryFilter['options'];\n };\n };\n}[];\n\nexport type HotelRoomAmenitiesDTO = {\n type: string;\n description: string;\n};\n\nexport type HotelRoomDTO = {\n code: string;\n name: string;\n shortDescription: string;\n longDescription: string;\n images: string[];\n quantity: number;\n maxOccupancy: number;\n bedQuantity: number;\n showBedType?: boolean;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n bedTypeOverride?: string;\n roomGroupId?: string;\n roomSize?: number;\n prePerkDisclaimer?: string;\n perks?: ConfigHotel['perks'];\n petFriendly?: boolean;\n};\n\nexport type HotelDTO = {\n id: number;\n name: string;\n chainId: number;\n chainName: string;\n\n address: HotelAddress;\n phone: string;\n\n latitude: string;\n longitude: string;\n\n utcOffset: string;\n timeZone: string;\n\n languageCode: string;\n currencyCode: string;\n\n checkInTime: string;\n checkOutTime: string;\n\n paymentCardTypes: EPaymentCardType[];\n\n description: string;\n locationDescription: string;\n policies: string;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n\n rooms: { [roomTypeCode: string]: HotelRoomDTO };\n dataSource: HotelDataSource;\n\n // Following fields are only present if dataSource = 'roomstay'\n logo?: string;\n colors: DeepPartial<ColorProfile>;\n distanceUnitType?: DistanceUnitType;\n weekdayStartsOn?: WeekdayStartsOn;\n\n crossSellHotelIds?: string[];\n paymentMethods: EBookingPaymentMethod[];\n cardProcessor: EHotelCardProcessor;\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n\n email?: string;\n hotelUrl?: string;\n heroImage?: string;\n images?: string[];\n integrations?: EIntegration[];\n roomGroups: HotelRoomGroupsDTO;\n requireDeposit?: boolean;\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n preventCancellation?: boolean;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n itineraryNote: string;\n languageContext?: string;\n disableSavedPayments: boolean;\n} & Pick<\n AdminHotelConfig,\n | 'childConfiguration'\n | 'perks'\n | 'perkTitle'\n | 'countryPrefix'\n | 'quoteImageDesktop'\n | 'quoteImageMobile'\n | 'memberOnlyImage'\n | 'captureChildAge'\n | 'company'\n | 'fees'\n | 'addDepositFeeToBookingTotal'\n | 'minAdultAge'\n | 'maxAdultAge'\n | 'countInfantsInOccupancy'\n | 'preferProviderBookingId'\n | 'showUnavailableRooms'\n | 'isRACMemberNoRequired'\n> &\n Pick<ClientHotelConfig, 'memberOnlyRenderRateLast'>;\n\nexport enum VGSCardName {\n Visa = 'visa',\n Mastercard = 'mastercard',\n JCB = 'jcb',\n DinersClub = 'dinersclub',\n AmericanExpress = 'amex',\n UnionPay = 'unionpay',\n}\n\nexport const SynxisToVGSCardNameMapping: { [synxisName in EPaymentCardType]: VGSCardName } = {\n [EPaymentCardType.Visa]: VGSCardName.Visa,\n [EPaymentCardType.Mastercard]: VGSCardName.Mastercard,\n [EPaymentCardType.JCB]: VGSCardName.JCB,\n [EPaymentCardType.AmericanExpress]: VGSCardName.AmericanExpress,\n [EPaymentCardType.DinersClub]: VGSCardName.DinersClub,\n [EPaymentCardType.UnionPay]: VGSCardName.UnionPay,\n};\n"]}
1
+ {"version":3,"file":"HotelDTO.js","sourceRoot":"/","sources":["src/models/Api/HotelDTO.ts"],"names":[],"mappings":";;;AAMA,uDAAiH;AAmJjH,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,4BAAa,CAAA;IACb,wCAAyB,CAAA;IACzB,0BAAW,CAAA;IACX,wCAAyB,CAAA;IACzB,uCAAwB,CAAA;IACxB,oCAAqB,CAAA;AACzB,CAAC,EAPW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAOtB;AAEY,QAAA,0BAA0B,GAAsD;IACzF,CAAC,wBAAgB,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,IAAI;IACzC,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG;IACvC,CAAC,wBAAgB,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,eAAe;IAC/D,CAAC,wBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU;IACrD,CAAC,wBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ;CACpD,CAAC","sourcesContent":["import { EnvironmentName } from '@planpay/web/src/lib/shared-lib-duplicates';\nimport type { EBookingPaymentMethod, EHotelCardProcessor, EHotelStateFieldConfiguration, EIntegration, IAuxiliaryFilter } from '@roomstay/core';\nimport { DeepPartial } from 'react-hook-form';\n\nimport ColorProfile from '@/models/Client/Hotel/ColorProfile';\nimport { DistanceUnitType } from '@/models/Client/Hotel/DistanceUnitType.types';\nimport { AdminHotelConfig, ClientHotelConfig, ConfigHotel, EPaymentCardType } from '@/models/Client/Hotel/Hotel';\nimport HotelAddress from '@/models/Client/Hotel/HotelAddress';\nimport { HotelDataSource } from '@/models/Client/Hotel/HotelDataSource.types';\nimport { WeekdayStartsOn } from '@/models/Client/Hotel/WeekdayStartsOn.types';\n\nexport type HotelServiceDTO = {\n detail: string;\n included: boolean;\n name: string;\n onsite: boolean;\n};\n\nexport type HotelRoomsDTO = {\n [roomTypeCode: string]: HotelRoomDTO;\n};\n\nexport type HotelRoomGroupsDTO = {\n groupName: string;\n id: string;\n checkInTime?: string | null;\n checkOutTime?: string | null;\n filters: {\n [id: string]: {\n name: string;\n type: 'select';\n includeAllAbove: boolean;\n requireInput: boolean;\n options: IAuxiliaryFilter['options'];\n };\n };\n}[];\n\nexport type HotelRoomAmenitiesDTO = {\n type: string;\n description: string;\n};\n\nexport type HotelRoomDTO = {\n code: string;\n name: string;\n shortDescription: string;\n longDescription: string;\n images: string[];\n quantity: number;\n maxOccupancy: number;\n bedQuantity: number;\n showBedType?: boolean;\n standardNumBeds: number;\n maxRollaways: number;\n bedType: string;\n amenities: HotelRoomAmenitiesDTO[];\n features: HotelRoomAmenitiesDTO[];\n bedTypeOverride?: string;\n roomGroupId?: string;\n roomSize?: number;\n prePerkDisclaimer?: string;\n perks?: ConfigHotel['perks'];\n petFriendly?: boolean;\n};\n\nexport type HotelDTO = {\n id: number;\n name: string;\n chainId: number;\n chainName: string;\n\n address: HotelAddress;\n phone: string;\n\n latitude: string;\n longitude: string;\n\n utcOffset: string;\n timeZone: string;\n\n languageCode: string;\n currencyCode: string;\n\n checkInTime: string;\n checkOutTime: string;\n\n paymentCardTypes: EPaymentCardType[];\n\n description: string;\n locationDescription: string;\n policies: string;\n\n hotelServices: HotelServiceDTO[];\n businessServices: HotelServiceDTO[];\n\n rooms: { [roomTypeCode: string]: HotelRoomDTO };\n dataSource: HotelDataSource;\n\n // Following fields are only present if dataSource = 'roomstay'\n logo?: string;\n colors: DeepPartial<ColorProfile>;\n distanceUnitType?: DistanceUnitType;\n weekdayStartsOn?: WeekdayStartsOn;\n\n crossSellHotelIds?: string[];\n paymentMethods: EBookingPaymentMethod[];\n cardProcessor: EHotelCardProcessor;\n planpay?: {\n username: string;\n minDaysShowPlanpay: number;\n env: EnvironmentName;\n };\n\n email?: string;\n hotelUrl?: string;\n heroImage?: string;\n images?: string[];\n integrations?: EIntegration[];\n roomGroups: HotelRoomGroupsDTO;\n requireDeposit?: boolean;\n /** @deprecated Use the new Fees model instead */\n enableCreditCardSurcharge?: boolean;\n availableCountries?: { name: string; value: string }[];\n preventCancellation?: boolean;\n maxAdults?: number;\n maxChildren?: number;\n maxInfants?: number;\n stateFieldConfiguration?: EHotelStateFieldConfiguration;\n itineraryNote: string;\n disableSavedPayments: boolean;\n} & Pick<\n AdminHotelConfig,\n | 'childConfiguration'\n | 'perks'\n | 'perkTitle'\n | 'countryPrefix'\n | 'quoteImageDesktop'\n | 'quoteImageMobile'\n | 'memberOnlyImage'\n | 'captureChildAge'\n | 'company'\n | 'fees'\n | 'addDepositFeeToBookingTotal'\n | 'minAdultAge'\n | 'maxAdultAge'\n | 'countInfantsInOccupancy'\n | 'preferProviderBookingId'\n | 'showUnavailableRooms'\n | 'isRACMemberNoRequired'\n> &\n Pick<ClientHotelConfig, 'memberOnlyRenderRateLast'>;\n\nexport enum VGSCardName {\n Visa = 'visa',\n Mastercard = 'mastercard',\n JCB = 'jcb',\n DinersClub = 'dinersclub',\n AmericanExpress = 'amex',\n UnionPay = 'unionpay',\n}\n\nexport const SynxisToVGSCardNameMapping: { [synxisName in EPaymentCardType]: VGSCardName } = {\n [EPaymentCardType.Visa]: VGSCardName.Visa,\n [EPaymentCardType.Mastercard]: VGSCardName.Mastercard,\n [EPaymentCardType.JCB]: VGSCardName.JCB,\n [EPaymentCardType.AmericanExpress]: VGSCardName.AmericanExpress,\n [EPaymentCardType.DinersClub]: VGSCardName.DinersClub,\n [EPaymentCardType.UnionPay]: VGSCardName.UnionPay,\n};\n"]}
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@roomstay/core");
4
- const Addon_1 = require("./Addon/Addon");
5
4
  const Fee_1 = require("./Fee");
6
- const TotalCalculator_1 = require("../util/TotalCalculator");
7
5
  class BasketAddonRow {
8
6
  constructor(addon) {
9
7
  if (addon) {
@@ -63,10 +61,10 @@ class BasketAddonRow {
63
61
  };
64
62
  }
65
63
  getTotalFees() {
66
- return (0, TotalCalculator_1.calculateBasketAddonTotal)(this.getCalculationParams()).totalFees;
64
+ return core_1.TotalCalculator.calculateBasketAddonTotal(this.getCalculationParams()).totalFees;
67
65
  }
68
66
  getTotalPrice() {
69
- return (0, TotalCalculator_1.calculateBasketAddonTotal)(this.getCalculationParams()).total;
67
+ return core_1.TotalCalculator.calculateBasketAddonTotal(this.getCalculationParams()).total;
70
68
  }
71
69
  getItemisedFees(hotelFees) {
72
70
  var _a, _b, _c;
@@ -130,7 +128,7 @@ class BasketAddonRow {
130
128
  */
131
129
  getNightModifier() {
132
130
  const modifier = 1;
133
- if (Addon_1.ADDON_PER_NIGHT_TYPES.includes(this.addon.pricingType)) {
131
+ if (core_1.ADDON_PER_NIGHT_TYPES.includes(this.addon.pricingType)) {
134
132
  return this.addon.checkOutDate.diff(this.addon.checkInDate, 'day');
135
133
  }
136
134
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"BasketAddonRow.js","sourceRoot":"/","sources":["src/models/BasketAddonRow.ts"],"names":[],"mappings":"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","sourcesContent":["import { EAddonPricingType } from '@roomstay/core';\n\nimport { Addon, ADDON_PER_NIGHT_TYPES, BasketAddonDTO, PriceInfo } from '@/models/Addon/Addon';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, mapSimpleFeesToItemisedFees } from '@/models/Fee';\nimport { calculateBasketAddonTotal } from '@/util/TotalCalculator';\n\nexport default class BasketAddonRow {\n private readonly uniqId: string;\n\n private addon!: Addon;\n\n private quantity: number;\n private adultQuantity: number;\n private childQuantity: number;\n\n private selectedDate!: string;\n private selectedTime!: string;\n\n private numberOfAvailableNights: number;\n\n public constructor(addon?: Addon) {\n if (addon) {\n this.setAddon(addon);\n }\n\n this.quantity = 1;\n this.adultQuantity = 1;\n this.childQuantity = 0;\n\n this.uniqId = btoa(((Date.now() % 1000) / 1000) * Math.random() + '');\n\n this.numberOfAvailableNights = Object.values(addon?.availability as { [date: string]: PriceInfo }).length;\n }\n\n public getAddon() {\n return this.addon;\n }\n\n public getSelectedDate() {\n return this.selectedDate;\n }\n\n public getSelectedTime() {\n return this.selectedTime;\n }\n\n public getQuantity() {\n return this.quantity;\n }\n\n public getAdultQuantity(): number {\n return this.adultQuantity;\n }\n\n public getNumberOfAvailableNights() {\n return this.numberOfAvailableNights;\n }\n\n private getCalculationParams(): BasketAddonDTO {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n return {\n availability: this.getAddon().availability,\n code: addon.code,\n inclusive: false,\n quantity: this.getQuantity(),\n adultQuantity: this.getAdultQuantity(),\n childQuantity: this.getChildQuantity(),\n description: addon.description,\n name: addon.name,\n category: addon.category,\n image: addon.image as any,\n\n price: priceInfo.price ?? 0,\n adultPrice: priceInfo.adultPrice,\n childPrice: priceInfo.childPrice,\n\n fee: priceInfo.fee ?? 0,\n adultFee: priceInfo.adultFee,\n childFee: priceInfo.childFee,\n\n fees: priceInfo.fees,\n adultFees: priceInfo.adultFees,\n childFees: priceInfo.childFees,\n\n pricingType: addon.pricingType,\n nights: addon.nights,\n };\n }\n\n public getTotalFees(): number {\n return calculateBasketAddonTotal(this.getCalculationParams()).totalFees;\n }\n\n public getTotalPrice(): number {\n return calculateBasketAddonTotal(this.getCalculationParams()).total;\n }\n\n public getItemisedFees(hotelFees: HotelFee[]): ItemisedFee[] {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n const feeMap = new Map<HotelFee, number>();\n\n if (priceInfo.fees?.length && this.getQuantity() > 0) {\n const fees = mapSimpleFeesToItemisedFees(priceInfo.fees, hotelFees);\n accumulateFees(feeMap, fees, this.getQuantity(), this.getNightModifier());\n }\n\n if (priceInfo.adultFees?.length && this.getAdultQuantity() > 0) {\n const fees = mapSimpleFeesToItemisedFees(priceInfo.adultFees, hotelFees);\n accumulateFees(feeMap, fees, this.getAdultQuantity(), this.getNightModifier());\n }\n\n if (priceInfo.childFees?.length && this.getChildQuantity() > 0) {\n const fees = mapSimpleFeesToItemisedFees(priceInfo.childFees, hotelFees);\n accumulateFees(feeMap, fees, this.getChildQuantity(), this.getNightModifier());\n }\n\n return feeMapToArray(feeMap);\n }\n\n /**\n * Returns the subtotal of an addon (without taking into account the nights modifier)\n */\n public getAddonSubtotal(): number {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let price = 0;\n if (priceInfo.price && this.getQuantity() > 0) {\n price += this.getQuantity() * priceInfo.price;\n }\n\n if (priceInfo.adultPrice && this.getAdultQuantity() > 0) {\n price += this.getAdultQuantity() * priceInfo.adultPrice;\n }\n\n if (priceInfo.childPrice && this.getChildQuantity() > 0) {\n price += this.getChildQuantity() * priceInfo.childPrice;\n }\n\n return price;\n }\n\n public getTotalQuantity(): number {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let quantity = 0;\n if (priceInfo.price) {\n quantity += this.getQuantity();\n }\n\n if (priceInfo.adultPrice || addon.pricingType === EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n quantity += this.getAdultQuantity();\n }\n\n if (priceInfo.childPrice || addon.pricingType === EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n quantity += this.getChildQuantity();\n }\n\n return quantity;\n }\n\n /**\n * This function returns a value that should multiply the total price of the addon for one (assumed) night\n * Depending on the pricing type\n * @returns number\n */\n public getNightModifier(): number {\n const modifier = 1;\n\n if (ADDON_PER_NIGHT_TYPES.includes(this.addon.pricingType)) {\n return this.addon.checkOutDate.diff(this.addon.checkInDate, 'day');\n } else {\n return modifier;\n }\n }\n\n public setAdultQuantity(value: number) {\n this.adultQuantity = value;\n }\n\n public getChildQuantity(): number {\n return this.childQuantity;\n }\n\n public setChildQuantity(value: number) {\n this.childQuantity = value;\n }\n\n public getID() {\n return this.uniqId;\n }\n\n public isValid() {\n return this.selectedDate && this.addon && this.quantity > 0;\n }\n\n public setSelectedDate(date: string) {\n this.selectedDate = date;\n }\n\n public setSelectedTime(time?: string) {\n this.selectedTime = time as string;\n }\n\n public setQuantity(quantity: number) {\n this.quantity = quantity;\n }\n\n public setAddon(addon: Addon) {\n this.addon = addon;\n }\n}\n"]}
1
+ {"version":3,"file":"BasketAddonRow.js","sourceRoot":"/","sources":["src/models/BasketAddonRow.ts"],"names":[],"mappings":"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","sourcesContent":["import { ADDON_PER_NIGHT_TYPES, BasketAddonDTO, EAddonPricingType, TotalCalculator } from '@roomstay/core';\n\nimport { Addon, PriceInfo } from '@/models/Addon/Addon';\nimport { accumulateFees, feeMapToArray, HotelFee, ItemisedFee, mapSimpleFeesToItemisedFees } from '@/models/Fee';\n\nexport default class BasketAddonRow {\n private readonly uniqId: string;\n\n private addon!: Addon;\n\n private quantity: number;\n private adultQuantity: number;\n private childQuantity: number;\n\n private selectedDate!: string;\n private selectedTime!: string;\n\n private numberOfAvailableNights: number;\n\n public constructor(addon?: Addon) {\n if (addon) {\n this.setAddon(addon);\n }\n\n this.quantity = 1;\n this.adultQuantity = 1;\n this.childQuantity = 0;\n\n this.uniqId = btoa(((Date.now() % 1000) / 1000) * Math.random() + '');\n\n this.numberOfAvailableNights = Object.values(addon?.availability as { [date: string]: PriceInfo }).length;\n }\n\n public getAddon() {\n return this.addon;\n }\n\n public getSelectedDate() {\n return this.selectedDate;\n }\n\n public getSelectedTime() {\n return this.selectedTime;\n }\n\n public getQuantity() {\n return this.quantity;\n }\n\n public getAdultQuantity(): number {\n return this.adultQuantity;\n }\n\n public getNumberOfAvailableNights() {\n return this.numberOfAvailableNights;\n }\n\n private getCalculationParams(): BasketAddonDTO {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n return {\n availability: this.getAddon().availability,\n code: addon.code,\n inclusive: false,\n quantity: this.getQuantity(),\n adultQuantity: this.getAdultQuantity(),\n childQuantity: this.getChildQuantity(),\n description: addon.description,\n name: addon.name,\n category: addon.category,\n image: addon.image as any,\n\n price: priceInfo.price ?? 0,\n adultPrice: priceInfo.adultPrice,\n childPrice: priceInfo.childPrice,\n\n fee: priceInfo.fee ?? 0,\n adultFee: priceInfo.adultFee,\n childFee: priceInfo.childFee,\n\n fees: priceInfo.fees,\n adultFees: priceInfo.adultFees,\n childFees: priceInfo.childFees,\n\n pricingType: addon.pricingType,\n nights: addon.nights,\n };\n }\n\n public getTotalFees(): number {\n return TotalCalculator.calculateBasketAddonTotal(this.getCalculationParams()).totalFees;\n }\n\n public getTotalPrice(): number {\n return TotalCalculator.calculateBasketAddonTotal(this.getCalculationParams()).total;\n }\n\n public getItemisedFees(hotelFees: HotelFee[]): ItemisedFee[] {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n const feeMap = new Map<HotelFee, number>();\n\n if (priceInfo.fees?.length && this.getQuantity() > 0) {\n const fees = mapSimpleFeesToItemisedFees(priceInfo.fees, hotelFees);\n accumulateFees(feeMap, fees, this.getQuantity(), this.getNightModifier());\n }\n\n if (priceInfo.adultFees?.length && this.getAdultQuantity() > 0) {\n const fees = mapSimpleFeesToItemisedFees(priceInfo.adultFees, hotelFees);\n accumulateFees(feeMap, fees, this.getAdultQuantity(), this.getNightModifier());\n }\n\n if (priceInfo.childFees?.length && this.getChildQuantity() > 0) {\n const fees = mapSimpleFeesToItemisedFees(priceInfo.childFees, hotelFees);\n accumulateFees(feeMap, fees, this.getChildQuantity(), this.getNightModifier());\n }\n\n return feeMapToArray(feeMap);\n }\n\n /**\n * Returns the subtotal of an addon (without taking into account the nights modifier)\n */\n public getAddonSubtotal(): number {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let price = 0;\n if (priceInfo.price && this.getQuantity() > 0) {\n price += this.getQuantity() * priceInfo.price;\n }\n\n if (priceInfo.adultPrice && this.getAdultQuantity() > 0) {\n price += this.getAdultQuantity() * priceInfo.adultPrice;\n }\n\n if (priceInfo.childPrice && this.getChildQuantity() > 0) {\n price += this.getChildQuantity() * priceInfo.childPrice;\n }\n\n return price;\n }\n\n public getTotalQuantity(): number {\n const addon = this.getAddon();\n const date = this.getSelectedDate();\n const priceInfo = addon.availability[date];\n\n let quantity = 0;\n if (priceInfo.price) {\n quantity += this.getQuantity();\n }\n\n if (priceInfo.adultPrice || addon.pricingType === EAddonPricingType.PER_ADULT_OCCUPANCY_PER_NIGHT) {\n quantity += this.getAdultQuantity();\n }\n\n if (priceInfo.childPrice || addon.pricingType === EAddonPricingType.PER_CHILD_OCCUPANCY_PER_NIGHT) {\n quantity += this.getChildQuantity();\n }\n\n return quantity;\n }\n\n /**\n * This function returns a value that should multiply the total price of the addon for one (assumed) night\n * Depending on the pricing type\n * @returns number\n */\n public getNightModifier(): number {\n const modifier = 1;\n\n if (ADDON_PER_NIGHT_TYPES.includes(this.addon.pricingType)) {\n return this.addon.checkOutDate.diff(this.addon.checkInDate, 'day');\n } else {\n return modifier;\n }\n }\n\n public setAdultQuantity(value: number) {\n this.adultQuantity = value;\n }\n\n public getChildQuantity(): number {\n return this.childQuantity;\n }\n\n public setChildQuantity(value: number) {\n this.childQuantity = value;\n }\n\n public getID() {\n return this.uniqId;\n }\n\n public isValid() {\n return this.selectedDate && this.addon && this.quantity > 0;\n }\n\n public setSelectedDate(date: string) {\n this.selectedDate = date;\n }\n\n public setSelectedTime(time?: string) {\n this.selectedTime = time as string;\n }\n\n public setQuantity(quantity: number) {\n this.quantity = quantity;\n }\n\n public setAddon(addon: Addon) {\n this.addon = addon;\n }\n}\n"]}
@@ -1,11 +1,15 @@
1
- import { IBookingQuoteResponse } from '@roomstay/core';
1
+ import { IBookingQuoteResponse, ReservationDTO } from '@roomstay/core';
2
2
  import dayjs from 'dayjs';
3
- import { ReservationDTO } from './Api/ReservationsDTO';
4
3
  import BasketRowDifferences from './BasketRowDifferences';
5
4
  import type { Room } from './Room/Room';
6
5
  import type { RoomRate } from './Room/RoomRate';
7
6
  import UserProfile from './UserProfile';
8
7
  import { Color } from '../util/Color';
8
+ export declare enum EPromoCodeStatus {
9
+ Valid = "valid",
10
+ Invalid = "invalid",
11
+ New = "new"
12
+ }
9
13
  export default class BasketRow {
10
14
  private uniqId;
11
15
  private room;
@@ -17,8 +21,19 @@ export default class BasketRow {
17
21
  private preGuestsState;
18
22
  private promoCode;
19
23
  private promoCodeStatus;
24
+ /**
25
+ * Warning message associated with an invalid promo code.
26
+ * Used for displaying tooltip or error messages to the user.
27
+ */
28
+ private promoCodeWarningMessage;
20
29
  private manualInputPromoCode;
30
+ /**
31
+ * Enable room code filter when the the URL's room parameter is present
32
+ */
21
33
  private enableRoomCodeFilter;
34
+ /**
35
+ * Indicates availability for a specific room extracted from the URL's room parameter
36
+ */
22
37
  private roomCode;
23
38
  private startDate;
24
39
  private endDate;
@@ -64,12 +79,53 @@ export default class BasketRow {
64
79
  endDate: dayjs.Dayjs;
65
80
  };
66
81
  getID(): string;
67
- getPromoCodeStatus(): "valid" | "invalid" | "new";
82
+ getPromoCodeStatus(): EPromoCodeStatus;
68
83
  isValid(): boolean;
69
84
  setPromoCode(code: string): void;
70
85
  setPromoOnly(value: boolean): void;
71
86
  setStale(status: boolean): void;
72
- setPromoCodeStatus(status: 'valid' | 'invalid' | 'new'): void;
87
+ /**
88
+ * Sets the promo code status and optionally a warning message.
89
+ *
90
+ * @param status - The new status: EPromoCodeStatus.
91
+ * @param warningMessage - Optional warning message shown when status is 'invalid'.
92
+ */
93
+ setPromoCodeStatus(status: EPromoCodeStatus, warningMessage?: string): void;
94
+ /**
95
+ * Stores the warning message for an invalid promo code.
96
+ *
97
+ * @param message - The warning message to display.
98
+ */
99
+ private setPromoCodeWarningMessage;
100
+ /**
101
+ * Gets the stored warning message for the promo code.
102
+ *
103
+ * @returns The warning message as a string.
104
+ */
105
+ getPromoCodeWarningMessage(): string;
106
+ /**
107
+ * Returns the tooltip text based on the promo code status.
108
+ *
109
+ * - If status is EPromoCodeStatus.New: returns 'Checking' or 'No value'.
110
+ * - If status is EPromoCodeStatus.Valid: returns 'Valid'.
111
+ * - If status is EPromoCodeStatus.Invalid: returns the warning message.
112
+ *
113
+ * @param t - Translation function.
114
+ * @param Translation - Translation object with tooltip message strings.
115
+ * @returns Tooltip string to display.
116
+ */
117
+ getPromoCodeTooltip: (t: (arg0: string) => string, Translation: {
118
+ Step: {
119
+ Date: {
120
+ PromoCodeTooltip: {
121
+ Checking: string;
122
+ NoValue: string;
123
+ Valid: string;
124
+ Invalid: string;
125
+ };
126
+ };
127
+ };
128
+ }) => string;
73
129
  setStartDate(date: dayjs.Dayjs): void;
74
130
  setEndDate(date: dayjs.Dayjs): void;
75
131
  setAdults(adults: number): void;
@@ -80,8 +136,7 @@ export default class BasketRow {
80
136
  setRate(rate: RoomRate | null, upsellEnabled?: boolean): void;
81
137
  private setPreUpsellRoomRate;
82
138
  getPreUpsellRoomRate(): RoomRate | undefined;
83
- getTotalPrice(beforeTax?: boolean): number | undefined;
84
- getAveragePrice: (getCost?: boolean) => number;
139
+ getTotalPrice(getCost?: boolean): number | undefined;
85
140
  checkDiffFromReservation(res: ReservationDTO): false | BasketRowDifferences;
86
141
  setAuxiliaryFilter(value: {
87
142
  [id: string]: any;
@@ -3,11 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EPromoCodeStatus = void 0;
6
7
  const dayjs_1 = __importDefault(require("dayjs"));
7
8
  const CalendarHelper_1 = require("../util/CalendarHelper");
8
9
  const Color_1 = require("../util/Color");
9
10
  const DefaultValueManager_1 = require("../util/DefaultValueManager");
10
11
  const AppQueryParameters_1 = require("./AppQueryParameters");
12
+ var EPromoCodeStatus;
13
+ (function (EPromoCodeStatus) {
14
+ EPromoCodeStatus["Valid"] = "valid";
15
+ EPromoCodeStatus["Invalid"] = "invalid";
16
+ EPromoCodeStatus["New"] = "new";
17
+ })(EPromoCodeStatus = exports.EPromoCodeStatus || (exports.EPromoCodeStatus = {}));
11
18
  class BasketRow {
12
19
  /**
13
20
  *
@@ -25,24 +32,44 @@ class BasketRow {
25
32
  startDate: (0, dayjs_1.default)(),
26
33
  endDate: (0, dayjs_1.default)(),
27
34
  };
28
- this.enableRoomCodeFilter = false; // Enable room code filter when the the URL's room parameter is present
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;
35
+ /**
36
+ * Warning message associated with an invalid promo code.
37
+ * Used for displaying tooltip or error messages to the user.
38
+ */
39
+ this.promoCodeWarningMessage = '';
40
+ /**
41
+ * Enable room code filter when the the URL's room parameter is present
42
+ */
43
+ this.enableRoomCodeFilter = false;
44
+ /**
45
+ * Indicates availability for a specific room extracted from the URL's room parameter
46
+ */
47
+ this.roomCode = '';
48
+ /**
49
+ * Returns the tooltip text based on the promo code status.
50
+ *
51
+ * - If status is EPromoCodeStatus.New: returns 'Checking' or 'No value'.
52
+ * - If status is EPromoCodeStatus.Valid: returns 'Valid'.
53
+ * - If status is EPromoCodeStatus.Invalid: returns the warning message.
54
+ *
55
+ * @param t - Translation function.
56
+ * @param Translation - Translation object with tooltip message strings.
57
+ * @returns Tooltip string to display.
58
+ */
59
+ this.getPromoCodeTooltip = (t, Translation) => {
60
+ let promoCodeTooltip = '';
61
+ if ((this === null || this === void 0 ? void 0 : this.getPromoCodeStatus()) === EPromoCodeStatus.New) {
62
+ promoCodeTooltip = this.getPromoCode() ? t(Translation.Step.Date.PromoCodeTooltip.Checking) : t(Translation.Step.Date.PromoCodeTooltip.NoValue);
38
63
  }
39
64
  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);
65
+ if ((this === null || this === void 0 ? void 0 : this.getPromoCodeStatus()) === EPromoCodeStatus.Valid) {
66
+ promoCodeTooltip = t(Translation.Step.Date.PromoCodeTooltip.Valid);
67
+ }
68
+ else {
69
+ promoCodeTooltip = this.getPromoCodeWarningMessage() || t(Translation.Step.Date.PromoCodeTooltip.Invalid);
70
+ }
45
71
  }
72
+ return promoCodeTooltip;
46
73
  };
47
74
  /*
48
75
  * Rate is optional since we can create row entries on first step, where there is no ability to select rate.
@@ -54,7 +81,7 @@ class BasketRow {
54
81
  this.children = (_b = DefaultValueManager_1.DEFAULT_VALUES.CHILDREN) !== null && _b !== void 0 ? _b : 0;
55
82
  this.infants = (_c = DefaultValueManager_1.DEFAULT_VALUES.INFANTS) !== null && _c !== void 0 ? _c : 0;
56
83
  this.promoCode = '';
57
- this.promoCodeStatus = 'new';
84
+ this.promoCodeStatus = EPromoCodeStatus.New;
58
85
  this.promoOnly = false;
59
86
  if (shouldEnableRoomCodeFilter) {
60
87
  const roomCode = (0, CalendarHelper_1.getQueryParamFromHash)(AppQueryParameters_1.EAppQueryParameters.Room); // Extract the the URL's room parameter
@@ -83,17 +110,19 @@ class BasketRow {
83
110
  return this.promoOnly;
84
111
  }
85
112
  getPromoCodeColour() {
86
- if (this.promoCodeStatus === 'valid') {
113
+ if (this.promoCodeStatus === EPromoCodeStatus.Valid) {
87
114
  return Color_1.Color.Success;
88
115
  }
89
- else if (this.promoCodeStatus === 'invalid') {
116
+ else if (this.promoCodeStatus === EPromoCodeStatus.Invalid) {
90
117
  return Color_1.Color.Alert;
91
118
  }
92
119
  return Color_1.Color.Navy;
93
120
  }
94
121
  isPromoCodeValid() {
95
122
  const rate = this.getRate();
96
- return (rate === null || rate === void 0 ? void 0 : rate.getAveragePrice(true)) < (rate === null || rate === void 0 ? void 0 : rate.getAveragePriceBeforeDiscount(true)) && this.getPromoCode() && this.getPromoCodeStatus() === 'valid';
123
+ return ((rate === null || rate === void 0 ? void 0 : rate.getAveragePrice(true)) < (rate === null || rate === void 0 ? void 0 : rate.getAveragePriceBeforeDiscount(true)) &&
124
+ this.getPromoCode() &&
125
+ this.getPromoCodeStatus() === EPromoCodeStatus.Valid);
97
126
  }
98
127
  isManualInputPromoCode() {
99
128
  return this.manualInputPromoCode;
@@ -156,7 +185,7 @@ class BasketRow {
156
185
  }
157
186
  setPromoCode(code) {
158
187
  if (this.promoCode !== code.toUpperCase()) {
159
- this.setPromoCodeStatus('new');
188
+ this.setPromoCodeStatus(EPromoCodeStatus.New);
160
189
  this.promoOnly = false;
161
190
  }
162
191
  this.promoCode = code.toUpperCase();
@@ -167,8 +196,31 @@ class BasketRow {
167
196
  setStale(status) {
168
197
  this.isStale = status;
169
198
  }
170
- setPromoCodeStatus(status) {
171
- this.promoCodeStatus = this.promoCode ? status : 'new';
199
+ /**
200
+ * Sets the promo code status and optionally a warning message.
201
+ *
202
+ * @param status - The new status: EPromoCodeStatus.
203
+ * @param warningMessage - Optional warning message shown when status is 'invalid'.
204
+ */
205
+ setPromoCodeStatus(status, warningMessage) {
206
+ this.promoCodeStatus = this.promoCode ? status : EPromoCodeStatus.New;
207
+ this.setPromoCodeWarningMessage(this.promoCodeStatus === EPromoCodeStatus.Invalid ? warningMessage || '' : '');
208
+ }
209
+ /**
210
+ * Stores the warning message for an invalid promo code.
211
+ *
212
+ * @param message - The warning message to display.
213
+ */
214
+ setPromoCodeWarningMessage(message) {
215
+ this.promoCodeWarningMessage = message;
216
+ }
217
+ /**
218
+ * Gets the stored warning message for the promo code.
219
+ *
220
+ * @returns The warning message as a string.
221
+ */
222
+ getPromoCodeWarningMessage() {
223
+ return this.promoCodeWarningMessage;
172
224
  }
173
225
  setStartDate(date) {
174
226
  if ((date === null || date === void 0 ? void 0 : date.isValid()) || date === undefined) {
@@ -222,25 +274,12 @@ class BasketRow {
222
274
  getPreUpsellRoomRate() {
223
275
  return this.preUpsellRoomRate;
224
276
  }
225
- getTotalPrice(beforeTax = false) {
277
+ getTotalPrice(getCost = false) {
226
278
  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);
279
+ return (_a = this.getRate()) === null || _a === void 0 ? void 0 : _a.getTotalPrice(getCost);
240
280
  }
241
281
  checkDiffFromReservation(res) {
242
282
  const differences = {};
243
- const beforeTax = false;
244
283
  if (res.total.beforeFees) {
245
284
  // This beforeFees field will be included when we're using Itemised Fees. Because fees can be a part of
246
285
  // rates, we'll just confirm that the price excluding fees is correct for now.