@qite/tide-booking-component 0.0.2-preview.8 → 1.0.0-preview

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 (177) hide show
  1. package/README.md +1 -0
  2. package/build/build-cjs/booking-wizard/components/icon.d.ts +7 -7
  3. package/build/build-cjs/booking-wizard/components/labeled-input.d.ts +18 -18
  4. package/build/build-cjs/booking-wizard/components/labeled-select.d.ts +21 -21
  5. package/build/build-cjs/booking-wizard/components/message.d.ts +9 -8
  6. package/build/build-cjs/booking-wizard/components/product-card.d.ts +8 -9
  7. package/build/build-cjs/booking-wizard/components/rating.d.ts +6 -6
  8. package/build/build-cjs/booking-wizard/components/step-indicator.d.ts +6 -6
  9. package/build/build-cjs/booking-wizard/components/step-route.d.ts +9 -9
  10. package/build/build-cjs/booking-wizard/features/booking/api.d.ts +21 -0
  11. package/build/build-cjs/booking-wizard/features/booking/booking-slice.d.ts +124 -18
  12. package/build/build-cjs/booking-wizard/features/booking/booking.d.ts +8 -9
  13. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +208 -0
  14. package/build/build-cjs/booking-wizard/features/confirmation/confirmation.d.ts +4 -5
  15. package/build/build-cjs/booking-wizard/features/error/error.d.ts +4 -5
  16. package/build/build-cjs/booking-wizard/features/price-details/price-details-api.d.ts +12 -6
  17. package/build/build-cjs/booking-wizard/features/price-details/price-details-slice.d.ts +105 -10
  18. package/build/build-cjs/booking-wizard/features/price-details/util.d.ts +5 -0
  19. package/build/build-cjs/booking-wizard/features/product-options/no-options.d.ts +2 -0
  20. package/build/build-cjs/booking-wizard/features/product-options/none-option.d.ts +17 -0
  21. package/build/build-cjs/booking-wizard/features/product-options/option-booking-group.d.ts +18 -0
  22. package/build/build-cjs/booking-wizard/features/product-options/option-item.d.ts +11 -0
  23. package/build/build-cjs/booking-wizard/features/product-options/option-pax-card.d.ts +9 -0
  24. package/build/build-cjs/booking-wizard/features/product-options/option-pax-group.d.ts +20 -0
  25. package/build/build-cjs/booking-wizard/features/product-options/option-room.d.ts +16 -0
  26. package/build/build-cjs/booking-wizard/features/product-options/option-unit-group.d.ts +20 -0
  27. package/build/build-cjs/booking-wizard/features/product-options/option-units-card.d.ts +9 -0
  28. package/build/build-cjs/booking-wizard/features/product-options/options-form.d.ts +4 -5
  29. package/build/build-cjs/booking-wizard/features/product-options/validate-form.d.ts +2 -2
  30. package/build/build-cjs/booking-wizard/features/sidebar/index.d.ts +7 -3
  31. package/build/build-cjs/booking-wizard/features/sidebar/sidebar-flight.d.ts +8 -0
  32. package/build/build-cjs/booking-wizard/features/sidebar/sidebar-util.d.ts +28 -4
  33. package/build/build-cjs/booking-wizard/features/sidebar/sidebar.d.ts +29 -21
  34. package/build/build-cjs/booking-wizard/features/summary/summary-booking-option-pax.d.ts +7 -0
  35. package/build/build-cjs/booking-wizard/features/summary/summary-booking-option-unit.d.ts +7 -0
  36. package/build/build-cjs/booking-wizard/features/summary/summary-flight.d.ts +8 -0
  37. package/build/build-cjs/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +10 -0
  38. package/build/build-cjs/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +10 -0
  39. package/build/build-cjs/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +10 -0
  40. package/build/build-cjs/booking-wizard/features/summary/summary-slice.d.ts +14 -17
  41. package/build/build-cjs/booking-wizard/features/summary/summary.d.ts +4 -5
  42. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +95 -45
  43. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form.d.ts +4 -5
  44. package/build/build-cjs/booking-wizard/features/travelers-form/type-ahead-input.d.ts +16 -15
  45. package/build/build-cjs/booking-wizard/features/travelers-form/validate-form.d.ts +7 -4
  46. package/build/build-cjs/booking-wizard/index.d.ts +12 -11
  47. package/build/build-cjs/booking-wizard/settings-context.d.ts +5 -6
  48. package/build/build-cjs/booking-wizard/store.d.ts +41 -25
  49. package/build/build-cjs/booking-wizard/types.d.ts +111 -59
  50. package/build/build-cjs/booking-wizard/utils/class-util.d.ts +1 -1
  51. package/build/build-cjs/booking-wizard/utils/localization-util.d.ts +1 -1
  52. package/build/build-cjs/booking-wizard/utils/query-string-util.d.ts +21 -2
  53. package/build/build-cjs/booking-wizard/utils/tide-api-utils.d.ts +2 -2
  54. package/build/build-cjs/index.d.ts +2 -2
  55. package/build/build-cjs/index.js +13642 -1886
  56. package/build/build-esm/booking-wizard/components/icon.d.ts +7 -7
  57. package/build/build-esm/booking-wizard/components/labeled-input.d.ts +18 -18
  58. package/build/build-esm/booking-wizard/components/labeled-select.d.ts +21 -21
  59. package/build/build-esm/booking-wizard/components/message.d.ts +9 -8
  60. package/build/build-esm/booking-wizard/components/product-card.d.ts +8 -9
  61. package/build/build-esm/booking-wizard/components/rating.d.ts +6 -6
  62. package/build/build-esm/booking-wizard/components/step-indicator.d.ts +6 -6
  63. package/build/build-esm/booking-wizard/components/step-route.d.ts +9 -9
  64. package/build/build-esm/booking-wizard/features/booking/api.d.ts +21 -0
  65. package/build/build-esm/booking-wizard/features/booking/booking-slice.d.ts +124 -18
  66. package/build/build-esm/booking-wizard/features/booking/booking.d.ts +8 -9
  67. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +208 -0
  68. package/build/build-esm/booking-wizard/features/confirmation/confirmation.d.ts +4 -5
  69. package/build/build-esm/booking-wizard/features/error/error.d.ts +4 -5
  70. package/build/build-esm/booking-wizard/features/price-details/price-details-api.d.ts +12 -6
  71. package/build/build-esm/booking-wizard/features/price-details/price-details-slice.d.ts +105 -10
  72. package/build/build-esm/booking-wizard/features/price-details/util.d.ts +5 -0
  73. package/build/build-esm/booking-wizard/features/product-options/no-options.d.ts +2 -0
  74. package/build/build-esm/booking-wizard/features/product-options/none-option.d.ts +17 -0
  75. package/build/build-esm/booking-wizard/features/product-options/option-booking-group.d.ts +18 -0
  76. package/build/build-esm/booking-wizard/features/product-options/option-item.d.ts +11 -0
  77. package/build/build-esm/booking-wizard/features/product-options/option-pax-card.d.ts +9 -0
  78. package/build/build-esm/booking-wizard/features/product-options/option-pax-group.d.ts +20 -0
  79. package/build/build-esm/booking-wizard/features/product-options/option-room.d.ts +16 -0
  80. package/build/build-esm/booking-wizard/features/product-options/option-unit-group.d.ts +20 -0
  81. package/build/build-esm/booking-wizard/features/product-options/option-units-card.d.ts +9 -0
  82. package/build/build-esm/booking-wizard/features/product-options/options-form.d.ts +4 -5
  83. package/build/build-esm/booking-wizard/features/product-options/validate-form.d.ts +2 -2
  84. package/build/build-esm/booking-wizard/features/sidebar/index.d.ts +7 -3
  85. package/build/build-esm/booking-wizard/features/sidebar/sidebar-flight.d.ts +8 -0
  86. package/build/build-esm/booking-wizard/features/sidebar/sidebar-util.d.ts +28 -4
  87. package/build/build-esm/booking-wizard/features/sidebar/sidebar.d.ts +29 -21
  88. package/build/build-esm/booking-wizard/features/summary/summary-booking-option-pax.d.ts +7 -0
  89. package/build/build-esm/booking-wizard/features/summary/summary-booking-option-unit.d.ts +7 -0
  90. package/build/build-esm/booking-wizard/features/summary/summary-flight.d.ts +8 -0
  91. package/build/build-esm/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +10 -0
  92. package/build/build-esm/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +10 -0
  93. package/build/build-esm/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +10 -0
  94. package/build/build-esm/booking-wizard/features/summary/summary-slice.d.ts +14 -17
  95. package/build/build-esm/booking-wizard/features/summary/summary.d.ts +4 -5
  96. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +95 -45
  97. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form.d.ts +4 -5
  98. package/build/build-esm/booking-wizard/features/travelers-form/type-ahead-input.d.ts +16 -15
  99. package/build/build-esm/booking-wizard/features/travelers-form/validate-form.d.ts +7 -4
  100. package/build/build-esm/booking-wizard/index.d.ts +12 -11
  101. package/build/build-esm/booking-wizard/settings-context.d.ts +5 -6
  102. package/build/build-esm/booking-wizard/store.d.ts +41 -25
  103. package/build/build-esm/booking-wizard/types.d.ts +111 -59
  104. package/build/build-esm/booking-wizard/utils/class-util.d.ts +1 -1
  105. package/build/build-esm/booking-wizard/utils/localization-util.d.ts +1 -1
  106. package/build/build-esm/booking-wizard/utils/query-string-util.d.ts +21 -2
  107. package/build/build-esm/booking-wizard/utils/tide-api-utils.d.ts +2 -2
  108. package/build/build-esm/index.d.ts +2 -2
  109. package/build/build-esm/index.js +13478 -1875
  110. package/package.json +8 -4
  111. package/rollup.config.js +1 -6
  112. package/src/booking-wizard/components/message.tsx +14 -8
  113. package/src/booking-wizard/components/product-card.tsx +10 -39
  114. package/src/booking-wizard/components/step-indicator.tsx +1 -1
  115. package/src/booking-wizard/components/step-route.tsx +1 -1
  116. package/src/booking-wizard/features/booking/api.ts +44 -0
  117. package/src/booking-wizard/features/booking/booking-slice.ts +274 -40
  118. package/src/booking-wizard/features/booking/booking.tsx +193 -57
  119. package/src/booking-wizard/features/booking/selectors.ts +328 -0
  120. package/src/booking-wizard/features/confirmation/confirmation.tsx +22 -11
  121. package/src/booking-wizard/features/error/error.tsx +15 -2
  122. package/src/booking-wizard/features/price-details/price-details-api.ts +12 -6
  123. package/src/booking-wizard/features/price-details/price-details-slice.ts +80 -50
  124. package/src/booking-wizard/features/price-details/util.ts +135 -0
  125. package/src/booking-wizard/features/product-options/no-options.tsx +18 -0
  126. package/src/booking-wizard/features/product-options/none-option.tsx +118 -0
  127. package/src/booking-wizard/features/product-options/option-booking-group.tsx +210 -0
  128. package/src/booking-wizard/features/product-options/option-item.tsx +321 -0
  129. package/src/booking-wizard/features/product-options/option-pax-card.tsx +102 -0
  130. package/src/booking-wizard/features/product-options/option-pax-group.tsx +169 -0
  131. package/src/booking-wizard/features/product-options/option-room.tsx +300 -0
  132. package/src/booking-wizard/features/product-options/option-unit-group.tsx +192 -0
  133. package/src/booking-wizard/features/product-options/option-units-card.tsx +100 -0
  134. package/src/booking-wizard/features/product-options/options-form.tsx +226 -48
  135. package/src/booking-wizard/features/sidebar/index.tsx +43 -20
  136. package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +66 -0
  137. package/src/booking-wizard/features/sidebar/sidebar-util.ts +81 -39
  138. package/src/booking-wizard/features/sidebar/sidebar.tsx +150 -100
  139. package/src/booking-wizard/features/summary/summary-booking-option-pax.tsx +25 -0
  140. package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +25 -0
  141. package/src/booking-wizard/features/summary/summary-flight.tsx +35 -0
  142. package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +57 -0
  143. package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +51 -0
  144. package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +54 -0
  145. package/src/booking-wizard/features/summary/summary-slice.ts +1 -134
  146. package/src/booking-wizard/features/summary/summary.tsx +521 -134
  147. package/src/booking-wizard/features/travelers-form/travelers-form-slice.ts +55 -56
  148. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +202 -94
  149. package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +23 -3
  150. package/src/booking-wizard/features/travelers-form/validate-form.ts +40 -3
  151. package/src/booking-wizard/index.tsx +5 -6
  152. package/src/booking-wizard/settings-context.ts +33 -5
  153. package/src/booking-wizard/store.ts +5 -4
  154. package/src/booking-wizard/translations/translations.json +95 -61
  155. package/src/booking-wizard/types.ts +67 -10
  156. package/src/booking-wizard/utils/query-string-util.ts +42 -0
  157. package/build/build-cjs/booking-wizard/features/product-options/checkbox.d.ts +0 -11
  158. package/build/build-cjs/booking-wizard/features/product-options/option-details.d.ts +0 -11
  159. package/build/build-cjs/booking-wizard/features/product-options/product-options-api.d.ts +0 -26
  160. package/build/build-cjs/booking-wizard/features/product-options/product-options-slice.d.ts +0 -37
  161. package/build/build-cjs/booking-wizard/features/product-options/radio-button.d.ts +0 -10
  162. package/build/build-cjs/booking-wizard/features/product-options/rooms-slice.d.ts +0 -12
  163. package/build/build-cjs/booking-wizard/features/product-options/tree-level.d.ts +0 -7
  164. package/build/build-esm/booking-wizard/features/product-options/checkbox.d.ts +0 -11
  165. package/build/build-esm/booking-wizard/features/product-options/option-details.d.ts +0 -11
  166. package/build/build-esm/booking-wizard/features/product-options/product-options-api.d.ts +0 -26
  167. package/build/build-esm/booking-wizard/features/product-options/product-options-slice.d.ts +0 -37
  168. package/build/build-esm/booking-wizard/features/product-options/radio-button.d.ts +0 -10
  169. package/build/build-esm/booking-wizard/features/product-options/rooms-slice.d.ts +0 -12
  170. package/build/build-esm/booking-wizard/features/product-options/tree-level.d.ts +0 -7
  171. package/src/booking-wizard/features/product-options/checkbox.tsx +0 -38
  172. package/src/booking-wizard/features/product-options/option-details.tsx +0 -65
  173. package/src/booking-wizard/features/product-options/product-options-api.ts +0 -148
  174. package/src/booking-wizard/features/product-options/product-options-slice.ts +0 -149
  175. package/src/booking-wizard/features/product-options/radio-button.tsx +0 -35
  176. package/src/booking-wizard/features/product-options/rooms-slice.ts +0 -28
  177. package/src/booking-wizard/features/product-options/tree-level.tsx +0 -118
