@qite/tide-booking-component 1.3.3 → 1.3.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 (199) hide show
  1. package/build/build-cjs/booking-product/components/age-select.d.ts +8 -8
  2. package/build/build-cjs/booking-product/components/amount-input.d.ts +10 -10
  3. package/build/build-cjs/booking-product/components/date-range-picker/calendar-day.d.ts +12 -12
  4. package/build/build-cjs/booking-product/components/date-range-picker/calendar.d.ts +19 -19
  5. package/build/build-cjs/booking-product/components/date-range-picker/index.d.ts +23 -20
  6. package/build/build-cjs/booking-product/components/dates.d.ts +9 -9
  7. package/build/build-cjs/booking-product/components/footer.d.ts +10 -10
  8. package/build/build-cjs/booking-product/components/header.d.ts +11 -11
  9. package/build/build-cjs/booking-product/components/icon.d.ts +10 -10
  10. package/build/build-cjs/booking-product/components/product.d.ts +9 -9
  11. package/build/build-cjs/booking-product/components/rating.d.ts +6 -6
  12. package/build/build-cjs/booking-product/components/rooms.d.ts +10 -10
  13. package/build/build-cjs/booking-product/index.d.ts +10 -10
  14. package/build/build-cjs/booking-product/settings-context.d.ts +6 -5
  15. package/build/build-cjs/booking-product/types.d.ts +25 -25
  16. package/build/build-cjs/booking-product/utils/api.d.ts +6 -16
  17. package/build/build-cjs/booking-product/utils/price.d.ts +1 -9
  18. package/build/build-cjs/booking-wizard/api-settings-slice.d.ts +4 -14
  19. package/build/build-cjs/booking-wizard/components/icon.d.ts +10 -10
  20. package/build/build-cjs/booking-wizard/components/labeled-input.d.ts +18 -18
  21. package/build/build-cjs/booking-wizard/components/labeled-select.d.ts +21 -21
  22. package/build/build-cjs/booking-wizard/components/message.d.ts +9 -9
  23. package/build/build-cjs/booking-wizard/components/multi-range-filter.d.ts +11 -11
  24. package/build/build-cjs/booking-wizard/components/print-offer-button.d.ts +17 -17
  25. package/build/build-cjs/booking-wizard/components/product-card.d.ts +8 -8
  26. package/build/build-cjs/booking-wizard/components/step-indicator.d.ts +6 -6
  27. package/build/build-cjs/booking-wizard/components/step-route.d.ts +9 -9
  28. package/build/build-cjs/booking-wizard/features/booking/api.d.ts +10 -29
  29. package/build/build-cjs/booking-wizard/features/booking/booking-self-contained.d.ts +8 -8
  30. package/build/build-cjs/booking-wizard/features/booking/booking-slice.d.ts +46 -177
  31. package/build/build-cjs/booking-wizard/features/booking/booking.d.ts +8 -8
  32. package/build/build-cjs/booking-wizard/features/booking/constants.d.ts +8 -15
  33. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +136 -308
  34. package/build/build-cjs/booking-wizard/features/confirmation/confirmation.d.ts +5 -4
  35. package/build/build-cjs/booking-wizard/features/error/error.d.ts +5 -4
  36. package/build/build-cjs/booking-wizard/features/flight-options/flight-filter.d.ts +9 -9
  37. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -8
  38. package/build/build-cjs/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -3
  39. package/build/build-cjs/booking-wizard/features/flight-options/flight-option.d.ts +10 -10
  40. package/build/build-cjs/booking-wizard/features/flight-options/flight-utils.d.ts +6 -16
  41. package/build/build-cjs/booking-wizard/features/flight-options/index.d.ts +5 -4
  42. package/build/build-cjs/booking-wizard/features/price-details/price-details-api.d.ts +6 -15
  43. package/build/build-cjs/booking-wizard/features/price-details/price-details-slice.d.ts +80 -121
  44. package/build/build-cjs/booking-wizard/features/price-details/util.d.ts +2 -5
  45. package/build/build-cjs/booking-wizard/features/product-options/no-options.d.ts +3 -3
  46. package/build/build-cjs/booking-wizard/features/product-options/none-option.d.ts +9 -17
  47. package/build/build-cjs/booking-wizard/features/product-options/option-booking-airline-group.d.ts +8 -17
  48. package/build/build-cjs/booking-wizard/features/product-options/option-booking-group.d.ts +12 -18
  49. package/build/build-cjs/booking-wizard/features/product-options/option-item.d.ts +11 -11
  50. package/build/build-cjs/booking-wizard/features/product-options/option-pax-card.d.ts +10 -13
  51. package/build/build-cjs/booking-wizard/features/product-options/option-pax-group.d.ts +13 -20
  52. package/build/build-cjs/booking-wizard/features/product-options/option-room.d.ts +10 -18
  53. package/build/build-cjs/booking-wizard/features/product-options/option-unit-group.d.ts +13 -20
  54. package/build/build-cjs/booking-wizard/features/product-options/option-units-card.d.ts +9 -9
  55. package/build/build-cjs/booking-wizard/features/product-options/options-form.d.ts +5 -4
  56. package/build/build-cjs/booking-wizard/features/room-options/index.d.ts +5 -4
  57. package/build/build-cjs/booking-wizard/features/room-options/room-utils.d.ts +9 -29
  58. package/build/build-cjs/booking-wizard/features/room-options/room.d.ts +12 -15
  59. package/build/build-cjs/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -13
  60. package/build/build-cjs/booking-wizard/features/sidebar/index.d.ts +7 -7
  61. package/build/build-cjs/booking-wizard/features/sidebar/sidebar-flight.d.ts +8 -8
  62. package/build/build-cjs/booking-wizard/features/sidebar/sidebar-util.d.ts +12 -31
  63. package/build/build-cjs/booking-wizard/features/sidebar/sidebar.d.ts +25 -29
  64. package/build/build-cjs/booking-wizard/features/summary/summary-booking-option-pax.d.ts +7 -7
  65. package/build/build-cjs/booking-wizard/features/summary/summary-booking-option-unit.d.ts +7 -7
  66. package/build/build-cjs/booking-wizard/features/summary/summary-flight.d.ts +8 -8
  67. package/build/build-cjs/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +7 -10
  68. package/build/build-cjs/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +7 -10
  69. package/build/build-cjs/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +7 -10
  70. package/build/build-cjs/booking-wizard/features/summary/summary-slice.d.ts +8 -14
  71. package/build/build-cjs/booking-wizard/features/summary/summary.d.ts +5 -4
  72. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +49 -75
  73. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form.d.ts +5 -4
  74. package/build/build-cjs/booking-wizard/features/travelers-form/type-ahead-input.d.ts +16 -16
  75. package/build/build-cjs/booking-wizard/features/travelers-form/validate-form.d.ts +4 -9
  76. package/build/build-cjs/booking-wizard/index.d.ts +12 -12
  77. package/build/build-cjs/booking-wizard/settings-context.d.ts +6 -5
  78. package/build/build-cjs/booking-wizard/store.d.ts +24 -44
  79. package/build/build-cjs/booking-wizard/types.d.ts +259 -253
  80. package/build/build-cjs/booking-wizard/use-offer-printer.d.ts +13 -19
  81. package/build/build-cjs/index.d.ts +3 -3
  82. package/build/build-cjs/index.js +7439 -16324
  83. package/build/build-cjs/shared/components/loader.d.ts +6 -6
  84. package/build/build-cjs/shared/types.d.ts +4 -4
  85. package/build/build-cjs/shared/utils/class-util.d.ts +1 -1
  86. package/build/build-cjs/shared/utils/localization-util.d.ts +250 -248
  87. package/build/build-cjs/shared/utils/query-string-util.d.ts +8 -29
  88. package/build/build-cjs/shared/utils/tide-api-utils.d.ts +4 -6
  89. package/build/build-esm/booking-product/components/age-select.d.ts +8 -8
  90. package/build/build-esm/booking-product/components/amount-input.d.ts +10 -10
  91. package/build/build-esm/booking-product/components/date-range-picker/calendar-day.d.ts +12 -12
  92. package/build/build-esm/booking-product/components/date-range-picker/calendar.d.ts +19 -19
  93. package/build/build-esm/booking-product/components/date-range-picker/index.d.ts +23 -20
  94. package/build/build-esm/booking-product/components/dates.d.ts +9 -9
  95. package/build/build-esm/booking-product/components/footer.d.ts +10 -10
  96. package/build/build-esm/booking-product/components/header.d.ts +11 -11
  97. package/build/build-esm/booking-product/components/icon.d.ts +10 -10
  98. package/build/build-esm/booking-product/components/product.d.ts +9 -9
  99. package/build/build-esm/booking-product/components/rating.d.ts +6 -6
  100. package/build/build-esm/booking-product/components/rooms.d.ts +10 -10
  101. package/build/build-esm/booking-product/index.d.ts +10 -10
  102. package/build/build-esm/booking-product/settings-context.d.ts +6 -5
  103. package/build/build-esm/booking-product/types.d.ts +25 -25
  104. package/build/build-esm/booking-product/utils/api.d.ts +6 -16
  105. package/build/build-esm/booking-product/utils/price.d.ts +1 -9
  106. package/build/build-esm/booking-wizard/api-settings-slice.d.ts +4 -14
  107. package/build/build-esm/booking-wizard/components/icon.d.ts +10 -10
  108. package/build/build-esm/booking-wizard/components/labeled-input.d.ts +18 -18
  109. package/build/build-esm/booking-wizard/components/labeled-select.d.ts +21 -21
  110. package/build/build-esm/booking-wizard/components/message.d.ts +9 -9
  111. package/build/build-esm/booking-wizard/components/multi-range-filter.d.ts +11 -11
  112. package/build/build-esm/booking-wizard/components/print-offer-button.d.ts +17 -17
  113. package/build/build-esm/booking-wizard/components/product-card.d.ts +8 -8
  114. package/build/build-esm/booking-wizard/components/step-indicator.d.ts +6 -6
  115. package/build/build-esm/booking-wizard/components/step-route.d.ts +9 -9
  116. package/build/build-esm/booking-wizard/features/booking/api.d.ts +10 -29
  117. package/build/build-esm/booking-wizard/features/booking/booking-self-contained.d.ts +8 -8
  118. package/build/build-esm/booking-wizard/features/booking/booking-slice.d.ts +46 -177
  119. package/build/build-esm/booking-wizard/features/booking/booking.d.ts +8 -8
  120. package/build/build-esm/booking-wizard/features/booking/constants.d.ts +8 -15
  121. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +136 -308
  122. package/build/build-esm/booking-wizard/features/confirmation/confirmation.d.ts +5 -4
  123. package/build/build-esm/booking-wizard/features/error/error.d.ts +5 -4
  124. package/build/build-esm/booking-wizard/features/flight-options/flight-filter.d.ts +9 -9
  125. package/build/build-esm/booking-wizard/features/flight-options/flight-option-flight.d.ts +8 -8
  126. package/build/build-esm/booking-wizard/features/flight-options/flight-option-modal.d.ts +3 -3
  127. package/build/build-esm/booking-wizard/features/flight-options/flight-option.d.ts +10 -10
  128. package/build/build-esm/booking-wizard/features/flight-options/flight-utils.d.ts +6 -16
  129. package/build/build-esm/booking-wizard/features/flight-options/index.d.ts +5 -4
  130. package/build/build-esm/booking-wizard/features/price-details/price-details-api.d.ts +6 -15
  131. package/build/build-esm/booking-wizard/features/price-details/price-details-slice.d.ts +80 -121
  132. package/build/build-esm/booking-wizard/features/price-details/util.d.ts +2 -5
  133. package/build/build-esm/booking-wizard/features/product-options/no-options.d.ts +3 -3
  134. package/build/build-esm/booking-wizard/features/product-options/none-option.d.ts +9 -17
  135. package/build/build-esm/booking-wizard/features/product-options/option-booking-airline-group.d.ts +8 -17
  136. package/build/build-esm/booking-wizard/features/product-options/option-booking-group.d.ts +12 -18
  137. package/build/build-esm/booking-wizard/features/product-options/option-item.d.ts +11 -11
  138. package/build/build-esm/booking-wizard/features/product-options/option-pax-card.d.ts +10 -13
  139. package/build/build-esm/booking-wizard/features/product-options/option-pax-group.d.ts +13 -20
  140. package/build/build-esm/booking-wizard/features/product-options/option-room.d.ts +10 -18
  141. package/build/build-esm/booking-wizard/features/product-options/option-unit-group.d.ts +13 -20
  142. package/build/build-esm/booking-wizard/features/product-options/option-units-card.d.ts +9 -9
  143. package/build/build-esm/booking-wizard/features/product-options/options-form.d.ts +5 -4
  144. package/build/build-esm/booking-wizard/features/room-options/index.d.ts +5 -4
  145. package/build/build-esm/booking-wizard/features/room-options/room-utils.d.ts +9 -29
  146. package/build/build-esm/booking-wizard/features/room-options/room.d.ts +12 -15
  147. package/build/build-esm/booking-wizard/features/room-options/traveler-rooms.d.ts +9 -13
  148. package/build/build-esm/booking-wizard/features/sidebar/index.d.ts +7 -7
  149. package/build/build-esm/booking-wizard/features/sidebar/sidebar-flight.d.ts +8 -8
  150. package/build/build-esm/booking-wizard/features/sidebar/sidebar-util.d.ts +12 -31
  151. package/build/build-esm/booking-wizard/features/sidebar/sidebar.d.ts +25 -29
  152. package/build/build-esm/booking-wizard/features/summary/summary-booking-option-pax.d.ts +7 -7
  153. package/build/build-esm/booking-wizard/features/summary/summary-booking-option-unit.d.ts +7 -7
  154. package/build/build-esm/booking-wizard/features/summary/summary-flight.d.ts +8 -8
  155. package/build/build-esm/booking-wizard/features/summary/summary-per-booking-option-group.d.ts +7 -10
  156. package/build/build-esm/booking-wizard/features/summary/summary-per-pax-option-group.d.ts +7 -10
  157. package/build/build-esm/booking-wizard/features/summary/summary-per-unit-option-group.d.ts +7 -10
  158. package/build/build-esm/booking-wizard/features/summary/summary-slice.d.ts +8 -14
  159. package/build/build-esm/booking-wizard/features/summary/summary.d.ts +5 -4
  160. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-slice.d.ts +49 -75
  161. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form.d.ts +5 -4
  162. package/build/build-esm/booking-wizard/features/travelers-form/type-ahead-input.d.ts +16 -16
  163. package/build/build-esm/booking-wizard/features/travelers-form/validate-form.d.ts +4 -9
  164. package/build/build-esm/booking-wizard/index.d.ts +12 -12
  165. package/build/build-esm/booking-wizard/settings-context.d.ts +6 -5
  166. package/build/build-esm/booking-wizard/store.d.ts +24 -44
  167. package/build/build-esm/booking-wizard/types.d.ts +259 -253
  168. package/build/build-esm/booking-wizard/use-offer-printer.d.ts +13 -19
  169. package/build/build-esm/index.d.ts +3 -3
  170. package/build/build-esm/index.js +7427 -15924
  171. package/build/build-esm/shared/components/loader.d.ts +6 -6
  172. package/build/build-esm/shared/types.d.ts +4 -4
  173. package/build/build-esm/shared/utils/class-util.d.ts +1 -1
  174. package/build/build-esm/shared/utils/localization-util.d.ts +250 -248
  175. package/build/build-esm/shared/utils/query-string-util.d.ts +8 -29
  176. package/build/build-esm/shared/utils/tide-api-utils.d.ts +4 -6
  177. package/package.json +75 -75
  178. package/src/booking-wizard/components/print-offer-button.tsx +63 -63
  179. package/src/booking-wizard/features/booking/booking-self-contained.tsx +389 -389
  180. package/src/booking-wizard/features/booking/booking-slice.ts +663 -665
  181. package/src/booking-wizard/features/booking/booking.tsx +361 -361
  182. package/src/booking-wizard/features/flight-options/flight-utils.ts +522 -516
  183. package/src/booking-wizard/features/product-options/options-form.tsx +481 -481
  184. package/src/booking-wizard/features/sidebar/sidebar-util.ts +177 -177
  185. package/src/booking-wizard/features/summary/summary-booking-option-pax.tsx +25 -25
  186. package/src/booking-wizard/features/summary/summary.tsx +674 -674
  187. package/src/booking-wizard/features/travelers-form/travelers-form-slice.ts +164 -164
  188. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +888 -754
  189. package/src/booking-wizard/settings-context.ts +62 -62
  190. package/src/booking-wizard/types.ts +286 -279
  191. package/src/booking-wizard/use-offer-printer.ts +117 -117
  192. package/src/shared/translations/en-GB.json +239 -237
  193. package/src/shared/translations/fr-BE.json +239 -238
  194. package/src/shared/translations/nl-BE.json +239 -237
  195. package/src/shared/utils/tide-api-utils.ts +36 -36
  196. package/styles/booking-wizard-variables.scss +873 -873
  197. package/styles/components/_booking.scss +879 -879
  198. package/styles/components/_dropdown.scss +72 -72
  199. package/styles/components/_form.scss +1583 -1583
