@qite/tide-booking-component 1.4.93 → 1.4.95
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/.prettierrc +9 -9
- package/.vs/ProjectSettings.json +3 -3
- package/.vs/VSWorkspaceState.json +5 -5
- package/build/build-cjs/index.js +81 -27
- package/build/build-cjs/src/booking-wizard/features/booking/booking-slice.d.ts +2 -1
- package/build/build-cjs/src/booking-wizard/features/booking/selectors.d.ts +4 -3
- package/build/build-cjs/src/booking-wizard/features/price-details/price-details-slice.d.ts +1 -0
- package/build/build-cjs/src/booking-wizard/features/price-details/selectors.d.ts +1 -0
- package/build/build-cjs/src/booking-wizard/features/sidebar/sidebar.d.ts +1 -0
- package/build/build-cjs/src/booking-wizard/types.d.ts +1 -0
- package/build/build-cjs/src/shared/utils/localization-util.d.ts +1 -0
- package/build/build-esm/index.js +81 -27
- package/build/build-esm/src/booking-wizard/features/booking/booking-slice.d.ts +2 -1
- package/build/build-esm/src/booking-wizard/features/booking/selectors.d.ts +4 -3
- package/build/build-esm/src/booking-wizard/features/price-details/price-details-slice.d.ts +1 -0
- package/build/build-esm/src/booking-wizard/features/price-details/selectors.d.ts +1 -0
- package/build/build-esm/src/booking-wizard/features/sidebar/sidebar.d.ts +1 -0
- package/build/build-esm/src/booking-wizard/types.d.ts +1 -0
- package/build/build-esm/src/shared/utils/localization-util.d.ts +1 -0
- package/package.json +83 -83
- package/src/booking-product/components/age-select.tsx +35 -35
- package/src/booking-product/components/amount-input.tsx +51 -51
- package/src/booking-product/components/date-range-picker/calendar.tsx +155 -155
- package/src/booking-product/components/footer.tsx +54 -54
- package/src/booking-product/components/header.tsx +57 -57
- package/src/booking-product/components/icon.tsx +200 -200
- package/src/booking-product/components/list-view.tsx +54 -54
- package/src/booking-product/components/rating.tsx +21 -21
- package/src/booking-product/components/rooms.tsx +171 -171
- package/src/booking-product/constants.ts +1 -1
- package/src/booking-product/index.tsx +21 -21
- package/src/booking-product/settings-context.ts +16 -16
- package/src/booking-product/types.ts +30 -30
- package/src/booking-product/utils/api.ts +26 -26
- package/src/booking-product/utils/price.ts +28 -28
- package/src/booking-wizard/api-settings-slice.ts +24 -24
- package/src/booking-wizard/components/icon.tsx +398 -398
- package/src/booking-wizard/components/labeled-input.tsx +56 -56
- package/src/booking-wizard/components/labeled-select.tsx +54 -54
- package/src/booking-wizard/components/message.tsx +21 -21
- package/src/booking-wizard/components/multi-range-filter.tsx +99 -99
- package/src/booking-wizard/components/phone-input.tsx +146 -146
- package/src/booking-wizard/components/print-offer-button.tsx +53 -53
- package/src/booking-wizard/components/product-card.tsx +23 -23
- package/src/booking-wizard/declarations.d.ts +4 -4
- package/src/booking-wizard/features/booking/booking-self-contained.tsx +16 -1
- package/src/booking-wizard/features/booking/booking-slice.ts +9 -1
- package/src/booking-wizard/features/booking/booking.tsx +16 -1
- package/src/booking-wizard/features/booking/selectors.ts +5 -0
- package/src/booking-wizard/features/flight-options/flight-filter.tsx +371 -371
- package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +354 -354
- package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +211 -211
- package/src/booking-wizard/features/flight-options/flight-option.tsx +57 -57
- package/src/booking-wizard/features/flight-options/flight-utils.ts +423 -423
- package/src/booking-wizard/features/price-details/price-details-api.ts +20 -20
- package/src/booking-wizard/features/price-details/price-details-slice.ts +2 -0
- package/src/booking-wizard/features/price-details/selectors.ts +1 -0
- package/src/booking-wizard/features/price-details/util.ts +115 -115
- package/src/booking-wizard/features/product-options/no-options.tsx +18 -18
- package/src/booking-wizard/features/product-options/none-option.tsx +73 -73
- package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +53 -53
- package/src/booking-wizard/features/product-options/option-booking-group.tsx +152 -152
- package/src/booking-wizard/features/product-options/option-item.tsx +236 -236
- package/src/booking-wizard/features/product-options/option-pax-card.tsx +159 -159
- package/src/booking-wizard/features/product-options/option-pax-group.tsx +122 -122
- package/src/booking-wizard/features/product-options/option-room.tsx +226 -226
- package/src/booking-wizard/features/product-options/option-unit-group.tsx +138 -138
- package/src/booking-wizard/features/room-options/room-utils.ts +154 -154
- package/src/booking-wizard/features/room-options/room.tsx +123 -123
- package/src/booking-wizard/features/room-options/traveler-rooms.tsx +64 -64
- package/src/booking-wizard/features/sidebar/index.tsx +2 -0
- package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +66 -66
- package/src/booking-wizard/features/sidebar/sidebar.tsx +17 -1
- package/src/booking-wizard/features/summary/summary-booking-option-pax.tsx +23 -23
- package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +23 -23
- package/src/booking-wizard/features/summary/summary-flight.tsx +36 -36
- package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +60 -60
- package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +56 -56
- package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +58 -58
- package/src/booking-wizard/features/summary/summary-slice.ts +27 -27
- package/src/booking-wizard/features/travelers-form/travelers-form-slice.ts +157 -157
- package/src/booking-wizard/features/travelers-form/travelers-form-util.ts +10 -10
- package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +85 -85
- package/src/booking-wizard/features/travelers-form/validate-form.ts +178 -178
- package/src/booking-wizard/index.tsx +27 -27
- package/src/booking-wizard/store.ts +26 -26
- package/src/booking-wizard/types.ts +1 -0
- package/src/booking-wizard/use-offer-printer.ts +108 -108
- package/src/content/components/LanguageSwitcher.tsx +158 -158
- package/src/content/components/accordion.tsx +30 -30
- package/src/content/components/contact.tsx +211 -211
- package/src/content/components/personal-contact-form.tsx +809 -809
- package/src/content/header/index.tsx +43 -43
- package/src/content/header/types.ts +26 -26
- package/src/qsm/components/date-picker/index.tsx +152 -152
- package/src/qsm/components/date-range-picker/calendar-day.tsx +49 -49
- package/src/qsm/components/date-range-picker/calendar.tsx +211 -211
- package/src/qsm/components/date-range-picker/index.tsx +404 -404
- package/src/qsm/index.tsx +26 -26
- package/src/qsm/store/qsm-store.ts +13 -13
- package/src/search-results/components/flight/flight-card.tsx +38 -38
- package/src/search-results/components/flight/flight-leg.tsx +61 -61
- package/src/search-results/components/flight/flight-path.tsx +23 -23
- package/src/search-results/components/multi-range-filter.tsx +104 -104
- package/src/search-results/components/search-results-container/search-results-container.tsx +2 -2
- package/src/search-results/index.tsx +24 -24
- package/src/search-results/search-results-configuration-context.ts +6 -6
- package/src/search-results/store/search-results-store.ts +13 -13
- package/src/shared/components/loader.tsx +16 -16
- package/src/shared/translations/ar-SA.json +2 -1
- package/src/shared/translations/da-DK.json +2 -1
- package/src/shared/translations/de-DE.json +2 -1
- package/src/shared/translations/en-GB.json +2 -1
- package/src/shared/translations/es-ES.json +2 -1
- package/src/shared/translations/fr-BE.json +2 -1
- package/src/shared/translations/fr-FR.json +2 -1
- package/src/shared/translations/is-IS.json +2 -1
- package/src/shared/translations/it-IT.json +2 -1
- package/src/shared/translations/ja-JP.json +2 -1
- package/src/shared/translations/nl-BE.json +2 -1
- package/src/shared/translations/nl-NL.json +2 -1
- package/src/shared/translations/no-NO.json +2 -1
- package/src/shared/translations/pl-PL.json +2 -1
- package/src/shared/translations/pt-PT.json +2 -1
- package/src/shared/translations/sv-SE.json +2 -1
- package/src/shared/utils/class-util.ts +7 -7
- package/src/shared/utils/query-string-util.ts +91 -91
- package/src/shared/utils/tide-api-utils.ts +34 -34
- package/src/shared/utils/use-media-query-util.ts +19 -19
- package/styles/abstracts/_mixins.scss +74 -74
- package/styles/abstracts/_variables.scss +57 -57
- package/styles/base/_fonts.scss +2 -2
- package/styles/base/_normalize.scss +227 -227
- package/styles/base/_typography.scss +35 -35
- package/styles/booking-joker-variables.scss +596 -596
- package/styles/booking-product-variables.scss +330 -330
- package/styles/booking-product.scss +438 -438
- package/styles/booking-qsm-variables.scss +501 -501
- package/styles/booking-qsm.scss +52 -52
- package/styles/booking-wizard-variables.scss +603 -603
- package/styles/booking-wizard.scss +61 -61
- package/styles/components/_accordion.scss +67 -67
- package/styles/components/_animations.scss +39 -39
- package/styles/components/_base.scss +107 -107
- package/styles/components/_breadcrumb.scss +92 -92
- package/styles/components/_button.scss +238 -238
- package/styles/components/_checkbox.scss +230 -230
- package/styles/components/_contact.scss +239 -239
- package/styles/components/_cta.scss +238 -238
- package/styles/components/_date-list.scss +41 -41
- package/styles/components/_date-range-picker.scss +223 -223
- package/styles/components/_decrement-increment.scss +35 -35
- package/styles/components/_dropdown.scss +72 -72
- package/styles/components/_faq.scss +27 -27
- package/styles/components/_flight-option.scss +1419 -1419
- package/styles/components/_gallery.scss +314 -314
- package/styles/components/_header.scss +113 -113
- package/styles/components/_img-slider.scss +175 -175
- package/styles/components/_info-message.scss +75 -75
- package/styles/components/_input.scss +35 -35
- package/styles/components/_list.scss +185 -185
- package/styles/components/_loader.scss +70 -70
- package/styles/components/_mixins.scss +579 -579
- package/styles/components/_passenger-picker.scss +306 -306
- package/styles/components/_phone-input.scss +8 -8
- package/styles/components/_placeholders.scss +165 -165
- package/styles/components/_qsm.scss +17 -17
- package/styles/components/_radiobutton.scss +170 -170
- package/styles/components/_select-wrapper.scss +76 -76
- package/styles/components/_slider.scss +128 -128
- package/styles/components/_spinner.scss +29 -29
- package/styles/components/_step-indicators.scss +161 -161
- package/styles/components/_table.scss +81 -81
- package/styles/components/_typeahead.scss +275 -275
- package/styles/components/_variables.scss +89 -89
- package/styles/content-blocks-variables.scss +507 -507
- package/styles/font.scss +2 -2
- package/styles/qsm/_calendar.scss +274 -274
- package/styles/qsm/_qsm.scss +1094 -1094
- package/styles/search.scss +1200 -1200
- package/tsconfig.json +24 -24
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
interface LoaderProps {
|
|
4
|
-
loaderText?: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
const Loader: React.FC<LoaderProps> = ({ loaderText }) => {
|
|
8
|
-
return (
|
|
9
|
-
<div className="loader">
|
|
10
|
-
<div className="loader__spinner"></div>
|
|
11
|
-
{loaderText && <p className="loader__text">{loaderText}</p>}
|
|
12
|
-
</div>
|
|
13
|
-
);
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export default Loader;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
interface LoaderProps {
|
|
4
|
+
loaderText?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const Loader: React.FC<LoaderProps> = ({ loaderText }) => {
|
|
8
|
+
return (
|
|
9
|
+
<div className="loader">
|
|
10
|
+
<div className="loader__spinner"></div>
|
|
11
|
+
{loaderText && <p className="loader__text">{loaderText}</p>}
|
|
12
|
+
</div>
|
|
13
|
+
);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default Loader;
|
|
@@ -128,7 +128,8 @@
|
|
|
128
128
|
"FLIGHT_ARRIVAL": "Arrival",
|
|
129
129
|
"ON_REQUEST": "On request",
|
|
130
130
|
"CHANGES": "transfers",
|
|
131
|
-
"PACKAGE_NOT_AVAILABLE": "Package not available"
|
|
131
|
+
"PACKAGE_NOT_AVAILABLE": "Package not available",
|
|
132
|
+
"COMMISSION": "Commission"
|
|
132
133
|
},
|
|
133
134
|
"TRAVELERS_FORM": {
|
|
134
135
|
"AGE": "Age",
|
|
@@ -128,7 +128,8 @@
|
|
|
128
128
|
"FLIGHT_ARRIVAL": "Arrivée",
|
|
129
129
|
"ON_REQUEST": "Sur demande",
|
|
130
130
|
"CHANGES": "correspondances",
|
|
131
|
-
"PACKAGE_NOT_AVAILABLE": "Forfait non disponible"
|
|
131
|
+
"PACKAGE_NOT_AVAILABLE": "Forfait non disponible",
|
|
132
|
+
"COMMISSION": "Commission"
|
|
132
133
|
},
|
|
133
134
|
"TRAVELERS_FORM": {
|
|
134
135
|
"AGE": "Age",
|
|
@@ -128,7 +128,8 @@
|
|
|
128
128
|
"FLIGHT_ARRIVAL": "Aankomst",
|
|
129
129
|
"ON_REQUEST": "Op aanvraag",
|
|
130
130
|
"CHANGES": "overstappen",
|
|
131
|
-
"PACKAGE_NOT_AVAILABLE": "Pakket niet beschikbaar"
|
|
131
|
+
"PACKAGE_NOT_AVAILABLE": "Pakket niet beschikbaar",
|
|
132
|
+
"COMMISSION": "Commissie"
|
|
132
133
|
},
|
|
133
134
|
"TRAVELERS_FORM": {
|
|
134
135
|
"AGE": "Leeftijd",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { compact } from 'lodash';
|
|
2
|
-
|
|
3
|
-
export const buildClassName = (parts: any[]): string => {
|
|
4
|
-
const sanitizedParts = parts.filter((part) => typeof part === 'string').map((part: string) => part.trim());
|
|
5
|
-
|
|
6
|
-
return compact(sanitizedParts).join(' ');
|
|
7
|
-
};
|
|
1
|
+
import { compact } from 'lodash';
|
|
2
|
+
|
|
3
|
+
export const buildClassName = (parts: any[]): string => {
|
|
4
|
+
const sanitizedParts = parts.filter((part) => typeof part === 'string').map((part: string) => part.trim());
|
|
5
|
+
|
|
6
|
+
return compact(sanitizedParts).join(' ');
|
|
7
|
+
};
|
|
@@ -1,91 +1,91 @@
|
|
|
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 = (params: URLSearchParams, name: string): string | null => {
|
|
6
|
-
const dateString = params.get(name);
|
|
7
|
-
if (dateString === null) {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const year = parseInt(dateString.slice(0, 5));
|
|
12
|
-
const month = parseInt(dateString.slice(5, 7));
|
|
13
|
-
const date = parseInt(dateString.slice(8, 10));
|
|
14
|
-
|
|
15
|
-
return new Date(Date.UTC(year, month - 1, date)).toISOString();
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const getDateAsDateFromParams = (params: URLSearchParams, name: string): Date | null => {
|
|
19
|
-
const dateString = params.get(name);
|
|
20
|
-
|
|
21
|
-
if (dateString === null) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const year = parseInt(dateString.slice(0, 5));
|
|
26
|
-
const month = parseInt(dateString.slice(5, 7));
|
|
27
|
-
const date = parseInt(dateString.slice(8, 10));
|
|
28
|
-
|
|
29
|
-
return new Date(Date.UTC(year, month - 1, date));
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const getNumberFromParams = (params: URLSearchParams, name: string): number | null => {
|
|
33
|
-
const numberString = params.get(name);
|
|
34
|
-
if (numberString === null) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return parseInt(numberString);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export const getRoomsFromParams = (params: URLSearchParams, name: string): Room[] | null => {
|
|
42
|
-
const roomString = params.get(name);
|
|
43
|
-
if (roomString === null) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Encode the accommodation code in the room string because (external) acco codes can contain special characters like '='. eg: 'ACNYNEgUzMDc4NBoKMTAzODcwMjk4NQ=='
|
|
48
|
-
const safeRoomsString = roomString.replace(/accommodationCode:([^,]*)/, (match, code) => {
|
|
49
|
-
return `accommodationCode:${encodeURIComponent(code)}`;
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
const rooms = JsonURL.parse(safeRoomsString) as Room[] | undefined;
|
|
53
|
-
if (isNil(rooms)) {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return rooms.map((room) => {
|
|
58
|
-
if (!isArray(room.childAges)) {
|
|
59
|
-
room.childAges = [];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
room.children = room.childAges.length ?? 0;
|
|
63
|
-
return room;
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export const getFlightsFromParams = (params: URLSearchParams, name: string): FlightInfo | null => {
|
|
68
|
-
let flightString = params.get(name);
|
|
69
|
-
if (flightString === null) {
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
flightString = flightString.replace(/ /g, '%20');
|
|
74
|
-
|
|
75
|
-
const flightInfo = JsonURL.parse(flightString, { AQF: true }) as FlightInfo | undefined;
|
|
76
|
-
|
|
77
|
-
if (isNil(flightInfo)) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return flightInfo;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export const getStringFromParams = (params: URLSearchParams, name: string): string | null => {
|
|
85
|
-
return params.get(name);
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
export const getNumbersFromParams = (params: URLSearchParams, name: string): number[] => {
|
|
89
|
-
const numberStrings = params.getAll(name);
|
|
90
|
-
return numberStrings.map((x) => parseInt(x));
|
|
91
|
-
};
|
|
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 = (params: URLSearchParams, name: string): string | null => {
|
|
6
|
+
const dateString = params.get(name);
|
|
7
|
+
if (dateString === null) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const year = parseInt(dateString.slice(0, 5));
|
|
12
|
+
const month = parseInt(dateString.slice(5, 7));
|
|
13
|
+
const date = parseInt(dateString.slice(8, 10));
|
|
14
|
+
|
|
15
|
+
return new Date(Date.UTC(year, month - 1, date)).toISOString();
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const getDateAsDateFromParams = (params: URLSearchParams, name: string): Date | null => {
|
|
19
|
+
const dateString = params.get(name);
|
|
20
|
+
|
|
21
|
+
if (dateString === null) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const year = parseInt(dateString.slice(0, 5));
|
|
26
|
+
const month = parseInt(dateString.slice(5, 7));
|
|
27
|
+
const date = parseInt(dateString.slice(8, 10));
|
|
28
|
+
|
|
29
|
+
return new Date(Date.UTC(year, month - 1, date));
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const getNumberFromParams = (params: URLSearchParams, name: string): number | null => {
|
|
33
|
+
const numberString = params.get(name);
|
|
34
|
+
if (numberString === null) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return parseInt(numberString);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const getRoomsFromParams = (params: URLSearchParams, name: string): Room[] | null => {
|
|
42
|
+
const roomString = params.get(name);
|
|
43
|
+
if (roomString === null) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Encode the accommodation code in the room string because (external) acco codes can contain special characters like '='. eg: 'ACNYNEgUzMDc4NBoKMTAzODcwMjk4NQ=='
|
|
48
|
+
const safeRoomsString = roomString.replace(/accommodationCode:([^,]*)/, (match, code) => {
|
|
49
|
+
return `accommodationCode:${encodeURIComponent(code)}`;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const rooms = JsonURL.parse(safeRoomsString) as Room[] | undefined;
|
|
53
|
+
if (isNil(rooms)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return rooms.map((room) => {
|
|
58
|
+
if (!isArray(room.childAges)) {
|
|
59
|
+
room.childAges = [];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
room.children = room.childAges.length ?? 0;
|
|
63
|
+
return room;
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const getFlightsFromParams = (params: URLSearchParams, name: string): FlightInfo | null => {
|
|
68
|
+
let flightString = params.get(name);
|
|
69
|
+
if (flightString === null) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
flightString = flightString.replace(/ /g, '%20');
|
|
74
|
+
|
|
75
|
+
const flightInfo = JsonURL.parse(flightString, { AQF: true }) as FlightInfo | undefined;
|
|
76
|
+
|
|
77
|
+
if (isNil(flightInfo)) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return flightInfo;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const getStringFromParams = (params: URLSearchParams, name: string): string | null => {
|
|
85
|
+
return params.get(name);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export const getNumbersFromParams = (params: URLSearchParams, name: string): number[] => {
|
|
89
|
+
const numberStrings = params.getAll(name);
|
|
90
|
+
return numberStrings.map((x) => parseInt(x));
|
|
91
|
+
};
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { TideClientConfig } from '@qite/tide-client';
|
|
2
|
-
import { isNil } from 'lodash';
|
|
3
|
-
import { ApiSettingsState } from '../types';
|
|
4
|
-
|
|
5
|
-
export function buildTideClientConfig(settings?: ApiSettingsState): TideClientConfig {
|
|
6
|
-
const HOST = settings?.apiUrl || process.env.REACT_APP_BOOKING_HOST;
|
|
7
|
-
const API_KEY = settings?.apiKey || process.env.REACT_APP_BOOKING_API_KEY;
|
|
8
|
-
const token = selectAgentToken();
|
|
9
|
-
|
|
10
|
-
if (isNil(HOST)) {
|
|
11
|
-
throw Error(`Environment variable "HOST" was not set.`);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
if (isNil(API_KEY)) {
|
|
15
|
-
throw Error(`Environment variable "API_KEY" was not set.`);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
host: HOST,
|
|
20
|
-
apiKey: API_KEY,
|
|
21
|
-
token: token
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const selectAgentToken = (): string | undefined => {
|
|
26
|
-
let token: string | null = null;
|
|
27
|
-
if (typeof sessionStorage !== 'undefined') {
|
|
28
|
-
token = sessionStorage.getItem('token');
|
|
29
|
-
}
|
|
30
|
-
if (token === null && typeof localStorage !== 'undefined') {
|
|
31
|
-
token = localStorage.getItem('token');
|
|
32
|
-
}
|
|
33
|
-
return token ?? undefined;
|
|
34
|
-
};
|
|
1
|
+
import { TideClientConfig } from '@qite/tide-client';
|
|
2
|
+
import { isNil } from 'lodash';
|
|
3
|
+
import { ApiSettingsState } from '../types';
|
|
4
|
+
|
|
5
|
+
export function buildTideClientConfig(settings?: ApiSettingsState): TideClientConfig {
|
|
6
|
+
const HOST = settings?.apiUrl || process.env.REACT_APP_BOOKING_HOST;
|
|
7
|
+
const API_KEY = settings?.apiKey || process.env.REACT_APP_BOOKING_API_KEY;
|
|
8
|
+
const token = selectAgentToken();
|
|
9
|
+
|
|
10
|
+
if (isNil(HOST)) {
|
|
11
|
+
throw Error(`Environment variable "HOST" was not set.`);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (isNil(API_KEY)) {
|
|
15
|
+
throw Error(`Environment variable "API_KEY" was not set.`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
host: HOST,
|
|
20
|
+
apiKey: API_KEY,
|
|
21
|
+
token: token
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const selectAgentToken = (): string | undefined => {
|
|
26
|
+
let token: string | null = null;
|
|
27
|
+
if (typeof sessionStorage !== 'undefined') {
|
|
28
|
+
token = sessionStorage.getItem('token');
|
|
29
|
+
}
|
|
30
|
+
if (token === null && typeof localStorage !== 'undefined') {
|
|
31
|
+
token = localStorage.getItem('token');
|
|
32
|
+
}
|
|
33
|
+
return token ?? undefined;
|
|
34
|
+
};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
|
|
3
|
-
const useMediaQuery = (query: string): boolean => {
|
|
4
|
-
const [matches, setMatches] = useState(false);
|
|
5
|
-
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
const media = window.matchMedia(query);
|
|
8
|
-
const handler = () => setMatches(media.matches);
|
|
9
|
-
|
|
10
|
-
handler();
|
|
11
|
-
media.addEventListener('change', handler);
|
|
12
|
-
|
|
13
|
-
return () => media.removeEventListener('change', handler);
|
|
14
|
-
}, [query]);
|
|
15
|
-
|
|
16
|
-
return matches;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default useMediaQuery;
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
const useMediaQuery = (query: string): boolean => {
|
|
4
|
+
const [matches, setMatches] = useState(false);
|
|
5
|
+
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const media = window.matchMedia(query);
|
|
8
|
+
const handler = () => setMatches(media.matches);
|
|
9
|
+
|
|
10
|
+
handler();
|
|
11
|
+
media.addEventListener('change', handler);
|
|
12
|
+
|
|
13
|
+
return () => media.removeEventListener('change', handler);
|
|
14
|
+
}, [query]);
|
|
15
|
+
|
|
16
|
+
return matches;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default useMediaQuery;
|
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
@use '../abstracts/variables' as variables;
|
|
2
|
-
// MEDIA QUERIES
|
|
3
|
-
@mixin media-xs {
|
|
4
|
-
@media only screen and (max-width: variables.$screen-xs) {
|
|
5
|
-
@content;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
@mixin media-sm {
|
|
10
|
-
@media only screen and (max-width: variables.$screen-sm) {
|
|
11
|
-
@content;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
@mixin media-md {
|
|
16
|
-
@media only screen and (max-width: variables.$screen-md) {
|
|
17
|
-
@content;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@mixin media-lg {
|
|
22
|
-
@media only screen and (max-width: variables.$screen-lg) {
|
|
23
|
-
@content;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@mixin media-xgl {
|
|
28
|
-
@media only screen and (max-width: variables.$screen-xgl) {
|
|
29
|
-
@content;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
@mixin media-xl {
|
|
34
|
-
@media only screen and (max-width: variables.$screen-xl) {
|
|
35
|
-
@content;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@mixin media-xxl {
|
|
40
|
-
@media only screen and (max-width: variables.$screen-xxl) {
|
|
41
|
-
@content;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@mixin media-xxxl {
|
|
46
|
-
@media only screen and (max-width: variables.$screen-xxl) {
|
|
47
|
-
@content;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
@mixin make-container($padding-x: $container-padding-x) {
|
|
52
|
-
width: 100%;
|
|
53
|
-
max-width: 1496px;
|
|
54
|
-
margin-right: auto;
|
|
55
|
-
margin-left: auto;
|
|
56
|
-
|
|
57
|
-
@include media-xl {
|
|
58
|
-
padding: 0 $padding-x;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@mixin container() {
|
|
63
|
-
width: 100%;
|
|
64
|
-
padding: 0 15px;
|
|
65
|
-
margin: 0 auto;
|
|
66
|
-
|
|
67
|
-
@include media-sm {
|
|
68
|
-
padding: 0 30px;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
@include media-lg {
|
|
72
|
-
padding: 0 45px;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
1
|
+
@use '../abstracts/variables' as variables;
|
|
2
|
+
// MEDIA QUERIES
|
|
3
|
+
@mixin media-xs {
|
|
4
|
+
@media only screen and (max-width: variables.$screen-xs) {
|
|
5
|
+
@content;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@mixin media-sm {
|
|
10
|
+
@media only screen and (max-width: variables.$screen-sm) {
|
|
11
|
+
@content;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@mixin media-md {
|
|
16
|
+
@media only screen and (max-width: variables.$screen-md) {
|
|
17
|
+
@content;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@mixin media-lg {
|
|
22
|
+
@media only screen and (max-width: variables.$screen-lg) {
|
|
23
|
+
@content;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@mixin media-xgl {
|
|
28
|
+
@media only screen and (max-width: variables.$screen-xgl) {
|
|
29
|
+
@content;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@mixin media-xl {
|
|
34
|
+
@media only screen and (max-width: variables.$screen-xl) {
|
|
35
|
+
@content;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@mixin media-xxl {
|
|
40
|
+
@media only screen and (max-width: variables.$screen-xxl) {
|
|
41
|
+
@content;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@mixin media-xxxl {
|
|
46
|
+
@media only screen and (max-width: variables.$screen-xxl) {
|
|
47
|
+
@content;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@mixin make-container($padding-x: $container-padding-x) {
|
|
52
|
+
width: 100%;
|
|
53
|
+
max-width: 1496px;
|
|
54
|
+
margin-right: auto;
|
|
55
|
+
margin-left: auto;
|
|
56
|
+
|
|
57
|
+
@include media-xl {
|
|
58
|
+
padding: 0 $padding-x;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@mixin container() {
|
|
63
|
+
width: 100%;
|
|
64
|
+
padding: 0 15px;
|
|
65
|
+
margin: 0 auto;
|
|
66
|
+
|
|
67
|
+
@include media-sm {
|
|
68
|
+
padding: 0 30px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@include media-lg {
|
|
72
|
+
padding: 0 45px;
|
|
73
|
+
}
|
|
74
|
+
}
|