@qite/tide-booking-component 1.1.3 → 1.2.0

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 (63) hide show
  1. package/build/build-cjs/booking-product/components/multi-range-filter.d.ts +12 -0
  2. package/build/build-cjs/booking-wizard/features/booking/api.d.ts +4 -1
  3. package/build/build-cjs/booking-wizard/features/booking/booking-slice.d.ts +7 -3
  4. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +23 -17
  5. package/build/build-cjs/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
  6. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
  7. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
  8. package/build/build-cjs/booking-wizard/features/flight-options/flight-option.d.ts +4 -9
  9. package/build/build-cjs/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
  10. package/build/build-cjs/booking-wizard/features/room-options/room-utils.d.ts +9 -0
  11. package/build/build-cjs/booking-wizard/features/room-options/room.d.ts +12 -0
  12. package/build/build-cjs/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
  13. package/build/build-cjs/booking-wizard/types.d.ts +101 -0
  14. package/build/build-cjs/index.js +1563 -606
  15. package/build/build-cjs/shared/utils/localization-util.d.ts +30 -2
  16. package/build/build-esm/booking-product/components/multi-range-filter.d.ts +12 -0
  17. package/build/build-esm/booking-wizard/features/booking/api.d.ts +4 -1
  18. package/build/build-esm/booking-wizard/features/booking/booking-slice.d.ts +7 -3
  19. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +23 -17
  20. package/build/build-esm/booking-wizard/features/flight-options/flight-filter.d.ts +9 -0
  21. package/build/build-esm/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -0
  22. package/build/build-esm/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -0
  23. package/build/build-esm/booking-wizard/features/flight-options/flight-option.d.ts +4 -9
  24. package/build/build-esm/booking-wizard/features/flight-options/flight-utils.d.ts +6 -0
  25. package/build/build-esm/booking-wizard/features/room-options/room-utils.d.ts +9 -0
  26. package/build/build-esm/booking-wizard/features/room-options/room.d.ts +12 -0
  27. package/build/build-esm/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -0
  28. package/build/build-esm/booking-wizard/types.d.ts +101 -0
  29. package/build/build-esm/index.js +1564 -607
  30. package/build/build-esm/shared/utils/localization-util.d.ts +30 -2
  31. package/package.json +3 -3
  32. package/rollup.config.js +23 -23
  33. package/src/booking-product/components/multi-range-filter.css +115 -0
  34. package/src/booking-product/components/multi-range-filter.tsx +114 -0
  35. package/src/booking-wizard/components/labeled-input.tsx +64 -64
  36. package/src/booking-wizard/components/labeled-select.tsx +69 -69
  37. package/src/booking-wizard/components/step-indicator.tsx +3 -3
  38. package/src/booking-wizard/features/booking/api.ts +12 -1
  39. package/src/booking-wizard/features/booking/booking-self-contained.tsx +50 -20
  40. package/src/booking-wizard/features/booking/booking-slice.ts +45 -9
  41. package/src/booking-wizard/features/booking/booking.tsx +67 -56
  42. package/src/booking-wizard/features/booking/selectors.ts +38 -11
  43. package/src/booking-wizard/features/flight-options/flight-filter.tsx +343 -0
  44. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +350 -0
  45. package/src/booking-wizard/features/flight-options/flight-option.tsx +30 -759
  46. package/src/booking-wizard/features/flight-options/flight-utils.ts +401 -0
  47. package/src/booking-wizard/features/flight-options/index.tsx +55 -368
  48. package/src/booking-wizard/features/price-details/util.ts +6 -6
  49. package/src/booking-wizard/features/product-options/option-room.tsx +3 -5
  50. package/src/booking-wizard/features/product-options/options-form.tsx +46 -54
  51. package/src/booking-wizard/features/room-options/index.tsx +48 -144
  52. package/src/booking-wizard/features/room-options/room-utils.ts +143 -0
  53. package/src/booking-wizard/features/room-options/room.tsx +124 -0
  54. package/src/booking-wizard/features/room-options/traveler-rooms.tsx +63 -0
  55. package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -2
  56. package/src/booking-wizard/features/summary/summary.tsx +2 -2
  57. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +1 -1
  58. package/src/booking-wizard/types.ts +116 -0
  59. package/src/shared/components/rating.tsx +21 -21
  60. package/src/shared/translations/fr-BE.json +222 -192
  61. package/src/shared/translations/nl-BE.json +222 -192
  62. package/src/shared/utils/class-util.ts +9 -9
  63. package/tsconfig.json +24 -24
