@qite/tide-booking-component 1.2.5 → 1.3.1
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.
- package/.vs/ProjectSettings.json +3 -3
- package/.vs/VSWorkspaceState.json +5 -5
- package/README.md +8 -8
- package/build/build-cjs/booking-wizard/components/print-offer-button.d.ts +17 -0
- package/build/build-cjs/booking-wizard/types.d.ts +7 -0
- package/build/build-cjs/booking-wizard/use-offer-printer.d.ts +13 -0
- package/build/build-cjs/index.js +223 -72
- package/build/build-cjs/shared/utils/localization-util.d.ts +5 -0
- package/build/build-cjs/shared/utils/tide-api-utils.d.ts +1 -0
- package/build/build-esm/booking-wizard/components/print-offer-button.d.ts +17 -0
- package/build/build-esm/booking-wizard/types.d.ts +7 -0
- package/build/build-esm/booking-wizard/use-offer-printer.d.ts +13 -0
- package/build/build-esm/index.js +224 -73
- package/build/build-esm/shared/utils/localization-util.d.ts +5 -0
- package/build/build-esm/shared/utils/tide-api-utils.d.ts +1 -0
- package/package.json +75 -75
- package/rollup.config.js +23 -23
- package/src/booking-product/components/age-select.tsx +35 -35
- package/src/booking-product/components/amount-input.tsx +78 -78
- package/src/booking-product/components/date-range-picker/calendar-day.tsx +58 -58
- package/src/booking-product/components/date-range-picker/calendar.tsx +178 -178
- package/src/booking-product/components/date-range-picker/index.tsx +196 -196
- package/src/booking-product/components/dates.tsx +136 -136
- package/src/booking-product/components/footer.tsx +69 -69
- package/src/booking-product/components/header.tsx +79 -79
- package/src/booking-product/components/icon.tsx +251 -251
- package/src/booking-product/components/product.tsx +314 -314
- package/src/booking-product/components/rating.tsx +21 -21
- package/src/booking-product/components/rooms.tsx +195 -195
- package/src/booking-product/index.tsx +30 -30
- package/src/booking-product/settings-context.ts +14 -14
- package/src/booking-product/types.ts +28 -28
- package/src/booking-product/utils/api.ts +25 -25
- package/src/booking-product/utils/price.ts +29 -29
- package/src/booking-wizard/api-settings-slice.ts +24 -24
- package/src/booking-wizard/components/icon.tsx +508 -508
- package/src/booking-wizard/components/labeled-input.tsx +64 -64
- package/src/booking-wizard/components/labeled-select.tsx +69 -69
- package/src/booking-wizard/components/message.tsx +34 -34
- package/src/booking-wizard/components/multi-range-filter.tsx +113 -113
- package/src/booking-wizard/components/print-offer-button.tsx +66 -0
- package/src/booking-wizard/components/product-card.tsx +37 -37
- package/src/booking-wizard/components/step-indicator.tsx +51 -51
- package/src/booking-wizard/components/step-route.tsx +27 -27
- package/src/booking-wizard/declarations.d.ts +4 -4
- package/src/booking-wizard/features/booking/api.ts +49 -49
- package/src/booking-wizard/features/booking/booking-self-contained.tsx +384 -384
- package/src/booking-wizard/features/booking/booking-slice.ts +662 -662
- package/src/booking-wizard/features/booking/booking.tsx +356 -356
- package/src/booking-wizard/features/booking/constants.ts +16 -16
- package/src/booking-wizard/features/booking/selectors.ts +441 -441
- package/src/booking-wizard/features/confirmation/confirmation.tsx +97 -97
- package/src/booking-wizard/features/error/error.tsx +78 -78
- package/src/booking-wizard/features/flight-options/flight-filter.tsx +432 -432
- package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +385 -385
- package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +229 -229
- package/src/booking-wizard/features/flight-options/flight-option.tsx +81 -81
- package/src/booking-wizard/features/flight-options/flight-utils.ts +516 -516
- package/src/booking-wizard/features/flight-options/index.tsx +196 -196
- package/src/booking-wizard/features/price-details/price-details-api.ts +24 -24
- package/src/booking-wizard/features/price-details/price-details-slice.ts +178 -178
- package/src/booking-wizard/features/price-details/util.ts +155 -155
- package/src/booking-wizard/features/product-options/no-options.tsx +21 -21
- package/src/booking-wizard/features/product-options/none-option.tsx +120 -120
- package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +64 -64
- package/src/booking-wizard/features/product-options/option-booking-group.tsx +216 -216
- package/src/booking-wizard/features/product-options/option-item.tsx +317 -317
- package/src/booking-wizard/features/product-options/option-pax-card.tsx +201 -201
- package/src/booking-wizard/features/product-options/option-pax-group.tsx +175 -175
- package/src/booking-wizard/features/product-options/option-room.tsx +321 -321
- package/src/booking-wizard/features/product-options/option-unit-group.tsx +198 -198
- package/src/booking-wizard/features/product-options/option-units-card.tsx +185 -185
- package/src/booking-wizard/features/product-options/options-form.tsx +563 -459
- package/src/booking-wizard/features/room-options/index.tsx +187 -187
- package/src/booking-wizard/features/room-options/room-utils.ts +190 -190
- package/src/booking-wizard/features/room-options/room.tsx +160 -160
- package/src/booking-wizard/features/room-options/traveler-rooms.tsx +75 -75
- package/src/booking-wizard/features/sidebar/index.tsx +76 -76
- package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +68 -68
- package/src/booking-wizard/features/sidebar/sidebar-util.ts +177 -177
- package/src/booking-wizard/features/sidebar/sidebar.tsx +364 -364
- package/src/booking-wizard/features/summary/summary-booking-option-pax.tsx +25 -25
- package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +25 -25
- package/src/booking-wizard/features/summary/summary-flight.tsx +39 -39
- package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +69 -69
- package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +63 -63
- package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +66 -66
- package/src/booking-wizard/features/summary/summary-slice.ts +28 -28
- package/src/booking-wizard/features/summary/summary.tsx +674 -674
- package/src/booking-wizard/features/travelers-form/travelers-form-slice.ts +164 -164
- package/src/booking-wizard/features/travelers-form/travelers-form.tsx +754 -754
- package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +101 -101
- package/src/booking-wizard/features/travelers-form/validate-form.ts +245 -245
- package/src/booking-wizard/index.tsx +36 -36
- package/src/booking-wizard/settings-context.ts +62 -60
- package/src/booking-wizard/store.ts +31 -31
- package/src/booking-wizard/types.ts +278 -276
- package/src/booking-wizard/use-offer-printer.ts +136 -0
- package/src/index.ts +4 -4
- package/src/shared/components/loader.tsx +16 -16
- package/src/shared/translations/en-GB.json +237 -232
- package/src/shared/translations/fr-BE.json +238 -233
- package/src/shared/translations/nl-BE.json +237 -232
- package/src/shared/types.ts +4 -4
- package/src/shared/utils/class-util.ts +9 -9
- package/src/shared/utils/localization-util.ts +62 -62
- package/src/shared/utils/query-string-util.ts +119 -119
- package/src/shared/utils/tide-api-utils.ts +36 -36
- package/styles/booking-product-variables.scss +394 -394
- package/styles/booking-product.scss +446 -446
- package/styles/booking-wizard-variables.scss +873 -871
- package/styles/booking-wizard.scss +59 -59
- package/styles/components/_animations.scss +39 -39
- package/styles/components/_base.scss +107 -107
- package/styles/components/_booking.scss +879 -879
- package/styles/components/_button.scss +238 -238
- package/styles/components/_checkbox.scss +219 -219
- package/styles/components/_cta.scss +208 -208
- package/styles/components/_date-list.scss +41 -41
- package/styles/components/_date-range-picker.scss +225 -225
- package/styles/components/_decrement-increment.scss +35 -35
- package/styles/components/_dropdown.scss +72 -72
- package/styles/components/_flight-option.scss +1429 -1429
- package/styles/components/_form.scss +1583 -1583
- package/styles/components/_info-message.scss +71 -71
- package/styles/components/_input.scss +25 -25
- package/styles/components/_list.scss +187 -187
- package/styles/components/_loader.scss +72 -72
- package/styles/components/_mixins.scss +550 -550
- package/styles/components/_placeholders.scss +166 -166
- package/styles/components/_pricing-summary.scss +155 -155
- package/styles/components/_qsm.scss +17 -17
- package/styles/components/_radiobutton.scss +170 -170
- package/styles/components/_select-wrapper.scss +80 -80
- package/styles/components/_spinner.scss +29 -29
- package/styles/components/_step-indicators.scss +168 -168
- package/styles/components/_table.scss +81 -81
- package/styles/components/_tree.scss +530 -530
- package/styles/components/_typeahead.scss +281 -281
- package/styles/components/_variables.scss +89 -89
- package/tsconfig.json +24 -24
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
import JsonURL from "@jsonurl/jsonurl";
|
|
2
|
-
import { isArray, isNil } from "lodash";
|
|
3
|
-
import { FlightInfo, Room } from "../../booking-wizard/types";
|
|
4
|
-
|
|
5
|
-
export const getDateFromParams = (
|
|
6
|
-
params: URLSearchParams,
|
|
7
|
-
name: string
|
|
8
|
-
): string | null => {
|
|
9
|
-
const dateString = params.get(name);
|
|
10
|
-
|
|
11
|
-
if (dateString === null) {
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const year = parseInt(dateString.slice(0, 5));
|
|
16
|
-
const month = parseInt(dateString.slice(5, 7));
|
|
17
|
-
const date = parseInt(dateString.slice(8, 10));
|
|
18
|
-
|
|
19
|
-
return new Date(Date.UTC(year, month - 1, date)).toISOString();
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const getDateAsDateFromParams = (
|
|
23
|
-
params: URLSearchParams,
|
|
24
|
-
name: string
|
|
25
|
-
): Date | null => {
|
|
26
|
-
const dateString = params.get(name);
|
|
27
|
-
|
|
28
|
-
if (dateString === null) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const year = parseInt(dateString.slice(0, 5));
|
|
33
|
-
const month = parseInt(dateString.slice(5, 7));
|
|
34
|
-
const date = parseInt(dateString.slice(8, 10));
|
|
35
|
-
|
|
36
|
-
return new Date(Date.UTC(year, month - 1, date));
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export const getNumberFromParams = (
|
|
40
|
-
params: URLSearchParams,
|
|
41
|
-
name: string
|
|
42
|
-
): number | null => {
|
|
43
|
-
const numberString = params.get(name);
|
|
44
|
-
|
|
45
|
-
if (numberString === null) {
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return parseInt(numberString);
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export const getRoomsFromParams = (
|
|
53
|
-
params: URLSearchParams,
|
|
54
|
-
name: string
|
|
55
|
-
): Room[] | null => {
|
|
56
|
-
const roomString = params.get(name);
|
|
57
|
-
|
|
58
|
-
if (roomString === null) {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Encode the accommodation code in the room string because (external) acco codes can contain special characters like '='. eg: 'ACNYNEgUzMDc4NBoKMTAzODcwMjk4NQ=='
|
|
63
|
-
const safeRoomsString = roomString.replace(
|
|
64
|
-
/accommodationCode:([^,]*)/,
|
|
65
|
-
(match, code) => {
|
|
66
|
-
return `accommodationCode:${encodeURIComponent(code)}`;
|
|
67
|
-
}
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
const rooms = JsonURL.parse(safeRoomsString) as Room[] | undefined;
|
|
71
|
-
|
|
72
|
-
if (isNil(rooms)) {
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return rooms.map((room) => {
|
|
77
|
-
if (!isArray(room.childAges)) room.childAges = [];
|
|
78
|
-
room.children = room.childAges.length ?? 0;
|
|
79
|
-
return room;
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
export const getFlightsFromParams = (
|
|
84
|
-
params: URLSearchParams,
|
|
85
|
-
name: string
|
|
86
|
-
): FlightInfo | null => {
|
|
87
|
-
let flightString = params.get(name);
|
|
88
|
-
|
|
89
|
-
if (flightString === null) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
flightString = flightString.replace(/ /g, "%20");
|
|
94
|
-
|
|
95
|
-
const flightInfo = JsonURL.parse(flightString, { AQF: true }) as
|
|
96
|
-
| FlightInfo
|
|
97
|
-
| undefined;
|
|
98
|
-
|
|
99
|
-
if (isNil(flightInfo)) {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return flightInfo;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
export const getStringFromParams = (
|
|
107
|
-
params: URLSearchParams,
|
|
108
|
-
name: string
|
|
109
|
-
): string | null => {
|
|
110
|
-
return params.get(name);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export const getNumbersFromParams = (
|
|
114
|
-
params: URLSearchParams,
|
|
115
|
-
name: string
|
|
116
|
-
): number[] => {
|
|
117
|
-
const numberStrings = params.getAll(name);
|
|
118
|
-
return numberStrings.map((x) => parseInt(x));
|
|
119
|
-
};
|
|
1
|
+
import JsonURL from "@jsonurl/jsonurl";
|
|
2
|
+
import { isArray, isNil } from "lodash";
|
|
3
|
+
import { FlightInfo, Room } from "../../booking-wizard/types";
|
|
4
|
+
|
|
5
|
+
export const getDateFromParams = (
|
|
6
|
+
params: URLSearchParams,
|
|
7
|
+
name: string
|
|
8
|
+
): string | null => {
|
|
9
|
+
const dateString = params.get(name);
|
|
10
|
+
|
|
11
|
+
if (dateString === null) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const year = parseInt(dateString.slice(0, 5));
|
|
16
|
+
const month = parseInt(dateString.slice(5, 7));
|
|
17
|
+
const date = parseInt(dateString.slice(8, 10));
|
|
18
|
+
|
|
19
|
+
return new Date(Date.UTC(year, month - 1, date)).toISOString();
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const getDateAsDateFromParams = (
|
|
23
|
+
params: URLSearchParams,
|
|
24
|
+
name: string
|
|
25
|
+
): Date | null => {
|
|
26
|
+
const dateString = params.get(name);
|
|
27
|
+
|
|
28
|
+
if (dateString === null) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const year = parseInt(dateString.slice(0, 5));
|
|
33
|
+
const month = parseInt(dateString.slice(5, 7));
|
|
34
|
+
const date = parseInt(dateString.slice(8, 10));
|
|
35
|
+
|
|
36
|
+
return new Date(Date.UTC(year, month - 1, date));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const getNumberFromParams = (
|
|
40
|
+
params: URLSearchParams,
|
|
41
|
+
name: string
|
|
42
|
+
): number | null => {
|
|
43
|
+
const numberString = params.get(name);
|
|
44
|
+
|
|
45
|
+
if (numberString === null) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return parseInt(numberString);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const getRoomsFromParams = (
|
|
53
|
+
params: URLSearchParams,
|
|
54
|
+
name: string
|
|
55
|
+
): Room[] | null => {
|
|
56
|
+
const roomString = params.get(name);
|
|
57
|
+
|
|
58
|
+
if (roomString === null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Encode the accommodation code in the room string because (external) acco codes can contain special characters like '='. eg: 'ACNYNEgUzMDc4NBoKMTAzODcwMjk4NQ=='
|
|
63
|
+
const safeRoomsString = roomString.replace(
|
|
64
|
+
/accommodationCode:([^,]*)/,
|
|
65
|
+
(match, code) => {
|
|
66
|
+
return `accommodationCode:${encodeURIComponent(code)}`;
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const rooms = JsonURL.parse(safeRoomsString) as Room[] | undefined;
|
|
71
|
+
|
|
72
|
+
if (isNil(rooms)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return rooms.map((room) => {
|
|
77
|
+
if (!isArray(room.childAges)) room.childAges = [];
|
|
78
|
+
room.children = room.childAges.length ?? 0;
|
|
79
|
+
return room;
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const getFlightsFromParams = (
|
|
84
|
+
params: URLSearchParams,
|
|
85
|
+
name: string
|
|
86
|
+
): FlightInfo | null => {
|
|
87
|
+
let flightString = params.get(name);
|
|
88
|
+
|
|
89
|
+
if (flightString === null) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
flightString = flightString.replace(/ /g, "%20");
|
|
94
|
+
|
|
95
|
+
const flightInfo = JsonURL.parse(flightString, { AQF: true }) as
|
|
96
|
+
| FlightInfo
|
|
97
|
+
| undefined;
|
|
98
|
+
|
|
99
|
+
if (isNil(flightInfo)) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return flightInfo;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export const getStringFromParams = (
|
|
107
|
+
params: URLSearchParams,
|
|
108
|
+
name: string
|
|
109
|
+
): string | null => {
|
|
110
|
+
return params.get(name);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const getNumbersFromParams = (
|
|
114
|
+
params: URLSearchParams,
|
|
115
|
+
name: string
|
|
116
|
+
): number[] => {
|
|
117
|
+
const numberStrings = params.getAll(name);
|
|
118
|
+
return numberStrings.map((x) => parseInt(x));
|
|
119
|
+
};
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { TideClientConfig } from "@qite/tide-client";
|
|
2
|
-
import { isNil } from "lodash";
|
|
3
|
-
import { ApiSettingsState } from "../types";
|
|
4
|
-
|
|
5
|
-
export function buildTideClientConfig(
|
|
6
|
-
settings?: ApiSettingsState
|
|
7
|
-
): TideClientConfig {
|
|
8
|
-
const HOST = settings?.apiUrl || process.env.REACT_APP_BOOKING_HOST;
|
|
9
|
-
const API_KEY = settings?.apiKey || process.env.REACT_APP_BOOKING_API_KEY;
|
|
10
|
-
const token = selectAgentToken();
|
|
11
|
-
|
|
12
|
-
if (isNil(HOST)) {
|
|
13
|
-
throw Error(`Environment variable "HOST" was not set.`);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
if (isNil(API_KEY)) {
|
|
17
|
-
throw Error(`Environment variable "API_KEY" was not set.`);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
host: HOST,
|
|
22
|
-
apiKey: API_KEY,
|
|
23
|
-
token: token,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const selectAgentToken = (): string | undefined => {
|
|
28
|
-
let token: string | null = null;
|
|
29
|
-
if (typeof sessionStorage !== "undefined") {
|
|
30
|
-
token = sessionStorage.getItem("token");
|
|
31
|
-
}
|
|
32
|
-
if (token === null && typeof localStorage !== "undefined") {
|
|
33
|
-
token = localStorage.getItem("token");
|
|
34
|
-
}
|
|
35
|
-
return token ?? undefined;
|
|
36
|
-
};
|
|
1
|
+
import { TideClientConfig } from "@qite/tide-client";
|
|
2
|
+
import { isNil } from "lodash";
|
|
3
|
+
import { ApiSettingsState } from "../types";
|
|
4
|
+
|
|
5
|
+
export function buildTideClientConfig(
|
|
6
|
+
settings?: ApiSettingsState
|
|
7
|
+
): TideClientConfig {
|
|
8
|
+
const HOST = settings?.apiUrl || process.env.REACT_APP_BOOKING_HOST;
|
|
9
|
+
const API_KEY = settings?.apiKey || process.env.REACT_APP_BOOKING_API_KEY;
|
|
10
|
+
const token = selectAgentToken();
|
|
11
|
+
|
|
12
|
+
if (isNil(HOST)) {
|
|
13
|
+
throw Error(`Environment variable "HOST" was not set.`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (isNil(API_KEY)) {
|
|
17
|
+
throw Error(`Environment variable "API_KEY" was not set.`);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
host: HOST,
|
|
22
|
+
apiKey: API_KEY,
|
|
23
|
+
token: token,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const selectAgentToken = (): string | undefined => {
|
|
28
|
+
let token: string | null = null;
|
|
29
|
+
if (typeof sessionStorage !== "undefined") {
|
|
30
|
+
token = sessionStorage.getItem("token");
|
|
31
|
+
}
|
|
32
|
+
if (token === null && typeof localStorage !== "undefined") {
|
|
33
|
+
token = localStorage.getItem("token");
|
|
34
|
+
}
|
|
35
|
+
return token ?? undefined;
|
|
36
|
+
};
|