@@ -1,12 +1,25 @@
1
1
  import { FormikErrors } from "formik";
2
2
  import { isEmpty, set } from "lodash";
3
3
  import { TravelersFormValues } from "../../types";
4
+ import { CHILD_MAX_AGE } from "./travelers-form-slice";
4
5
 
5
6
  function isValidEmail(email: string) {
6
7
  return !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(email);
7
8
  }
8
9
 
9
- const validateForm = (values: TravelersFormValues) => {
10
+ function getAge(birthDateText: string, startDateText: string) {
11
+ var birthDate = new Date(birthDateText);
12
+ var startDate = new Date(startDateText);
13
+
14
+ var age = startDate.getFullYear() - birthDate.getFullYear();
15
+ var m = startDate.getMonth() - birthDate.getMonth();
16
+ if (m < 0 || (m === 0 && startDate.getDate() < birthDate.getDate())) {
17
+ age--;
18
+ }
19
+ return age;
20
+ }
21
+
22
+ const validateForm = (values: TravelersFormValues, agentRequired?: boolean) => {
10
23
  const errors: FormikErrors<TravelersFormValues> = {};
11
24
 
12
25
  values.adults.forEach((adult, index) => {
@@ -36,6 +49,16 @@ const validateForm = (values: TravelersFormValues) => {
36
49
  `adults[${index}].birthDate`,
37
50
  `Reiziger ${index + 1}: geboortedatum`
38
51
  );
52
+ } else if (values.startDate) {
53
+ const age = getAge(adult.birthDate, values.startDate);
54
+
55
+ if (age <= CHILD_MAX_AGE) {
56
+ set(
57
+ errors,
58
+ `adults[${index}].birthDate`,
59
+ `Reiziger ${index + 1}: is geen volwassene`
60
+ );
61
+ }
39
62
  }
40
63
  });
41
64
 
@@ -70,15 +93,25 @@ const validateForm = (values: TravelersFormValues) => {
70
93
  `children[${index}].birthDate`,
71
94
  `Reiziger ${values.adults.length + index + 1}: geboortedatum`
72
95
  );
96
+ } else if (values.startDate) {
97
+ const age = getAge(child.birthDate, values.startDate);
98
+
99
+ if (age > CHILD_MAX_AGE) {
100
+ set(
101
+ errors,
102
+ `children[${index}].birthDate`,
103
+ `Reiziger ${index + 1}: is geen kind`
104
+ );
105
+ }
73
106
  }
