@qite/tide-booking-component 1.2.3 → 1.2.5

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 (137) hide show
  1. package/.vs/ProjectSettings.json +3 -3
  2. package/.vs/VSWorkspaceState.json +5 -5
  3. package/README.md +8 -8
  4. package/build/build-cjs/booking-product/components/footer.d.ts +1 -0
  5. package/build/build-cjs/booking-product/components/rooms.d.ts +2 -0
  6. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +1 -1
  7. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-flight.d.ts +1 -1
  8. package/build/build-cjs/booking-wizard/features/flight-options/flight-option.d.ts +1 -1
  9. package/build/build-cjs/booking-wizard/types.d.ts +5 -0
  10. package/build/build-cjs/index.js +1453 -735
  11. package/build/build-cjs/shared/utils/localization-util.d.ts +4 -0
  12. package/build/build-esm/booking-product/components/footer.d.ts +1 -0
  13. package/build/build-esm/booking-product/components/rooms.d.ts +2 -0
  14. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +1 -1
  15. package/build/build-esm/booking-wizard/features/flight-options/flight-option-flight.d.ts +1 -1
  16. package/build/build-esm/booking-wizard/features/flight-options/flight-option.d.ts +1 -1
  17. package/build/build-esm/booking-wizard/types.d.ts +5 -0
  18. package/build/build-esm/index.js +1455 -737
  19. package/build/build-esm/shared/utils/localization-util.d.ts +4 -0
  20. package/package.json +75 -77
  21. package/src/booking-product/components/age-select.tsx +35 -41
  22. package/src/booking-product/components/amount-input.tsx +78 -64
  23. package/src/booking-product/components/date-range-picker/calendar-day.tsx +58 -54
  24. package/src/booking-product/components/date-range-picker/calendar.tsx +178 -176
  25. package/src/booking-product/components/date-range-picker/index.tsx +196 -181
  26. package/src/booking-product/components/dates.tsx +136 -132
  27. package/src/booking-product/components/footer.tsx +69 -64
  28. package/src/booking-product/components/header.tsx +79 -68
  29. package/src/booking-product/components/icon.tsx +251 -208
  30. package/src/booking-product/components/product.tsx +314 -277
  31. package/src/booking-product/components/rooms.tsx +195 -177
  32. package/src/booking-product/index.tsx +30 -30
  33. package/src/booking-product/settings-context.ts +14 -14
  34. package/src/booking-product/types.ts +28 -28
  35. package/src/booking-product/utils/api.ts +25 -25
  36. package/src/booking-product/utils/price.ts +29 -27
  37. package/src/booking-wizard/api-settings-slice.ts +24 -24
  38. package/src/booking-wizard/components/icon.tsx +508 -60
  39. package/src/booking-wizard/components/message.tsx +34 -34
  40. package/src/booking-wizard/components/multi-range-filter.tsx +113 -113
  41. package/src/booking-wizard/components/product-card.tsx +37 -37
  42. package/src/booking-wizard/components/step-indicator.tsx +51 -51
  43. package/src/booking-wizard/components/step-route.tsx +27 -27
  44. package/src/booking-wizard/declarations.d.ts +4 -4
  45. package/src/booking-wizard/features/booking/api.ts +49 -45
  46. package/src/booking-wizard/features/booking/booking-self-contained.tsx +384 -357
  47. package/src/booking-wizard/features/booking/booking-slice.ts +662 -603
  48. package/src/booking-wizard/features/booking/booking.tsx +356 -349
  49. package/src/booking-wizard/features/booking/constants.ts +16 -16
  50. package/src/booking-wizard/features/booking/selectors.ts +441 -408
  51. package/src/booking-wizard/features/confirmation/confirmation.tsx +97 -94
  52. package/src/booking-wizard/features/error/error.tsx +78 -75
  53. package/src/booking-wizard/features/flight-options/flight-filter.tsx +432 -344
  54. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +385 -351
  55. package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +229 -214
  56. package/src/booking-wizard/features/flight-options/flight-option.tsx +81 -66
  57. package/src/booking-wizard/features/flight-options/flight-utils.ts +516 -401
  58. package/src/booking-wizard/features/flight-options/index.tsx +196 -177
  59. package/src/booking-wizard/features/price-details/price-details-api.ts +24 -24
  60. package/src/booking-wizard/features/price-details/price-details-slice.ts +178 -171
  61. package/src/booking-wizard/features/price-details/util.ts +155 -155
  62. package/src/booking-wizard/features/product-options/no-options.tsx +21 -21
  63. package/src/booking-wizard/features/product-options/none-option.tsx +120 -120
  64. package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +64 -66
  65. package/src/booking-wizard/features/product-options/option-booking-group.tsx +216 -210
  66. package/src/booking-wizard/features/product-options/option-item.tsx +317 -318
  67. package/src/booking-wizard/features/product-options/option-pax-card.tsx +201 -117
  68. package/src/booking-wizard/features/product-options/option-pax-group.tsx +175 -169
  69. package/src/booking-wizard/features/product-options/option-room.tsx +321 -314
  70. package/src/booking-wizard/features/product-options/option-unit-group.tsx +198 -192
  71. package/src/booking-wizard/features/product-options/option-units-card.tsx +185 -102
  72. package/src/booking-wizard/features/product-options/options-form.tsx +459 -437
  73. package/src/booking-wizard/features/room-options/index.tsx +187 -172
  74. package/src/booking-wizard/features/room-options/room-utils.ts +190 -143
  75. package/src/booking-wizard/features/room-options/room.tsx +160 -124
  76. package/src/booking-wizard/features/room-options/traveler-rooms.tsx +75 -63
  77. package/src/booking-wizard/features/sidebar/index.tsx +76 -76
  78. package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +68 -68
  79. package/src/booking-wizard/features/sidebar/sidebar-util.ts +177 -177
  80. package/src/booking-wizard/features/sidebar/sidebar.tsx +364 -346
  81. package/src/booking-wizard/features/summary/summary-booking-option-pax.tsx +25 -25
  82. package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +25 -25
  83. package/src/booking-wizard/features/summary/summary-flight.tsx +39 -39
  84. package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +69 -57
  85. package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +63 -51
  86. package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +66 -54
  87. package/src/booking-wizard/features/summary/summary-slice.ts +28 -28
  88. package/src/booking-wizard/features/summary/summary.tsx +674 -641
  89. package/src/booking-wizard/features/travelers-form/travelers-form-slice.ts +164 -164
  90. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +754 -755
  91. package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +101 -101
  92. package/src/booking-wizard/features/travelers-form/validate-form.ts +245 -245
  93. package/src/booking-wizard/index.tsx +36 -36
  94. package/src/booking-wizard/settings-context.ts +60 -60
  95. package/src/booking-wizard/store.ts +31 -31
  96. package/src/booking-wizard/types.ts +276 -271
  97. package/src/index.ts +4 -5
  98. package/src/shared/components/loader.tsx +16 -16
  99. package/src/shared/translations/en-GB.json +232 -0
  100. package/src/shared/translations/fr-BE.json +233 -233
  101. package/src/shared/translations/nl-BE.json +232 -232
  102. package/src/shared/types.ts +4 -4
  103. package/src/shared/utils/localization-util.ts +62 -56
  104. package/src/shared/utils/query-string-util.ts +119 -116
  105. package/src/shared/utils/tide-api-utils.ts +36 -36
  106. package/styles/booking-product-variables.scss +394 -288
  107. package/styles/booking-product.scss +446 -440
  108. package/styles/booking-wizard-variables.scss +871 -0
  109. package/styles/booking-wizard.scss +59 -4
  110. package/styles/components/_animations.scss +39 -39
  111. package/styles/components/_base.scss +107 -106
  112. package/styles/components/_booking.scss +879 -0
  113. package/styles/components/_button.scss +238 -185
  114. package/styles/components/_checkbox.scss +219 -0
  115. package/styles/components/_cta.scss +208 -67
  116. package/styles/components/_date-list.scss +41 -0
  117. package/styles/components/_date-range-picker.scss +225 -224
  118. package/styles/components/_decrement-increment.scss +35 -37
  119. package/styles/components/_dropdown.scss +72 -74
  120. package/styles/components/_flight-option.scss +1429 -0
  121. package/styles/components/_form.scss +1583 -136
  122. package/styles/components/_info-message.scss +71 -0
  123. package/styles/components/_input.scss +25 -0
  124. package/styles/components/_list.scss +187 -0
  125. package/styles/components/_loader.scss +72 -71
  126. package/styles/components/_mixins.scss +550 -518
  127. package/styles/components/_placeholders.scss +166 -166
  128. package/styles/components/_pricing-summary.scss +155 -0
  129. package/styles/components/_qsm.scss +17 -20
  130. package/styles/components/_radiobutton.scss +170 -0
  131. package/styles/components/_select-wrapper.scss +80 -0
  132. package/styles/components/_spinner.scss +29 -0
  133. package/styles/components/_step-indicators.scss +168 -0
  134. package/styles/components/_table.scss +81 -0
  135. package/styles/components/_tree.scss +530 -0
  136. package/styles/components/_typeahead.scss +281 -0
  137. package/styles/components/_variables.scss +89 -89
