@roomstay/frontend 2.6.31 → 2.6.33

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 (235) hide show
  1. package/dist/166.bundle.js +1 -1
  2. package/dist/279.bundle.js +1 -1
  3. package/dist/370.bundle.js +1 -1
  4. package/dist/449.bundle.js +1 -1
  5. package/dist/586.bundle.js +1 -1
  6. package/dist/736.bundle.js +1 -1
  7. package/dist/873.bundle.js +1 -1
  8. package/dist/903.bundle.js +1 -1
  9. package/dist/927.bundle.js +1 -1
  10. package/dist/972.bundle.js +1 -1
  11. package/dist/978.bundle.js +1 -1
  12. package/dist/e2e/canChangeCurrency.spec.d.ts +1 -0
  13. package/dist/e2e/canChangeCurrency.spec.js +59 -0
  14. package/dist/e2e/canChangeCurrency.spec.js.map +1 -0
  15. package/dist/e2e/canCheckout.spec.d.ts +1 -0
  16. package/dist/e2e/canCheckout.spec.js +205 -0
  17. package/dist/e2e/canCheckout.spec.js.map +1 -0
  18. package/dist/e2e/canViewFindReservationsPage.spec.d.ts +1 -0
  19. package/dist/e2e/canViewFindReservationsPage.spec.js +37 -0
  20. package/dist/e2e/canViewFindReservationsPage.spec.js.map +1 -0
  21. package/dist/e2e/canViewHotelnfoPage.spec.d.ts +1 -0
  22. package/dist/e2e/canViewHotelnfoPage.spec.js +42 -0
  23. package/dist/e2e/canViewHotelnfoPage.spec.js.map +1 -0
  24. package/dist/e2e/frontendTestConfigs.d.ts +7 -0
  25. package/dist/e2e/frontendTestConfigs.js +31 -0
  26. package/dist/e2e/frontendTestConfigs.js.map +1 -0
  27. package/dist/e2e/frontendTestData.d.ts +15 -0
  28. package/dist/e2e/frontendTestData.js +18 -0
  29. package/dist/e2e/frontendTestData.js.map +1 -0
  30. package/dist/e2e/goBackAndCheckoutAgain.spec.js +1 -0
  31. package/dist/e2e/goBackAndCheckoutAgain.spec.js.map +1 -1
  32. package/dist/e2e/helpers/playwrightHelpers.d.ts +2 -0
  33. package/dist/e2e/helpers/playwrightHelpers.js +27 -0
  34. package/dist/e2e/helpers/playwrightHelpers.js.map +1 -0
  35. package/dist/main.bundle.js +1 -1
  36. package/dist/src/api/AvailabilityAPI.d.ts +6 -5
  37. package/dist/src/api/AvailabilityAPI.js +24 -30
  38. package/dist/src/api/AvailabilityAPI.js.map +1 -1
  39. package/dist/src/api/HotelAPI.js +3 -0
  40. package/dist/src/api/HotelAPI.js.map +1 -1
  41. package/dist/src/components/generic/HtmlContentViewer.d.ts +3 -0
  42. package/dist/src/components/generic/HtmlContentViewer.js +41 -0
  43. package/dist/src/components/generic/HtmlContentViewer.js.map +1 -0
  44. package/dist/src/components/generic/Icon/Icon.d.ts +5 -93
  45. package/dist/src/components/generic/Icon/Icon.js +6 -124
  46. package/dist/src/components/generic/Icon/Icon.js.map +1 -1
  47. package/dist/src/components/generic/InputGroup/InputGroup.js +1 -0
  48. package/dist/src/components/generic/InputGroup/InputGroup.js.map +1 -1
  49. package/dist/src/components/generic/InputGroup/InputGroup.types.d.ts +1 -1
  50. package/dist/src/components/generic/InputGroup/InputGroup.types.js.map +1 -1
  51. package/dist/src/components/generic/ScrollToTop.js +10 -1
  52. package/dist/src/components/generic/ScrollToTop.js.map +1 -1
  53. package/dist/src/components/generic/date/DatePicker.js +4 -3
  54. package/dist/src/components/generic/date/DatePicker.js.map +1 -1
  55. package/dist/src/components/generic/date/DatePickerDay.js +4 -3
  56. package/dist/src/components/generic/date/DatePickerDay.js.map +1 -1
  57. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.d.ts +4 -0
  58. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/EmailAndFullnameMemberModal.js +8 -4
  59. package/dist/src/components/members/SignInModal/EmailAndFullnameMemberModal.js.map +1 -0
  60. package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.d.ts +4 -0
  61. package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.js +29 -0
  62. package/dist/src/components/members/SignInModal/EmailPasswordMemberModal.js.map +1 -0
  63. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/ExternalMemberModal.d.ts +8 -3
  64. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/ExternalMemberModal.js +24 -23
  65. package/dist/src/components/members/SignInModal/ExternalMemberModal.js.map +1 -0
  66. package/dist/src/components/members/SignInModal/FamilyNameMemberModal.d.ts +4 -0
  67. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/FamilyNameMemberModal.js +6 -4
  68. package/dist/src/components/members/SignInModal/FamilyNameMemberModal.js.map +1 -0
  69. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.d.ts +1 -0
  70. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.js +28 -39
  71. package/dist/src/components/members/SignInModal/InternalMemberSignInModal.js.map +1 -0
  72. package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.types.d.ts +1 -1
  73. package/dist/src/components/members/SignInModal/InternalMemberSignInModal.types.js.map +1 -0
  74. package/dist/src/components/members/SignInModal/MemberSignInModal.js +86 -0
  75. package/dist/src/components/members/SignInModal/MemberSignInModal.js.map +1 -0
  76. package/dist/src/components/steps/MinimumNightStayPill.js +2 -2
  77. package/dist/src/components/steps/MinimumNightStayPill.js.map +1 -1
  78. package/dist/src/components/steps/confirmation/RoomContactDetails.js +74 -6
  79. package/dist/src/components/steps/confirmation/RoomContactDetails.js.map +1 -1
  80. package/dist/src/components/steps/confirmation/StepConfirmationForm.js.map +1 -1
  81. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js +3 -2
  82. package/dist/src/components/steps/confirmation/StepConfirmationPolicyBlock.js.map +1 -1
  83. package/dist/src/components/steps/date/PeoplePicker.js +6 -4
  84. package/dist/src/components/steps/date/PeoplePicker.js.map +1 -1
  85. package/dist/src/components/steps/date/PeoplePickerRow.d.ts +1 -0
  86. package/dist/src/components/steps/date/PeoplePickerRow.js +14 -4
  87. package/dist/src/components/steps/date/PeoplePickerRow.js.map +1 -1
  88. package/dist/src/components/steps/date/StepDatePricePerRoom.js +4 -3
  89. package/dist/src/components/steps/date/StepDatePricePerRoom.js.map +1 -1
  90. package/dist/src/components/steps/hotel/HotelCard.js +8 -6
  91. package/dist/src/components/steps/hotel/HotelCard.js.map +1 -1
  92. package/dist/src/components/steps/hotel/HotelCardModal.js +8 -6
  93. package/dist/src/components/steps/hotel/HotelCardModal.js.map +1 -1
  94. package/dist/src/components/steps/hotel/HotelInfoPerksRow.js +3 -5
  95. package/dist/src/components/steps/hotel/HotelInfoPerksRow.js.map +1 -1
  96. package/dist/src/components/steps/room/AvailableUpgradesModal.js +3 -3
  97. package/dist/src/components/steps/room/AvailableUpgradesModal.js.map +1 -1
  98. package/dist/src/components/steps/room/LargeRoomCard.js +3 -1
  99. package/dist/src/components/steps/room/LargeRoomCard.js.map +1 -1
  100. package/dist/src/components/steps/room/NoRoomsFoundBlock.js +2 -2
  101. package/dist/src/components/steps/room/NoRoomsFoundBlock.js.map +1 -1
  102. package/dist/src/components/steps/room/RoomListCrossSellBlock.js +4 -4
  103. package/dist/src/components/steps/room/RoomListCrossSellBlock.js.map +1 -1
  104. package/dist/src/components/steps/room/RoomModalPerkRow.js +3 -5
  105. package/dist/src/components/steps/room/RoomModalPerkRow.js.map +1 -1
  106. package/dist/src/components/steps/room/StepRoomBestRateAlert.js +13 -10
  107. package/dist/src/components/steps/room/StepRoomBestRateAlert.js.map +1 -1
  108. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js +5 -1
  109. package/dist/src/components/steps/room/TabGroupedRooms/TabGroupedRoomList.js.map +1 -1
  110. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js +13 -2
  111. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryPromocodeInput.js.map +1 -1
  112. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js +4 -6
  113. package/dist/src/components/steps/room/UserSearchSummary/UserSearchSummaryRow.js.map +1 -1
  114. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js +11 -10
  115. package/dist/src/components/steps/room/roomBuilderProgress/RoomBuilderProgressRow.js.map +1 -1
  116. package/dist/src/components/steps/room/roomDetails/RoomDetails.js +1 -1
  117. package/dist/src/components/steps/room/roomDetails/RoomDetails.js.map +1 -1
  118. package/dist/src/components/steps/room/roomDetails/RoomDetailsPerkBlock.js +3 -2
  119. package/dist/src/components/steps/room/roomDetails/RoomDetailsPerkBlock.js.map +1 -1
  120. package/dist/src/components/steps/room/roomDetails/RoomDetailsRetargeting.js +3 -1
  121. package/dist/src/components/steps/room/roomDetails/RoomDetailsRetargeting.js.map +1 -1
  122. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js +3 -2
  123. package/dist/src/components/steps/room/roomDetails/roomRates/RoomRateDescriptionTab.js.map +1 -1
  124. package/dist/src/components/steps/room/roomFilter/RoomFilterRoomType.js.map +1 -1
  125. package/dist/src/components/summary/BEMobileSummaryModal.js +1 -1
  126. package/dist/src/components/summary/BEMobileSummaryModal.js.map +1 -1
  127. package/dist/src/components/summary/BESummary.js +1 -1
  128. package/dist/src/components/summary/BESummary.js.map +1 -1
  129. package/dist/src/components/summary/BESummaryPerkBlock.js +4 -3
  130. package/dist/src/components/summary/BESummaryPerkBlock.js.map +1 -1
  131. package/dist/src/components/summary/TransportDistanceFromHotelBlock.js +18 -11
  132. package/dist/src/components/summary/TransportDistanceFromHotelBlock.js.map +1 -1
  133. package/dist/src/contexts/BasketContext/BasketContextWrapper.js +21 -12
  134. package/dist/src/contexts/BasketContext/BasketContextWrapper.js.map +1 -1
  135. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.d.ts +8 -1
  136. package/dist/src/contexts/BookingEngineContext/BookingEngineContextType.types.js.map +1 -1
  137. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js +5 -0
  138. package/dist/src/contexts/BookingEngineContext/BookingEngineContextWrapper.js.map +1 -1
  139. package/dist/src/contexts/CompanyContext/CompanyContextType.type.d.ts +1 -1
  140. package/dist/src/contexts/CompanyContext/CompanyContextType.type.js.map +1 -1
  141. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js +40 -29
  142. package/dist/src/contexts/CompanyContext/CompanyContextWrapper.js.map +1 -1
  143. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js +8 -4
  144. package/dist/src/contexts/ConfirmationStepContext/ConfirmationStepContextWrapper.js.map +1 -1
  145. package/dist/src/contexts/HotelOverridesContext.js +8 -0
  146. package/dist/src/contexts/HotelOverridesContext.js.map +1 -1
  147. package/dist/src/engines/BaseEngine.d.ts +4 -1
  148. package/dist/src/engines/BaseEngine.js +6 -1
  149. package/dist/src/engines/BaseEngine.js.map +1 -1
  150. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js +2 -2
  151. package/dist/src/engines/InlineRoomMiniEngine/InlineRoomMiniEngineElement.js.map +1 -1
  152. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js +1 -1
  153. package/dist/src/engines/RecentSearchesEngine/RecentSearchesEngineElement.js.map +1 -1
  154. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js +2 -2
  155. package/dist/src/hooks/RoomRateAvailabilityListFromApi.js.map +1 -1
  156. package/dist/src/hooks/UpdateQueryParameters.js.map +1 -1
  157. package/dist/src/hooks/useCalendarNightStay.js +6 -4
  158. package/dist/src/hooks/useCalendarNightStay.js.map +1 -1
  159. package/dist/src/hooks/useSignedInMember.d.ts +7 -0
  160. package/dist/src/hooks/{useExternalMember.js → useSignedInMember.js} +7 -5
  161. package/dist/src/hooks/useSignedInMember.js.map +1 -0
  162. package/dist/src/index.d.ts +2 -1
  163. package/dist/src/index.js +6 -4
  164. package/dist/src/index.js.map +1 -1
  165. package/dist/src/models/Api/HotelDTO.d.ts +1 -1
  166. package/dist/src/models/Api/HotelDTO.js.map +1 -1
  167. package/dist/src/models/Api/HotelOverrideDTO.d.ts +15 -7
  168. package/dist/src/models/Api/HotelOverrideDTO.js.map +1 -1
  169. package/dist/src/models/Api/ReservationsDTO.d.ts +1 -0
  170. package/dist/src/models/Api/ReservationsDTO.js.map +1 -1
  171. package/dist/src/models/BasketRow.d.ts +16 -1
  172. package/dist/src/models/BasketRow.js +32 -2
  173. package/dist/src/models/BasketRow.js.map +1 -1
  174. package/dist/src/models/Client/Hotel/Hotel.d.ts +8 -2
  175. package/dist/src/models/Client/Hotel/Hotel.js.map +1 -1
  176. package/dist/src/models/Client/Hotel/HotelPerk.d.ts +1 -1
  177. package/dist/src/models/Client/Hotel/HotelPerk.js.map +1 -1
  178. package/dist/src/models/Confirmation.d.ts +5 -0
  179. package/dist/src/models/Confirmation.js +5 -1
  180. package/dist/src/models/Confirmation.js.map +1 -1
  181. package/dist/src/models/LocalStorageModel.d.ts +7 -0
  182. package/dist/src/models/LocalStorageModel.js +3 -0
  183. package/dist/src/models/LocalStorageModel.js.map +1 -0
  184. package/dist/src/models/Promotion/IPromotion.type.d.ts +2 -0
  185. package/dist/src/models/Promotion/IPromotion.type.js.map +1 -1
  186. package/dist/src/pages/findReservation/FindReservationResults.js +22 -4
  187. package/dist/src/pages/findReservation/FindReservationResults.js.map +1 -1
  188. package/dist/src/pages/hotel/HotelInfo.js +2 -2
  189. package/dist/src/pages/hotel/HotelInfo.js.map +1 -1
  190. package/dist/src/providers/RoomstayThemeEngine.js +1 -1
  191. package/dist/src/providers/RoomstayThemeEngine.js.map +1 -1
  192. package/dist/src/providers/storage/LocalStorageProvider.d.ts +9 -14
  193. package/dist/src/providers/storage/LocalStorageProvider.js +19 -97
  194. package/dist/src/providers/storage/LocalStorageProvider.js.map +1 -1
  195. package/dist/src/providers/{SessionProvider.d.ts → storage/SessionProvider.d.ts} +1 -1
  196. package/dist/src/providers/{SessionProvider.js → storage/SessionProvider.js} +13 -12
  197. package/dist/src/providers/storage/SessionProvider.js.map +1 -0
  198. package/dist/src/providers/storage/StorageProvider.d.ts +14 -8
  199. package/dist/src/providers/storage/StorageProvider.js +94 -7
  200. package/dist/src/providers/storage/StorageProvider.js.map +1 -1
  201. package/dist/src/translations/Translation.d.ts +9 -0
  202. package/dist/src/translations/Translation.js +9 -0
  203. package/dist/src/translations/Translation.js.map +1 -1
  204. package/dist/src/translations/languages/en-gb.js +9 -0
  205. package/dist/src/translations/languages/en-gb.js.map +1 -1
  206. package/dist/src/util/CalendarHelper.d.ts +1 -0
  207. package/dist/src/util/CalendarHelper.js +16 -1
  208. package/dist/src/util/CalendarHelper.js.map +1 -1
  209. package/dist/src/util/EventsHelper.js +2 -2
  210. package/dist/src/util/EventsHelper.js.map +1 -1
  211. package/dist/src/util/HotelPerkHelper.d.ts +3 -0
  212. package/dist/src/util/HotelPerkHelper.js +46 -0
  213. package/dist/src/util/HotelPerkHelper.js.map +1 -0
  214. package/dist/test.bundle.js +1 -1
  215. package/dist/tests/jest/providers/SessionProvider.test.js +7 -7
  216. package/dist/tests/jest/providers/SessionProvider.test.js.map +1 -1
  217. package/dist/tests/jest/providers/storage/LocalStorageProvider.test.js +17 -28
  218. package/dist/tests/jest/providers/storage/LocalStorageProvider.test.js.map +1 -1
  219. package/dist/vendors.bundle.js +1 -1
  220. package/dist/vendors.bundle.js.LICENSE.txt +9 -1
  221. package/package.json +9 -4
  222. package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.d.ts +0 -4
  223. package/dist/src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.js.map +0 -1
  224. package/dist/src/components/steps/room/MemberSignInModal/ExternalMemberModal.js.map +0 -1
  225. package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.d.ts +0 -8
  226. package/dist/src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.js.map +0 -1
  227. package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.js.map +0 -1
  228. package/dist/src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types.js.map +0 -1
  229. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js +0 -62
  230. package/dist/src/components/steps/room/MemberSignInModal/MemberSignInModal.js.map +0 -1
  231. package/dist/src/hooks/useExternalMember.d.ts +0 -5
  232. package/dist/src/hooks/useExternalMember.js.map +0 -1
  233. package/dist/src/providers/SessionProvider.js.map +0 -1
  234. /package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/InternalMemberSignInModal.types.js +0 -0
  235. /package/dist/src/components/{steps/room/MemberSignInModal → members/SignInModal}/MemberSignInModal.d.ts +0 -0