@@ -0,0 +1,350 @@
1
+ import React, { useState } from 'react';
2
+ import { useSelector } from "react-redux";
3
+ import { buildClassName } from '../../../shared/utils/class-util';
4
+ import { GroupedFlightDetails } from "../../types";
5
+ import { selectTranslations } from "../booking/selectors";
6
+ import { getDateText } from '../sidebar/sidebar-util';
7
+
8
+ interface FlightOptionFlightProps {
9
+ details: GroupedFlightDetails,
10
+ isOptionsVisible: boolean;
11
+ }
12
+
13
+ const FlightOptionFlight: React.FC<FlightOptionFlightProps> = ({
14
+ details,
15
+ isOptionsVisible
16
+ }) => {
17
+ const translations = useSelector(selectTranslations);
18
+
19
+ const [isDetailVisible, setIsDetailVisible] = useState<boolean>(false);
20
+
21
+ return (
22
+ <div className="flight__flight">
23
+ <div className="flight__flight__container">
24
+ <div className="flight__flight__wrapper">
25
+ <div className="flight__logo__wrapper">
26
+ <img src={`https://media.tidesoftware.be/media/shared/Airlines/${details.airlineCode}.png?height=30`} alt="" className="flight__logo" />
27
+ <span>{details.airline}</span>
28
+ </div>
29
+ <div className="flight__info">
30
+ <div className="flight__info__times">
31
+ <strong>{details.departureTime} {details.departureAirport}</strong>
32
+ <p>{getDateText(details.departureDate)}</p>
33
+ </div>
34
+ <div className="flight__info__duration">
35
+ <p>{details.travelDuration}</p>
36
+ <div className="flight__info__duration__stops">
37
+ <div className="flight__info__duration__stop"></div>
38
+ </div>
39
+ {details.numberOfStops > 0 && (
40
+ <span>{details.numberOfStops} {translations.FLIGHTS_FORM.FLIGHT_STOPS}</span>
41
+ )}
42
+ </div>
43
+ <div className="flight__info__times flight__info__times--arrival">
44
+ <strong>{details.arrivalTime} {details.arrivalAirport}</strong>
45
+ <p>{getDateText(details.arrivalDate)}</p>
46
+ {details.isNextDay && (
47
+ <span className="flight__info__times__days">{translations.FLIGHTS_FORM.PLUS_ONE_DAY}</span>
48
+ )}
49
+ </div>
50
+ </div>
51
+ </div>
52
+ <div className="flight__detail__btn__wrapper">
53
+ <div className={buildClassName(["flight__detail__btn", isDetailVisible && "flight__detail__btn--active"])} onClick={() => setIsDetailVisible(!isDetailVisible)}>
54
+ <svg width={16} height={16} className="flight__detail__btn__arrow"><use href="/icons/svg-sprite.svg#chevron"></use></svg>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ <div className={buildClassName(["flight__detail", isDetailVisible && "flight__detail--active"])}>
59
+ {details.flightLines.map((flightLine, flightLineIndex) => (
60
+ <React.Fragment key={flightLineIndex}>
61
+ <div className="flight__info">
62
+ <div className="flight__info__times__wrapper">
63
+ <div className="flight__info__times">
64
+ <strong>{flightLine.departureTime} {flightLine.departureAirport}</strong>
65
+ <p>{getDateText(flightLine.departureDate)}</p>
66
+ </div>
67
+ <div>
68
+ <svg width={30} height={20}><use href="/icons/svg-sprite.svg#plane-depart"></use></svg>
69
+ </div>
70
+ </div>
71
+ <div className="flight__info__duration">
72
+ <p>{flightLine.travelDuration}</p>
73
+ <div className="flight__info__duration__stops"></div>
74
+ <span>{flightLine.airline}</span>
75
+ <strong>{flightLine.number}</strong>
76
+ </div>
77
+ <div className="flight__info__times__wrapper flight__info__times__wrapper--arrival">
78
+ <div>
79
+ <svg width={35} height={25}><use href="/icons/svg-sprite.svg#plane-arive"></use></svg>
80
+ </div>
81
+ <div className="flight__info__times flight__info__times--arrival">
82
+ <strong>{flightLine.arrivalTime} {flightLine.arrivalAirport}</strong>
83
+ <p>{getDateText(flightLine.arrivalDate)}</p>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ {flightLine.waitDuration && (
88
+ <div className="flight__info">
89
+ <div className="flight__info__times">
90
+ </div>
91
+ <div className="flight__info__duration flight__info__duration--waittime">
92
+ <div className="flight__info__duration__stops flight__info__duration__stops--stoptime">
93
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#clock"></use></svg>
94
+ </div>
95
+ <div className="flight__info__duration__stoptime">
96
+ <span>{translations.FLIGHTS_FORM.STOP_TIME}</span>
97
+ <strong>{flightLine.waitDuration}</strong>
98
+ </div>
99
+ </div>
100
+ <div className="flight__info__times flight__info__times--arrival">
101
+ </div>
102
+ </div>
103
+ )}
104
+ </React.Fragment>
105
+ ))}
106
+ </div>
107
+ <div className={buildClassName(["flight__rate", isOptionsVisible && "flight__rate--active"])}>
108
+ {/*<div className="flight__rate__container">
109
+ <div className="flight__rate__title">
110
+ <h2><strong>{translations.FLIGHTS_FORM.OUTWARD_FLIGHT}</strong></h2>
111
+ <h2>{translations.FLIGHTS_FORM.CHOOSE_YOUR_CLASS}</h2>
112
+ </div>
113
+ <div className="flight__rate__wrapper">
114
+ <div className={`flight__rate__card ${isCardActive ? 'flight__rate__card--active' : ''}`} onClick={handleCardButtonClick}>
115
+ <div className="flight__rate__card__header">
116
+ <h3 className="flight__rate__card__header__title">Economy</h3>
117
+ </div>
118
+ <div className="flight__rate__card__content">
119
+ <div className="flight__rate__card__chairs">
120
+ <span>nog 2 stoelen vrij</span>
121
+ </div>
122
+ <div className="flight__rate__card__lowest">
123
+ <span>Laagste prijs</span>
124
+ </div>
125
+ <div className="flight__rate__card__item">
126
+ <span>€ 275 p.p</span>
127
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#chevron"></use></svg>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ <div className={`flight__rate__card flight__rate__card--premium ${isCard2Active ? 'flight__rate__card--premium--active' : ''}`} onClick={handleCard2ButtonClick}>
132
+ <div className="flight__rate__card__header">
133
+ <h3 className="flight__rate__card__header__title">Economy premium</h3>
134
+ </div>
135
+ <div className="flight__rate__card__content">
136
+ <div className="flight__rate__card__chairs">
137
+ <span>nog 2 stoelen vrij</span>
138
+ </div>
139
+ <div className="flight__rate__card__item">
140
+ <span>€ 960 p.p</span>
141
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#chevron"></use></svg>
142
+ </div>
143
+ </div>
144
+ </div>
145
+ <div className={`flight__rate__card flight__rate__card--business ${isCard3Active ? 'flight__rate__card--business--active' : ''}`} onClick={handleCard3ButtonClick}>
146
+ <div className="flight__rate__card__header">
147
+ <h3 className="flight__rate__card__header__title">Business</h3>
148
+ </div>
149
+ <div className="flight__rate__card__content">
150
+ <div className="flight__rate__card__chairs">
151
+ <span>nog 2 stoelen vrij</span>
152
+ </div>
153
+ <div className="flight__rate__card__item">
154
+ <span>€ 3.060 p.p</span>
155
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#chevron"></use></svg>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ <div className={`flight__rate__detail ${isCardActive ? 'flight__rate__detail--active' : ''}`}>
162
+ <div className="flight__rate__modal__card">
163
+ <div className="flight__rate__modal__card__wrapper">
164
+ <div className="flight__rate__modal__card__header">
165
+ <h3 className="flight__rate__modal__card__header__title">Economy Basic</h3>
166
+ <p className="flight__rate__modal__card__header__class">Klasse: Economy</p>
167
+ </div>
168
+ <div className="flight__rate__modal__card__items flight__rate__modal__card__items--top">
169
+ <div className="flight__rate__modal__card__item flight__rate__modal__card__item--disabled">
170
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#ticket"></use></svg>
171
+ <div className="flight__rate__modal__card__item__wrapper">
172
+ <strong>Wijzigingen in het ticket</strong>
173
+ <p>Wijzigingen toestaan</p>
174
+ </div>
175
+ </div>
176
+ <div className="flight__rate__modal__card__item flight__rate__modal__card__item--disabled">
177
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#payback"></use></svg>
178
+ <div className="flight__rate__modal__card__item__wrapper">
179
+ <strong>Terugbetaling van ticket</strong>
180
+ <p>Ticket retourneerbaar</p>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ <div className="flight__rate__modal__card__items">
185
+ <div className="flight__rate__modal__card__item">
186
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#shopping-bag"></use></svg>
187
+ <div className="flight__rate__modal__card__item__wrapper">
188
+ <strong>persoonlijke items</strong>
189
+ <p>Gratis</p>
190
+ </div>
191
+ </div>
192
+ <div className="flight__rate__modal__card__item">
193
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#backpack"></use></svg>
194
+ <div className="flight__rate__modal__card__item__wrapper">
195
+ <strong>Handbagage</strong>
196
+ <p>Gratis: 2 x 8kg</p>
197
+ </div>
198
+ </div>
199
+ <div className="flight__rate__modal__card__item">
200
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#suitcase"></use></svg>
201
+ <div className="flight__rate__modal__card__item__wrapper">
202
+ <strong>Ingecheckte bagage</strong>
203
+ <p>Gratis: 2 x 32kg</p>
204
+ </div>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ <div className="flight__rate__modal__card__footer">
209
+ <button className="cta cta--secondary">Selecteer</button>
210
+ <span className="price price--increase">€2.460</span>
211
+ </div>
212
+ </div>
213
+ <div className="flight__rate__modal__card flight__rate__modal__card--premium">
214
+ <div className="flight__rate__modal__card__wrapper">
215
+ <div className="flight__rate__modal__card__header">
216
+ <h3 className="flight__rate__modal__card__header__title">Premium Economy Basic Plus</h3>
217
+ <p className="flight__rate__modal__card__header__class">Klasse: Economy</p>
218
+ </div>
219
+ <div className="flight__rate__modal__card__items flight__rate__modal__card__items--top">
220
+ <div className="flight__rate__modal__card__item">
221
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#ticket"></use></svg>
222
+ <div className="flight__rate__modal__card__item__wrapper">
223
+ <strong>Wijzigingen in het ticket</strong>
224
+ <p>Wijzigingen toestaan</p>
225
+ </div>
226
+ </div>
227
+ <div className="flight__rate__modal__card__item">
228
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#payback"></use></svg>
229
+ <div className="flight__rate__modal__card__item__wrapper">
230
+ <strong>Terugbetaling van ticket</strong>
231
+ <p>Ticket retourneerbaar</p>
232
+ </div>
233
+ </div>
234
+ </div>
235
+ <div className="flight__rate__modal__card__items">
236
+ <div className="flight__rate__modal__card__item">
237
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#shopping-bag"></use></svg>
238
+ <div className="flight__rate__modal__card__item__wrapper">
239
+ <strong>persoonlijke items</strong>
240
+ <p>Gratis</p>
241
+ </div>
242
+ </div>
243
+ <div className="flight__rate__modal__card__item">
244
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#backpack"></use></svg>
245
+ <div className="flight__rate__modal__card__item__wrapper">
246
+ <strong>Handbagage</strong>
247
+ <p>Gratis: 2 x 8kg</p>
248
+ </div>
249
+ </div>
250
+ <div className="flight__rate__modal__card__item">
251
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#suitcase"></use></svg>
252
+ <div className="flight__rate__modal__card__item__wrapper">
253
+ <strong>Ingecheckte bagage</strong>
254
+ <p>Gratis: 2 x 32kg</p>
255
+ </div>
256
+ </div>
257
+ </div>
258
+ </div>
259
+ <div className="flight__rate__modal__card__footer">
260
+ <button className="cta cta--secondary">Selecteer</button>
261
+ <span className="price price--increase">€.2460</span>
262
+ </div>
263
+ </div>
264
+ <div className="flight__rate__modal__card flight__rate__modal__card--business">
265
+ <div className="flight__rate__modal__card__wrapper">
266
+ <div className="flight__rate__modal__card__header">
267
+ <h3 className="flight__rate__modal__card__header__title">Business Basic Plus</h3>
268
+ <p className="flight__rate__modal__card__header__class">Klasse: Economy</p>
269
+ </div>
270
+ <div className="flight__rate__modal__card__items flight__rate__modal__card__items--top">
271
+ <div className="flight__rate__modal__card__item">
272
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#ticket"></use></svg>
273
+ <div className="flight__rate__modal__card__item__wrapper">
274
+ <strong>Wijzigingen in het ticket</strong>
275
+ <p>Wijzigingen toestaan</p>
276
+ </div>
277
+ </div>
278
+ <div className="flight__rate__modal__card__item flight__rate__modal__card__item--disabled">
279
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#payback"></use></svg>
280
+ <div className="flight__rate__modal__card__item__wrapper">
281
+ <strong>Terugbetaling van ticket</strong>
282
+ <p>Ticket retourneerbaar</p>
283
+ </div>
284
+ </div>
285
+ </div>
286
+ <div className="flight__rate__modal__card__items">
287
+ <div className="flight__rate__modal__card__item">
288
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#shopping-bag"></use></svg>
289
+ <div className="flight__rate__modal__card__item__wrapper">
290
+ <strong>persoonlijke items</strong>
291
+ <p>Gratis</p>
292
+ </div>
293
+ </div>
294
+ <div className="flight__rate__modal__card__item">
295
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#backpack"></use></svg>
296
+ <div className="flight__rate__modal__card__item__wrapper">
297
+ <strong>Handbagage</strong>
298
+ <p>Gratis: 2 x 8kg</p>
299
+ </div>
300
+ </div>
301
+ <div className="flight__rate__modal__card__item">
302
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#suitcase"></use></svg>
303
+ <div className="flight__rate__modal__card__item__wrapper">
304
+ <strong>Ingecheckte bagage</strong>
305
+ <p>Gratis: 2 x 32kg</p>
306
+ </div>
307
+ </div>
308
+ <div className="flight__rate__modal__card__item">
309
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#seat-selection"></use></svg>
310
+ <div className="flight__rate__modal__card__item__wrapper">
311
+ <strong>Stoelselectie</strong>
312
+ <p>kies uw stoel in het vliegtijg</p>
313
+ </div>
314
+ </div>
315
+ <div className="flight__rate__modal__card__item">
316
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#check-in"></use></svg>
317
+ <div className="flight__rate__modal__card__item__wrapper">
318
+ <strong>Sneller inchecken</strong>
319
+ <p>Sla de wachtrijen voor de veiligheidscontrole over</p>
320
+ </div>
321
+ </div>
322
+ <div className="flight__rate__modal__card__item">
323
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#business-lounge"></use></svg>
324
+ <div className="flight__rate__modal__card__item__wrapper">
325
+ <strong>Zakenlunge</strong>
326
+ <p>Ontspan voor uw vlucht</p>
327
+ </div>
328
+ </div>
329
+ <div className="flight__rate__modal__card__item">
330
+ <svg width={20} height={20}><use href="/icons/svg-sprite.svg#priority"></use></svg>
331
+ <div className="flight__rate__modal__card__item__wrapper">
332
+ <strong>Prioriteit</strong>
333
+ <p>Stap voor anderen aan boord</p>
334
+ </div>
335
+ </div>
336
+ </div>
337
+ </div>
338
+ <div className="flight__rate__modal__card__footer">
339
+ <button className="cta cta--secondary">Selecteer</button>
340
+ <span className="price price--increase">+ €2.460</span>
341
+ </div>
342
+ </div>
343
+ </div>
344
+ */}
345
+ </div>
346
+ </div>
347
+ );
348
+ }
349
+
350
+ export default FlightOptionFlight;