@@ -1,117 +1,201 @@
1
- import {
2
- BookingOptionGroup,
3
- BookingOptionPax,
4
- BookingPackagePax,
5
- PerPaxPackageOption,
6
- } from "@qite/tide-client/build/types";
7
- import React, { useEffect, useState } from "react";
8
- import { useSelector } from "react-redux";
9
- import { buildClassName } from "../../../shared/utils/class-util";
10
- import { selectBookingPackagePax, selectTranslations } from "../booking/selectors";
11
- import { CHILD_MAX_AGE } from "../travelers-form/travelers-form-slice";
12
- import OptionPaxGroup from "./option-pax-group";
13
-
14
- interface OptionPaxCardProps {
15
- pax: BookingOptionPax[];
16
- requestRoomsPax?: BookingPackagePax[];
17
- parentIndex?: number;
18
- onPaxChange?: (pax: BookingOptionPax[], index?: number) => void;
19
- }
20
-
21
- const OptionPaxCard: React.FC<OptionPaxCardProps> = ({
22
- pax,
23
- requestRoomsPax,
24
- parentIndex,
25
- onPaxChange,
26
- }) => {
27
- const [toggleStates, setToggleStates] = useState<boolean[]>();
28
- const translations = useSelector(selectTranslations);
29
-
30
- useEffect(() => {
31
- if (!toggleStates || toggleStates.length !== pax.length) {
32
- setToggleStates(pax.map(() => true));
33
- }
34
- }, [pax, toggleStates, setToggleStates]);
35
-
36
- const bookingPax = useSelector(selectBookingPackagePax);
37
-
38
- const getPaxName = (bookingOptionPax: BookingOptionPax) => {
39
- const item = bookingPax.find((x) => x.id === bookingOptionPax.id);
40
- if (!item?.firstName && !item?.lastName) {
41
- return bookingOptionPax?.paxName;
42
- }
43
- return `${item?.firstName} ${item?.lastName}`;
44
- };
45
-
46
- const onGroupChange = (
47
- group: BookingOptionGroup<PerPaxPackageOption>,
48
- paxId: number
49
- ) => {
50
- const updatedPax = pax.map((p) => {
51
- return p.id !== paxId
52
- ? p
53
- : {
54
- ...p,
55
- groups: p.groups.map((pg) => {
56
- return pg.name !== group.name ? pg : group;
57
- }),
58
- };
59
- });
60
-
61
- if (onPaxChange) onPaxChange(updatedPax, parentIndex);
62
- };
63
-
64
- return (
65
- <>
66
- {pax.map((p, i) => (
67
- <div
68
- key={i}
69
- className={buildClassName([
70
- "booking-card__group",
71
- toggleStates && toggleStates[i] && "booking-card__group--active",
72
- ])}
73
- >
74
- <div className="booking-card__group-header">
75
- <h3 className="booking-card__body-heading">{getPaxName(p)}</h3>
76
- {requestRoomsPax?.find((x) => x.id == p.id)?.age && (
77
- <p className="form__region-label">
78
- {requestRoomsPax.find((x) => x.id == p.id)?.age! > CHILD_MAX_AGE
79
- ? translations.TRAVELERS_FORM.ADULT
80
- : translations.TRAVELERS_FORM.CHILD}
81
- </p>
82
- )}
83
- <div className="booking-card__actions">
84
- <button
85
- type="button"
86
- className="booking-card__toggle"
87
- onClick={() => {
88
- setToggleStates(
89
- toggleStates?.map((s, si) => (si == i ? !s : s))
90
- );
91
- }}
92
- ></button>
93
- </div>
94
- </div>
95
- {toggleStates &&
96
- toggleStates[i] &&
97
- p.groups.map(
98
- (pg) =>
99
- pg && (
100
- <OptionPaxGroup
101
- key={pg.name}
102
- paxId={p.id}
103
- group={pg}
104
- firstClassName={"booking-card__group-body"}
105
- secondClassName={"booking-card__group-heading"}
106
- parentId={`${p.id}_${pg.name}`}
107
- onGroupChange={onGroupChange}
108
- />
109
- )
110
- )}
111
- </div>
112
- ))}
113
- </>
114
- );
115
- };
116
-
117
- export default OptionPaxCard;
1
+ import {
2
+ AirlineBookingPackageOption,
3
+ AirportBookingPackageOption,
4
+ BookingAirlineGroup,
5
+ BookingAirportGroup,
6
+ BookingOptionGroup,
7
+ BookingOptionPax,
8
+ BookingPackagePax,
9
+ PerPaxPackageOption,
10
+ } from "@qite/tide-client/build/types";
11
+ import React, { useEffect, useState } from "react";
12
+ import { useSelector } from "react-redux";
13
+ import { buildClassName } from "../../../shared/utils/class-util";
14
+ import {
15
+ selectBookingPackagePax,
16
+ selectDepartureFlight,
17
+ selectReturnFlight,
18
+ selectTranslations,
19
+ } from "../booking/selectors";
20
+ import { CHILD_MAX_AGE } from "../travelers-form/travelers-form-slice";
21
+ import OptionPaxGroup from "./option-pax-group";
22
+ import OptionBookingAirlineGroup from "./option-booking-airline-group";
23
+
24
+ interface OptionPaxCardProps {
25
+ pax: BookingOptionPax[];
26
+ requestRoomsPax?: BookingPackagePax[];
27
+ parentIndex?: number;
28
+ onPaxChange?: (pax: BookingOptionPax[], index?: number) => void;
29
+ }
30
+
31
+ const OptionPaxCard: React.FC<OptionPaxCardProps> = ({
32
+ pax,
33
+ requestRoomsPax,
34
+ parentIndex,
35
+ onPaxChange,
36
+ }) => {
37
+ const [toggleStates, setToggleStates] = useState<boolean[]>();
38
+ const translations = useSelector(selectTranslations);
39
+ const departureFlight = useSelector(selectDepartureFlight);
40
+ const returnFlight = useSelector(selectReturnFlight);
41
+
42
+ useEffect(() => {
43
+ if (!toggleStates || toggleStates.length !== pax.length) {
44
+ setToggleStates(pax.map(() => true));
45
+ }
46
+ }, [pax, toggleStates, setToggleStates]);
47
+
48
+ const bookingPax = useSelector(selectBookingPackagePax);
49
+
50
+ const getPaxName = (bookingOptionPax: BookingOptionPax) => {
51
+ const item = bookingPax.find((x) => x.id === bookingOptionPax.id);
52
+ if (!item?.firstName && !item?.lastName) {
53
+ return bookingOptionPax?.paxName;
54
+ }
55
+ return `${item?.firstName} ${item?.lastName}`;
56
+ };
57
+
58
+ const onGroupChange = (
59
+ group: BookingOptionGroup<PerPaxPackageOption>,
60
+ paxId: number
61
+ ) => {
62
+ const updatedPax = pax.map((p) => {
63
+ return p.id !== paxId
64
+ ? p
65
+ : {
66
+ ...p,
67
+ groups: p.groups.map((pg) => {
68
+ return pg.name !== group.name ? pg : group;
69
+ }),
70
+ };
71
+ });
72
+
73
+ if (onPaxChange) onPaxChange(updatedPax, parentIndex);
74
+ };
75
+
76
+ const getAirlineGroups = (p: BookingOptionPax) => {
77
+ return p.airlineGroups.filter(
78
+ (x) =>
79
+ x.flightIds.includes(departureFlight?.entryLineGuid ?? "") ||
80
+ x.flightIds.includes(returnFlight?.entryLineGuid ?? "")
81
+ );
82
+ };
83
+
84
+ const handleOnAirlineGroupChange = (
85
+ group: BookingAirlineGroup<AirlineBookingPackageOption>,
86
+ paxId: number
87
+ ) => {
88
+ const updatedPax = pax.map((p) => {
89
+ return p.id !== paxId
90
+ ? p
91
+ : {
92
+ ...p,
93
+ airlineGroups: p.airlineGroups.map((g) =>
94
+ g.label === group.label ? group : g
95
+ ),
96
+ };
97
+ });
98
+
99
+ if (onPaxChange) onPaxChange(updatedPax, parentIndex);
100
+ };
101
+
102
+ const getAirportGroups = (p: BookingOptionPax) => {
103
+ return p.airportGroups.filter(
104
+ (x) =>
105
+ x.flightIds.includes(departureFlight?.entryLineGuid ?? "") ||
106
+ x.flightIds.includes(returnFlight?.entryLineGuid ?? "")
107
+ );
108
+ };
109
+
110
+ const handleOnAirportGroupChange = (
111
+ group: BookingAirportGroup<AirportBookingPackageOption>,
112
+ paxId: number
113
+ ) => {
114
+ const updatedPax = pax.map((p) => {
115
+ return p.id !== paxId
116
+ ? p
117
+ : {
118
+ ...p,
119
+ airportGroups: p.airportGroups.map((g) =>
120
+ g.label === group.label ? group : g
121
+ ),
122
+ };
123
+ });
124
+
125
+ if (onPaxChange) onPaxChange(updatedPax, parentIndex);
126
+ };
127
+
128
+ return (
129
+ <>
130
+ {pax.map((p, i) => (
131
+ <div
132
+ key={i}
133
+ className={buildClassName([
134
+ "booking-card__group",
135
+ toggleStates && toggleStates[i] && "booking-card__group--active",
136
+ ])}
137
+ >
138
+ <div className="booking-card__group-header">
139
+ <h3 className="booking-card__body-heading">{getPaxName(p)}</h3>
140
+ {requestRoomsPax?.find((x) => x.id == p.id)?.age && (
141
+ <p className="form__region-label">
142
+ {requestRoomsPax.find((x) => x.id == p.id)?.age! > CHILD_MAX_AGE
143
+ ? translations.TRAVELERS_FORM.ADULT
144
+ : translations.TRAVELERS_FORM.CHILD}
145
+ </p>
146
+ )}
147
+ <div className="booking-card__actions">
148
+ <button
149
+ type="button"
150
+ className="booking-card__toggle"
151
+ onClick={() => {
152
+ setToggleStates(
153
+ toggleStates?.map((s, si) => (si == i ? !s : s))
154
+ );
155
+ }}
156
+ ></button>
157
+ </div>
158
+ </div>
159
+ {toggleStates && toggleStates[i] && (
160
+ <>
161
+ {p.groups.map(
162
+ (pg) =>
163
+ pg && (
164
+ <OptionPaxGroup
165
+ key={pg.name}
166
+ paxId={p.id}
167
+ group={pg}
168
+ firstClassName={"booking-card__group-body"}
169
+ secondClassName={"booking-card__group-heading"}
170
+ parentId={`${p.id}_${pg.name}`}
171
+ onGroupChange={onGroupChange}
172
+ />
173
+ )
174
+ )}
175
+ {getAirlineGroups(p).map((group, i) => (
176
+ <OptionBookingAirlineGroup
177
+ key={`${group.label}_${i}`}
178
+ airGroup={group}
179
+ onGroupChange={(updatedGroup) => {
180
+ handleOnAirlineGroupChange(updatedGroup, p.id);
181
+ }}
182
+ />
183
+ ))}
184
+ {getAirportGroups(p).map((group, i) => (
185
+ <OptionBookingAirlineGroup
186
+ key={`${group.label}_${i}`}
187
+ airGroup={group}
188
+ onGroupChange={(updatedGroup) => {
189
+ handleOnAirportGroupChange(updatedGroup, p.id);
190
+ }}
191
+ />
192
+ ))}
193
+ </>
194
+ )}
195
+ </div>
196
+ ))}
197
+ </>
198
+ );
199
+ };
200
+
201
+ export default OptionPaxCard;