@@ -10,6 +10,14 @@ object-assign
10
10
  http://jedwatson.github.io/classnames
11
11
  */
12
12
 
13
+ /*!
14
+ * decimal.js v10.4.3
15
+ * An arbitrary-precision Decimal type for JavaScript.
16
+ * https://github.com/MikeMcl/decimal.js
17
+ * Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>
18
+ * MIT Licence
19
+ */
20
+
13
21
  /*!
14
22
  * focus-trap 6.9.4
15
23
  * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE
@@ -30,7 +38,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
30
38
  PERFORMANCE OF THIS SOFTWARE.
31
39
  ***************************************************************************** */
32
40
 
33
- /*! For license information please see web.js.LICENSE.txt */
41
+ /*! For license information please see index.js.LICENSE.txt */
34
42
 
35
43
  /*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */
36
44
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roomstay/frontend",
3
- "version": "2.6.31",
3
+ "version": "2.6.33",
4
4
  "author": {
5
5
  "name": "Roomstay",
6
6
  "email": "rob@roomstay.io",
@@ -18,7 +18,8 @@
18
18
  "@planpay/web": "^0.1.4",
19
19
  "@popperjs/core": "^2.11.6",
20
20
  "@react-spring/web": "^9.4.4",
21
- "@roomstay/core": "^0.1.36",
21
+ "@roomstay/core": "^0.1.39",
22
+ "@roomstay/ui": "^0.0.12",
22
23
  "@sentry/browser": "^5.21.0",
23
24
  "@sentry/types": "^5.26.0",
24
25
  "@types/base-64": "^1.0.0",
@@ -26,6 +27,7 @@
26
27
  "@vgs/collect-js": "^0.6.1",
27
28
  "base-64": "^1.0.0",
28
29
  "classnames": "^2.2.6",
30
+ "csstype": "^3.1.3",
29
31
  "dayjs": "^1.11.7",
30
32
  "fslightbox-react": "^1.4.9",
31
33
  "husky": "^8.0.3",
@@ -48,6 +50,7 @@
48
50
  },