74
107
  });
75
108
 
76
- if (isEmpty(values.mainBookerId)) {
109
+ if (values.mainBookerId < 0) {
77
110
  errors.mainBookerId = "Er werd geen hoofdboeker geselecteerd";
78
111
  }
79
112
 
80
113
  if (isEmpty(values.street)) {
81
- errors.street = "Hoofdboeker: adres";
114
+ errors.street = "Hoofdboeker: straat";
82
115
  }
83
116
 
84
117
  if (isEmpty(values.houseNumber)) {
@@ -113,6 +146,10 @@ const validateForm = (values: TravelersFormValues) => {
113
146
  errors.emailConfirmation = "Hoofdboeker: email komt niet overeen";
114
147
  }
115
148
 
149
+ if (agentRequired && !values.travelAgentId) {
150
+ errors.travelAgentId = "Reisagent is verplicht";
151
+ }
152
+
116
153
  return errors;
117
154
  };
118
155
 
@@ -6,17 +6,17 @@ import { Settings } from "./types";
6
6
  import Booking from "./features/booking/booking";
7
7
 
8
8
  interface BookingWizardProps {
9
- productId: number;
9
+ productCode: string;
10
10
  productName: string;
11
- productDescription?: string;
11
+ allotmentName?: string;
12
+ tourCode?: string;
12
13
  thumbnailUrl?: string;
13
14
  settings: Settings;
14
15
  }
15
16
 
16
17
  const BookingWizard: React.FC<BookingWizardProps> = ({
17
- productId,
18
+ productCode,
18
19
  productName,
19
- productDescription,
20
20
  thumbnailUrl,
21
21
  settings,
22
22
  }) => {
@@ -24,9 +24,8 @@ const BookingWizard: React.FC<BookingWizardProps> = ({
24
24
  <SettingsContext.Provider value={settings}>
25
25
  <Provider store={store}>
26
26
  <Booking
27
- productId={productId}
27
+ productCode={productCode}
28
28
  productName={productName}
29
- productDescription={productDescription}
30
29
  thumbnailUrl={thumbnailUrl}
31
30
  />
32
31
  </Provider>
@@ -4,20 +4,48 @@ import { Settings } from "./types";
4
4
  interface SettingsContextProps extends Settings {}
5
5
 
6
6
  const SettingsContext = React.createContext<SettingsContextProps>({
7
+ language: "nl-BE",
8
+ generatePaymentUrl: false,
9
+ currency: "EUR",
7
10
  officeId: 1,
11
+ tagIds: [],
12
+ hideAgentSelection: false,
13
+ agentAdressId: undefined,
14
+ affiliateSlug: undefined,
8
15
  productPath: "/",
9
16
  basePath: "/boeken",
10
- optionsPathSuffix: "/opties",
11
- summaryPathSuffix: "/samenvatting",
12
- confirmationPathSuffix: "/bevestiging",
13
- errorPathSuffix: "/mislukt",
17
+ options: {
18
+ pathSuffix: "/opties",
19
+ },
20
+ summary: {
21
+ pathSuffix: "/samenvatting",
22
+ checkboxes: null,
23
+ },
24
+ confirmation: {
25
+ pathSuffix: "/bevestiging",
26
+ },
27
+ error: {
28
+ pathSuffix: "/mislukt",
29
+ },
14
30
  companyContactEmail: "info@qite.be",
31
+ companyContactPhone: "093362299",
15
32
  showProductCardRating: false,
16
- showSidebarAccommodationInfo: false,
17
33
  showSidebarDeposit: false,
18
34
  sidebarHeaderComponent: null,
19
35
  sidebarFooterComponent: null,
36
+ loaderComponent: null,
20
37
  icons: null,
38
+ bookingOptions: {
39
+ b2b: {
40
+ entryStatus: 0,
41
+ },
42
+ b2b2c: {
43
+ entryStatus: 0,
44
+ },
45
+ b2c: {
46
+ entryStatus: 0,
47
+ },
48
+ },
21
49
  });
22
50
 
23
51
  export default SettingsContext;
@@ -1,19 +1,16 @@
1
1
  import { Action, ThunkAction, configureStore } from "@reduxjs/toolkit";
2
2
 
3
3
  import bookingReducer from "./features/booking/booking-slice";
4
- import productOptionsReducer from "./features/product-options/product-options-slice";
5
- import roomsReducer from "./features/product-options/rooms-slice";
6
4
  import priceDetailsReducer from "./features/price-details/price-details-slice";
7
5
  import travelersFormReducer from "./features/travelers-form/travelers-form-slice";
8
6
  import summaryReducer from "./features/summary/summary-slice";
7
+ import { useDispatch } from "react-redux";
9
8
 
10
9
  export const store = configureStore({
11
10
  reducer: {
12
11
  booking: bookingReducer,
13
12
  travelersForm: travelersFormReducer,
14
- productOptions: productOptionsReducer,
15
13
  priceDetails: priceDetailsReducer,
16
- rooms: roomsReducer,
17
14
  summary: summaryReducer,
18
15
  },
19
16
  });
@@ -26,3 +23,7 @@ export type AppThunk<ReturnType = void> = ThunkAction<
26
23
  unknown,
27
24
  Action<string>
28
25
  >;
26
+
27
+ export type AppDispatch = typeof store.dispatch;
28
+
29
+ export const useAppDispatch = () => useDispatch<AppDispatch>();
@@ -1,91 +1,125 @@
1
1
  {
2
+ "STEPS": {
3
+ "PERSONAL_DETAILS": "Persoonlijke gegevens",
4
+ "TRAVEL_OPTIONS": "Opties",
5
+ "SUMMARY": "Overzicht",
6
+ "CONFIRMATION": "Bevestiging",
7
+ "ERROR": "Boeken mislukt",
8
+ "PREVIOUS": "Vorige stap",
9
+ "NEXT": "Volgende stap",
10
+ "SUBMIT": "Bevestig boeking"
11
+ },
12
+ "MAIN": {
13
+ "PREPARING_BOOKING": "Even geduld, we bereiden uw boeking voor",
14
+ "PRODUCT_UNAVAILABLE": "Product niet beschikbaar"
15
+ },
16
+ "SIDEBAR": {
17
+ "OVERVIEW": "Overzicht",
18
+ "SLIDE_TOTAL_PRICE": "Totaalbedrag: ",
19
+ "SLIDE_DEPOSIT": "Te betalen voorschot: ",
20
+ "TRAVEL_INFO": "Gegevens",
21
+ "TRAVELERS": "Personen",
22
+ "TRAVELERS_ADULTS": "volwassenen",
23
+ "TRAVELERS_ADULT": "volwassene",
24
+ "TRAVELERS_CHILDREN": "kinderen",
25
+ "TRAVELERS_CHILD": "kind",
26
+ "DEPARTURE": "Heenreis",
27
+ "DEPARTURE_SINGLE": "Datum",
28
+ "ARRIVAL": "Terugreis",
29
+ "FLIGHT": "Vlucht",
30
+ "ACCOMMODATION": "Geboekt",
31
+ "BASE_PRICE": "Basisprijs",
32
+ "OPTIONS": "Opties",
33
+ "INCLUDED_COSTS": "Inbegrepen",
34
+ "EXTRA_COSTS": "Bijkomende kosten",
35
+ "TOTAL_PRICE": "Totale prijs",
36
+ "DEPOSIT": "Te betalen voorschot",
37
+ "DEPOSIT_TEXT1": "De te nemen stappen voor het ",
38
+ "DEPOSIT_TEXT2": "restbedrag",
39
+ "DEPOSIT_TEXT3": " van ",
40
+ "DEPOSIT_TEXT4": " wordt op ",
41
+ "DEPOSIT_TEXT5": "stap 3 (\"overzicht\")",
42
+ "DEPOSIT_TEXT6": " in het boekingsproces beschreven.",
43
+ "LUGGAGE_INCLUDED": "Inclusief bagage",
44
+ "DEPARTURE_FLIGHT": "Vlucht heenreis",
45
+ "ARRIVAL_FLIGHT": "Vlucht terugreis",
46
+ "FLIGHT_DEPARTURE": "Vertrek",
47
+ "FLIGHT_ARRIVAL": "Aankomst",
48
+ "ON_REQUEST": "Op aanvraag",
49
+ "CHANGES": "overstappen"
50
+ },
2
51
  "TRAVELERS_FORM": {
3
52
  "PERSONS": "Personen",
4
- "TRAVELER_COUNT": "Aantal volwassenen",
5
53
  "TRAVELER": "Reiziger",
6
54
  "ADULT": "volwassene",
7
55
  "ADULTS": "volwassenen",
8
56
  "CHILD": "kind",
9
57
  "CHILDREN": "kinderen",
10
58
  "GENDER": "Aanspreking",
11
- "MALE": "Mr",
12
- "FEMALE": "Mw",
59
+ "MALE": "Meneer",
60
+ "FEMALE": "Mevrouw",
13
61
  "OTHER": "Anders",
14
62
  "MAIN_BOOKER": "Hoofdboeker",
15
63
  "FIRST_NAME": "Voornaam",
16
64
  "LAST_NAME": "Naam",
17
65
  "BIRTHDATE": "Geboortedatum",
18
- "STREET": "Adres",
66
+ "STREET": "Straat",
67
+ "STREET_PLACEHOLDER": "Jouw straat",
19
68
  "HOUSE_NUMBER": "Huisnr",
20
69
  "POST_BOX": "Bus",
21
70
  "ZIPCODE": "Postcode",
22
71
  "CITY": "Plaats",
72
+ "CITY_PLACEHOLDER": "Plaats",
23
73
  "COUNTRY": "Land",
24
74
  "SELECT_COUNTRY": "Selecteer land",
25
75
  "PHONE": "Telefoonnummer",
26
76
  "EMAIL": "E-mail",
27
77
  "REPEAT_EMAIL": "Herhaal e-mail",
28
- "VALIDATION_MESSAGE": "Controleer onderstaande velden in het formulier en vul deze correct in"
78
+ "VALIDATION_MESSAGE": "Controleer onderstaande velden in het formulier en vul deze correct in."
29
79
  },
30
- "STEPS": {
31
- "PERSONAL_DETAILS": "Persoonlijke gegevens",
32
- "TRAVEL_OPTIONS": "Reisopties",
33
- "SUMMARY": "Overzicht",
34
- "CONFIRMATION": "Bevestiging",
35
- "ERROR": "Boeken mislukt",
36
- "PREVIOUS": "Vorige stap",
37
- "NEXT": "Volgende stap",
38
- "SUBMIT": "Bevestig boeking"
80
+ "OPTIONS_FORM": {
81
+ "NO_OPTIONS_TITLE": "Geen opties",
82
+ "NO_OPTIONS_MESSAGE": "Deze reis heeft geen bijkomende opties.",
83
+ "UNIT_TITLE": "Gezelschap",
84
+ "PACKAGE": "Pakket",
85
+ "DAY": "dag",
86
+ "DAYS": "dagen",
87
+ "NIGHT": "nacht",
88
+ "NIGHTS": "nachten",
89
+ "PER_PAX_TITLE": "Per reiziger samenstellen",
90
+ "PER_BOOKING_TITLE": "Per dossier samenstellen",
91
+ "PER_UNIT_TITLE": "Per gezelschap samenstellen",
92
+ "NONE": "Geen"
39
93
  },
40
94
  "SUMMARY": {
41
- "TRAVELERS": "Reizigers",
42
- "VALIDATE_TITLE": "Controleer details",
43
- "VALIDATE_TEXT": "U staat op het punt om uw boeking te bevestigen. Controleer hierboven uw gegevens en wijzig waar nodig. Zodra u uw boeking hieronder bevestigt, stemt u in dat uw ingevulde en aangeduide gegevens overeenkomen met uw persoonsgegevens en reisopties. Deze zijn definitief en niet meer aanpasbaar.",
44
- "VALIDATE_CONFIRM": "Ik bevestig dat mijn persoonsgegevens en gekozen reisopties correct en definitief zijn."
45
- },
46
- "SIDEBAR": {
47
- "GUARANTEES_TITLE": "Onze garanties voor jouw droomreis",
48
- "GUARANTEES_TEXT1": "Wij garanderen dat je ",
49
- "GUARANTEES_TEXT2": "verzekerd",
50
- "GUARANTEES_TEXT3": ", ",
51
- "GUARANTEES_TEXT4": "veilig",
52
- "GUARANTEES_TEXT5": " en met een ",
53
- "GUARANTEES_TEXT6": "gerust hard",
54
- "GUARANTEES_TEXT7": " op reis vertrekt.",
55
- "GUARANTEES_CTA1": "Meer weten? ",
56
- "GUARANTEES_CTA2": "Ontdek onze garanties",
57
- "OVERVIEW": "Reisoverzicht",
58
- "SLIDE_TOTAL_PRICE": "Totaalbedrag: ",
59
- "SLIDE_DEPOSIT": "Te betalen voorschot: ",
60
- "TRAVEL_INFO": "Persoonlijke gegevens",
61
- "TRAVELERS": "Personen",
62
- "TRAVELERS_ADULTS": "volw.",
63
- "TRAVELERS_CHILDREN": "kind.",
64
- "DEPARTURE": "Vertrek",
65
- "ARRIVAL": "Retour",
66
- "FLIGHT": "Vlucht",
67
- "ACCOMMODATION": "Verblijf",
68
- "BASE_PRICE": "Basisprijs",
69
- "OPTIONS": "Reisopties",
70
- "INCLUDED_COSTS": "Inbegrepen",
71
- "EXTRA_COSTS": "Bijkomende kosten",
72
- "TOTAL_PRICE": "Totaalbedrag",
73
- "DEPOSIT": "Te betalen voorschot",
74
- "DEPOSIT_TEXT1": "De te nemen stappen voor het ",
75
- "DEPOSIT_TEXT2": "restbedrag",
76
- "DEPOSIT_TEXT3": " van ",
77
- "DEPOSIT_TEXT4": " wordt op ",
78
- "DEPOSIT_TEXT5": "stap 3 (\"overzicht\")",
79
- "DEPOSIT_TEXT6": " in het boekingsproces beschreven."
95
+ "PERSONAL_DETAILS": "Persoonlijke gegevens",
96
+ "TRAVELERS": "reizigers",
97
+ "TRAVELER": "reiziger",
98
+ "ADULTS": "volwassenen",
99
+ "ADULT": "volwassene",
100
+ "CHILDREN": "kinderen",
101
+ "CHILD": "kind",
102
+ "MAIN_BOOKER": "Hoofdboeker",
103
+ "NOTIFICATIONS_TITLE": "Aandacht",
104
+ "VALIDATE_TITLE": "Controleer je gegevens",
105
+ "VALIDATE_TEXT": "Je staat op het punt je boeking te bevestigen. Contoleer of alle gegevens correct zijn. Deze zijn definitief en niet meer aanpasbaar.",
106
+ "OPTIONS": "Opties",
107
+ "REMARKS": "Opmerkingen",
108
+ "VOUCHERS": "Vouchers",
109
+ "VOUCHER_VALIDATE": "Valideer voucher",
110
+ "ADD_VOUCHER": "Voucher toevoegen",
111
+ "VOUCHER_VALID": "Voucher is geldig",
112
+ "VOUCHER_INVALID": "Voucher is niet geldig"
80
113
  },
81
114
  "CONFIRMATION": {
82
- "HOME": "Naar de homepage",
83
- "MESSAGE_TEXT1": "Uw droomreis komt wel zeer dichtbij nu.",
84
- "MESSAGE_TEXT2": "Onze reisexperten gaan aan de slag met uw boeking en nemen ",
85
- "MESSAGE_TEXT3": "binnen de 48 werkuren",
86
- "MESSAGE_TEXT4": " contact met u op.",
87
- "QUESTIONS_TEXT1": "Hebt u nog vragen? ",
88
- "QUESTIONS_TEXT2": "Laat het ons dan zeker weten",
115
+ "TITLE_TEXT1": "Je boeking met nummer ",
116
+ "TITLE_TEXT2": " is bevestigd",
117
+ "MESSAGE_TEXT1": "Jouw droomreis komt nu heel dichtbij.",
118
+ "MESSAGE_TEXT2": "Onze reisspecialisten verwerken je reservatie en nemen ",
119
+ "MESSAGE_TEXT3": "binnen de 48u",
120
+ "MESSAGE_TEXT4": " contact met je op.",
121
+ "QUESTIONS_TEXT1": "Heb je nog vragen? ",
122
+ "QUESTIONS_TEXT2": "Laat het ons weten",
89
123
  "QUESTIONS_TEXT3": ".",
90
124
  "QUESTIONS_ALT": "Contacteer ons"
91
125
  },
@@ -93,7 +127,7 @@
93
127
  "TRY_AGAIN": "Probeer opnieuw te boeken",
94
128
  "MESSAGE_TEXT1": "Tijdens het bevestigen van uw reis is er iets misgelopen.",
95
129
  "MESSAGE_TEXT2": "Klik hieronder om nog eens te proberen.",
96
- "ERROR_TEXT1": "Blijft het misgaan?",
130
+ "ERROR_TEXT1": "Blijft het misgaan? ",
97
131
  "ERROR_TEXT2": "Laat het ons dan zeker weten",
98
132
  "ERROR_TEXT3": ".",
99
133
  "ERROR_ALT": "Contacteer ons"
@@ -1,32 +1,81 @@
1
1
  export interface Settings {
2
2
  officeId: number;
3
+ bookingOptions: BookingOptions;
3
4
  productPath: string;
4
5
  basePath: string;
5
- optionsPathSuffix: string;
6
- summaryPathSuffix: string;
7
- confirmationPathSuffix: string;
8
- errorPathSuffix: string;
6
+ options: {
7
+ pathSuffix: string;
8
+ };
9
+ summary: {
10
+ pathSuffix: string;
11
+ checkboxes?: SummaryCheckbox[] | null;
12
+ };
13
+ confirmation: {
14
+ pathSuffix: string;
15
+ };
16
+ error: {
17
+ pathSuffix: string;
18
+ };
19
+ language: string;
20
+ currency: string;
21
+ includeFlights?: boolean;
22
+ generatePaymentUrl?: boolean;
23
+ skipPaymentWithAgent?: boolean;
9
24
  companyContactEmail: string;
25
+ companyContactPhone: string;
10
26
  showProductCardRating: boolean;
11
- showSidebarAccommodationInfo: boolean;
12
27
  showSidebarDeposit: boolean;
13
28
  sidebarHeaderComponent?: JSX.Element | null;
14
29
  sidebarFooterComponent?: JSX.Element | null;
30
+ loaderComponent?: JSX.Element | null;
15
31
  icons?: string | null;
32
+ tagIds?: number[];
33
+ agentRequired?: boolean;
34
+ hideAgentSelection?: boolean;
35
+ agentAdressId?: number;
36
+ affiliateSlug?: string;
37
+ enableVoucher?: boolean;
16
38
  }
17
39
 
18
- export interface Traveler {
40
+ export interface BookingOptions {
41
+ b2b: BookingOptionsDetail;
42
+ b2b2c: BookingOptionsDetail;
43
+ b2c: BookingOptionsDetail;
44
+ }
45
+
46
+ export interface BookingOptionsDetail {
47
+ entryStatus: number;
48
+ customEntryStatusId?: number;
49
+ tagIds?: number[];
50
+ }
51
+
52
+ export interface SummaryCheckbox {
19
53
  id: string;
54
+ text: string;
55
+ isSelected: boolean;
56
+ }
57
+
58
+ export interface Traveler {
59
+ id: number;
20
60
  gender: string;
21
61
  firstName: string;
22
62
  lastName: string;
23
63
  birthDate: string;
24
64
  }
25
65
 
66
+ export interface Room {
67
+ adults: number;
68
+ children: number;
69
+ childAges: number[];
70
+ accommodationCode?: string;
71
+ regimeCode?: string;
72
+ }
73
+
26
74
  export interface TravelersFormValues {
75
+ startDate?: string;
27
76
  adults: Traveler[];
28
77
  children: Traveler[];
29
- mainBookerId: string;
78
+ mainBookerId: number;
30
79
  street: string;
31
80
  houseNumber: string;
32
81
  box: string;
@@ -36,27 +85,35 @@ export interface TravelersFormValues {
36
85
  phone: string;
37
86
  email: string;
38
87
  emailConfirmation: string;
88
+ travelAgentId: number;
89
+ travelAgentName: string;
39
90
  }
40
91
 
41
92
  export interface ProductAttributes {
42
- productId: number;
93
+ productCode: string;
94
+ productName: string;
43
95
  }
44
96
 
45
97
  export interface BookingAttributes {
46
98
  startDate: string;
47
99
  endDate: string;
48
- accommodation: string;
49
- regime: string;
50
100
  catalog: number;
101
+ rooms: Room[];
102
+ tourCode: string | null;
103
+ allotmentName: string | null;
104
+ allotmentIds: number[];
105
+ includeFlights?: boolean;
51
106
  }
52
107
 
53
108
  export interface FlightLine {
54
109
  departureAirportIata?: string;
55
110
  departureAirportDescription?: string;
56
111
  departureDate?: string;
112
+ departureTime?: string;
57
113
  arrivalAirportIata?: string;
58
114
  arrivalAirportDescription?: string;
59
115
  arrivalDate?: string;
116
+ arrivalTime?: string;
60
117
  airlineIata?: string;
61
118
  airlineDescription?: string;
62
119
  airlineNumber?: string;
@@ -1,3 +1,7 @@
1
+ import JsonURL from "@jsonurl/jsonurl";
2
+ import { isArray, isNil } from "lodash";
3
+ import { Room } from "../types";
4
+
1
5
  export const getDateFromParams = (
2
6
  params: URLSearchParams,
3
7
  name: string
@@ -27,3 +31,41 @@ export const getNumberFromParams = (
27
31
 
28
32
  return parseInt(numberString);
29
33
  };
34
+
35
+ export const getRoomsFromParams = (
36
+ params: URLSearchParams,
37
+ name: string
38
+ ): Room[] | null => {
39
+ const roomString = params.get(name);
40
+
41
+ if (roomString === null) {
42
+ return null;
43
+ }
44
+
45
+ const rooms = JsonURL.parse(roomString) as Room[] | undefined;
46
+
47
+ if (isNil(rooms)) {
48
+ return null;
49
+ }
50
+
51
+ return rooms.map((room) => {
52
+ if (!isArray(room.childAges)) room.childAges = [];
53
+ room.children = room.childAges.length ?? 0;
54
+ return room;
55
+ });
56
+ };
57
+
58
+ export const getStringFromParams = (
59
+ params: URLSearchParams,
60
+ name: string
61
+ ): string | null => {
62
+ return params.get(name);
63
+ };
64
+
65
+ export const getNumbersFromParams = (
66
+ params: URLSearchParams,
67
+ name: string
68
+ ): number[] => {
69
+ const numberStrings = params.getAll(name);
70
+ return numberStrings.map((x) => parseInt(x));
71
+ };
@@ -1,11 +0,0 @@
1
- import React from "react";
2
- interface CheckboxProps {
3
- text: string;
4
- value: string;
5
- name: string;
6
- required: boolean;
7
- defaultChecked: boolean;
8
- onChange?: React.ChangeEventHandler<HTMLInputElement>;
9
- }
10
- declare const Checkbox: React.FC<CheckboxProps>;
11
- export default Checkbox;
@@ -1,11 +0,0 @@
1
- import React from "react";
2
- interface OptionDetailsProps {
3
- startDate?: Date;
4
- endDate?: Date;
5
- price?: number;
6
- isCollapsible?: boolean;
7
- collapsed?: boolean;
8
- onToggleCollapse?: (collapsed: boolean) => void;
9
- }
10
- declare const OptionDetails: React.FC<OptionDetailsProps>;
11
- export default OptionDetails;
@@ -1,26 +0,0 @@
1
- import { PackageOption, PackageRoom } from "@qite/tide-client";
2
- export interface ProductOptionsRequest {
3
- officeId: number;
4
- catalogId: number;
5
- productId: number;
6
- accommodationCode?: string;
7
- regimeCode?: string;
8
- startDate: Date;
9
- endDate: Date;
10
- adultCount: number;
11
- childCount: number;
12
- }
13
- export interface ProductOptionsResult {
14
- productOptions?: ProductOption[];
15
- rooms?: PackageRoom[];
16
- cacheKey?: string;
17
- }
18
- export interface ProductOption extends Omit<PackageOption, "options" | "fromDate" | "toDate"> {
19
- parentCode: string;
20
- fromDate: string;
21
- toDate: string;
22
- }
23
- declare const productOptionsApi: {
24
- fetchProductOptions: (request: ProductOptionsRequest) => Promise<ProductOptionsResult | undefined>;
25
- };
26
- export default productOptionsApi;
@@ -1,37 +0,0 @@
1
- import { ProductOption } from "./product-options-api";
2
- export declare const fetchProductOptions: import("@reduxjs/toolkit").AsyncThunk<import("./product-options-api").ProductOptionsResult | undefined, void, {}>;
3
- export declare const selectOptions: (state: {
4
- booking: import("../booking/booking-slice").BookingState;
5
- travelersForm: import("../travelers-form/travelers-form-slice").TravelersFormState;
6
- productOptions: import("@reduxjs/toolkit").EntityState<ProductOption>;
7
- priceDetails: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PriceDetail>;
8
- rooms: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PackageRoom>;
9
- summary: import("../summary/summary-slice").SummaryState;
10
- }) => ProductOption[];
11
- export declare const selectSelectedOptions: import("reselect").OutputSelector<{
12
- booking: import("../booking/booking-slice").BookingState;
13
- travelersForm: import("../travelers-form/travelers-form-slice").TravelersFormState;
14
- productOptions: import("@reduxjs/toolkit").EntityState<ProductOption>;
15
- priceDetails: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PriceDetail>;
16
- rooms: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PackageRoom>;
17
- summary: import("../summary/summary-slice").SummaryState;
18
- }, ProductOption[], (res: ProductOption[]) => ProductOption[]>;
19
- export declare const selectDepartureFlight: import("reselect").OutputSelector<{
20
- booking: import("../booking/booking-slice").BookingState;
21
- travelersForm: import("../travelers-form/travelers-form-slice").TravelersFormState;
22
- productOptions: import("@reduxjs/toolkit").EntityState<ProductOption>;
23
- priceDetails: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PriceDetail>;
24
- rooms: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PackageRoom>;
25
- summary: import("../summary/summary-slice").SummaryState;
26
- }, ProductOption | undefined, (res: ProductOption[]) => ProductOption | undefined>;
27
- export declare const selectReturnFlight: import("reselect").OutputSelector<{
28
- booking: import("../booking/booking-slice").BookingState;
29
- travelersForm: import("../travelers-form/travelers-form-slice").TravelersFormState;
30
- productOptions: import("@reduxjs/toolkit").EntityState<ProductOption>;
31
- priceDetails: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PriceDetail>;
32
- rooms: import("@reduxjs/toolkit").EntityState<import("@qite/tide-client").PackageRoom>;
33
- summary: import("../summary/summary-slice").SummaryState;
34
- }, ProductOption | undefined, (res: ProductOption[]) => ProductOption | undefined>;
35
- export declare const updateOption: import("@reduxjs/toolkit").ActionCreatorWithPayload<ProductOption, string>;
36
- declare const _default: import("redux").Reducer<import("@reduxjs/toolkit").EntityState<ProductOption>, import("redux").AnyAction>;
37
- export default _default;
@@ -1,10 +0,0 @@
1
- import React from "react";
2
- interface RadioButtonProps {
3
- text: string;
4
- name: string;
5
- value: string;
6
- defaultChecked?: boolean;
7
- onChange?: React.ChangeEventHandler<HTMLInputElement>;
8
- }
9
- declare const RadioButton: React.FC<RadioButtonProps>;
10
- export default RadioButton;