@@ -1,177 +1,177 @@
1
- import { BookingPackageFlightMetaData } from "@qite/tide-client/build/types";
2
- import { differenceInCalendarDays, format, parseISO } from "date-fns";
3
- import { compact, orderBy, uniq } from "lodash";
4
- import { useSelector } from "react-redux";
5
- import { FlightLine } from "../../types";
6
- import { selectTranslations } from "../booking/selectors";
7
-
8
- export const getTravelersText = (
9
- rooms: { adults: number[]; children: number[] }[]
10
- ): string[] => {
11
- const translations = useSelector(selectTranslations);
12
-
13
- return rooms.map((r) =>
14
- compact([
15
- r.adults.length,
16
- r.adults.length === 1 && ` ${translations.SIDEBAR.TRAVELERS_ADULT}`,
17
- r.adults.length > 1 && ` ${translations.SIDEBAR.TRAVELERS_ADULTS}`,
18
- r.adults && r.adults.length && r.children && r.children.length && ", ",
19
- r.children.length,
20
- r.children.length === 1 && ` ${translations.SIDEBAR.TRAVELERS_CHILD}`,
21
- r.children.length > 1 && ` ${translations.SIDEBAR.TRAVELERS_CHILDREN}`,
22
- ]).join("")
23
- );
24
- };
25
-
26
- export const getDateText = (
27
- date: string | undefined,
28
- hideYear?: boolean
29
- ): string | undefined => {
30
- if (!date) {
31
- // No date set
32
- return undefined;
33
- }
34
-
35
- try {
36
- return hideYear
37
- ? format(parseISO(date), "dd/MM")
38
- : format(parseISO(date), "dd/MM/yyyy");
39
- } catch {
40
- // Error while parsing date
41
- return undefined;
42
- }
43
- };
44
-
45
- export const getDatePeriodText = (
46
- from?: string,
47
- to?: string,
48
- nightsOnly?: boolean
49
- ) => {
50
- if (!from || !to) {
51
- return undefined;
52
- }
53
-
54
- const translations = useSelector(selectTranslations);
55
-
56
- try {
57
- const fromDate = parseISO(from);
58
- const toDate = parseISO(to);
59
-
60
- const dayDifference = differenceInCalendarDays(toDate, fromDate);
61
- const daysLabel =
62
- dayDifference == 0
63
- ? `1 ${translations.OPTIONS_FORM.DAY}`
64
- : `${dayDifference + 1} ${translations.OPTIONS_FORM.DAYS}`;
65
-
66
- if (!dayDifference) return daysLabel;
67
-
68
- const nightsLabel =
69
- dayDifference == 1
70
- ? `1 ${translations.OPTIONS_FORM.NIGHT}`
71
- : `${dayDifference} ${translations.OPTIONS_FORM.NIGHTS}`;
72
-
73
- return nightsOnly ? nightsLabel : `${daysLabel}, ${nightsLabel}`;
74
- } catch {
75
- return undefined;
76
- }
77
- };
78
-
79
- export const getFlightText = (
80
- firstFlight: FlightLine | undefined,
81
- lastFlight: FlightLine | undefined
82
- ): string => {
83
- return compact([
84
- firstFlight?.departureAirportDescription,
85
- ` (${firstFlight?.departureAirportIata})`,
86
- firstFlight?.departureAirportDescription &&
87
- lastFlight?.arrivalAirportDescription &&
88
- " > ",
89
- lastFlight?.arrivalAirportDescription,
90
- ` (${lastFlight?.arrivalAirportIata})`,
91
- ]).join("");
92
- };
93
-
94
- export const getAirlines = (flightLines: FlightLine[] | undefined) => {
95
- return uniq(
96
- flightLines
97
- ?.filter((x) => x.airlineDescription)
98
- ?.map((flightLine) => flightLine.airlineDescription)
99
- ).join(", ");
100
- };
101
-
102
- export const getFlightHours = (
103
- firstFlight: FlightLine | undefined,
104
- lastFlight: FlightLine | undefined
105
- ): string => {
106
- return compact([
107
- getDateText(firstFlight?.departureDate),
108
- " ",
109
- firstFlight?.departureTime,
110
- " > ",
111
- getDateText(lastFlight?.arrivalDate),
112
- " ",
113
- lastFlight?.arrivalTime,
114
- ]).join("");
115
- };
116
-
117
- export const parseFlightLines = (
118
- metaDatas: BookingPackageFlightMetaData
119
- ): FlightLine[] | undefined => {
120
- if (!metaDatas.flightLines) {
121
- return undefined;
122
- }
123
-
124
- const parsedFlightLines: FlightLine[] = metaDatas.flightLines.map(
125
- (parsedFlightLine) => {
126
- const departureDate = parseFlightLineDateTime(
127
- parsedFlightLine.departureDate,
128
- parsedFlightLine.departureTime
129
- );
130
- const arrivalDate = parseFlightLineDateTime(
131
- parsedFlightLine.arrivalDate,
132
- parsedFlightLine.arrivalTime
133
- );
134
-
135
- return <FlightLine>{
136
- departureAirportIata: parsedFlightLine.departureAirport,
137
- departureAirportDescription:
138
- parsedFlightLine.departureAirportDescription,
139
- departureDate: departureDate,
140
- departureTime: parsedFlightLine.departureTime,
141
- arrivalAirportIata: parsedFlightLine.arrivalAirport,
142
- arrivalAirportDescription: parsedFlightLine.arrivalAirportDescription,
143
- arrivalDate: arrivalDate,
144
- arrivalTime: parsedFlightLine.arrivalTime,
145
- airlineIata: parsedFlightLine.airline,
146
- airlineDescription: parsedFlightLine.operatingAirlineDescription,
147
- airlineNumber: parsedFlightLine.number,
148
- travelClass: parsedFlightLine.travelClass,
149
- };
150
- }
151
- );
152
-
153
- return orderBy(parsedFlightLines, "departureDate", "asc");
154
- };
155
-
156
- const parseFlightLineDateTime = (
157
- date: string,
158
- time: string
159
- ): string | undefined => {
160
- try {
161
- // Parse date
162
- const parsedDate = parseISO(date);
163
-
164
- // Parse time
165
- const parsedTimeHours = parseInt(time.substring(0, 2));
166
- const parsedTimeMinutes = parseInt(time.substring(3, 5));
167
-
168
- if (!Number.isNaN(parsedTimeHours) && !Number.isNaN(parsedTimeMinutes)) {
169
- parsedDate.setUTCHours(parsedTimeHours, parsedTimeMinutes);
170
- }
171
-
172
- return parsedDate.toISOString().slice(0, -1);
173
- } catch {
174
- // Parsing failed
175
- return undefined;
176
- }
177
- };
1
+ import { BookingPackageFlightMetaData } from "@qite/tide-client/build/types";
2
+ import { differenceInCalendarDays, format, parseISO } from "date-fns";
3
+ import { compact, orderBy, uniq } from "lodash";
4
+ import { useSelector } from "react-redux";
5
+ import { FlightLine, RoomTraveler } from "../../types";
6
+ import { selectTranslations } from "../booking/selectors";
7
+
8
+ export const getTravelersText = (
9
+ rooms: { adults: RoomTraveler[]; children: RoomTraveler[] }[]
10
+ ): string[] => {
11
+ const translations = useSelector(selectTranslations);
12
+
13
+ return rooms.map((r) =>
14
+ compact([
15
+ r.adults.length,
16
+ r.adults.length === 1 && ` ${translations.SIDEBAR.TRAVELERS_ADULT}`,
17
+ r.adults.length > 1 && ` ${translations.SIDEBAR.TRAVELERS_ADULTS}`,
18
+ r.adults && r.adults.length && r.children && r.children.length && ", ",
19
+ r.children.length,
20
+ r.children.length === 1 && ` ${translations.SIDEBAR.TRAVELERS_CHILD}`,
21
+ r.children.length > 1 && ` ${translations.SIDEBAR.TRAVELERS_CHILDREN}`,
22
+ ]).join("")
23
+ );
24
+ };
25
+
26
+ export const getDateText = (
27
+ date: string | undefined,
28
+ hideYear?: boolean
29
+ ): string | undefined => {
30
+ if (!date) {
31
+ // No date set
32
+ return undefined;
33
+ }
34
+
35
+ try {
36
+ return hideYear
37
+ ? format(parseISO(date), "dd/MM")
38
+ : format(parseISO(date), "dd/MM/yyyy");
39
+ } catch {
40
+ // Error while parsing date
41
+ return undefined;
42
+ }
43
+ };
44
+
45
+ export const getDatePeriodText = (
46
+ from?: string,
47
+ to?: string,
48
+ nightsOnly?: boolean
49
+ ) => {
50
+ if (!from || !to) {
51
+ return undefined;
52
+ }
53
+
54
+ const translations = useSelector(selectTranslations);
55
+
56
+ try {
57
+ const fromDate = parseISO(from);
58
+ const toDate = parseISO(to);
59
+
60
+ const dayDifference = differenceInCalendarDays(toDate, fromDate);
61
+ const daysLabel =
62
+ dayDifference == 0
63
+ ? `1 ${translations.OPTIONS_FORM.DAY}`
64
+ : `${dayDifference + 1} ${translations.OPTIONS_FORM.DAYS}`;
65
+
66
+ if (!dayDifference) return daysLabel;
67
+
68
+ const nightsLabel =
69
+ dayDifference == 1
70
+ ? `1 ${translations.OPTIONS_FORM.NIGHT}`
71
+ : `${dayDifference} ${translations.OPTIONS_FORM.NIGHTS}`;
72
+
73
+ return nightsOnly ? nightsLabel : `${daysLabel}, ${nightsLabel}`;
74
+ } catch {
75
+ return undefined;
76
+ }
77
+ };
78
+
79
+ export const getFlightText = (
80
+ firstFlight: FlightLine | undefined,
81
+ lastFlight: FlightLine | undefined
82
+ ): string => {
83
+ return compact([
84
+ firstFlight?.departureAirportDescription,
85
+ ` (${firstFlight?.departureAirportIata})`,
86
+ firstFlight?.departureAirportDescription &&
87
+ lastFlight?.arrivalAirportDescription &&
88
+ " > ",
89
+ lastFlight?.arrivalAirportDescription,
90
+ ` (${lastFlight?.arrivalAirportIata})`,
91
+ ]).join("");
92
+ };
93
+
94
+ export const getAirlines = (flightLines: FlightLine[] | undefined) => {
95
+ return uniq(
96
+ flightLines
97
+ ?.filter((x) => x.airlineDescription)
98
+ ?.map((flightLine) => flightLine.airlineDescription)
99
+ ).join(", ");
100
+ };
101
+
102
+ export const getFlightHours = (
103
+ firstFlight: FlightLine | undefined,
104
+ lastFlight: FlightLine | undefined
105
+ ): string => {
106
+ return compact([
107
+ getDateText(firstFlight?.departureDate),
108
+ " ",
109
+ firstFlight?.departureTime,
110
+ " > ",
111
+ getDateText(lastFlight?.arrivalDate),
112
+ " ",
113
+ lastFlight?.arrivalTime,
114
+ ]).join("");
115
+ };
116
+
117
+ export const parseFlightLines = (
118
+ metaDatas: BookingPackageFlightMetaData
119
+ ): FlightLine[] | undefined => {
120
+ if (!metaDatas.flightLines) {
121
+ return undefined;
122
+ }
123
+
124
+ const parsedFlightLines: FlightLine[] = metaDatas.flightLines.map(
125
+ (parsedFlightLine) => {
126
+ const departureDate = parseFlightLineDateTime(
127
+ parsedFlightLine.departureDate,
128
+ parsedFlightLine.departureTime
129
+ );
130
+ const arrivalDate = parseFlightLineDateTime(
131
+ parsedFlightLine.arrivalDate,
132
+ parsedFlightLine.arrivalTime
133
+ );
134
+
135
+ return <FlightLine>{
136
+ departureAirportIata: parsedFlightLine.departureAirport,
137
+ departureAirportDescription:
138
+ parsedFlightLine.departureAirportDescription,
139
+ departureDate: departureDate,
140
+ departureTime: parsedFlightLine.departureTime,
141
+ arrivalAirportIata: parsedFlightLine.arrivalAirport,
142
+ arrivalAirportDescription: parsedFlightLine.arrivalAirportDescription,
143
+ arrivalDate: arrivalDate,
144
+ arrivalTime: parsedFlightLine.arrivalTime,
145
+ airlineIata: parsedFlightLine.airline,
146
+ airlineDescription: parsedFlightLine.operatingAirlineDescription,
147
+ airlineNumber: parsedFlightLine.number,
148
+ travelClass: parsedFlightLine.travelClass,
149
+ };
150
+ }
151
+ );
152
+
153
+ return orderBy(parsedFlightLines, "departureDate", "asc");
154
+ };
155
+
156
+ const parseFlightLineDateTime = (
157
+ date: string,
158
+ time: string
159
+ ): string | undefined => {
160
+ try {
161
+ // Parse date
162
+ const parsedDate = parseISO(date);
163
+
164
+ // Parse time
165
+ const parsedTimeHours = parseInt(time.substring(0, 2));
166
+ const parsedTimeMinutes = parseInt(time.substring(3, 5));
167
+
168
+ if (!Number.isNaN(parsedTimeHours) && !Number.isNaN(parsedTimeMinutes)) {
169
+ parsedDate.setUTCHours(parsedTimeHours, parsedTimeMinutes);
170
+ }
171
+
172
+ return parsedDate.toISOString().slice(0, -1);
173
+ } catch {
174
+ // Parsing failed
175
+ return undefined;
176
+ }
177
+ };
@@ -1,25 +1,25 @@
1
- import { BookingOptionPax } from "@qite/tide-client/build/types";
2
- import { isEmpty } from "lodash";
3
- import React from "react";
4
- import SummaryPerPaxOptionGroup from "./summary-per-pax-option-group";
5
-
6
- interface SummaryBookingOptionPaxProps {
7
- pax: BookingOptionPax;
8
- }
9
-
10
- const SummaryBookingOptionPax: React.FC<SummaryBookingOptionPaxProps> = ({
11
- pax,
12
- }) => {
13
- return (
14
- <>
15
- {pax.groups.map((y) => {
16
- const paxOptions = y.options.filter((y) => y.isSelected);
17
- if (isEmpty(paxOptions)) return;
18
-
19
- return <SummaryPerPaxOptionGroup group={y} />;
20
- })}
21
- </>
22
- );
23
- };
24
-
25
- export default SummaryBookingOptionPax;
1
+ import { BookingOptionPax } from "@qite/tide-client/build/types";
2
+ import { isEmpty } from "lodash";
3
+ import React from "react";
4
+ import SummaryPerPaxOptionGroup from "./summary-per-pax-option-group";
5
+
6
+ interface SummaryBookingOptionPaxProps {
7
+ pax: BookingOptionPax;
8
+ }
9
+
10
+ const SummaryBookingOptionPax: React.FC<SummaryBookingOptionPaxProps> = ({
11
+ pax,
12
+ }) => {
13
+ return (
14
+ <>
15
+ {pax.groups.map((y, i) => {
16
+ const paxOptions = y.options.filter((y) => y.isSelected);
17
+ if (isEmpty(paxOptions)) return;
18
+
19
+ return <SummaryPerPaxOptionGroup key={i} group={y} />;
20
+ })}
21
+ </>
22
+ );
23
+ };
24
+
25
+ export default SummaryBookingOptionPax;