49
51
  "scripts": {
50
52
  "dev": "env-cmd -f .env.local webpack-dev-server --open --mode development --hot --config 'webpack-local.config.js'",
53
+ "clients": "env-cmd -f .env.local webpack-dev-server --open --mode development --hot --config 'webpack-clients.config.js'",
51
54
  "start": "npm run dev",
52
55
  "test": "npm run test:prettier",
53
56
  "test:lint": "eslint 'src/**/*.{ts,tsx}' --quiet",
@@ -66,8 +69,10 @@
66
69
  "prepare": "husky install > /dev/null",
67
70
  "test:wdio": "docker-compose -f docker-compose.test.yml up --build",
68
71
  "test:playwright": "yarn playwright test",
69
- "test:playwright:report": "yarn playwright show-report",
70
- "test:playwright:ui": "yarn playwright test --ui"
72
+ "test:playwright:ui": "yarn playwright test --ui",
73
+ "test:playwright:clients": "CLIENTS=true yarn playwright test",
74
+ "test:playwright:ui:clients": "CLIENTS=true yarn playwright test --ui",
75
+ "test:playwright:report": "yarn playwright show-report"
71
76
  },
72
77
  "eslintConfig": {
73
78
  "extends": "react-app"
@@ -1,4 +0,0 @@
1
- import { FC } from 'react';
2
- import { FamilyNameMemberModalProps } from './FamilyNameMemberModal';
3
- declare const EmailAndFullnameMemberModal: FC<FamilyNameMemberModalProps>;
4
- export default EmailAndFullnameMemberModal;
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailAndFullnameMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/EmailAndFullnameMemberModal.tsx"],"names":[],"mappings":";;;;;AACA,kDAAkC;AAClC,iDAA+C;AAE/C,yDAA0D;AAC1D,4DAAyD;AAEzD,gFAAwD;AAGxD,MAAM,2BAA2B,GAAmC,CAAC,KAAK,EAAE,EAAE;IAC1E,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,OAAO,CACH,8BAAC,6BAAmB,IAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE;YACJ;gBACI,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,eAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC;aAChE;YACD;gBACI,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,eAAQ,CAAC,MAAM;gBACrB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;aAC3D;YACD;gBACI,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,eAAQ,CAAC,MAAM;gBACrB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;aAC1D;YACD;gBACI,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,eAAQ,CAAC,KAAK;gBACpB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;aACvD;SACJ,GACH,CACL,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,2BAA2B,CAAC","sourcesContent":["import { IMemberVerification } from '@roomstay/core';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { Translation } from '@/translations/Translation';\n\nimport ExternalMemberModal from './ExternalMemberModal';\nimport { FamilyNameMemberModalProps } from './FamilyNameMemberModal';\n\nconst EmailAndFullnameMemberModal: FC<FamilyNameMemberModalProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <ExternalMemberModal<IMemberVerification>\n title={props.title}\n image={props.image}\n isOpen={props.isOpen}\n fields={[\n {\n name: 'memberNumber',\n icon: IconType.Star,\n label: t(Translation.ExternalMemberPopup.Fields.MemberNumber),\n },\n {\n name: 'firstName',\n icon: IconType.Person,\n label: t(Translation.Navigation.SignUp.Inputs.FirstName),\n },\n {\n name: 'lastName',\n icon: IconType.Person,\n label: t(Translation.Navigation.SignUp.Inputs.LastName),\n },\n {\n name: 'email',\n icon: IconType.Email,\n label: t(Translation.Navigation.SignIn.EmailAddress),\n },\n ]}\n />\n );\n};\n\nexport default EmailAndFullnameMemberModal;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExternalMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/ExternalMemberModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { IMemberVerification, IMessage, nameof } from '@roomstay/core';\nimport classNames from 'classnames';\nimport React, { useContext, useState } from 'react';\nimport { FieldValues, Path, SubmitHandler, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { BasketContext, CompanyContext } from '@/contexts';\nimport { useCurrentHotel } from '@/hooks';\nimport { useWindowSize } from '@/hooks/WindowSize';\nimport UserProfile from '@/models/UserProfile';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Translation } from '@/translations/Translation';\nimport { Color } from '@/util/Color';\n\ntype ExternalMemberModalProps<T extends FieldValues> = {\n title: string;\n image: string;\n isOpen: boolean;\n fields: ExternalMemberModelField<T>[];\n};\n\ntype ExternalMemberModelField<T extends FieldValues> = {\n name: keyof T & string;\n icon: IconType;\n label: string;\n profileMapping?: keyof UserProfile;\n};\n\nconst ExternalMemberModal = <T extends FieldValues & IMemberVerification>(props: ExternalMemberModalProps<T>) => {\n const { hotel } = useCurrentHotel();\n const basketContext = useContext(BasketContext);\n const { signUserIn, closeMemberSignupModal, memberOnlyModalPromotion } = useContext(CompanyContext);\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const formMethods = useForm<T>();\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n\n const getValidationClass = (name: keyof T) => {\n if (formMethods.formState.errors) {\n if (formMethods.formState.errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n\n const onSubmit: SubmitHandler<T> = async (fields) => {\n setIsLoading(true);\n setErrorMessage('');\n\n try {\n const hotelId = hotel?.hotelID as string;\n const member = await API.Member.verifyMember(hotelId, fields);\n\n if (member && member.memberId) {\n signUserIn(\n {\n memberNumber: member.memberId,\n firstName: fields.firstName,\n lastName: fields.lastName,\n email: fields.email,\n },\n true\n );\n\n const promoCode = member.promoCode || (hotel?.memberOnlyPromoCode as string);\n\n // Apply promo code\n if (promoCode && !memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(promoCode);\n basketContext.updateBasketRow(row);\n });\n }\n\n // Preset checkout defaults\n basketContext.currentBasketRows?.forEach(\n (row) =>\n (row.checkoutDefaults = {\n FirstName: fields.firstName,\n LastName: fields.lastName,\n Email: fields.email,\n })\n );\n } else {\n setErrorMessage(t(Translation.ExternalMemberPopup.InvalidMember));\n }\n } catch (e: any) {\n if (e[nameof<IMessage>('Message')]) {\n setErrorMessage(e.Message);\n } else {\n throw e;\n }\n } finally {\n setIsLoading(false);\n }\n };\n\n const { isMobile } = useWindowSize();\n\n return (\n <SimpleModal open={props.isOpen} onClose={closeMemberSignupModal} size={SimpleModalSize.Normal} alignCenter>\n <div className=\"row\" style={{ minHeight: '500px' }}>\n <div\n className={classNames('col-md-6 u-mh-none')}\n style={{\n background: 'url(\"' + RoomstayThemeEngine.getImageAssetUrl(props.image) + '\")',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n ...(isMobile && {\n height: '500px',\n }),\n }}\n />\n\n <div className=\"col-md-6 u-pad--heavy\">\n <div className=\"u-pad\">\n <Headline bold color={modalPrimaryColor}>\n {props.title}\n </Headline>\n\n <form onSubmit={formMethods.handleSubmit(onSubmit)}>\n {props.fields.map((field) => (\n <div className=\"u-marg-top u-marg-bottom\" key={field.name}>\n <InputGroup dimensions=\"1\">\n <TextBox\n iconProps={{ color: Color.DarkGrey }}\n icon={field.icon}\n inputProps={{ disabled: isLoading }}\n wide\n placeholder={field.label}\n required\n validationStatus={getValidationClass(field.name)}\n {...formMethods.register(field.name as Path<T>, { required: true })}\n />\n </InputGroup>\n </div>\n ))}\n\n <BEButton\n isLoading={isLoading}\n htmlType=\"submit\"\n className=\"u-marg-top\"\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n stopIconAnimation\n icon={IconType.ArrowRight}\n iconPosition=\"right\"\n >\n {t(Translation.ExternalMemberPopup.Submit)}\n </BEButton>\n <div className=\"u-marg-top\">\n <Text bold color={Color.Danger}>\n {errorMessage}\n </Text>\n </div>\n </form>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n};\n\nexport default ExternalMemberModal;\n"]}
@@ -1,8 +0,0 @@
1
- import { FC } from 'react';
2
- export type FamilyNameMemberModalProps = {
3
- title: string;
4
- image: string;
5
- isOpen: boolean;
6
- };
7
- declare const FamilyNameMemberModal: FC<FamilyNameMemberModalProps>;
8
- export default FamilyNameMemberModal;
@@ -1 +0,0 @@
1
- {"version":3,"file":"FamilyNameMemberModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/FamilyNameMemberModal.tsx"],"names":[],"mappings":";;;;;AACA,kDAAkC;AAClC,iDAA+C;AAE/C,yDAA0D;AAC1D,4DAAyD;AAEzD,gFAAwD;AAQxD,MAAM,qBAAqB,GAAmC,CAAC,KAAK,EAAE,EAAE;IACpE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,OAAO,CACH,8BAAC,6BAAmB,IAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE;YACJ;gBACI,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,eAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC;aAChE;YACD;gBACI,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,eAAQ,CAAC,MAAM;gBACrB,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC;aAC9D;SACJ,GACH,CACL,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,qBAAqB,CAAC","sourcesContent":["import { IMemberVerification } from '@roomstay/core';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { IconType } from '@/components/generic/Icon/Icon';\nimport { Translation } from '@/translations/Translation';\n\nimport ExternalMemberModal from './ExternalMemberModal';\n\nexport type FamilyNameMemberModalProps = {\n title: string;\n image: string;\n isOpen: boolean;\n};\n\nconst FamilyNameMemberModal: FC<FamilyNameMemberModalProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <ExternalMemberModal<IMemberVerification>\n title={props.title}\n image={props.image}\n isOpen={props.isOpen}\n fields={[\n {\n name: 'memberNumber',\n icon: IconType.Star,\n label: t(Translation.ExternalMemberPopup.Fields.MemberNumber),\n },\n {\n name: 'lastName',\n icon: IconType.Person,\n label: t(Translation.ExternalMemberPopup.Fields.FamilyName),\n },\n ]}\n />\n );\n};\n\nexport default FamilyNameMemberModal;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"InternalMemberSignInModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { BasketContext, BookingEngineContext, CompanyContext } from '@frontend/contexts';\nimport { MemberOnlyModalViewEvent } from '@frontend/events';\nimport { useCurrentHotel, useEvent } from '@frontend/hooks';\nimport * as Sentry from '@sentry/browser';\nimport { ErrorHandler } from 'contexts/ErrorContext';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport { Translation } from 'translations/Translation';\n\nimport API from '@/api/BookingAPI';\nimport BEButton from '@/components/generic/BEButton';\nimport Headline from '@/components/generic/Headline';\nimport Icon, { IconType } from '@/components/generic/Icon/Icon';\nimport InputGroup from '@/components/generic/InputGroup/InputGroup';\nimport SimpleModal, { SimpleModalSize } from '@/components/generic/modal/SimpleModal';\nimport Text, { TextType } from '@/components/generic/Text';\nimport TextBox from '@/components/generic/TextBox';\nimport { InternalMemberSignInInputs } from '@/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types';\nimport ImageProvider, { ImageSize } from '@/providers/ImageProvider';\nimport RoomstayThemeEngine from '@/providers/RoomstayThemeEngine';\nimport { Color } from '@/util/Color';\nimport ScreenSize from '@/util/ScreenSize';\nimport { EMAIL_REGEX } from '@/util/Validation';\n\ninterface MemberSignInModalProps {\n onClose?: () => void;\n isOpen?: boolean;\n}\n\nexport default function InternalMemberSignInModal(props: MemberSignInModalProps) {\n const { t } = useTranslation();\n\n const context = useContext(BookingEngineContext);\n const basketContext = useContext(BasketContext);\n const ccx = useContext(CompanyContext);\n\n const { hotel } = useCurrentHotel();\n\n const [isLoading, setIsLoading] = useState(false);\n const [showErrors, setShowErrors] = useState(false);\n\n const [captchaScriptLoaded, setCaptchaScriptLoaded] = useState(false);\n const [captchaRendered, setCaptchaRendered] = useState(false);\n const [reCaptchaSecret, setReCaptchaSecret] = useState<string | null>(null);\n const [captchaError, setCaptchaError] = useState<string | null | undefined>(null);\n\n const captchaRef = useRef(null);\n\n const shouldLoadCaptcha = !!hotel?.googleReCaptcha?.loadForMembers && !!hotel?.googleReCaptcha?.siteKey;\n\n const MemberOnlyModalDefaultInputs: InternalMemberSignInInputs = useMemo(() => {\n return {\n Lines: [\n {\n Dimension: '2/2',\n Inputs: [\n {\n name: 'FirstName',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.FirstName),\n isRequired: true,\n },\n {\n name: 'LastName',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.LastName),\n isRequired: true,\n },\n ],\n },\n {\n Dimension: '1',\n Inputs: [\n {\n name: 'Email',\n type: 'TextBox',\n placeholder: t(Translation.MemberOnlyPopup.Fields.Email.Label),\n isRequired: true,\n validate: (input: string) => {\n if (!input.match(EMAIL_REGEX)) {\n return t(Translation.MemberOnlyPopup.Fields.Email.Validation.Invalid) as string;\n }\n return true;\n },\n },\n ],\n },\n ],\n };\n }, []);\n\n const { raise } = useEvent();\n\n useEffect(() => {\n if (props.isOpen) {\n const event = new MemberOnlyModalViewEvent();\n raise(event);\n }\n }, [props.isOpen]);\n\n useEffect(() => {\n let cancelled = false;\n\n if (shouldLoadCaptcha) {\n RoomstayThemeEngine.loadScript('https://www.google.com/recaptcha/api.js', 'Google ReCaptcha').then(() => {\n try {\n (window as any).grecaptcha.ready(() => {\n if (!cancelled) {\n setCaptchaScriptLoaded(true);\n }\n });\n } catch (ex) {\n console.log('Captcha loaded too quickly, will try again');\n }\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [hotel]);\n\n useEffect(() => {\n if (shouldLoadCaptcha && captchaScriptLoaded && captchaRef?.current && !captchaRendered && props.isOpen) {\n try {\n setTimeout(() => {\n const captchaCallback = (secret: string) => {\n setReCaptchaSecret(secret);\n setCaptchaError(undefined);\n };\n\n (window as any).grecaptcha.render(captchaRef.current, {\n sitekey: hotel.googleReCaptcha?.siteKey,\n callback: captchaCallback,\n });\n\n setCaptchaRendered(true);\n }, 5);\n } catch (ex) {\n console.log(ex);\n\n Sentry.captureException(ex);\n }\n }\n }, [props.isOpen, captchaScriptLoaded, captchaRef, captchaRef?.current, captchaRendered]);\n\n useEffect(() => {\n if (!props.isOpen) {\n setReCaptchaSecret(null);\n setCaptchaError(null);\n setCaptchaRendered(false);\n }\n }, [props.isOpen]);\n\n const getValidationClass = (name: string) => {\n if (errors && (formState.touchedFields[name] || showErrors)) {\n if (errors[name]) {\n return 'error';\n } else {\n return 'success';\n }\n }\n };\n\n const methods = useForm({\n mode: 'onChange',\n });\n\n const { formState, register } = methods;\n const errors = methods.formState.errors;\n\n const onSubmit = async () => {\n if (shouldLoadCaptcha && (!reCaptchaSecret || reCaptchaSecret === '')) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.PleaseTick));\n return;\n }\n\n await signUpMember();\n };\n\n const signUpMember = async () => {\n setIsLoading(true);\n const { FirstName, LastName, Email, ...extra } = methods.getValues();\n\n if (!FirstName || !LastName || !Email) {\n setIsLoading(false);\n ErrorHandler.add({\n title: t(Translation.MemberOnlyPopup.Errors.RequiredFields.Title),\n message: t(Translation.MemberOnlyPopup.Errors.RequiredFields.Message),\n });\n\n return;\n }\n\n try {\n const extraFields = Object.keys(extra).map((extraFieldKey: string) => {\n return { name: extraFieldKey, value: extra[extraFieldKey] };\n });\n\n const response = await API.Member.addMember(FirstName, LastName, Email, extraFields, hotel?.hotelID as string, reCaptchaSecret as string);\n\n if (response.error) {\n setCaptchaError(t(Translation.MemberOnlyPopup.Errors.ReCaptcha.ValidationError));\n } else {\n ccx.signUserIn({ memberNumber: Email, firstName: FirstName, lastName: LastName, email: Email });\n\n if (hotel?.memberOnlyPromoCode && !ccx.memberOnlyModalPromotion?.memberOnlyDisableDefaultPromo) {\n basketContext.currentBasketRows?.forEach((row) => {\n row.setPromoCode(hotel?.memberOnlyPromoCode as string);\n basketContext.updateBasketRow(row);\n });\n }\n }\n } catch (e) {\n ErrorHandler.add({\n title: t(Translation.MemberOnlyPopup.Errors.SignupFailed.Title),\n message: t(Translation.MemberOnlyPopup.Errors.SignupFailed.Message),\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const modalInputs: InternalMemberSignInInputs = hotel?.memberOnlySignupInputs ?? MemberOnlyModalDefaultInputs;\n\n const loadingOnClose = () => {\n setIsLoading(false);\n if (props.onClose) {\n props.onClose();\n }\n };\n const buttonOnClickHandler = async () => {\n await methods.handleSubmit(onSubmit)();\n setShowErrors(true);\n\n return false;\n };\n\n const modalTitle =\n ccx?.memberOnlyModalPromotion?.memberOnlyModalTitle ??\n t(Translation.MemberOnlyPopup.Headline, {\n companyShort: ccx?.companyShort,\n });\n\n const modalSubtitle = ccx?.memberOnlyModalPromotion?.memberOnlyModalSubtitle ?? t(Translation.MemberOnlyPopup.Subtitle);\n\n const modalButtonText = ccx?.memberOnlyModalPromotion?.memberOnlyModalButtonText ?? t(Translation.MemberOnlyPopup.SubmitButtonText);\n const modalLeadImage = useMemo(() => {\n if (ccx.memberOnlyModalPromotion?.memberOnlyModalImage) {\n return ccx.memberOnlyModalPromotion?.memberOnlyModalImage;\n }\n\n if (hotel?.memberOnlyModalImage) {\n return hotel?.memberOnlyModalImage;\n }\n\n if (hotel?.heroImage) {\n return hotel?.heroImage;\n }\n }, [hotel?.heroImage, hotel?.memberOnlyModalImage, ccx?.memberOnlyModalPromotion?.memberOnlyModalImage]);\n\n const modalPrimaryColor = hotel?.memberOnlyModalUsePrimaryColor ? Color.Accent : Color.Success;\n\n return (\n <SimpleModal open={props.isOpen} onClose={loadingOnClose} size={SimpleModalSize.Normal} alignCenter>\n <div className=\"row\">\n <div\n className=\"col-md-6 u-mh-none\"\n style={{\n background: 'url(\"' + (modalLeadImage && ImageProvider.resizeImage(modalLeadImage, ImageSize.Original)) + '\")',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n }}\n />\n <div className=\"col-md-6\">\n <div className=\"u-pad u-pad-heavy\">\n <div className=\"u-marg-bottom-half\">\n <Icon\n icon={IconType.Money}\n size=\"24px\"\n color={modalPrimaryColor}\n useColorAsBackground={hotel?.memberOnlyModalUsePrimaryColor}\n backgroundColor={Color.SuccessTint}\n />\n </div>\n <div className=\"u-marg-bottom-half\">\n <Headline bold color={modalPrimaryColor}>\n <div\n style={{ color: modalPrimaryColor }}\n dangerouslySetInnerHTML={{\n __html: modalTitle as string,\n }}\n ></div>\n </Headline>\n </div>\n <div className=\"u-marg-bottom\">\n <Text type={TextType.Small} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: modalSubtitle as string }}></span>\n </Text>\n </div>\n <FormProvider {...methods}>\n <div>\n {modalInputs.Lines.map((inputLine, lineIndex) => {\n return (\n <div className=\"u-marg-bottom-xxx\" key={lineIndex}>\n <InputGroup dimensions={inputLine.Dimension}>\n {inputLine.Inputs.map((input, inputIndex) => {\n switch (input.type) {\n case 'TextBox':\n return (\n <TextBox\n key={inputIndex}\n wide\n placeholder={input.placeholder}\n required={input.isRequired}\n validationStatus={getValidationClass(input.name)}\n {...register(input.name, {\n required: input.isRequired,\n validate: input.validate,\n })}\n />\n );\n }\n })}\n </InputGroup>\n </div>\n );\n })}\n </div>\n <div className=\"u-marg-top--light\" style={{ marginBottom: '45px' }}>\n {captchaScriptLoaded && (\n <>\n {captchaError && (\n <Text type={TextType.Label} color={Color.Alert}>\n {captchaError}\n </Text>\n )}\n <div ref={captchaRef} className=\"u-marg-bottom\"></div>\n </>\n )}\n <BEButton\n size=\"normal\"\n filled\n primary={hotel?.memberOnlyModalUsePrimaryColor}\n success={!hotel?.memberOnlyModalUsePrimaryColor}\n isLoading={isLoading}\n stopIconAnimation\n icon={context.screenSize > ScreenSize.Mobile ? IconType.ArrowRight : undefined}\n onClick={buttonOnClickHandler}\n >\n {modalButtonText}\n </BEButton>\n </div>\n </FormProvider>\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.MemberOnlyPopup.AgreeToReceiveDeals, { companyShort: ccx?.companyShort }) }}></span>\n </Text>{' '}\n <Text type={TextType.Label} color={Color.DarkGrey}>\n <span dangerouslySetInnerHTML={{ __html: t(Translation.MemberOnlyPopup.UnsubscribeAnytime) }}></span>\n </Text>\n </div>\n </div>\n </div>\n </SimpleModal>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"InternalMemberSignInModal.types.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/InternalMemberSignInModal.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { InputGroupDimensions } from '@/components/generic/InputGroup/InputGroup.types';\n\nexport interface InternalMemberSignInInputs {\n Lines: {\n Dimension: InputGroupDimensions;\n Inputs: {\n name: string;\n type: 'TextBox';\n\n placeholder?: string;\n\n isRequired?: boolean;\n validate?: (value: string) => string | boolean;\n }[];\n }[];\n}\n"]}
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.MemberSignInModal = void 0;
30
- const contexts_1 = require("../../../../contexts/index.js");
31
- const core_1 = require("@roomstay/core");
32
- const react_1 = __importStar(require("react"));
33
- const react_i18next_1 = require("react-i18next");
34
- const useExternalMember_1 = require("../../../../hooks/useExternalMember");
35
- const Translation_1 = require("../../../../translations/Translation");
36
- const EmailAndFullnameMemberModal_1 = __importDefault(require("./EmailAndFullnameMemberModal"));
37
- const FamilyNameMemberModal_1 = __importDefault(require("./FamilyNameMemberModal"));
38
- const InternalMemberSignInModal_1 = __importDefault(require("./InternalMemberSignInModal"));
39
- const MemberSignInModal = () => {
40
- const { externalMemberType, isExternalMemberHotel } = (0, useExternalMember_1.useExternalMember)();
41
- const { isSigningIn, closeMemberSignupModal } = (0, react_1.useContext)(contexts_1.CompanyContext);
42
- const { t } = (0, react_i18next_1.useTranslation)();
43
- if (isExternalMemberHotel) {
44
- switch (externalMemberType) {
45
- case core_1.EIntegration.Big4:
46
- return react_1.default.createElement(FamilyNameMemberModal_1.default, { title: t(Translation_1.Translation.ExternalMemberPopup.Big4Title), image: "big4-login.svg", isOpen: isSigningIn });
47
- case core_1.EIntegration.Top10:
48
- return react_1.default.createElement(FamilyNameMemberModal_1.default, { title: t(Translation_1.Translation.ExternalMemberPopup.Top10Title), image: "top10-login.svg", isOpen: isSigningIn });
49
- case core_1.EIntegration.Gday:
50
- return react_1.default.createElement(FamilyNameMemberModal_1.default, { title: t(Translation_1.Translation.ExternalMemberPopup.GDayTitle), image: "gday-login.svg", isOpen: isSigningIn });
51
- case core_1.EIntegration.Salesforce:
52
- return react_1.default.createElement(EmailAndFullnameMemberModal_1.default, { title: t(Translation_1.Translation.ExternalMemberPopup.SalesforceTitle), image: "salesforce-login.png", isOpen: isSigningIn });
53
- default:
54
- return null;
55
- }
56
- }
57
- else {
58
- return react_1.default.createElement(InternalMemberSignInModal_1.default, { isOpen: isSigningIn, onClose: closeMemberSignupModal });
59
- }
60
- };
61
- exports.MemberSignInModal = MemberSignInModal;
62
- //# sourceMappingURL=MemberSignInModal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemberSignInModal.js","sourceRoot":"/","sources":["src/components/steps/room/MemberSignInModal/MemberSignInModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAoD;AACpD,yCAA8C;AAC9C,+CAA0C;AAC1C,iDAA+C;AAE/C,iEAA8D;AAC9D,4DAAyD;AAEzD,gGAAwE;AACxE,oFAA4D;AAC5D,4FAAoE;AAE7D,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAC1E,MAAM,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IAC3E,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAc,GAAE,CAAC;IAE/B,IAAI,qBAAqB,EAAE;QACvB,QAAQ,kBAAkB,EAAE;YACxB,KAAK,mBAAY,CAAC,IAAI;gBAClB,OAAO,8BAAC,+BAAqB,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAC,gBAAgB,EAAC,MAAM,EAAE,WAAW,GAAI,CAAC;YACtI,KAAK,mBAAY,CAAC,KAAK;gBACnB,OAAO,8BAAC,+BAAqB,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAC,iBAAiB,EAAC,MAAM,EAAE,WAAW,GAAI,CAAC;YACxI,KAAK,mBAAY,CAAC,IAAI;gBAClB,OAAO,8BAAC,+BAAqB,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAC,gBAAgB,EAAC,MAAM,EAAE,WAAW,GAAI,CAAC;YACtI,KAAK,mBAAY,CAAC,UAAU;gBACxB,OAAO,8BAAC,qCAA2B,IAAC,KAAK,EAAE,CAAC,CAAC,yBAAW,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,KAAK,EAAC,sBAAsB,EAAC,MAAM,EAAE,WAAW,GAAI,CAAC;YACxJ;gBACI,OAAO,IAAI,CAAC;SACnB;KACJ;SAAM;QACH,OAAO,8BAAC,mCAAyB,IAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,sBAAsB,GAAI,CAAC;KAC9F;AACL,CAAC,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B","sourcesContent":["import { CompanyContext } from '@frontend/contexts';\nimport { EIntegration } from '@roomstay/core';\nimport React, { useContext } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { useExternalMember } from '@/hooks/useExternalMember';\nimport { Translation } from '@/translations/Translation';\n\nimport EmailAndFullnameMemberModal from './EmailAndFullnameMemberModal';\nimport FamilyNameMemberModal from './FamilyNameMemberModal';\nimport InternalMemberSignInModal from './InternalMemberSignInModal';\n\nexport const MemberSignInModal = () => {\n const { externalMemberType, isExternalMemberHotel } = useExternalMember();\n const { isSigningIn, closeMemberSignupModal } = useContext(CompanyContext);\n const { t } = useTranslation();\n\n if (isExternalMemberHotel) {\n switch (externalMemberType) {\n case EIntegration.Big4:\n return <FamilyNameMemberModal title={t(Translation.ExternalMemberPopup.Big4Title)} image=\"big4-login.svg\" isOpen={isSigningIn} />;\n case EIntegration.Top10:\n return <FamilyNameMemberModal title={t(Translation.ExternalMemberPopup.Top10Title)} image=\"top10-login.svg\" isOpen={isSigningIn} />;\n case EIntegration.Gday:\n return <FamilyNameMemberModal title={t(Translation.ExternalMemberPopup.GDayTitle)} image=\"gday-login.svg\" isOpen={isSigningIn} />;\n case EIntegration.Salesforce:\n return <EmailAndFullnameMemberModal title={t(Translation.ExternalMemberPopup.SalesforceTitle)} image=\"salesforce-login.png\" isOpen={isSigningIn} />;\n default:\n return null;\n }\n } else {\n return <InternalMemberSignInModal isOpen={isSigningIn} onClose={closeMemberSignupModal} />;\n }\n};\n"]}
@@ -1,5 +0,0 @@
1
- export declare const useExternalMember: () => {
2
- externalMemberType: import("@roomstay/core").EIntegration | undefined;
3
- isExternalMemberHotel: boolean;
4
- memberNumber: string | undefined;
5
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"useExternalMember.js","sourceRoot":"/","sources":["src/hooks/useExternalMember.tsx"],"names":[],"mappings":";;;AAAA,iCAAmC;AAEnC,yCAA4C;AAErC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,YAAY,EAAE,GAAG,IAAA,kBAAU,EAAC,yBAAc,CAAC,CAAC;IAC/F,OAAO;QACH,kBAAkB;QAClB,qBAAqB;QACrB,YAAY;KACf,CAAC;AACN,CAAC,CAAC;AAPW,QAAA,iBAAiB,qBAO5B","sourcesContent":["import { useContext } from 'react';\n\nimport { CompanyContext } from '@/contexts';\n\nexport const useExternalMember = () => {\n const { externalMemberType, isExternalMemberHotel, memberNumber } = useContext(CompanyContext);\n return {\n externalMemberType,\n isExternalMemberHotel,\n memberNumber,\n };\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SessionProvider.js","sourceRoot":"/","sources":["src/providers/SessionProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,kDAA0B;AAE1B,mEAA2C;AAC3C,6CAAiD;AACjD,qDAA6D;AAC7D,8DAAkJ;AAClJ,mFAAgF;AAChF,8CAAkD;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAqB,eAAe;IAApC;QAGY,kBAAa,GAA6B,EAAE,CAAC;QAC7C,gBAAW,GAAG,GAAS,EAAE;YAC7B,IAAI;gBACA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACzC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,WAAW,iCACf,cAAc,GACd,aAAa,EAClB,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;aACnD;QACL,CAAC,CAAA,CAAC;QAEM,2BAAsB,GAAG,IAAA,mBAAQ,EAAC,GAAS,EAAE;YACjD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAA,EAAE,GAAG,CAAC,CAAC;IA+OZ,CAAC;IA7OiB,sBAAsB;;YAChC,MAAM,IAAA,gBAAK,EAAC,GAAG,CAAC,CAAC,CAAC,sDAAsD;YACxE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;KAAA;IAEY,UAAU,CAAC,OAAe;;YACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;KAAA;IAEY,UAAU,CAAC,SAAkB,EAAE,MAAe;;YACvD,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;KAAA;IAEY,YAAY,CAAC,SAAkB,EAAE,MAAe;;YACzD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAmB,EAAE,MAAgB,CAAC,CAAC;YAE7F,IAAI,YAAY,EAAE;gBACd,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;gBAErC,MAAM,OAAO,GAAG,IAAI,2CAAoB,CAAC,cAAc,CAAC,CAAC;gBACzD,MAAM,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAChE;QACL,CAAC;KAAA;IAED;;OAEG;IACI,mBAAmB;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAEY,UAAU;;YACnB,MAAM,OAAO,GAAG,IAAI,2CAAoB,EAAE,CAAC;YAE3C,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,IAAI,CAA4B,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAE/F,IAAI,kBAAkB,EAAE;gBACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;aACtD;iBAAM;gBACH,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;aACtC;QACL,CAAC;KAAA;IAEY,WAAW,CAAC,cAA+B;;YACpD,IAAI,CAAC,cAAc,EAAE;gBACjB,OAAO,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;aACzD;YAED,MAAM,OAAO,GAAG,IAAI,2CAAoB,EAAE,CAAC;YAE3C,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAEhE,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACrF,CAAC;KAAA;IAEY,aAAa,CAAC,cAAwC;;YAC/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClC,CAAC;KAAA;IAEY,kBAAkB,CAAC,cAAwC;;YACpE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACxC,CAAC;KAAA;IAEY,aAAa;;YACtB,MAAM,OAAO,GAAG,IAAI,2CAAoB,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACzC,CAAC;KAAA;IAEY,cAAc;;YACvB,MAAM,OAAO,GAAG,IAAI,2CAAoB,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAEtF,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,CAA4B,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9H,CAAC;KAAA;IAED;;;;OAIG;IACW,qBAAqB,CAAC,SAAiB,EAAE,MAAc;;YACjE,IAAI,OAAwB,CAAC;YAE7B,IAAI,SAAS,EAAE;gBACX,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAoB,CAAC;gBAEjE,IAAI,OAAO,EAAE;oBACT,OAAO,OAAO,CAAC,EAAE,CAAC;iBACrB;aACJ;YAED,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAEhD,OAAO,OAAO,CAAC,EAAE,CAAC;QACtB,CAAC;KAAA;IAEa,WAAW,CAAC,SAAiB;;YACvC,MAAM,OAAO,GAAG,IAAI,2CAAoB,EAAE,CAAC;YAE3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAA4B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;YAE7F,IAAI,OAAO,EAAE;gBACT,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;aAC3C;QACL,CAAC;KAAA;IAEa,kBAAkB,CAAC,MAAc;;;YAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAEvC,MAAM,OAAO,GAAoB;gBAC7B,EAAE,EAAE,SAAS;gBACb,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI;gBAC7B,UAAU,EAAE,EAAE;gBACd,MAAM;aACT,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO,OAAO,CAAC;;KAClB;IAEO,gBAAgB,CAAC,OAAwB;;QAC7C,MAAM,UAAU,GAAyC,EAAE,CAAC;QAE5D,2GAA2G;QAC3G,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,oBAA+B,EAAE,EAAE;;YAC3D,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,EAAE,CAAC;YAE5C,IAAI,cAAc,GAAG,IAAI,CAAC;YAC1B,IAAI,cAAc,GAAG,IAAI,CAAC;YAE1B,IAAI,IAAI,EAAE;gBACN,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aACrC;YAED,IAAI,IAAI,EAAE;gBACN,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aACrC;YAED,UAAU,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE;gBACpC,SAAS,EAAE,MAAA,oBAAoB,CAAC,YAAY,EAAE,0CAAE,MAAM,CAAC,wCAAsB,CAAC;gBAC9E,OAAO,EAAE,MAAA,oBAAoB,CAAC,UAAU,EAAE,0CAAE,MAAM,CAAC,wCAAsB,CAAC;gBAC1E,MAAM,EAAE,oBAAoB,CAAC,SAAS,EAAE;gBACxC,QAAQ,EAAE,oBAAoB,CAAC,WAAW,EAAE;gBAC5C,OAAO,EAAE,oBAAoB,CAAC,UAAU,EAAE;gBAC1C,SAAS,EAAE,oBAAoB,CAAC,YAAY,EAAE;gBAC9C,eAAe,EAAE,oBAAoB,CAAC,kBAAkB,EAAE;gBAC1D,IAAI,EAAE,cAA2B;gBACjC,IAAI,EAAE,cAAuB;aAChC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,OAAO;YACH,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,MAAA,OAAO,CAAC,SAAS,0CAAE,MAAM,CAAC,wCAAsB,CAAW;YACtE,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,0CAAE,MAAM,CAAC,wCAAsB,CAAW;YAClE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU;YACV,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SACjD,CAAC;IACN,CAAC;IAEO,kBAAkB,CAAC,OAAkC;;QACzD,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,IAAI,SAAS,GAAuB,IAAI,CAAC;QACzC,IAAI,OAAO,GAAuB,IAAI,CAAC;QAEvC,IAAI,OAAO,CAAC,SAAS,EAAE;YACnB,SAAS,GAAG,IAAA,eAAK,EAAC,OAAO,CAAC,SAAS,EAAE,wCAAsB,CAAC,CAAC;SAChE;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,OAAO,GAAG,IAAA,eAAK,EAAC,OAAO,CAAC,OAAO,EAAE,wCAAsB,CAAC,CAAC;SAC5D;QAED,MAAA,OAAO,CAAC,UAAU,0CAAE,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC;YACT,IAAI,IAAI,CAAC;YAET,IAAI,mBAAmB,CAAC,IAAI,EAAE;gBAC1B,IAAI,GAAG,IAAI,WAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;aAC9C;YAED,IAAI,mBAAmB,CAAC,IAAI,IAAI,IAAI,EAAE;gBAClC,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACtB;YAED,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAElE,IAAI,mBAAmB,CAAC,SAAS,EAAE;gBAC/B,SAAS,CAAC,YAAY,CAAC,IAAA,eAAK,EAAC,mBAAmB,CAAC,SAAS,EAAE,wCAAsB,CAAC,CAAC,CAAC;aACxF;YACD,IAAI,mBAAmB,CAAC,OAAO,EAAE;gBAC7B,SAAS,CAAC,UAAU,CAAC,IAAA,eAAK,EAAC,mBAAmB,CAAC,OAAO,EAAE,wCAAsB,CAAC,CAAC,CAAC;aACpF;YAED,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAChD,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACpD,SAAS,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAElD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO;YACH,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS;YACT,OAAO;YACP,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU;YACV,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAgB,CAAC,CAAC,CAAC,SAAS;YACzE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SACjD,CAAC;IACN,CAAC;IAEO,aAAa,CAAC,SAAkB;QACpC,OAAO,WAAW,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC3D,CAAC;CACJ;AAnQD,kCAmQC","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 { LocalStorageProvider } from '@/providers/storage/LocalStorageProvider';\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 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 const storage = new LocalStorageProvider(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 async getSession(): Promise<RoomstaySession> {\n const storage = new LocalStorageProvider();\n\n const sessionFromStorage = await 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 LocalStorageProvider();\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 LocalStorageProvider();\n storage.delete(this.getSessionKey());\n }\n\n public async getAllSessions() {\n const storage = new LocalStorageProvider();\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 LocalStorageProvider();\n\n const session = await storage.read<SerializedRoomstaySession>(this.getSessionKey(sessionID));\n\n if (session) {\n return this.unSerializeSession(session);\n }\n }\n\n private async generateNewSession(source: string): Promise<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"]}