@qite/tide-components 1.0.9 → 1.0.12
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/build/build-cjs/index.js +585 -302
- package/build/build-cjs/src/booking-wizard/features/booking/selectors.d.ts +1 -0
- package/build/build-cjs/src/booking-wizard/features/travelers-form/validate-form.d.ts +2 -1
- package/build/build-cjs/src/booking-wizard/types.d.ts +8 -1
- package/build/build-cjs/src/search-results/types.d.ts +12 -0
- package/build/build-cjs/src/shared/booking/travelers-form.d.ts +8 -3
- package/build/build-esm/index.js +587 -304
- package/build/build-esm/src/booking-wizard/features/booking/selectors.d.ts +1 -0
- package/build/build-esm/src/booking-wizard/features/travelers-form/validate-form.d.ts +2 -1
- package/build/build-esm/src/booking-wizard/types.d.ts +8 -1
- package/build/build-esm/src/search-results/types.d.ts +12 -0
- package/build/build-esm/src/shared/booking/travelers-form.d.ts +8 -3
- package/package.json +2 -2
- package/styles/components/_form.scss +11 -0
package/build/build-esm/index.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import React__default, { useLayoutEffect as useLayoutEffect$1, useEffect, useContext, useState, useRef, useCallback, useMemo } from 'react';
|
|
4
4
|
import JsonURL from '@jsonurl/jsonurl';
|
|
5
|
-
import { format as format$2, isToday, getDate, startOfWeek, startOfMonth, endOfWeek, addWeeks, endOfMonth, eachDayOfInterval, getYear, getMonth, getISOWeek, getISODay, isSameMonth, startOfDay, isAfter, isSameDay, isEqual, isWithinInterval, endOfDay, isBefore, differenceInCalendarDays, addMonths, addDays, formatISO, addYears, differenceInYears, parseISO, differenceInMinutes,
|
|
6
|
-
import { merge, cloneDeep, isNil, isArray as isArray$1, compact, isEmpty as isEmpty$1, range, chunk, isFunction as isFunction$1, clamp, now, omit, isPlainObject as isPlainObject$1, mapValues, pickBy, first, orderBy, uniq, uniqBy, sortBy, sum, last, findIndex as findIndex$1,
|
|
5
|
+
import { format as format$2, isToday, getDate, startOfWeek, startOfMonth, endOfWeek, addWeeks, endOfMonth, eachDayOfInterval, getYear, getMonth, getISOWeek, getISODay, isSameMonth, startOfDay, isAfter, isSameDay, isEqual, isWithinInterval, endOfDay, isBefore, differenceInCalendarDays, addMonths, addDays, formatISO, addYears, differenceInYears, parseISO, differenceInMinutes, parse, isValid, startOfToday } from 'date-fns';
|
|
6
|
+
import { merge, cloneDeep, isNil, isArray as isArray$1, compact, isEmpty as isEmpty$1, range, chunk, isFunction as isFunction$1, clamp, now, omit, isPlainObject as isPlainObject$1, mapValues, pickBy, first, orderBy, uniq, uniqBy, sortBy, sum, last, findIndex as findIndex$1, get, set, isEqual as isEqual$1, groupBy, minBy, concat, flatMap } from 'lodash';
|
|
7
7
|
import { arSA, da, de, enGB, es, fr, is, it, nl, nb, pl, pt, sv, ja, enUS } from 'date-fns/locale';
|
|
8
8
|
import { usePopper } from 'react-popper';
|
|
9
9
|
import { useSelector, useDispatch, Provider } from 'react-redux';
|
|
@@ -95,7 +95,7 @@ var PRODUCT$f = {
|
|
|
95
95
|
PER_PERSON_PER_NIGHT: "لكل شخص / لكل ليلة",
|
|
96
96
|
BOOK_NOW: "احجز الآن",
|
|
97
97
|
TO_YOUR_OFFER: "إلى عرضك",
|
|
98
|
-
NOT_AVAILABLE: "غير متاح",
|
|
98
|
+
NOT_AVAILABLE: "غير متاح — يرجى اختيار تاريخ آخر",
|
|
99
99
|
NUMBER_OF_ROOMS: "عدد الغرف",
|
|
100
100
|
AGE_BY_DEPARTURE_DATE: "عمر الأطفال عند تاريخ المغادرة",
|
|
101
101
|
YEAR: "سنة/سنوات",
|
|
@@ -182,6 +182,12 @@ var TRAVELERS_FORM$f = {
|
|
|
182
182
|
FIRST_NAME: "الاسم الأول",
|
|
183
183
|
LAST_NAME: "اسم العائلة",
|
|
184
184
|
BIRTHDATE: "تاريخ الميلاد",
|
|
185
|
+
WEIGHT: "الوزن",
|
|
186
|
+
WEIGHT_UNIT_KG: "kg",
|
|
187
|
+
WEIGHT_UNIT_LB: "lb",
|
|
188
|
+
HEIGHT: "الطول",
|
|
189
|
+
HEIGHT_UNIT_CM: "cm",
|
|
190
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
185
191
|
STREET: "الشارع",
|
|
186
192
|
STREET_PLACEHOLDER: "اسم الشارع",
|
|
187
193
|
HOUSE_NUMBER: "رقم المنزل",
|
|
@@ -439,7 +445,7 @@ var SRP$f = {
|
|
|
439
445
|
};
|
|
440
446
|
var ITINERARY$f = {
|
|
441
447
|
DAY: "اليوم",
|
|
442
|
-
NO_ITEMS: "
|
|
448
|
+
NO_ITEMS: "لم يتم اختيار أنشطة لهذا اليوم."
|
|
443
449
|
};
|
|
444
450
|
var FORM$f = {
|
|
445
451
|
LOADING: "جاري تحميل النموذج...",
|
|
@@ -542,7 +548,7 @@ var PRODUCT$e = {
|
|
|
542
548
|
PER_PERSON_PER_NIGHT: "Per person / per nat",
|
|
543
549
|
BOOK_NOW: "Book nu",
|
|
544
550
|
TO_YOUR_OFFER: "Til dit tilbud",
|
|
545
|
-
NOT_AVAILABLE: "Ikke tilgængelig",
|
|
551
|
+
NOT_AVAILABLE: "Ikke tilgængelig — vælg venligst en anden dato",
|
|
546
552
|
NUMBER_OF_ROOMS: "Antal værelser",
|
|
547
553
|
AGE_BY_DEPARTURE_DATE: "Børns alder på afrejsedato",
|
|
548
554
|
YEAR: "år",
|
|
@@ -629,6 +635,12 @@ var TRAVELERS_FORM$e = {
|
|
|
629
635
|
FIRST_NAME: "Fornavn",
|
|
630
636
|
LAST_NAME: "Efternavn",
|
|
631
637
|
BIRTHDATE: "Fødselsdato",
|
|
638
|
+
WEIGHT: "Vægt",
|
|
639
|
+
WEIGHT_UNIT_KG: "kg",
|
|
640
|
+
WEIGHT_UNIT_LB: "lb",
|
|
641
|
+
HEIGHT: "Højde",
|
|
642
|
+
HEIGHT_UNIT_CM: "cm",
|
|
643
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
632
644
|
STREET: "Gade",
|
|
633
645
|
STREET_PLACEHOLDER: "Din gade",
|
|
634
646
|
HOUSE_NUMBER: "Husnummer",
|
|
@@ -886,7 +898,7 @@ var SRP$e = {
|
|
|
886
898
|
};
|
|
887
899
|
var ITINERARY$e = {
|
|
888
900
|
DAY: "Dag",
|
|
889
|
-
NO_ITEMS: "Ingen
|
|
901
|
+
NO_ITEMS: "Ingen aktiviteter valgt for denne dag."
|
|
890
902
|
};
|
|
891
903
|
var FORM$e = {
|
|
892
904
|
LOADING: "Indlæser formular...",
|
|
@@ -989,7 +1001,7 @@ var PRODUCT$d = {
|
|
|
989
1001
|
PER_PERSON_PER_NIGHT: "Pro Person / pro Nacht",
|
|
990
1002
|
BOOK_NOW: "Jetzt buchen",
|
|
991
1003
|
TO_YOUR_OFFER: "Zu Ihrem Angebot",
|
|
992
|
-
NOT_AVAILABLE: "Nicht verfügbar",
|
|
1004
|
+
NOT_AVAILABLE: "Nicht verfügbar — bitte wählen Sie ein anderes Datum",
|
|
993
1005
|
NUMBER_OF_ROOMS: "Anzahl der Zimmer",
|
|
994
1006
|
AGE_BY_DEPARTURE_DATE: "Alter der Kinder am Abreisedatum",
|
|
995
1007
|
YEAR: "Jahr(e)",
|
|
@@ -1076,6 +1088,12 @@ var TRAVELERS_FORM$d = {
|
|
|
1076
1088
|
FIRST_NAME: "Vorname",
|
|
1077
1089
|
LAST_NAME: "Nachname",
|
|
1078
1090
|
BIRTHDATE: "Geburtsdatum",
|
|
1091
|
+
WEIGHT: "Gewicht",
|
|
1092
|
+
WEIGHT_UNIT_KG: "kg",
|
|
1093
|
+
WEIGHT_UNIT_LB: "lb",
|
|
1094
|
+
HEIGHT: "Größe",
|
|
1095
|
+
HEIGHT_UNIT_CM: "cm",
|
|
1096
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
1079
1097
|
STREET: "Straße",
|
|
1080
1098
|
STREET_PLACEHOLDER: "Ihre Straße",
|
|
1081
1099
|
HOUSE_NUMBER: "Hausnummer",
|
|
@@ -1333,7 +1351,7 @@ var SRP$d = {
|
|
|
1333
1351
|
};
|
|
1334
1352
|
var ITINERARY$d = {
|
|
1335
1353
|
DAY: "Tag",
|
|
1336
|
-
NO_ITEMS: "Keine
|
|
1354
|
+
NO_ITEMS: "Keine Aktivitäten für diesen Tag ausgewählt."
|
|
1337
1355
|
};
|
|
1338
1356
|
var FORM$d = {
|
|
1339
1357
|
LOADING: "Formular wird geladen...",
|
|
@@ -1436,7 +1454,7 @@ var PRODUCT$c = {
|
|
|
1436
1454
|
PER_PERSON_PER_NIGHT: "Per person / per night",
|
|
1437
1455
|
BOOK_NOW: "Book now",
|
|
1438
1456
|
TO_YOUR_OFFER: "To your quote",
|
|
1439
|
-
NOT_AVAILABLE: "Not available",
|
|
1457
|
+
NOT_AVAILABLE: "Not available — please select a different date",
|
|
1440
1458
|
NUMBER_OF_ROOMS: "Number of rooms",
|
|
1441
1459
|
AGE_BY_DEPARTURE_DATE: "Age of children on departure date",
|
|
1442
1460
|
YEAR: "Year(s)",
|
|
@@ -1524,6 +1542,12 @@ var TRAVELERS_FORM$c = {
|
|
|
1524
1542
|
FIRST_NAME: "First name",
|
|
1525
1543
|
LAST_NAME: "Last name",
|
|
1526
1544
|
BIRTHDATE: "Date of birth",
|
|
1545
|
+
WEIGHT: "Weight",
|
|
1546
|
+
WEIGHT_UNIT_KG: "kg",
|
|
1547
|
+
WEIGHT_UNIT_LB: "lb",
|
|
1548
|
+
HEIGHT: "Height",
|
|
1549
|
+
HEIGHT_UNIT_CM: "cm",
|
|
1550
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
1527
1551
|
STREET: "Street",
|
|
1528
1552
|
STREET_PLACEHOLDER: "Your street",
|
|
1529
1553
|
HOUSE_NUMBER: "House number",
|
|
@@ -1784,7 +1808,7 @@ var SRP$c = {
|
|
|
1784
1808
|
};
|
|
1785
1809
|
var ITINERARY$c = {
|
|
1786
1810
|
DAY: "Day",
|
|
1787
|
-
NO_ITEMS: "No
|
|
1811
|
+
NO_ITEMS: "No activities selected for this day."
|
|
1788
1812
|
};
|
|
1789
1813
|
var FORM$c = {
|
|
1790
1814
|
LOADING: "Loading form...",
|
|
@@ -1887,7 +1911,7 @@ var PRODUCT$b = {
|
|
|
1887
1911
|
PER_PERSON_PER_NIGHT: "Por persona / por noche",
|
|
1888
1912
|
BOOK_NOW: "Reservar ahora",
|
|
1889
1913
|
TO_YOUR_OFFER: "A su presupuesto",
|
|
1890
|
-
NOT_AVAILABLE: "No disponible",
|
|
1914
|
+
NOT_AVAILABLE: "No disponible — seleccione otra fecha",
|
|
1891
1915
|
NUMBER_OF_ROOMS: "Número de habitaciones",
|
|
1892
1916
|
AGE_BY_DEPARTURE_DATE: "Edad de los niños en la fecha de salida",
|
|
1893
1917
|
YEAR: "Año(s)",
|
|
@@ -1974,6 +1998,12 @@ var TRAVELERS_FORM$b = {
|
|
|
1974
1998
|
FIRST_NAME: "Nombre",
|
|
1975
1999
|
LAST_NAME: "Apellido",
|
|
1976
2000
|
BIRTHDATE: "Fecha de nacimiento",
|
|
2001
|
+
WEIGHT: "Peso",
|
|
2002
|
+
WEIGHT_UNIT_KG: "kg",
|
|
2003
|
+
WEIGHT_UNIT_LB: "lb",
|
|
2004
|
+
HEIGHT: "Estatura",
|
|
2005
|
+
HEIGHT_UNIT_CM: "cm",
|
|
2006
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
1977
2007
|
STREET: "Calle",
|
|
1978
2008
|
STREET_PLACEHOLDER: "Su calle",
|
|
1979
2009
|
HOUSE_NUMBER: "Número",
|
|
@@ -2231,7 +2261,7 @@ var SRP$b = {
|
|
|
2231
2261
|
};
|
|
2232
2262
|
var ITINERARY$b = {
|
|
2233
2263
|
DAY: "Día",
|
|
2234
|
-
NO_ITEMS: "No hay
|
|
2264
|
+
NO_ITEMS: "No hay actividades seleccionadas para este día."
|
|
2235
2265
|
};
|
|
2236
2266
|
var FORM$b = {
|
|
2237
2267
|
LOADING: "Cargando formulario...",
|
|
@@ -2334,7 +2364,7 @@ var PRODUCT$a = {
|
|
|
2334
2364
|
PER_PERSON_PER_NIGHT: "Par personne / par nuit",
|
|
2335
2365
|
BOOK_NOW: "Réserver maintenant",
|
|
2336
2366
|
TO_YOUR_OFFER: "Vers votre devis",
|
|
2337
|
-
NOT_AVAILABLE: "Non disponible",
|
|
2367
|
+
NOT_AVAILABLE: "Non disponible — veuillez sélectionner une autre date",
|
|
2338
2368
|
NUMBER_OF_ROOMS: "Nombre de chambres",
|
|
2339
2369
|
AGE_BY_DEPARTURE_DATE: "Âge des enfants à la date de départ",
|
|
2340
2370
|
YEAR: "An(s)",
|
|
@@ -2422,6 +2452,12 @@ var TRAVELERS_FORM$a = {
|
|
|
2422
2452
|
FIRST_NAME: "Prénom",
|
|
2423
2453
|
LAST_NAME: "Nom",
|
|
2424
2454
|
BIRTHDATE: "Date de naissance",
|
|
2455
|
+
WEIGHT: "Poids",
|
|
2456
|
+
WEIGHT_UNIT_KG: "kg",
|
|
2457
|
+
WEIGHT_UNIT_LB: "lb",
|
|
2458
|
+
HEIGHT: "Taille",
|
|
2459
|
+
HEIGHT_UNIT_CM: "cm",
|
|
2460
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
2425
2461
|
STREET: "Rue",
|
|
2426
2462
|
STREET_PLACEHOLDER: "Votre rue",
|
|
2427
2463
|
HOUSE_NUMBER: "N°",
|
|
@@ -2682,7 +2718,7 @@ var SRP$a = {
|
|
|
2682
2718
|
};
|
|
2683
2719
|
var ITINERARY$a = {
|
|
2684
2720
|
DAY: "Jour",
|
|
2685
|
-
NO_ITEMS: "
|
|
2721
|
+
NO_ITEMS: "Aucune activité sélectionnée pour ce jour."
|
|
2686
2722
|
};
|
|
2687
2723
|
var FORM$a = {
|
|
2688
2724
|
LOADING: "Chargement du formulaire...",
|
|
@@ -2785,7 +2821,7 @@ var PRODUCT$9 = {
|
|
|
2785
2821
|
PER_PERSON_PER_NIGHT: "Par personne / par nuit",
|
|
2786
2822
|
BOOK_NOW: "Réservez maintenant",
|
|
2787
2823
|
TO_YOUR_OFFER: "Vers votre devis",
|
|
2788
|
-
NOT_AVAILABLE: "Indisponible",
|
|
2824
|
+
NOT_AVAILABLE: "Indisponible — veuillez sélectionner une autre date",
|
|
2789
2825
|
NUMBER_OF_ROOMS: "Nombre de chambres",
|
|
2790
2826
|
AGE_BY_DEPARTURE_DATE: "Âge des enfants à la date de départ",
|
|
2791
2827
|
YEAR: "An(s)",
|
|
@@ -2872,6 +2908,12 @@ var TRAVELERS_FORM$9 = {
|
|
|
2872
2908
|
FIRST_NAME: "Prénom",
|
|
2873
2909
|
LAST_NAME: "Nom",
|
|
2874
2910
|
BIRTHDATE: "Date de naissance",
|
|
2911
|
+
WEIGHT: "Poids",
|
|
2912
|
+
WEIGHT_UNIT_KG: "kg",
|
|
2913
|
+
WEIGHT_UNIT_LB: "lb",
|
|
2914
|
+
HEIGHT: "Taille",
|
|
2915
|
+
HEIGHT_UNIT_CM: "cm",
|
|
2916
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
2875
2917
|
STREET: "Rue",
|
|
2876
2918
|
STREET_PLACEHOLDER: "Votre rue",
|
|
2877
2919
|
HOUSE_NUMBER: "Numéro",
|
|
@@ -3129,7 +3171,7 @@ var SRP$9 = {
|
|
|
3129
3171
|
};
|
|
3130
3172
|
var ITINERARY$9 = {
|
|
3131
3173
|
DAY: "Jour",
|
|
3132
|
-
NO_ITEMS: "
|
|
3174
|
+
NO_ITEMS: "Aucune activité sélectionnée pour ce jour."
|
|
3133
3175
|
};
|
|
3134
3176
|
var FORM$9 = {
|
|
3135
3177
|
LOADING: "Chargement du formulaire...",
|
|
@@ -3232,7 +3274,7 @@ var PRODUCT$8 = {
|
|
|
3232
3274
|
PER_PERSON_PER_NIGHT: "Á mann / á nótt",
|
|
3233
3275
|
BOOK_NOW: "Panta núna",
|
|
3234
3276
|
TO_YOUR_OFFER: "Til tilboðsins þíns",
|
|
3235
|
-
NOT_AVAILABLE: "Ekki í boði",
|
|
3277
|
+
NOT_AVAILABLE: "Ekki í boði — vinsamlegast veldu aðra dagsetningu",
|
|
3236
3278
|
NUMBER_OF_ROOMS: "Fjöldi herbergja",
|
|
3237
3279
|
AGE_BY_DEPARTURE_DATE: "Aldur barna á brottfarardegi",
|
|
3238
3280
|
YEAR: "ár",
|
|
@@ -3319,6 +3361,12 @@ var TRAVELERS_FORM$8 = {
|
|
|
3319
3361
|
FIRST_NAME: "Fornafn",
|
|
3320
3362
|
LAST_NAME: "Eftirnafn",
|
|
3321
3363
|
BIRTHDATE: "Fæðingardagur",
|
|
3364
|
+
WEIGHT: "Þyngd",
|
|
3365
|
+
WEIGHT_UNIT_KG: "kg",
|
|
3366
|
+
WEIGHT_UNIT_LB: "lb",
|
|
3367
|
+
HEIGHT: "Hæð",
|
|
3368
|
+
HEIGHT_UNIT_CM: "cm",
|
|
3369
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
3322
3370
|
STREET: "Gata",
|
|
3323
3371
|
STREET_PLACEHOLDER: "Gatan þín",
|
|
3324
3372
|
HOUSE_NUMBER: "Húsnúmer",
|
|
@@ -3576,7 +3624,7 @@ var SRP$8 = {
|
|
|
3576
3624
|
};
|
|
3577
3625
|
var ITINERARY$8 = {
|
|
3578
3626
|
DAY: "Dagur",
|
|
3579
|
-
NO_ITEMS: "
|
|
3627
|
+
NO_ITEMS: "Engin afþreying valin fyrir þennan dag."
|
|
3580
3628
|
};
|
|
3581
3629
|
var FORM$8 = {
|
|
3582
3630
|
LOADING: "Hleður eyðublað...",
|
|
@@ -3679,7 +3727,7 @@ var PRODUCT$7 = {
|
|
|
3679
3727
|
PER_PERSON_PER_NIGHT: "A persona / a notte",
|
|
3680
3728
|
BOOK_NOW: "Prenota ora",
|
|
3681
3729
|
TO_YOUR_OFFER: "Vai al preventivo",
|
|
3682
|
-
NOT_AVAILABLE: "Non disponibile",
|
|
3730
|
+
NOT_AVAILABLE: "Non disponibile — seleziona un'altra data",
|
|
3683
3731
|
NUMBER_OF_ROOMS: "Numero di camere",
|
|
3684
3732
|
AGE_BY_DEPARTURE_DATE: "Età dei bambini alla data di partenza",
|
|
3685
3733
|
YEAR: "Anno/i",
|
|
@@ -3766,6 +3814,12 @@ var TRAVELERS_FORM$7 = {
|
|
|
3766
3814
|
FIRST_NAME: "Nome",
|
|
3767
3815
|
LAST_NAME: "Cognome",
|
|
3768
3816
|
BIRTHDATE: "Data di nascita",
|
|
3817
|
+
WEIGHT: "Peso",
|
|
3818
|
+
WEIGHT_UNIT_KG: "kg",
|
|
3819
|
+
WEIGHT_UNIT_LB: "lb",
|
|
3820
|
+
HEIGHT: "Altezza",
|
|
3821
|
+
HEIGHT_UNIT_CM: "cm",
|
|
3822
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
3769
3823
|
STREET: "Via",
|
|
3770
3824
|
STREET_PLACEHOLDER: "La tua via",
|
|
3771
3825
|
HOUSE_NUMBER: "Numero civico",
|
|
@@ -4023,7 +4077,7 @@ var SRP$7 = {
|
|
|
4023
4077
|
};
|
|
4024
4078
|
var ITINERARY$7 = {
|
|
4025
4079
|
DAY: "Giorno",
|
|
4026
|
-
NO_ITEMS: "
|
|
4080
|
+
NO_ITEMS: "Nessuna attività selezionata per questo giorno."
|
|
4027
4081
|
};
|
|
4028
4082
|
var FORM$7 = {
|
|
4029
4083
|
LOADING: "Caricamento modulo...",
|
|
@@ -4126,7 +4180,7 @@ var PRODUCT$6 = {
|
|
|
4126
4180
|
PER_PERSON_PER_NIGHT: "Per persoon / per nacht",
|
|
4127
4181
|
BOOK_NOW: "Boek nu",
|
|
4128
4182
|
TO_YOUR_OFFER: "Naar uw offerte",
|
|
4129
|
-
NOT_AVAILABLE: "Niet beschikbaar",
|
|
4183
|
+
NOT_AVAILABLE: "Niet beschikbaar — kies een andere datum",
|
|
4130
4184
|
NUMBER_OF_ROOMS: "Aantal kamers",
|
|
4131
4185
|
AGE_BY_DEPARTURE_DATE: "Leeftijd kinderen op vertrekdatum",
|
|
4132
4186
|
YEAR: "Jaar",
|
|
@@ -4214,6 +4268,12 @@ var TRAVELERS_FORM$6 = {
|
|
|
4214
4268
|
FIRST_NAME: "Voornaam",
|
|
4215
4269
|
LAST_NAME: "Naam",
|
|
4216
4270
|
BIRTHDATE: "Geboortedatum",
|
|
4271
|
+
WEIGHT: "Gewicht",
|
|
4272
|
+
WEIGHT_UNIT_KG: "kg",
|
|
4273
|
+
WEIGHT_UNIT_LB: "lb",
|
|
4274
|
+
HEIGHT: "Lengte",
|
|
4275
|
+
HEIGHT_UNIT_CM: "cm",
|
|
4276
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
4217
4277
|
STREET: "Straat",
|
|
4218
4278
|
STREET_PLACEHOLDER: "Jouw straat",
|
|
4219
4279
|
HOUSE_NUMBER: "Huisnr",
|
|
@@ -4474,7 +4534,7 @@ var SRP$6 = {
|
|
|
4474
4534
|
};
|
|
4475
4535
|
var ITINERARY$6 = {
|
|
4476
4536
|
DAY: "Dag",
|
|
4477
|
-
NO_ITEMS: "Geen
|
|
4537
|
+
NO_ITEMS: "Geen activiteiten geselecteerd voor deze dag."
|
|
4478
4538
|
};
|
|
4479
4539
|
var FORM$6 = {
|
|
4480
4540
|
LOADING: "Formulier laden...",
|
|
@@ -4577,7 +4637,7 @@ var PRODUCT$5 = {
|
|
|
4577
4637
|
PER_PERSON_PER_NIGHT: "Per persoon / per nacht",
|
|
4578
4638
|
BOOK_NOW: "Nu boeken",
|
|
4579
4639
|
TO_YOUR_OFFER: "Naar uw offerte",
|
|
4580
|
-
NOT_AVAILABLE: "Niet beschikbaar",
|
|
4640
|
+
NOT_AVAILABLE: "Niet beschikbaar — kies een andere datum",
|
|
4581
4641
|
NUMBER_OF_ROOMS: "Aantal kamers",
|
|
4582
4642
|
AGE_BY_DEPARTURE_DATE: "Leeftijd van kinderen op vertrekdatum",
|
|
4583
4643
|
YEAR: "Jaar",
|
|
@@ -4664,6 +4724,12 @@ var TRAVELERS_FORM$5 = {
|
|
|
4664
4724
|
FIRST_NAME: "Voornaam",
|
|
4665
4725
|
LAST_NAME: "Achternaam",
|
|
4666
4726
|
BIRTHDATE: "Geboortedatum",
|
|
4727
|
+
WEIGHT: "Gewicht",
|
|
4728
|
+
WEIGHT_UNIT_KG: "kg",
|
|
4729
|
+
WEIGHT_UNIT_LB: "lb",
|
|
4730
|
+
HEIGHT: "Lengte",
|
|
4731
|
+
HEIGHT_UNIT_CM: "cm",
|
|
4732
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
4667
4733
|
STREET: "Straat",
|
|
4668
4734
|
STREET_PLACEHOLDER: "Uw straat",
|
|
4669
4735
|
HOUSE_NUMBER: "Huisnummer",
|
|
@@ -4921,7 +4987,7 @@ var SRP$5 = {
|
|
|
4921
4987
|
};
|
|
4922
4988
|
var ITINERARY$5 = {
|
|
4923
4989
|
DAY: "Dag",
|
|
4924
|
-
NO_ITEMS: "Geen
|
|
4990
|
+
NO_ITEMS: "Geen activiteiten geselecteerd voor deze dag."
|
|
4925
4991
|
};
|
|
4926
4992
|
var FORM$5 = {
|
|
4927
4993
|
LOADING: "Formulier laden...",
|
|
@@ -5024,7 +5090,7 @@ var PRODUCT$4 = {
|
|
|
5024
5090
|
PER_PERSON_PER_NIGHT: "Per person / per natt",
|
|
5025
5091
|
BOOK_NOW: "Bestill nå",
|
|
5026
5092
|
TO_YOUR_OFFER: "Til ditt tilbud",
|
|
5027
|
-
NOT_AVAILABLE: "Ikke tilgjengelig",
|
|
5093
|
+
NOT_AVAILABLE: "Ikke tilgjengelig — velg en annen dato",
|
|
5028
5094
|
NUMBER_OF_ROOMS: "Antall rom",
|
|
5029
5095
|
AGE_BY_DEPARTURE_DATE: "Barnas alder på avreisedato",
|
|
5030
5096
|
YEAR: "År",
|
|
@@ -5111,6 +5177,12 @@ var TRAVELERS_FORM$4 = {
|
|
|
5111
5177
|
FIRST_NAME: "Fornavn",
|
|
5112
5178
|
LAST_NAME: "Etternavn",
|
|
5113
5179
|
BIRTHDATE: "Fødselsdato",
|
|
5180
|
+
WEIGHT: "Vekt",
|
|
5181
|
+
WEIGHT_UNIT_KG: "kg",
|
|
5182
|
+
WEIGHT_UNIT_LB: "lb",
|
|
5183
|
+
HEIGHT: "Høyde",
|
|
5184
|
+
HEIGHT_UNIT_CM: "cm",
|
|
5185
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
5114
5186
|
STREET: "Gate",
|
|
5115
5187
|
STREET_PLACEHOLDER: "Din gate",
|
|
5116
5188
|
HOUSE_NUMBER: "Husnummer",
|
|
@@ -5368,7 +5440,7 @@ var SRP$4 = {
|
|
|
5368
5440
|
};
|
|
5369
5441
|
var ITINERARY$4 = {
|
|
5370
5442
|
DAY: "Dag",
|
|
5371
|
-
NO_ITEMS: "Ingen
|
|
5443
|
+
NO_ITEMS: "Ingen aktiviteter valgt for denne dagen."
|
|
5372
5444
|
};
|
|
5373
5445
|
var FORM$4 = {
|
|
5374
5446
|
LOADING: "Laster inn skjema...",
|
|
@@ -5471,7 +5543,7 @@ var PRODUCT$3 = {
|
|
|
5471
5543
|
PER_PERSON_PER_NIGHT: "Za osobę / za noc",
|
|
5472
5544
|
BOOK_NOW: "Zarezerwuj teraz",
|
|
5473
5545
|
TO_YOUR_OFFER: "Do oferty",
|
|
5474
|
-
NOT_AVAILABLE: "Niedostępne",
|
|
5546
|
+
NOT_AVAILABLE: "Niedostępne — wybierz inną datę",
|
|
5475
5547
|
NUMBER_OF_ROOMS: "Liczba pokoi",
|
|
5476
5548
|
AGE_BY_DEPARTURE_DATE: "Wiek dzieci w dniu wyjazdu",
|
|
5477
5549
|
YEAR: "Rok(lata)",
|
|
@@ -5558,6 +5630,12 @@ var TRAVELERS_FORM$3 = {
|
|
|
5558
5630
|
FIRST_NAME: "Imię",
|
|
5559
5631
|
LAST_NAME: "Nazwisko",
|
|
5560
5632
|
BIRTHDATE: "Data urodzenia",
|
|
5633
|
+
WEIGHT: "Waga",
|
|
5634
|
+
WEIGHT_UNIT_KG: "kg",
|
|
5635
|
+
WEIGHT_UNIT_LB: "lb",
|
|
5636
|
+
HEIGHT: "Wzrost",
|
|
5637
|
+
HEIGHT_UNIT_CM: "cm",
|
|
5638
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
5561
5639
|
STREET: "Ulica",
|
|
5562
5640
|
STREET_PLACEHOLDER: "Twoja ulica",
|
|
5563
5641
|
HOUSE_NUMBER: "Numer domu",
|
|
@@ -5815,7 +5893,7 @@ var SRP$3 = {
|
|
|
5815
5893
|
};
|
|
5816
5894
|
var ITINERARY$3 = {
|
|
5817
5895
|
DAY: "Dzień",
|
|
5818
|
-
NO_ITEMS: "
|
|
5896
|
+
NO_ITEMS: "Nie wybrano atrakcji na ten dzień."
|
|
5819
5897
|
};
|
|
5820
5898
|
var FORM$3 = {
|
|
5821
5899
|
LOADING: "Ładowanie formularza...",
|
|
@@ -5918,7 +5996,7 @@ var PRODUCT$2 = {
|
|
|
5918
5996
|
PER_PERSON_PER_NIGHT: "Por pessoa / por noite",
|
|
5919
5997
|
BOOK_NOW: "Reservar agora",
|
|
5920
5998
|
TO_YOUR_OFFER: "Ir para o orçamento",
|
|
5921
|
-
NOT_AVAILABLE: "Indisponível",
|
|
5999
|
+
NOT_AVAILABLE: "Indisponível — selecione outra data",
|
|
5922
6000
|
NUMBER_OF_ROOMS: "Número de quartos",
|
|
5923
6001
|
AGE_BY_DEPARTURE_DATE: "Idade das crianças à data de partida",
|
|
5924
6002
|
YEAR: "Ano(s)",
|
|
@@ -6005,6 +6083,12 @@ var TRAVELERS_FORM$2 = {
|
|
|
6005
6083
|
FIRST_NAME: "Nome",
|
|
6006
6084
|
LAST_NAME: "Apelido",
|
|
6007
6085
|
BIRTHDATE: "Data de nascimento",
|
|
6086
|
+
WEIGHT: "Peso",
|
|
6087
|
+
WEIGHT_UNIT_KG: "kg",
|
|
6088
|
+
WEIGHT_UNIT_LB: "lb",
|
|
6089
|
+
HEIGHT: "Altura",
|
|
6090
|
+
HEIGHT_UNIT_CM: "cm",
|
|
6091
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
6008
6092
|
STREET: "Rua",
|
|
6009
6093
|
STREET_PLACEHOLDER: "A sua rua",
|
|
6010
6094
|
HOUSE_NUMBER: "Número de porta",
|
|
@@ -6262,7 +6346,7 @@ var SRP$2 = {
|
|
|
6262
6346
|
};
|
|
6263
6347
|
var ITINERARY$2 = {
|
|
6264
6348
|
DAY: "Dia",
|
|
6265
|
-
NO_ITEMS: "
|
|
6349
|
+
NO_ITEMS: "Nenhuma atividade selecionada para este dia."
|
|
6266
6350
|
};
|
|
6267
6351
|
var FORM$2 = {
|
|
6268
6352
|
LOADING: "A carregar formulário...",
|
|
@@ -6365,7 +6449,7 @@ var PRODUCT$1 = {
|
|
|
6365
6449
|
PER_PERSON_PER_NIGHT: "Per person / per natt",
|
|
6366
6450
|
BOOK_NOW: "Boka nu",
|
|
6367
6451
|
TO_YOUR_OFFER: "Till din offert",
|
|
6368
|
-
NOT_AVAILABLE: "Ej tillgänglig",
|
|
6452
|
+
NOT_AVAILABLE: "Ej tillgänglig — välj ett annat datum",
|
|
6369
6453
|
NUMBER_OF_ROOMS: "Antal rum",
|
|
6370
6454
|
AGE_BY_DEPARTURE_DATE: "Barnens ålder vid avresedatum",
|
|
6371
6455
|
YEAR: "År",
|
|
@@ -6452,6 +6536,12 @@ var TRAVELERS_FORM$1 = {
|
|
|
6452
6536
|
FIRST_NAME: "Förnamn",
|
|
6453
6537
|
LAST_NAME: "Efternamn",
|
|
6454
6538
|
BIRTHDATE: "Födelsedatum",
|
|
6539
|
+
WEIGHT: "Vikt",
|
|
6540
|
+
WEIGHT_UNIT_KG: "kg",
|
|
6541
|
+
WEIGHT_UNIT_LB: "lb",
|
|
6542
|
+
HEIGHT: "Längd",
|
|
6543
|
+
HEIGHT_UNIT_CM: "cm",
|
|
6544
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
6455
6545
|
STREET: "Gata",
|
|
6456
6546
|
STREET_PLACEHOLDER: "Din gata",
|
|
6457
6547
|
HOUSE_NUMBER: "Husnummer",
|
|
@@ -6709,7 +6799,7 @@ var SRP$1 = {
|
|
|
6709
6799
|
};
|
|
6710
6800
|
var ITINERARY$1 = {
|
|
6711
6801
|
DAY: "Dag",
|
|
6712
|
-
NO_ITEMS: "Inga
|
|
6802
|
+
NO_ITEMS: "Inga aktiviteter valda för denna dag."
|
|
6713
6803
|
};
|
|
6714
6804
|
var FORM$1 = {
|
|
6715
6805
|
LOADING: "Laddar formulär...",
|
|
@@ -6812,7 +6902,7 @@ var PRODUCT = {
|
|
|
6812
6902
|
PER_PERSON_PER_NIGHT: "1名・1泊あたり",
|
|
6813
6903
|
BOOK_NOW: "今すぐ予約",
|
|
6814
6904
|
TO_YOUR_OFFER: "見積もりへ",
|
|
6815
|
-
NOT_AVAILABLE: "利用不可",
|
|
6905
|
+
NOT_AVAILABLE: "利用不可 — 別の日付をお選びください",
|
|
6816
6906
|
NUMBER_OF_ROOMS: "客室数",
|
|
6817
6907
|
AGE_BY_DEPARTURE_DATE: "出発日時点での子供の年齢",
|
|
6818
6908
|
YEAR: "歳",
|
|
@@ -6899,6 +6989,12 @@ var TRAVELERS_FORM = {
|
|
|
6899
6989
|
FIRST_NAME: "名",
|
|
6900
6990
|
LAST_NAME: "姓",
|
|
6901
6991
|
BIRTHDATE: "生年月日",
|
|
6992
|
+
WEIGHT: "体重",
|
|
6993
|
+
WEIGHT_UNIT_KG: "kg",
|
|
6994
|
+
WEIGHT_UNIT_LB: "lb",
|
|
6995
|
+
HEIGHT: "身長",
|
|
6996
|
+
HEIGHT_UNIT_CM: "cm",
|
|
6997
|
+
HEIGHT_UNIT_FT_IN: "ft/in",
|
|
6902
6998
|
STREET: "住所",
|
|
6903
6999
|
STREET_PLACEHOLDER: "住所を入力",
|
|
6904
7000
|
HOUSE_NUMBER: "番地",
|
|
@@ -7156,7 +7252,7 @@ var SRP = {
|
|
|
7156
7252
|
};
|
|
7157
7253
|
var ITINERARY = {
|
|
7158
7254
|
DAY: "日",
|
|
7159
|
-
NO_ITEMS: "
|
|
7255
|
+
NO_ITEMS: "この日に選択されたアクティビティはありません。"
|
|
7160
7256
|
};
|
|
7161
7257
|
var FORM = {
|
|
7162
7258
|
LOADING: "フォームを読み込んでいます...",
|
|
@@ -7552,6 +7648,14 @@ exports.AvailabilitySearchType = void 0;
|
|
|
7552
7648
|
AvailabilitySearchType[(AvailabilitySearchType["flight"] = 3)] = "flight";
|
|
7553
7649
|
})(exports.AvailabilitySearchType || (exports.AvailabilitySearchType = {}));
|
|
7554
7650
|
|
|
7651
|
+
var CustomFieldDataType = {
|
|
7652
|
+
bool: 0,
|
|
7653
|
+
date: 1,
|
|
7654
|
+
time: 2,
|
|
7655
|
+
string: 3,
|
|
7656
|
+
numeric: 4,
|
|
7657
|
+
};
|
|
7658
|
+
|
|
7555
7659
|
var DataType = {
|
|
7556
7660
|
text: "text",
|
|
7557
7661
|
numeric: "number",
|
|
@@ -7567,6 +7671,12 @@ var DataType = {
|
|
|
7567
7671
|
template: "template",
|
|
7568
7672
|
};
|
|
7569
7673
|
|
|
7674
|
+
exports.DateAmountType = void 0;
|
|
7675
|
+
(function (DateAmountType) {
|
|
7676
|
+
DateAmountType[(DateAmountType["days"] = 0)] = "days";
|
|
7677
|
+
DateAmountType[(DateAmountType["months"] = 1)] = "months";
|
|
7678
|
+
})(exports.DateAmountType || (exports.DateAmountType = {}));
|
|
7679
|
+
|
|
7570
7680
|
var DossierType = {
|
|
7571
7681
|
hotelOnly: 0,
|
|
7572
7682
|
transportOnly: 1,
|
|
@@ -7574,6 +7684,13 @@ var DossierType = {
|
|
|
7574
7684
|
package: 3,
|
|
7575
7685
|
};
|
|
7576
7686
|
|
|
7687
|
+
var DurationType = {
|
|
7688
|
+
hours: 0,
|
|
7689
|
+
days: 1,
|
|
7690
|
+
nights: 2,
|
|
7691
|
+
minutes: 3,
|
|
7692
|
+
};
|
|
7693
|
+
|
|
7577
7694
|
var EntryLineFlag = {
|
|
7578
7695
|
none: 0,
|
|
7579
7696
|
allotmentNoPlace: 1,
|
|
@@ -7651,6 +7768,11 @@ var Gender = {
|
|
|
7651
7768
|
other: 2,
|
|
7652
7769
|
};
|
|
7653
7770
|
|
|
7771
|
+
var HeightType = {
|
|
7772
|
+
centimeters: 0,
|
|
7773
|
+
feetInches: 1,
|
|
7774
|
+
};
|
|
7775
|
+
|
|
7654
7776
|
exports.MetaDataItemPropertyType = void 0;
|
|
7655
7777
|
(function (MetaDataItemPropertyType) {
|
|
7656
7778
|
MetaDataItemPropertyType[(MetaDataItemPropertyType["Height"] = 0)] = "Height";
|
|
@@ -7687,6 +7809,22 @@ var PaymentType = {
|
|
|
7687
7809
|
cash: 3,
|
|
7688
7810
|
};
|
|
7689
7811
|
|
|
7812
|
+
exports.PortalQsmType = void 0;
|
|
7813
|
+
(function (PortalQsmType) {
|
|
7814
|
+
PortalQsmType[(PortalQsmType["Multidestination"] = 0)] = "Multidestination";
|
|
7815
|
+
PortalQsmType[(PortalQsmType["Accommodation"] = 1)] = "Accommodation";
|
|
7816
|
+
PortalQsmType[(PortalQsmType["AccommodationAndFlight"] = 2)] =
|
|
7817
|
+
"AccommodationAndFlight";
|
|
7818
|
+
PortalQsmType[(PortalQsmType["Flight"] = 3)] = "Flight";
|
|
7819
|
+
PortalQsmType[(PortalQsmType["RoundTrip"] = 4)] = "RoundTrip";
|
|
7820
|
+
PortalQsmType[(PortalQsmType["GroupTour"] = 5)] = "GroupTour";
|
|
7821
|
+
PortalQsmType[(PortalQsmType["Package"] = 6)] = "Package";
|
|
7822
|
+
PortalQsmType[(PortalQsmType["Ticket"] = 7)] = "Ticket";
|
|
7823
|
+
PortalQsmType[(PortalQsmType["Car"] = 8)] = "Car";
|
|
7824
|
+
PortalQsmType[(PortalQsmType["Transfer"] = 9)] = "Transfer";
|
|
7825
|
+
PortalQsmType[(PortalQsmType["Cruise"] = 10)] = "Cruise";
|
|
7826
|
+
})(exports.PortalQsmType || (exports.PortalQsmType = {}));
|
|
7827
|
+
|
|
7690
7828
|
var PriceChartType = {
|
|
7691
7829
|
purchasePrices: 0,
|
|
7692
7830
|
sellingPrices: 1,
|
|
@@ -7720,6 +7858,26 @@ var RoomType = {
|
|
|
7720
7858
|
pk6: 5,
|
|
7721
7859
|
};
|
|
7722
7860
|
|
|
7861
|
+
var RouteTransportType = {
|
|
7862
|
+
none: 0,
|
|
7863
|
+
privateTransport: 1,
|
|
7864
|
+
publicTransport: 2,
|
|
7865
|
+
rentalCar: 3,
|
|
7866
|
+
bus: 4,
|
|
7867
|
+
camper: 5,
|
|
7868
|
+
car: 6,
|
|
7869
|
+
charter: 7,
|
|
7870
|
+
cruise: 8,
|
|
7871
|
+
ferry: 9,
|
|
7872
|
+
flight: 10,
|
|
7873
|
+
taxi: 11,
|
|
7874
|
+
train: 12,
|
|
7875
|
+
transfer: 13,
|
|
7876
|
+
rocket: 14,
|
|
7877
|
+
walking: 15,
|
|
7878
|
+
cycling: 16,
|
|
7879
|
+
};
|
|
7880
|
+
|
|
7723
7881
|
var SaleType = {
|
|
7724
7882
|
ownOrganization: 0,
|
|
7725
7883
|
resale: 1,
|
|
@@ -7759,6 +7917,13 @@ var ServiceType = {
|
|
|
7759
7917
|
camp: 30,
|
|
7760
7918
|
};
|
|
7761
7919
|
|
|
7920
|
+
var TrajectNodeType = {
|
|
7921
|
+
regular: 0,
|
|
7922
|
+
connectingNode: 1,
|
|
7923
|
+
poi: 2,
|
|
7924
|
+
subroute: 3,
|
|
7925
|
+
};
|
|
7926
|
+
|
|
7762
7927
|
exports.UnitOfMeasure = void 0;
|
|
7763
7928
|
(function (UnitOfMeasure) {
|
|
7764
7929
|
UnitOfMeasure[(UnitOfMeasure["cm"] = 0)] = "cm";
|
|
@@ -7791,60 +7956,9 @@ var VendorType = {
|
|
|
7791
7956
|
sunnyCars: 20,
|
|
7792
7957
|
};
|
|
7793
7958
|
|
|
7794
|
-
|
|
7795
|
-
|
|
7796
|
-
|
|
7797
|
-
DateAmountType[(DateAmountType["months"] = 1)] = "months";
|
|
7798
|
-
})(exports.DateAmountType || (exports.DateAmountType = {}));
|
|
7799
|
-
|
|
7800
|
-
exports.PortalQsmType = void 0;
|
|
7801
|
-
(function (PortalQsmType) {
|
|
7802
|
-
PortalQsmType[(PortalQsmType["Multidestination"] = 0)] = "Multidestination";
|
|
7803
|
-
PortalQsmType[(PortalQsmType["Accommodation"] = 1)] = "Accommodation";
|
|
7804
|
-
PortalQsmType[(PortalQsmType["AccommodationAndFlight"] = 2)] =
|
|
7805
|
-
"AccommodationAndFlight";
|
|
7806
|
-
PortalQsmType[(PortalQsmType["Flight"] = 3)] = "Flight";
|
|
7807
|
-
PortalQsmType[(PortalQsmType["RoundTrip"] = 4)] = "RoundTrip";
|
|
7808
|
-
PortalQsmType[(PortalQsmType["GroupTour"] = 5)] = "GroupTour";
|
|
7809
|
-
PortalQsmType[(PortalQsmType["Package"] = 6)] = "Package";
|
|
7810
|
-
PortalQsmType[(PortalQsmType["Ticket"] = 7)] = "Ticket";
|
|
7811
|
-
PortalQsmType[(PortalQsmType["Car"] = 8)] = "Car";
|
|
7812
|
-
PortalQsmType[(PortalQsmType["Transfer"] = 9)] = "Transfer";
|
|
7813
|
-
PortalQsmType[(PortalQsmType["Cruise"] = 10)] = "Cruise";
|
|
7814
|
-
})(exports.PortalQsmType || (exports.PortalQsmType = {}));
|
|
7815
|
-
|
|
7816
|
-
var TrajectNodeType = {
|
|
7817
|
-
regular: 0,
|
|
7818
|
-
connectingNode: 1,
|
|
7819
|
-
poi: 2,
|
|
7820
|
-
subroute: 3,
|
|
7821
|
-
};
|
|
7822
|
-
|
|
7823
|
-
var DurationType = {
|
|
7824
|
-
hours: 0,
|
|
7825
|
-
days: 1,
|
|
7826
|
-
nights: 2,
|
|
7827
|
-
minutes: 3,
|
|
7828
|
-
};
|
|
7829
|
-
|
|
7830
|
-
var RouteTransportType = {
|
|
7831
|
-
none: 0,
|
|
7832
|
-
privateTransport: 1,
|
|
7833
|
-
publicTransport: 2,
|
|
7834
|
-
rentalCar: 3,
|
|
7835
|
-
bus: 4,
|
|
7836
|
-
camper: 5,
|
|
7837
|
-
car: 6,
|
|
7838
|
-
charter: 7,
|
|
7839
|
-
cruise: 8,
|
|
7840
|
-
ferry: 9,
|
|
7841
|
-
flight: 10,
|
|
7842
|
-
taxi: 11,
|
|
7843
|
-
train: 12,
|
|
7844
|
-
transfer: 13,
|
|
7845
|
-
rocket: 14,
|
|
7846
|
-
walking: 15,
|
|
7847
|
-
cycling: 16,
|
|
7959
|
+
var WeightType = {
|
|
7960
|
+
kilograms: 0,
|
|
7961
|
+
pounds: 1,
|
|
7848
7962
|
};
|
|
7849
7963
|
|
|
7850
7964
|
/******************************************************************************
|
|
@@ -15196,6 +15310,7 @@ var submitForm = function (config, id, request, signal) {
|
|
|
15196
15310
|
};
|
|
15197
15311
|
|
|
15198
15312
|
exports.AllotmentType = AllotmentType;
|
|
15313
|
+
exports.CustomFieldDataType = CustomFieldDataType;
|
|
15199
15314
|
exports.DataType = DataType;
|
|
15200
15315
|
exports.DossierType = DossierType;
|
|
15201
15316
|
exports.DurationType = DurationType;
|
|
@@ -15206,6 +15321,7 @@ exports.FormFieldType = FormFieldType;
|
|
|
15206
15321
|
exports.FormFieldWidth = FormFieldWidth;
|
|
15207
15322
|
exports.FormType = FormType;
|
|
15208
15323
|
exports.Gender = Gender;
|
|
15324
|
+
exports.HeightType = HeightType;
|
|
15209
15325
|
exports.MetaDataType = MetaDataType;
|
|
15210
15326
|
exports.PaymentType = PaymentType;
|
|
15211
15327
|
exports.PriceChartType = PriceChartType;
|
|
@@ -15217,6 +15333,7 @@ exports.ServiceTokenError = ServiceTokenError;
|
|
|
15217
15333
|
exports.ServiceType = ServiceType;
|
|
15218
15334
|
exports.TrajectNodeType = TrajectNodeType;
|
|
15219
15335
|
exports.VendorType = VendorType;
|
|
15336
|
+
exports.WeightType = WeightType;
|
|
15220
15337
|
exports.agents = agents;
|
|
15221
15338
|
exports.alternateFlights = alternateFlights;
|
|
15222
15339
|
exports.alternateHotels = alternateHotels;
|
|
@@ -17475,7 +17592,7 @@ const Product = ({ productCode, productName, duration, rating }) => {
|
|
|
17475
17592
|
const [hasFlight, setHasFlight] = useState(false);
|
|
17476
17593
|
const [hasTransfer, setHasTransfer] = useState(false);
|
|
17477
17594
|
const [rooms, setRooms] = useState([{ adults: 2, children: 0, childAges: [] }]);
|
|
17478
|
-
const [searchResponse, setSearchResponse] = useState(
|
|
17595
|
+
const [searchResponse, setSearchResponse] = useState();
|
|
17479
17596
|
const [detailResponse, setDetailResponse] = useState();
|
|
17480
17597
|
const [dateRange, setDateRange] = useState();
|
|
17481
17598
|
const [urlDateRange, setUrlDateRange] = useState({ from: null, to: null });
|
|
@@ -17613,6 +17730,9 @@ const Product = ({ productCode, productName, duration, rating }) => {
|
|
|
17613
17730
|
setPackageProductName(selectedItem.name);
|
|
17614
17731
|
};
|
|
17615
17732
|
useEffect(() => {
|
|
17733
|
+
if (searchResponse === undefined) {
|
|
17734
|
+
return;
|
|
17735
|
+
}
|
|
17616
17736
|
if (searchResponse && !isEmpty$1(searchResponse)) {
|
|
17617
17737
|
setSearchResults(searchResponse);
|
|
17618
17738
|
const selectedItem = searchResponse.find((item) => new Date(item.fromDate).getTime() === dateRange?.fromDate?.getTime() && new Date(item.toDate).getTime() === dateRange?.toDate?.getTime());
|
|
@@ -18783,6 +18903,7 @@ const selectPackageOptionUnits = (state) => state.booking.package?.options.find(
|
|
|
18783
18903
|
const selectPackageOptionPax = (state) => state.booking.package?.options.find((x) => x.isSelected)?.optionPax;
|
|
18784
18904
|
const selectPackageGroups = (state) => state.booking.package?.options.find((x) => x.isSelected)?.groups;
|
|
18785
18905
|
const selectPackageDetails = (state) => state.booking.package;
|
|
18906
|
+
const selectPaxCustomFields = (state) => state.booking.package?.paxCustomFields ?? [];
|
|
18786
18907
|
const selectPackageFlights = (state) => ({
|
|
18787
18908
|
outward: state.booking.package?.outwardFlights,
|
|
18788
18909
|
return: state.booking.package?.returnFlights
|
|
@@ -19009,7 +19130,12 @@ const buildPax = (traveler, mainBookerId) => {
|
|
|
19009
19130
|
lastName: traveler.lastName,
|
|
19010
19131
|
dateOfBirth: traveler.birthDate,
|
|
19011
19132
|
age: traveler.birthDate ? null : traveler.age,
|
|
19012
|
-
isMainBooker: traveler.id == mainBookerId
|
|
19133
|
+
isMainBooker: traveler.id == mainBookerId,
|
|
19134
|
+
weight: traveler.weight ?? null,
|
|
19135
|
+
weightType: traveler.weightType ?? build.WeightType.kilograms,
|
|
19136
|
+
height: traveler.height ?? null,
|
|
19137
|
+
heightType: traveler.heightType ?? build.HeightType.centimeters,
|
|
19138
|
+
customFields: traveler.customFields ?? []
|
|
19013
19139
|
};
|
|
19014
19140
|
};
|
|
19015
19141
|
const parseGender = (gender) => {
|
|
@@ -19519,7 +19645,9 @@ const SettingsContext = React__default.createContext({
|
|
|
19519
19645
|
travellers: {
|
|
19520
19646
|
pathSuffix: '/reizigers',
|
|
19521
19647
|
travelersFirstStep: false,
|
|
19522
|
-
showAllCountries: false
|
|
19648
|
+
showAllCountries: false,
|
|
19649
|
+
showWeightField: false,
|
|
19650
|
+
showHeightField: false
|
|
19523
19651
|
},
|
|
19524
19652
|
summary: {
|
|
19525
19653
|
pathSuffix: '/samenvatting',
|
|
@@ -21824,6 +21952,7 @@ const OptionRoom = ({ packageRoom, pax, optionPax, onRoomChange, includedService
|
|
|
21824
21952
|
|
|
21825
21953
|
function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId = null, onPrinted }) {
|
|
21826
21954
|
const settings = useContext(SettingsContext);
|
|
21955
|
+
const apiSettings = useSelector(selectApiSettings);
|
|
21827
21956
|
if (!settings)
|
|
21828
21957
|
throw new Error('useOfferPrinter must be used inside <BookingWizard>');
|
|
21829
21958
|
const { language, officeId } = settings;
|
|
@@ -21852,9 +21981,9 @@ function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId =
|
|
|
21852
21981
|
customerRequests: []
|
|
21853
21982
|
}
|
|
21854
21983
|
};
|
|
21855
|
-
const cfg = buildTideClientConfig();
|
|
21984
|
+
const cfg = buildTideClientConfig(apiSettings);
|
|
21856
21985
|
return build.book(cfg, request, undefined, language);
|
|
21857
|
-
}, [agentId, bookingPackage, getPax, language, officeId, tagIds]);
|
|
21986
|
+
}, [agentId, apiSettings, bookingPackage, getPax, language, officeId, tagIds]);
|
|
21858
21987
|
const languageData = [
|
|
21859
21988
|
{ code: 'nl-BE', tideId: 1 },
|
|
21860
21989
|
{ code: 'fr-BE', tideId: 2 },
|
|
@@ -21864,7 +21993,7 @@ function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId =
|
|
|
21864
21993
|
return languageData.find((l) => l.code === code)?.tideId || 1;
|
|
21865
21994
|
}
|
|
21866
21995
|
const printOffer = useCallback(async (offer) => {
|
|
21867
|
-
const cfg = buildTideClientConfig();
|
|
21996
|
+
const cfg = buildTideClientConfig(apiSettings);
|
|
21868
21997
|
const req = {
|
|
21869
21998
|
id: printActionId ?? 0,
|
|
21870
21999
|
dossierNumber: offer.dossierNumber ?? offer.number,
|
|
@@ -21875,7 +22004,7 @@ function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId =
|
|
|
21875
22004
|
const url = URL.createObjectURL(new Blob([buf], { type: 'application/pdf' }));
|
|
21876
22005
|
onPrinted?.(url);
|
|
21877
22006
|
window.open(url);
|
|
21878
|
-
}, [language, onPrinted]);
|
|
22007
|
+
}, [apiSettings, language, onPrinted, printActionId]);
|
|
21879
22008
|
const handlePrint = useCallback(async () => {
|
|
21880
22009
|
try {
|
|
21881
22010
|
setStage('creating');
|
|
@@ -23031,185 +23160,6 @@ const Summary = () => {
|
|
|
23031
23160
|
React__default.createElement("button", { title: settings.isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING, className: buildClassName(['cta', !userValidated && 'cta--disabled']), disabled: !userValidated, name: "default" }, settings.isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING))))));
|
|
23032
23161
|
};
|
|
23033
23162
|
|
|
23034
|
-
function isValidEmail(email) {
|
|
23035
|
-
return !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i.test(email);
|
|
23036
|
-
}
|
|
23037
|
-
const NAME_CHARACTERS_REGEX = /^[\p{L}\s-]+$/u;
|
|
23038
|
-
function hasInvalidNameCharacters(name) {
|
|
23039
|
-
return !NAME_CHARACTERS_REGEX.test(name);
|
|
23040
|
-
}
|
|
23041
|
-
// Rejects values like a 5-digit year, which the native date input allows while typing
|
|
23042
|
-
function isValidBirthDate(birthDateText) {
|
|
23043
|
-
return isValid(parse(birthDateText, 'yyyy-MM-dd', new Date()));
|
|
23044
|
-
}
|
|
23045
|
-
function getAge(birthDateText, startDateText) {
|
|
23046
|
-
var birthDate = new Date(birthDateText);
|
|
23047
|
-
var startDate = new Date(startDateText);
|
|
23048
|
-
var age = startDate.getFullYear() - birthDate.getFullYear();
|
|
23049
|
-
var m = startDate.getMonth() - birthDate.getMonth();
|
|
23050
|
-
if (m < 0 || (m === 0 && startDate.getDate() < birthDate.getDate())) {
|
|
23051
|
-
age--;
|
|
23052
|
-
}
|
|
23053
|
-
return age;
|
|
23054
|
-
}
|
|
23055
|
-
const validateForm$1 = (values, agentRequired, bookingType, translations, formFields, mainBookerFormFields, maxChildAge = CHILD_MAX_AGE, maxBabyAge = BABY_MAX_AGE) => {
|
|
23056
|
-
const errors = {};
|
|
23057
|
-
const isFormFieldPresent = (type) => {
|
|
23058
|
-
return formFields?.some((f) => f.type === type) ?? true;
|
|
23059
|
-
};
|
|
23060
|
-
const isMainBookerFormFieldPresent = (type) => {
|
|
23061
|
-
return mainBookerFormFields?.some((f) => f.type === type) ?? true;
|
|
23062
|
-
};
|
|
23063
|
-
const formatTravelerField = (room, pax, field) => {
|
|
23064
|
-
return values.rooms.length > 1
|
|
23065
|
-
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [room, pax, field])
|
|
23066
|
-
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD, [pax, field]);
|
|
23067
|
-
};
|
|
23068
|
-
const formatTravelerIsNoAdult = (room, pax) => {
|
|
23069
|
-
return values.rooms.length > 1
|
|
23070
|
-
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_ADULT, [room, pax])
|
|
23071
|
-
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT, [pax]);
|
|
23072
|
-
};
|
|
23073
|
-
const formatTravelerIsNoChild = (room, pax) => {
|
|
23074
|
-
return values.rooms.length > 1
|
|
23075
|
-
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_CHILD, [room, pax])
|
|
23076
|
-
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD, [pax]);
|
|
23077
|
-
};
|
|
23078
|
-
const formatTravelerIsNoBaby = (room, pax) => {
|
|
23079
|
-
// The message states the boundary the traveler has to stay under, so we pass
|
|
23080
|
-
// the first age that is too old rather than the inclusive maxBabyAge.
|
|
23081
|
-
const tooOldAge = maxBabyAge + 1;
|
|
23082
|
-
return values.rooms.length > 1
|
|
23083
|
-
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_BABY, [room, pax, tooOldAge])
|
|
23084
|
-
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_BABY, [pax, tooOldAge]);
|
|
23085
|
-
};
|
|
23086
|
-
const formatTravelerFieldInvalidCharacters = (room, pax, field) => {
|
|
23087
|
-
return values.rooms.length > 1
|
|
23088
|
-
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD_INVALID_CHARACTERS, [room, pax, field])
|
|
23089
|
-
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD_INVALID_CHARACTERS, [pax, field]);
|
|
23090
|
-
};
|
|
23091
|
-
values.rooms.forEach((r, rIndex) => r.adults.forEach((adult, index) => {
|
|
23092
|
-
if (isEmpty$1(adult.gender) && isFormFieldPresent('gender')) {
|
|
23093
|
-
set(errors, `rooms[${rIndex}].adults[${index}].gender`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.GENDER));
|
|
23094
|
-
}
|
|
23095
|
-
if (isFormFieldPresent('firstName')) {
|
|
23096
|
-
if (isEmpty$1(adult.firstName)) {
|
|
23097
|
-
set(errors, `rooms[${rIndex}].adults[${index}].firstName`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23098
|
-
}
|
|
23099
|
-
else if (hasInvalidNameCharacters(adult.firstName)) {
|
|
23100
|
-
set(errors, `rooms[${rIndex}].adults[${index}].firstName`, formatTravelerFieldInvalidCharacters(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23101
|
-
}
|
|
23102
|
-
}
|
|
23103
|
-
if (isFormFieldPresent('lastName')) {
|
|
23104
|
-
if (isEmpty$1(adult.lastName)) {
|
|
23105
|
-
set(errors, `rooms[${rIndex}].adults[${index}].lastName`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23106
|
-
}
|
|
23107
|
-
else if (hasInvalidNameCharacters(adult.lastName)) {
|
|
23108
|
-
set(errors, `rooms[${rIndex}].adults[${index}].lastName`, formatTravelerFieldInvalidCharacters(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23109
|
-
}
|
|
23110
|
-
}
|
|
23111
|
-
if (isFormFieldPresent('birthDate')) {
|
|
23112
|
-
if (isEmpty$1(adult.birthDate) || !isValidBirthDate(adult.birthDate)) {
|
|
23113
|
-
set(errors, `rooms[${rIndex}].adults[${index}].birthDate`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.BIRTHDATE));
|
|
23114
|
-
}
|
|
23115
|
-
else if (values.endDate) {
|
|
23116
|
-
// If you are younger than the maxChildAge at the end of the trip, you are considered a child, so we check the endDate here instead of the startDate
|
|
23117
|
-
const age = getAge(adult.birthDate, values.endDate);
|
|
23118
|
-
if (age <= maxChildAge) {
|
|
23119
|
-
set(errors, `rooms[${rIndex}].adults[${index}].birthDate`, formatTravelerIsNoAdult(rIndex + 1, index + 1));
|
|
23120
|
-
}
|
|
23121
|
-
}
|
|
23122
|
-
}
|
|
23123
|
-
}));
|
|
23124
|
-
values.rooms.forEach((r, rIndex) => r.children.forEach((child, index) => {
|
|
23125
|
-
if (isEmpty$1(child.gender) && isFormFieldPresent('gender')) {
|
|
23126
|
-
set(errors, `rooms[${rIndex}].children[${index}].gender`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.GENDER));
|
|
23127
|
-
}
|
|
23128
|
-
if (isFormFieldPresent('firstName')) {
|
|
23129
|
-
if (isEmpty$1(child.firstName)) {
|
|
23130
|
-
set(errors, `rooms[${rIndex}].children[${index}].firstName`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23131
|
-
}
|
|
23132
|
-
else if (hasInvalidNameCharacters(child.firstName)) {
|
|
23133
|
-
set(errors, `rooms[${rIndex}].children[${index}].firstName`, formatTravelerFieldInvalidCharacters(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23134
|
-
}
|
|
23135
|
-
}
|
|
23136
|
-
if (isFormFieldPresent('lastName')) {
|
|
23137
|
-
if (isEmpty$1(child.lastName)) {
|
|
23138
|
-
set(errors, `rooms[${rIndex}].children[${index}].lastName`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23139
|
-
}
|
|
23140
|
-
else if (hasInvalidNameCharacters(child.lastName)) {
|
|
23141
|
-
set(errors, `rooms[${rIndex}].children[${index}].lastName`, formatTravelerFieldInvalidCharacters(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23142
|
-
}
|
|
23143
|
-
}
|
|
23144
|
-
if (isFormFieldPresent('birthDate')) {
|
|
23145
|
-
if (isEmpty$1(child.birthDate) || !isValidBirthDate(child.birthDate)) {
|
|
23146
|
-
set(errors, `rooms[${rIndex}].children[${index}].birthDate`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.BIRTHDATE));
|
|
23147
|
-
}
|
|
23148
|
-
else if (child.isBaby && values.startDate) {
|
|
23149
|
-
// A baby only has to be under the maxBabyAge on departure, so we check the startDate here instead of the endDate (TIDE-3269)
|
|
23150
|
-
const age = getAge(child.birthDate, values.startDate);
|
|
23151
|
-
if (age > maxBabyAge) {
|
|
23152
|
-
set(errors, `rooms[${rIndex}].children[${index}].birthDate`, formatTravelerIsNoBaby(rIndex + 1, r.adults.length + index + 1));
|
|
23153
|
-
}
|
|
23154
|
-
}
|
|
23155
|
-
else if (values.endDate) {
|
|
23156
|
-
// You need to be under the maxChildAge until the end of the trip, so we check the endDate here instead of the startDate.
|
|
23157
|
-
// Babies land here too when there is no startDate to check them against, so they keep at least the child age check.
|
|
23158
|
-
const age = getAge(child.birthDate, values.endDate);
|
|
23159
|
-
if (age > maxChildAge) {
|
|
23160
|
-
set(errors, `rooms[${rIndex}].children[${index}].birthDate`, formatTravelerIsNoChild(rIndex + 1, r.adults.length + index + 1));
|
|
23161
|
-
}
|
|
23162
|
-
}
|
|
23163
|
-
}
|
|
23164
|
-
}));
|
|
23165
|
-
if (values.mainBookerId < 0) {
|
|
23166
|
-
errors.mainBookerId = translations.TRAVELERS_FORM.VALIDATION.NO_MAIN_BOOKER_SELECTED;
|
|
23167
|
-
}
|
|
23168
|
-
if (bookingType != 'b2b' || mainBookerFormFields?.length) {
|
|
23169
|
-
if (isEmpty$1(values.street) && isMainBookerFormFieldPresent('street')) {
|
|
23170
|
-
errors.street = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.STREET]);
|
|
23171
|
-
}
|
|
23172
|
-
if (isEmpty$1(values.houseNumber) && isMainBookerFormFieldPresent('houseNumber')) {
|
|
23173
|
-
errors.houseNumber = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.HOUSE_NUMBER]);
|
|
23174
|
-
}
|
|
23175
|
-
if (isEmpty$1(values.zipCode) && isMainBookerFormFieldPresent('zipCode')) {
|
|
23176
|
-
errors.zipCode = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.ZIPCODE]);
|
|
23177
|
-
}
|
|
23178
|
-
if (isEmpty$1(values.place) && isMainBookerFormFieldPresent('place')) {
|
|
23179
|
-
errors.place = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.CITY]);
|
|
23180
|
-
}
|
|
23181
|
-
if (isMainBookerFormFieldPresent('email')) {
|
|
23182
|
-
if (isEmpty$1(values.email)) {
|
|
23183
|
-
errors.email = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.EMAIL]);
|
|
23184
|
-
}
|
|
23185
|
-
else if (isValidEmail(values.email)) {
|
|
23186
|
-
errors.email = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_IS_INVALID;
|
|
23187
|
-
}
|
|
23188
|
-
if (isEmpty$1(values.emailConfirmation)) {
|
|
23189
|
-
errors.emailConfirmation = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.REPEAT_EMAIL]);
|
|
23190
|
-
}
|
|
23191
|
-
else if (values.emailConfirmation !== values.email) {
|
|
23192
|
-
errors.emailConfirmation = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_DOES_NOT_MATCH;
|
|
23193
|
-
}
|
|
23194
|
-
}
|
|
23195
|
-
if (isEmpty$1(values.country) && isMainBookerFormFieldPresent('country')) {
|
|
23196
|
-
errors.country = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.COUNTRY]);
|
|
23197
|
-
}
|
|
23198
|
-
if (isEmpty$1(values.phone) && isMainBookerFormFieldPresent('phone')) {
|
|
23199
|
-
errors.phone = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
|
|
23200
|
-
}
|
|
23201
|
-
}
|
|
23202
|
-
else {
|
|
23203
|
-
if (isEmpty$1(values.phone)) {
|
|
23204
|
-
errors.phone = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
|
|
23205
|
-
}
|
|
23206
|
-
}
|
|
23207
|
-
if (agentRequired && !values.travelAgentId) {
|
|
23208
|
-
errors.travelAgentId = translations.TRAVELERS_FORM.VALIDATION.AGENT_IS_REQUIRED;
|
|
23209
|
-
}
|
|
23210
|
-
return errors;
|
|
23211
|
-
};
|
|
23212
|
-
|
|
23213
23163
|
const LabeledInput = ({ name, type, required, value, defaultValue, min, max, label, placeholder, extraClassName, hasError, onChange, onBlur }) => {
|
|
23214
23164
|
return (React__default.createElement("label", { className: buildClassName(['form__group', extraClassName, hasError && 'form__group--error']) },
|
|
23215
23165
|
React__default.createElement("span", { className: "form__label" }, compact([label, required && '*']).join(' ')),
|
|
@@ -23374,7 +23324,33 @@ function formatBirthDate$1(birthDate) {
|
|
|
23374
23324
|
const parsed = parse(birthDate, 'yyyy-MM-dd', new Date());
|
|
23375
23325
|
return isValid(parsed) ? format$2(parsed, 'dd-MM-yyyy') : '';
|
|
23376
23326
|
}
|
|
23377
|
-
|
|
23327
|
+
// A customFieldConfigurationId can have separate "main-booker"/other-pax variants; resolved per traveler below.
|
|
23328
|
+
const MAIN_BOOKER_GROUP = 'main-booker';
|
|
23329
|
+
function buildEmptyCustomFields(paxCustomFields = []) {
|
|
23330
|
+
const uniqueIds = Array.from(new Set(paxCustomFields.map((field) => field.customFieldConfigurationId)));
|
|
23331
|
+
return uniqueIds.map((customFieldConfigurationId) => ({ customFieldConfigurationId, value: '' }));
|
|
23332
|
+
}
|
|
23333
|
+
function getApplicablePaxCustomFields(paxCustomFields = [], isMainBooker) {
|
|
23334
|
+
const variantsById = new Map();
|
|
23335
|
+
paxCustomFields.forEach((field) => {
|
|
23336
|
+
const variants = variantsById.get(field.customFieldConfigurationId) ?? [];
|
|
23337
|
+
variants.push(field);
|
|
23338
|
+
variantsById.set(field.customFieldConfigurationId, variants);
|
|
23339
|
+
});
|
|
23340
|
+
const applicableFields = [];
|
|
23341
|
+
variantsById.forEach((variants) => {
|
|
23342
|
+
const hasRoleSplit = variants.some((v) => v.group === MAIN_BOOKER_GROUP);
|
|
23343
|
+
if (!hasRoleSplit) {
|
|
23344
|
+
applicableFields.push(variants[0]);
|
|
23345
|
+
return;
|
|
23346
|
+
}
|
|
23347
|
+
const roleMatch = variants.find((v) => (v.group === MAIN_BOOKER_GROUP) === isMainBooker);
|
|
23348
|
+
if (roleMatch)
|
|
23349
|
+
applicableFields.push(roleMatch);
|
|
23350
|
+
});
|
|
23351
|
+
return applicableFields;
|
|
23352
|
+
}
|
|
23353
|
+
function createTraveler(traveler, followNumber, personTranslation, isCompact, maxBabyAge, paxCustomFields) {
|
|
23378
23354
|
if (isCompact) {
|
|
23379
23355
|
return {
|
|
23380
23356
|
id: traveler.id,
|
|
@@ -23386,9 +23362,14 @@ function createTraveler(traveler, followNumber, personTranslation, isCompact, ma
|
|
|
23386
23362
|
// old, while still falling back for a missing or unusable age. `??` alone would let a
|
|
23387
23363
|
// NaN (unparseable date of birth upstream) reach the age input and the booked pax.
|
|
23388
23364
|
// See TIDE-3269.
|
|
23389
|
-
age: Number.isFinite(traveler.age) ? traveler.age : 30
|
|
23365
|
+
age: Number.isFinite(traveler.age) ? traveler.age : 30,
|
|
23390
23366
|
// No isBaby here on purpose: the age below is editable and nothing revalidates it
|
|
23391
23367
|
// in compact mode, so a stored flag would end up contradicting the entered age.
|
|
23368
|
+
weight: null,
|
|
23369
|
+
weightType: build.WeightType.kilograms,
|
|
23370
|
+
height: null,
|
|
23371
|
+
heightType: build.HeightType.centimeters,
|
|
23372
|
+
customFields: buildEmptyCustomFields(paxCustomFields)
|
|
23392
23373
|
};
|
|
23393
23374
|
}
|
|
23394
23375
|
return {
|
|
@@ -23397,17 +23378,22 @@ function createTraveler(traveler, followNumber, personTranslation, isCompact, ma
|
|
|
23397
23378
|
lastName: '',
|
|
23398
23379
|
birthDate: '',
|
|
23399
23380
|
gender: '',
|
|
23400
|
-
isBaby: isBabyAge(traveler.age, maxBabyAge)
|
|
23381
|
+
isBaby: isBabyAge(traveler.age, maxBabyAge),
|
|
23382
|
+
weight: null,
|
|
23383
|
+
weightType: build.WeightType.kilograms,
|
|
23384
|
+
height: null,
|
|
23385
|
+
heightType: build.HeightType.centimeters,
|
|
23386
|
+
customFields: buildEmptyCustomFields(paxCustomFields)
|
|
23401
23387
|
};
|
|
23402
23388
|
}
|
|
23403
|
-
function createInitialValuesFromRooms(formRooms, startDate, endDate, agentAdressId, personTranslation, isCompact, maxBabyAge) {
|
|
23389
|
+
function createInitialValuesFromRooms(formRooms, startDate, endDate, agentAdressId, personTranslation, isCompact, maxBabyAge, paxCustomFields) {
|
|
23404
23390
|
const followNumber = { number: 1 };
|
|
23405
23391
|
const initialValues = {
|
|
23406
23392
|
startDate,
|
|
23407
23393
|
endDate,
|
|
23408
23394
|
rooms: formRooms.map((room) => ({
|
|
23409
|
-
adults: room.adults.map((traveler) => createTraveler(traveler, followNumber, personTranslation, isCompact, maxBabyAge)),
|
|
23410
|
-
children: room.children.map((traveler) => createTraveler(traveler, followNumber, personTranslation, isCompact, maxBabyAge))
|
|
23395
|
+
adults: room.adults.map((traveler) => createTraveler(traveler, followNumber, personTranslation, isCompact, maxBabyAge, paxCustomFields)),
|
|
23396
|
+
children: room.children.map((traveler) => createTraveler(traveler, followNumber, personTranslation, isCompact, maxBabyAge, paxCustomFields))
|
|
23411
23397
|
})),
|
|
23412
23398
|
mainBookerId: -1,
|
|
23413
23399
|
street: '',
|
|
@@ -23501,7 +23487,7 @@ function applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry
|
|
|
23501
23487
|
}
|
|
23502
23488
|
};
|
|
23503
23489
|
}
|
|
23504
|
-
const SharedTravelersForm = ({ formik, translations, travellersSettings, countries, agents, bookingType, agentAdressId, travelersFirstStep = false, isUnavailable = false, useCompactForm = false, showAllCountries = false, showAgentSelection = false, initialShowAgents = false, renderPreviousButton, onBookingTypeChange }) => {
|
|
23490
|
+
const SharedTravelersForm = ({ formik, translations, travellersSettings, countries, agents, bookingType, agentAdressId, travelersFirstStep = false, isUnavailable = false, useCompactForm = false, showAllCountries = false, showWeightField = false, showHeightField = false, paxCustomFields, showAgentSelection = false, initialShowAgents = false, renderPreviousButton, onBookingTypeChange }) => {
|
|
23505
23491
|
const [showAgents, setShowAgents] = useState(initialShowAgents);
|
|
23506
23492
|
const typeaheadAgents = useMemo(() => sortBy(agents?.map((agent) => ({
|
|
23507
23493
|
key: `${agent.id}`,
|
|
@@ -23554,7 +23540,18 @@ const SharedTravelersForm = ({ formik, translations, travellersSettings, countri
|
|
|
23554
23540
|
};
|
|
23555
23541
|
const handleAddTraveler = (roomIndex) => {
|
|
23556
23542
|
const rooms = [...formik.values.rooms];
|
|
23557
|
-
const newAdult = {
|
|
23543
|
+
const newAdult = {
|
|
23544
|
+
id: Date.now(),
|
|
23545
|
+
firstName: '',
|
|
23546
|
+
lastName: '',
|
|
23547
|
+
birthDate: '',
|
|
23548
|
+
gender: '',
|
|
23549
|
+
weight: null,
|
|
23550
|
+
weightType: build.WeightType.kilograms,
|
|
23551
|
+
height: null,
|
|
23552
|
+
heightType: build.HeightType.centimeters,
|
|
23553
|
+
customFields: buildEmptyCustomFields(paxCustomFields)
|
|
23554
|
+
};
|
|
23558
23555
|
rooms[roomIndex] = { ...rooms[roomIndex], adults: [...rooms[roomIndex].adults, newAdult] };
|
|
23559
23556
|
formik.setFieldValue('rooms', rooms);
|
|
23560
23557
|
};
|
|
@@ -23569,7 +23566,23 @@ const SharedTravelersForm = ({ formik, translations, travellersSettings, countri
|
|
|
23569
23566
|
};
|
|
23570
23567
|
const handleAddRoom = () => {
|
|
23571
23568
|
const rooms = [...formik.values.rooms];
|
|
23572
|
-
rooms.push({
|
|
23569
|
+
rooms.push({
|
|
23570
|
+
adults: [
|
|
23571
|
+
{
|
|
23572
|
+
id: Date.now(),
|
|
23573
|
+
firstName: '',
|
|
23574
|
+
lastName: '',
|
|
23575
|
+
birthDate: '',
|
|
23576
|
+
gender: '',
|
|
23577
|
+
weight: null,
|
|
23578
|
+
weightType: build.WeightType.kilograms,
|
|
23579
|
+
height: null,
|
|
23580
|
+
heightType: build.HeightType.centimeters,
|
|
23581
|
+
customFields: buildEmptyCustomFields(paxCustomFields)
|
|
23582
|
+
}
|
|
23583
|
+
],
|
|
23584
|
+
children: []
|
|
23585
|
+
});
|
|
23573
23586
|
formik.setFieldValue('rooms', rooms);
|
|
23574
23587
|
};
|
|
23575
23588
|
const handleRemoveRoom = (roomIndex) => {
|
|
@@ -23588,6 +23601,54 @@ const SharedTravelersForm = ({ formik, translations, travellersSettings, countri
|
|
|
23588
23601
|
React__default.createElement("label", { className: "radiobutton__label" },
|
|
23589
23602
|
React__default.createElement("input", { type: "radio", className: "radiobutton__input", name: name, onChange: formik.handleChange, onBlur: formik.handleBlur, value: gender, checked: value.gender === gender }),
|
|
23590
23603
|
label)))))));
|
|
23604
|
+
const renderWeightControl = (namePrefix, value) => (React__default.createElement("div", { className: "form__row" },
|
|
23605
|
+
React__default.createElement(LabeledInput, { type: "number", min: 0, hasError: hasVisibleError(`${namePrefix}.weight`), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.WEIGHT, name: `${namePrefix}.weight`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: value.weight ?? '' }),
|
|
23606
|
+
React__default.createElement(LabeledSelect, { extraClassName: "form__group--md-33", name: `${namePrefix}.weightType`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: value.weightType, options: [
|
|
23607
|
+
{ key: 'kg', value: build.WeightType.kilograms, label: translations.TRAVELERS_FORM.WEIGHT_UNIT_KG },
|
|
23608
|
+
{ key: 'lb', value: build.WeightType.pounds, label: translations.TRAVELERS_FORM.WEIGHT_UNIT_LB }
|
|
23609
|
+
] })));
|
|
23610
|
+
const renderHeightControl = (namePrefix, value) => (React__default.createElement("div", { className: "form__row" },
|
|
23611
|
+
React__default.createElement(LabeledInput, { type: "number", min: 0, hasError: hasVisibleError(`${namePrefix}.height`), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.HEIGHT, name: `${namePrefix}.height`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: value.height ?? '' }),
|
|
23612
|
+
React__default.createElement(LabeledSelect, { extraClassName: "form__group--md-33", name: `${namePrefix}.heightType`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: value.heightType, options: [
|
|
23613
|
+
{ key: 'cm', value: build.HeightType.centimeters, label: translations.TRAVELERS_FORM.HEIGHT_UNIT_CM },
|
|
23614
|
+
{ key: 'ftIn', value: build.HeightType.feetInches, label: translations.TRAVELERS_FORM.HEIGHT_UNIT_FT_IN }
|
|
23615
|
+
] })));
|
|
23616
|
+
const getCustomFieldControl = (field, value, name) => {
|
|
23617
|
+
const label = compact([field.fieldName, field.isRequired && '*']).join(' ');
|
|
23618
|
+
switch (field.dataType) {
|
|
23619
|
+
case build.CustomFieldDataType.bool:
|
|
23620
|
+
return (React__default.createElement("div", { className: buildClassName(['form__group', hasVisibleError(name) && 'form__group--error']) },
|
|
23621
|
+
React__default.createElement("div", { className: "checkbox" },
|
|
23622
|
+
React__default.createElement("label", { className: "checkbox__label" },
|
|
23623
|
+
React__default.createElement("input", { type: "checkbox", className: "checkbox__input", checked: value === 'true', onChange: (e) => formik.setFieldValue(name, e.target.checked ? 'true' : 'false'), onBlur: formik.handleBlur, name: name }),
|
|
23624
|
+
label))));
|
|
23625
|
+
case build.CustomFieldDataType.date:
|
|
23626
|
+
return (React__default.createElement(LabeledInput, { type: "date", hasError: hasVisibleError(name), label: label, name: name, onChange: (e) => formik.setFieldValue(name, e.target.value), onBlur: formik.handleBlur, value: value }));
|
|
23627
|
+
case build.CustomFieldDataType.time:
|
|
23628
|
+
return (React__default.createElement(LabeledInput, { type: "time", hasError: hasVisibleError(name), label: label, name: name, onChange: (e) => formik.setFieldValue(name, e.target.value), onBlur: formik.handleBlur, value: value }));
|
|
23629
|
+
case build.CustomFieldDataType.numeric:
|
|
23630
|
+
return (React__default.createElement(LabeledInput, { type: "number", hasError: hasVisibleError(name), label: label, name: name, onChange: (e) => formik.setFieldValue(name, e.target.value), onBlur: formik.handleBlur, value: value }));
|
|
23631
|
+
case build.CustomFieldDataType.string:
|
|
23632
|
+
default:
|
|
23633
|
+
return (React__default.createElement(LabeledInput, { hasError: hasVisibleError(name), label: label, name: name, onChange: (e) => formik.setFieldValue(name, e.target.value), onBlur: formik.handleBlur, value: value }));
|
|
23634
|
+
}
|
|
23635
|
+
};
|
|
23636
|
+
const renderCustomFields = (travelerValues, namePrefix) => {
|
|
23637
|
+
if (!paxCustomFields?.length)
|
|
23638
|
+
return null;
|
|
23639
|
+
const isMainBooker = travelerValues.id === formik.values.mainBookerId;
|
|
23640
|
+
const applicableFields = getApplicablePaxCustomFields(paxCustomFields, isMainBooker);
|
|
23641
|
+
if (!applicableFields.length)
|
|
23642
|
+
return null;
|
|
23643
|
+
return (React__default.createElement("div", { className: "travelers-form__custom-fields-grid" }, applicableFields.map((field) => {
|
|
23644
|
+
const fieldIndex = travelerValues.customFields?.findIndex((c) => c.customFieldConfigurationId === field.customFieldConfigurationId) ?? -1;
|
|
23645
|
+
if (fieldIndex < 0)
|
|
23646
|
+
return null;
|
|
23647
|
+
const name = `${namePrefix}.customFields[${fieldIndex}].value`;
|
|
23648
|
+
const value = travelerValues.customFields[fieldIndex].value;
|
|
23649
|
+
return (React__default.createElement("div", { key: field.customFieldConfigurationId, style: { gridColumn: `span ${field.col || 12}` } }, getCustomFieldControl(field, value, name)));
|
|
23650
|
+
})));
|
|
23651
|
+
};
|
|
23591
23652
|
const getControl = (type, value, name) => {
|
|
23592
23653
|
switch (type) {
|
|
23593
23654
|
case 'gender':
|
|
@@ -23635,7 +23696,11 @@ const SharedTravelersForm = ({ formik, translations, travellersSettings, countri
|
|
|
23635
23696
|
React__default.createElement(LabeledInput, { hasError: hasVisibleError(`${namePrefix}.age`), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.AGE, required: true, name: `${namePrefix}.age`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: travelerValues.age })));
|
|
23636
23697
|
}
|
|
23637
23698
|
if (travellersSettings?.formFields?.length) {
|
|
23638
|
-
return (React__default.createElement(
|
|
23699
|
+
return (React__default.createElement(React__default.Fragment, null,
|
|
23700
|
+
React__default.createElement("div", { className: "travelers-form__grid" }, travellersSettings.formFields.map((field, index) => (React__default.createElement("div", { key: index, className: `control control--${field.type}` }, getControl(field.type, travelerValues, `${namePrefix}.${field.type}`))))),
|
|
23701
|
+
showWeightField && renderWeightControl(namePrefix, travelerValues),
|
|
23702
|
+
showHeightField && renderHeightControl(namePrefix, travelerValues),
|
|
23703
|
+
renderCustomFields(travelerValues, namePrefix)));
|
|
23639
23704
|
}
|
|
23640
23705
|
return (React__default.createElement(React__default.Fragment, null,
|
|
23641
23706
|
React__default.createElement("div", { className: "form__row" }, renderGenderControl(`${namePrefix}.gender`, travelerValues)),
|
|
@@ -23643,6 +23708,9 @@ const SharedTravelersForm = ({ formik, translations, travellersSettings, countri
|
|
|
23643
23708
|
React__default.createElement(LabeledInput, { hasError: hasVisibleError(`${namePrefix}.firstName`), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.FIRST_NAME, required: true, name: `${namePrefix}.firstName`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: travelerValues.firstName }),
|
|
23644
23709
|
React__default.createElement(LabeledInput, { hasError: hasVisibleError(`${namePrefix}.lastName`), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.LAST_NAME, required: true, name: `${namePrefix}.lastName`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: travelerValues.lastName }),
|
|
23645
23710
|
React__default.createElement(LabeledInput, { type: "date", hasError: hasVisibleError(`${namePrefix}.birthDate`), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.BIRTHDATE, required: true, name: `${namePrefix}.birthDate`, onChange: formik.handleChange, onBlur: formik.handleBlur, value: travelerValues.birthDate })),
|
|
23711
|
+
showWeightField && renderWeightControl(namePrefix, travelerValues),
|
|
23712
|
+
showHeightField && renderHeightControl(namePrefix, travelerValues),
|
|
23713
|
+
renderCustomFields(travelerValues, namePrefix),
|
|
23646
23714
|
travelersFirstStep && isAdult && formik.values.rooms[roomIndex].adults.length > 1 && (React__default.createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleRemoveTraveler(roomIndex, travelerIndex) }, translations.TRAVELERS_FORM.REMOVE_TRAVELER))));
|
|
23647
23715
|
};
|
|
23648
23716
|
return (React__default.createElement("form", { className: "form form__travelers", name: "booking--travellers", id: "booking--travellers", noValidate: true, onSubmit: formik.handleSubmit, onReset: formik.handleReset },
|
|
@@ -23724,6 +23792,199 @@ const SharedTravelersForm = ({ formik, translations, travellersSettings, countri
|
|
|
23724
23792
|
React__default.createElement("button", { type: "submit", title: translations.STEPS.NEXT, className: 'cta' + (isUnavailable ? ' cta--disabled' : '') }, translations.STEPS.NEXT))));
|
|
23725
23793
|
};
|
|
23726
23794
|
|
|
23795
|
+
function isValidEmail(email) {
|
|
23796
|
+
return !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i.test(email);
|
|
23797
|
+
}
|
|
23798
|
+
const NAME_CHARACTERS_REGEX = /^[\p{L}\s-]+$/u;
|
|
23799
|
+
function hasInvalidNameCharacters(name) {
|
|
23800
|
+
return !NAME_CHARACTERS_REGEX.test(name);
|
|
23801
|
+
}
|
|
23802
|
+
// Rejects values like a 5-digit year, which the native date input allows while typing
|
|
23803
|
+
function isValidBirthDate(birthDateText) {
|
|
23804
|
+
return isValid(parse(birthDateText, 'yyyy-MM-dd', new Date()));
|
|
23805
|
+
}
|
|
23806
|
+
function getAge(birthDateText, startDateText) {
|
|
23807
|
+
var birthDate = new Date(birthDateText);
|
|
23808
|
+
var startDate = new Date(startDateText);
|
|
23809
|
+
var age = startDate.getFullYear() - birthDate.getFullYear();
|
|
23810
|
+
var m = startDate.getMonth() - birthDate.getMonth();
|
|
23811
|
+
if (m < 0 || (m === 0 && startDate.getDate() < birthDate.getDate())) {
|
|
23812
|
+
age--;
|
|
23813
|
+
}
|
|
23814
|
+
return age;
|
|
23815
|
+
}
|
|
23816
|
+
const validateForm$1 = (values, agentRequired, bookingType, translations, formFields, mainBookerFormFields, maxChildAge = CHILD_MAX_AGE, maxBabyAge = BABY_MAX_AGE, paxCustomFields = []) => {
|
|
23817
|
+
const errors = {};
|
|
23818
|
+
const isFormFieldPresent = (type) => {
|
|
23819
|
+
return formFields?.some((f) => f.type === type) ?? true;
|
|
23820
|
+
};
|
|
23821
|
+
const isMainBookerFormFieldPresent = (type) => {
|
|
23822
|
+
return mainBookerFormFields?.some((f) => f.type === type) ?? true;
|
|
23823
|
+
};
|
|
23824
|
+
const formatTravelerField = (room, pax, field) => {
|
|
23825
|
+
return values.rooms.length > 1
|
|
23826
|
+
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [room, pax, field])
|
|
23827
|
+
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD, [pax, field]);
|
|
23828
|
+
};
|
|
23829
|
+
const formatTravelerIsNoAdult = (room, pax) => {
|
|
23830
|
+
return values.rooms.length > 1
|
|
23831
|
+
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_ADULT, [room, pax])
|
|
23832
|
+
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT, [pax]);
|
|
23833
|
+
};
|
|
23834
|
+
const formatTravelerIsNoChild = (room, pax) => {
|
|
23835
|
+
return values.rooms.length > 1
|
|
23836
|
+
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_CHILD, [room, pax])
|
|
23837
|
+
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD, [pax]);
|
|
23838
|
+
};
|
|
23839
|
+
const formatTravelerIsNoBaby = (room, pax) => {
|
|
23840
|
+
// The message states the boundary the traveler has to stay under, so we pass
|
|
23841
|
+
// the first age that is too old rather than the inclusive maxBabyAge.
|
|
23842
|
+
const tooOldAge = maxBabyAge + 1;
|
|
23843
|
+
return values.rooms.length > 1
|
|
23844
|
+
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_BABY, [room, pax, tooOldAge])
|
|
23845
|
+
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_BABY, [pax, tooOldAge]);
|
|
23846
|
+
};
|
|
23847
|
+
const formatTravelerFieldInvalidCharacters = (room, pax, field) => {
|
|
23848
|
+
return values.rooms.length > 1
|
|
23849
|
+
? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD_INVALID_CHARACTERS, [room, pax, field])
|
|
23850
|
+
: format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD_INVALID_CHARACTERS, [pax, field]);
|
|
23851
|
+
};
|
|
23852
|
+
const validateRequiredCustomFields = (traveler, path, room, pax) => {
|
|
23853
|
+
const isMainBooker = traveler.id === values.mainBookerId;
|
|
23854
|
+
const requiredFields = getApplicablePaxCustomFields(paxCustomFields, isMainBooker).filter((f) => f.isRequired);
|
|
23855
|
+
requiredFields.forEach((field) => {
|
|
23856
|
+
const fieldIndex = traveler.customFields?.findIndex((c) => c.customFieldConfigurationId === field.customFieldConfigurationId) ?? -1;
|
|
23857
|
+
if (fieldIndex < 0)
|
|
23858
|
+
return;
|
|
23859
|
+
if (isEmpty$1(traveler.customFields[fieldIndex].value)) {
|
|
23860
|
+
set(errors, `${path}.customFields[${fieldIndex}].value`, formatTravelerField(room, pax, field.fieldName));
|
|
23861
|
+
}
|
|
23862
|
+
});
|
|
23863
|
+
};
|
|
23864
|
+
values.rooms.forEach((r, rIndex) => r.adults.forEach((adult, index) => {
|
|
23865
|
+
if (isEmpty$1(adult.gender) && isFormFieldPresent('gender')) {
|
|
23866
|
+
set(errors, `rooms[${rIndex}].adults[${index}].gender`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.GENDER));
|
|
23867
|
+
}
|
|
23868
|
+
if (isFormFieldPresent('firstName')) {
|
|
23869
|
+
if (isEmpty$1(adult.firstName)) {
|
|
23870
|
+
set(errors, `rooms[${rIndex}].adults[${index}].firstName`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23871
|
+
}
|
|
23872
|
+
else if (hasInvalidNameCharacters(adult.firstName)) {
|
|
23873
|
+
set(errors, `rooms[${rIndex}].adults[${index}].firstName`, formatTravelerFieldInvalidCharacters(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23874
|
+
}
|
|
23875
|
+
}
|
|
23876
|
+
if (isFormFieldPresent('lastName')) {
|
|
23877
|
+
if (isEmpty$1(adult.lastName)) {
|
|
23878
|
+
set(errors, `rooms[${rIndex}].adults[${index}].lastName`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23879
|
+
}
|
|
23880
|
+
else if (hasInvalidNameCharacters(adult.lastName)) {
|
|
23881
|
+
set(errors, `rooms[${rIndex}].adults[${index}].lastName`, formatTravelerFieldInvalidCharacters(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23882
|
+
}
|
|
23883
|
+
}
|
|
23884
|
+
if (isFormFieldPresent('birthDate')) {
|
|
23885
|
+
if (isEmpty$1(adult.birthDate) || !isValidBirthDate(adult.birthDate)) {
|
|
23886
|
+
set(errors, `rooms[${rIndex}].adults[${index}].birthDate`, formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.BIRTHDATE));
|
|
23887
|
+
}
|
|
23888
|
+
else if (values.endDate) {
|
|
23889
|
+
// If you are younger than the maxChildAge at the end of the trip, you are considered a child, so we check the endDate here instead of the startDate
|
|
23890
|
+
const age = getAge(adult.birthDate, values.endDate);
|
|
23891
|
+
if (age <= maxChildAge) {
|
|
23892
|
+
set(errors, `rooms[${rIndex}].adults[${index}].birthDate`, formatTravelerIsNoAdult(rIndex + 1, index + 1));
|
|
23893
|
+
}
|
|
23894
|
+
}
|
|
23895
|
+
}
|
|
23896
|
+
validateRequiredCustomFields(adult, `rooms[${rIndex}].adults[${index}]`, rIndex + 1, index + 1);
|
|
23897
|
+
}));
|
|
23898
|
+
values.rooms.forEach((r, rIndex) => r.children.forEach((child, index) => {
|
|
23899
|
+
if (isEmpty$1(child.gender) && isFormFieldPresent('gender')) {
|
|
23900
|
+
set(errors, `rooms[${rIndex}].children[${index}].gender`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.GENDER));
|
|
23901
|
+
}
|
|
23902
|
+
if (isFormFieldPresent('firstName')) {
|
|
23903
|
+
if (isEmpty$1(child.firstName)) {
|
|
23904
|
+
set(errors, `rooms[${rIndex}].children[${index}].firstName`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23905
|
+
}
|
|
23906
|
+
else if (hasInvalidNameCharacters(child.firstName)) {
|
|
23907
|
+
set(errors, `rooms[${rIndex}].children[${index}].firstName`, formatTravelerFieldInvalidCharacters(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
23908
|
+
}
|
|
23909
|
+
}
|
|
23910
|
+
if (isFormFieldPresent('lastName')) {
|
|
23911
|
+
if (isEmpty$1(child.lastName)) {
|
|
23912
|
+
set(errors, `rooms[${rIndex}].children[${index}].lastName`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23913
|
+
}
|
|
23914
|
+
else if (hasInvalidNameCharacters(child.lastName)) {
|
|
23915
|
+
set(errors, `rooms[${rIndex}].children[${index}].lastName`, formatTravelerFieldInvalidCharacters(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
23916
|
+
}
|
|
23917
|
+
}
|
|
23918
|
+
if (isFormFieldPresent('birthDate')) {
|
|
23919
|
+
if (isEmpty$1(child.birthDate) || !isValidBirthDate(child.birthDate)) {
|
|
23920
|
+
set(errors, `rooms[${rIndex}].children[${index}].birthDate`, formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.BIRTHDATE));
|
|
23921
|
+
}
|
|
23922
|
+
else if (child.isBaby && values.startDate) {
|
|
23923
|
+
// A baby only has to be under the maxBabyAge on departure, so we check the startDate here instead of the endDate (TIDE-3269)
|
|
23924
|
+
const age = getAge(child.birthDate, values.startDate);
|
|
23925
|
+
if (age > maxBabyAge) {
|
|
23926
|
+
set(errors, `rooms[${rIndex}].children[${index}].birthDate`, formatTravelerIsNoBaby(rIndex + 1, r.adults.length + index + 1));
|
|
23927
|
+
}
|
|
23928
|
+
}
|
|
23929
|
+
else if (values.endDate) {
|
|
23930
|
+
// You need to be under the maxChildAge until the end of the trip, so we check the endDate here instead of the startDate.
|
|
23931
|
+
// Babies land here too when there is no startDate to check them against, so they keep at least the child age check.
|
|
23932
|
+
const age = getAge(child.birthDate, values.endDate);
|
|
23933
|
+
if (age > maxChildAge) {
|
|
23934
|
+
set(errors, `rooms[${rIndex}].children[${index}].birthDate`, formatTravelerIsNoChild(rIndex + 1, r.adults.length + index + 1));
|
|
23935
|
+
}
|
|
23936
|
+
}
|
|
23937
|
+
}
|
|
23938
|
+
validateRequiredCustomFields(child, `rooms[${rIndex}].children[${index}]`, rIndex + 1, r.adults.length + index + 1);
|
|
23939
|
+
}));
|
|
23940
|
+
if (values.mainBookerId < 0) {
|
|
23941
|
+
errors.mainBookerId = translations.TRAVELERS_FORM.VALIDATION.NO_MAIN_BOOKER_SELECTED;
|
|
23942
|
+
}
|
|
23943
|
+
if (bookingType != 'b2b' || mainBookerFormFields?.length) {
|
|
23944
|
+
if (isEmpty$1(values.street) && isMainBookerFormFieldPresent('street')) {
|
|
23945
|
+
errors.street = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.STREET]);
|
|
23946
|
+
}
|
|
23947
|
+
if (isEmpty$1(values.houseNumber) && isMainBookerFormFieldPresent('houseNumber')) {
|
|
23948
|
+
errors.houseNumber = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.HOUSE_NUMBER]);
|
|
23949
|
+
}
|
|
23950
|
+
if (isEmpty$1(values.zipCode) && isMainBookerFormFieldPresent('zipCode')) {
|
|
23951
|
+
errors.zipCode = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.ZIPCODE]);
|
|
23952
|
+
}
|
|
23953
|
+
if (isEmpty$1(values.place) && isMainBookerFormFieldPresent('place')) {
|
|
23954
|
+
errors.place = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.CITY]);
|
|
23955
|
+
}
|
|
23956
|
+
if (isMainBookerFormFieldPresent('email')) {
|
|
23957
|
+
if (isEmpty$1(values.email)) {
|
|
23958
|
+
errors.email = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.EMAIL]);
|
|
23959
|
+
}
|
|
23960
|
+
else if (isValidEmail(values.email)) {
|
|
23961
|
+
errors.email = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_IS_INVALID;
|
|
23962
|
+
}
|
|
23963
|
+
if (isEmpty$1(values.emailConfirmation)) {
|
|
23964
|
+
errors.emailConfirmation = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.REPEAT_EMAIL]);
|
|
23965
|
+
}
|
|
23966
|
+
else if (values.emailConfirmation !== values.email) {
|
|
23967
|
+
errors.emailConfirmation = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_DOES_NOT_MATCH;
|
|
23968
|
+
}
|
|
23969
|
+
}
|
|
23970
|
+
if (isEmpty$1(values.country) && isMainBookerFormFieldPresent('country')) {
|
|
23971
|
+
errors.country = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.COUNTRY]);
|
|
23972
|
+
}
|
|
23973
|
+
if (isEmpty$1(values.phone) && isMainBookerFormFieldPresent('phone')) {
|
|
23974
|
+
errors.phone = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
|
|
23975
|
+
}
|
|
23976
|
+
}
|
|
23977
|
+
else {
|
|
23978
|
+
if (isEmpty$1(values.phone)) {
|
|
23979
|
+
errors.phone = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
|
|
23980
|
+
}
|
|
23981
|
+
}
|
|
23982
|
+
if (agentRequired && !values.travelAgentId) {
|
|
23983
|
+
errors.travelAgentId = translations.TRAVELERS_FORM.VALIDATION.AGENT_IS_REQUIRED;
|
|
23984
|
+
}
|
|
23985
|
+
return errors;
|
|
23986
|
+
};
|
|
23987
|
+
|
|
23727
23988
|
const TravelersForm = () => {
|
|
23728
23989
|
const dispatch = useAppDispatch();
|
|
23729
23990
|
const settings = useContext(SettingsContext);
|
|
@@ -23742,12 +24003,15 @@ const TravelersForm = () => {
|
|
|
23742
24003
|
const bookingAttributes = useSelector(selectBookingAttributes);
|
|
23743
24004
|
const hasMounted = useSelector(selectHasMounted);
|
|
23744
24005
|
const countries = useSelector(selectCountries);
|
|
24006
|
+
const paxCustomFields = useSelector(selectPaxCustomFields);
|
|
23745
24007
|
const inFlight = useRef(false);
|
|
23746
24008
|
const pendingRefetch = useRef(false);
|
|
23747
24009
|
const useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
|
|
23748
24010
|
const showAllCountries = !!settings.travellers.showAllCountries;
|
|
24011
|
+
const showWeightField = !!settings.travellers.showWeightField;
|
|
24012
|
+
const showHeightField = !!settings.travellers.showHeightField;
|
|
23749
24013
|
const initialValues = useSelector(selectTravelersFormValues) ??
|
|
23750
|
-
createInitialValuesFromRooms(formRooms, startDate, endDate, agentAdressId, translations.TRAVELERS_FORM.PERSON, useCompactForm, settings.maxBabyAge);
|
|
24014
|
+
createInitialValuesFromRooms(formRooms, startDate, endDate, agentAdressId, translations.TRAVELERS_FORM.PERSON, useCompactForm, settings.maxBabyAge, paxCustomFields);
|
|
23751
24015
|
const [showAgentSelection, setShowAgentSelection] = useState(!settings.agentAdressId && !settings.hideAgentSelection);
|
|
23752
24016
|
const formik = useFormik({
|
|
23753
24017
|
initialValues,
|
|
@@ -23757,7 +24021,7 @@ const TravelersForm = () => {
|
|
|
23757
24021
|
// The travel dates are captured into initialValues once and then persisted in
|
|
23758
24022
|
// redux, so validating against the values would use the dates of whichever
|
|
23759
24023
|
// package option was selected first. Age checks need the current ones.
|
|
23760
|
-
{ ...values, startDate, endDate }, settings.agentRequired, bookingType, translations, settings.travellers.formFields, settings.travellers.mainBookerFormFields, settings.maxChildAge, settings.maxBabyAge),
|
|
24024
|
+
{ ...values, startDate, endDate }, settings.agentRequired, bookingType, translations, settings.travellers.formFields, settings.travellers.mainBookerFormFields, settings.maxChildAge, settings.maxBabyAge, paxCustomFields),
|
|
23761
24025
|
onSubmit: (values) => {
|
|
23762
24026
|
dispatch(setFormValues(values));
|
|
23763
24027
|
if (useCompactForm) {
|
|
@@ -23840,7 +24104,7 @@ const TravelersForm = () => {
|
|
|
23840
24104
|
dispatch(setFormValues(formValues));
|
|
23841
24105
|
setShowAgentSelection(false);
|
|
23842
24106
|
}, [agents, settings.affiliateSlug]);
|
|
23843
|
-
return (React__default.createElement(SharedTravelersForm, { formik: formik, translations: translations, travellersSettings: settings.travellers, countries: countries, agents: agents, bookingType: bookingType, agentAdressId: agentAdressId, travelersFirstStep: travelersFirstStep, isUnavailable: isUnavailable, useCompactForm: useCompactForm, showAllCountries: showAllCountries, showAgentSelection: showAgentSelection, initialShowAgents: settings.agentRequired ?? false, onBookingTypeChange: (nextBookingType) => dispatch(setBookingType(nextBookingType)), renderPreviousButton: () => !travelersFirstStep && settings.skipRouter ? (React__default.createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => dispatch(setCurrentStep$1(OPTIONS_FORM_STEP)), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : !travelersFirstStep ? (React__default.createElement(Link, { to: `${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.options.pathSuffix}?${bookingQueryString}`, title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : null }));
|
|
24107
|
+
return (React__default.createElement(SharedTravelersForm, { formik: formik, translations: translations, travellersSettings: settings.travellers, countries: countries, agents: agents, bookingType: bookingType, agentAdressId: agentAdressId, travelersFirstStep: travelersFirstStep, isUnavailable: isUnavailable, useCompactForm: useCompactForm, showAllCountries: showAllCountries, showWeightField: showWeightField, showHeightField: showHeightField, paxCustomFields: paxCustomFields, showAgentSelection: showAgentSelection, initialShowAgents: settings.agentRequired ?? false, onBookingTypeChange: (nextBookingType) => dispatch(setBookingType(nextBookingType)), renderPreviousButton: () => !travelersFirstStep && settings.skipRouter ? (React__default.createElement("button", { type: "button", title: translations.STEPS.PREVIOUS, onClick: () => dispatch(setCurrentStep$1(OPTIONS_FORM_STEP)), className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : !travelersFirstStep ? (React__default.createElement(Link, { to: `${!settings.skipBasePathInRouting ? settings.basePath : ''}${settings.options.pathSuffix}?${bookingQueryString}`, title: translations.STEPS.PREVIOUS, className: "cta cta--secondary" }, translations.STEPS.PREVIOUS)) : null }));
|
|
23844
24108
|
};
|
|
23845
24109
|
|
|
23846
24110
|
const Booking = ({ productCode, productName, thumbnailUrl }) => {
|
|
@@ -27912,7 +28176,12 @@ const mapPackagingPaxToBookingPax = (pax, fallbackId, referenceDate) => ({
|
|
|
27912
28176
|
dateOfBirth: pax?.dateOfBirth ?? undefined,
|
|
27913
28177
|
age: pax?.dateOfBirth ? getAgeAtReferenceDate(pax.dateOfBirth, referenceDate) : undefined,
|
|
27914
28178
|
isMainBooker: pax?.isMainBooker,
|
|
27915
|
-
email: ''
|
|
28179
|
+
email: '',
|
|
28180
|
+
weight: null,
|
|
28181
|
+
weightType: build.WeightType.kilograms,
|
|
28182
|
+
height: null,
|
|
28183
|
+
heightType: build.HeightType.centimeters,
|
|
28184
|
+
customFields: []
|
|
27916
28185
|
});
|
|
27917
28186
|
const getRequestRoomsFromPackagingEntry = (entry) => {
|
|
27918
28187
|
const accommodationLines = (entry.lines ?? []).filter((line) => line.serviceType === ACCOMMODATION_SERVICE_TYPE && line.pax?.length > 0);
|
|
@@ -28232,8 +28501,6 @@ const buildTrajectNodeRequest = ({ node, line }, context, productCode, destinati
|
|
|
28232
28501
|
language: context.language,
|
|
28233
28502
|
serviceType: node.serviceType,
|
|
28234
28503
|
fromDate: toDateOnlyString(line.from),
|
|
28235
|
-
// An excursion happens on a day rather than over a span. The traject gives its line an end a day
|
|
28236
|
-
// out, the way a night is counted, which asks the search for a window it does not have.
|
|
28237
28504
|
toDate: toDateOnlyString(node.serviceType === EXCURSION_SERVICE_TYPE ? line.from : line.to),
|
|
28238
28505
|
destination: destination ?? buildDestination(line, node),
|
|
28239
28506
|
productCode,
|
|
@@ -31153,7 +31420,7 @@ const Filters = ({ initialFilters, filters, isOpen, handleSetIsOpen, isLoading,
|
|
|
31153
31420
|
const max = filter.max ?? 100;
|
|
31154
31421
|
const selectedMin = filter.selectedMin ?? min;
|
|
31155
31422
|
const selectedMax = filter.selectedMax ?? max;
|
|
31156
|
-
return (React__default.createElement(MultiRangeFilter, { min: min, max: max, selectedMin: selectedMin, selectedMax: selectedMax, valueFormatter: (value) => `${value}
|
|
31423
|
+
return (React__default.createElement(MultiRangeFilter, { min: min, max: max, selectedMin: selectedMin, selectedMax: selectedMax, valueFormatter: (value) => (filter.property === 'price' ? value.toFixed(2).replace('.', ',') : `${value}`), onChange: (newMin, newMax) => {
|
|
31157
31424
|
handleSliderChange(filter, newMin, newMax);
|
|
31158
31425
|
} }));
|
|
31159
31426
|
})(),
|
|
@@ -32645,7 +32912,7 @@ const FlightFilters = ({ isOpen, handleSetIsOpen, isLoading }) => {
|
|
|
32645
32912
|
!isEmpty$1(priceRangeValues) &&
|
|
32646
32913
|
(() => {
|
|
32647
32914
|
return (React__default.createElement("div", { className: "search__filter-rows" },
|
|
32648
|
-
React__default.createElement(MultiRangeFilter, { min: minPrice, max: maxPrice, selectedMin: first(priceRangeValues) ?? minPrice, selectedMax: last(priceRangeValues) ?? maxPrice, valueFormatter: (value) => `€${value}`, onChange: (newMin, newMax) => {
|
|
32915
|
+
React__default.createElement(MultiRangeFilter, { min: minPrice, max: maxPrice, selectedMin: first(priceRangeValues) ?? minPrice, selectedMax: last(priceRangeValues) ?? maxPrice, valueFormatter: (value) => `€${value.toFixed(2).replace('.', ',')}`, onChange: (newMin, newMax) => {
|
|
32649
32916
|
handlePriceSliderChange([newMin, newMax]);
|
|
32650
32917
|
} })));
|
|
32651
32918
|
})()))))));
|
|
@@ -33305,7 +33572,12 @@ const getRequestRoomsFromPackagingSegments = (entry, segments) => {
|
|
|
33305
33572
|
dateOfBirth: paxSource?.dateOfBirth ?? undefined,
|
|
33306
33573
|
age: paxSource?.dateOfBirth ? undefined : 30,
|
|
33307
33574
|
isMainBooker: paxSource?.isMainBooker,
|
|
33308
|
-
email: ''
|
|
33575
|
+
email: '',
|
|
33576
|
+
weight: null,
|
|
33577
|
+
weightType: build.WeightType.kilograms,
|
|
33578
|
+
height: null,
|
|
33579
|
+
heightType: build.HeightType.centimeters,
|
|
33580
|
+
customFields: []
|
|
33309
33581
|
};
|
|
33310
33582
|
if (!groupedByRoom.has(roomIndexWithinLine)) {
|
|
33311
33583
|
groupedByRoom.set(roomIndexWithinLine, []);
|
|
@@ -34313,6 +34585,7 @@ const getNodeIcon = (node) => {
|
|
|
34313
34585
|
const isRenderableNode = (node) => node.trajectNodeType === REGULAR_TRAJECT_NODE_TYPE &&
|
|
34314
34586
|
(node.serviceType === ACCOMMODATION_SERVICE_TYPE || node.serviceType === EXCURSION_SERVICE_TYPE || node.serviceType === FLIGHT_SERVICE_TYPE);
|
|
34315
34587
|
const MAX_DAY_ACTIVITIES = 6;
|
|
34588
|
+
const MAX_HOTEL_RESULTS = 6;
|
|
34316
34589
|
const TrajectResults = ({ isLoading }) => {
|
|
34317
34590
|
const context = useContext(SearchResultsConfigurationContext);
|
|
34318
34591
|
const dispatch = useDispatch();
|
|
@@ -34322,6 +34595,8 @@ const TrajectResults = ({ isLoading }) => {
|
|
|
34322
34595
|
const { trajectNodeAvailability, trajectFlightAvailability, trajectDaySuggestions, editablePackagingEntry } = useSelector((state) => state.searchResults);
|
|
34323
34596
|
const trajectEntry = context?.trajectEntry;
|
|
34324
34597
|
const hideShowMoreResults = !!context?.hideShowMoreResults;
|
|
34598
|
+
const loadDayActivitiesOnDemand = !!context?.loadDayActivitiesOnDemand;
|
|
34599
|
+
const showNonPreferredHotels = !!context?.showNonPreferredHotels;
|
|
34325
34600
|
const nodesWithLines = useMemo(() => (trajectEntry ? getTrajectNodesWithLines(trajectEntry) : []), [trajectEntry]);
|
|
34326
34601
|
const lineByNodeId = useMemo(() => new Map(nodesWithLines.map((x) => [x.node.nodeId, x])), [nodesWithLines]);
|
|
34327
34602
|
const nodesByDay = useMemo(() => {
|
|
@@ -34359,13 +34634,14 @@ const TrajectResults = ({ isLoading }) => {
|
|
|
34359
34634
|
/**
|
|
34360
34635
|
* Each day's activities are one more search, and a traject has as many as it has days. They go
|
|
34361
34636
|
* out together, but only once the trip itself has resolved — sharing the connections with the
|
|
34362
|
-
* searches the trip cannot do without would only make those slower.
|
|
34637
|
+
* searches the trip cannot do without would only make those slower. A portal can turn the
|
|
34638
|
+
* automatic load off, and then each day waits for its own "show activities" click instead.
|
|
34363
34639
|
*/
|
|
34364
34640
|
useEffect(() => {
|
|
34365
|
-
if (!trajectEntry || !tripResolved)
|
|
34641
|
+
if (!trajectEntry || !tripResolved || loadDayActivitiesOnDemand)
|
|
34366
34642
|
return;
|
|
34367
34643
|
(trajectEntry.traject.days ?? []).filter((day) => stayByDay.has(day.order)).forEach((day) => loadDay(day));
|
|
34368
|
-
}, [trajectEntry, tripResolved, stayByDay]);
|
|
34644
|
+
}, [trajectEntry, tripResolved, stayByDay, loadDayActivitiesOnDemand]);
|
|
34369
34645
|
if (!context || !trajectEntry)
|
|
34370
34646
|
return null;
|
|
34371
34647
|
const handleSelect = (item, code) => {
|
|
@@ -34439,6 +34715,10 @@ const TrajectResults = ({ isLoading }) => {
|
|
|
34439
34715
|
const selected = results.find((x) => x.code === availability?.selectedCode) ?? null;
|
|
34440
34716
|
const configured = results.filter((x) => x.code !== selected?.code && !!findCandidateForResult(node, x));
|
|
34441
34717
|
const others = results.filter((x) => x.code !== selected?.code && !findCandidateForResult(node, x));
|
|
34718
|
+
// A hotel row holds the hotels configured on the node; a portal can also let it fill up with
|
|
34719
|
+
// non-preferred hotels found in the area, the rest staying behind "show more".
|
|
34720
|
+
const fill = showNonPreferredHotels && node.serviceType === ACCOMMODATION_SERVICE_TYPE ? others.slice(0, Math.max(MAX_HOTEL_RESULTS - 1 - configured.length, 0)) : [];
|
|
34721
|
+
const remaining = others.length - fill.length;
|
|
34442
34722
|
// No entry yet means the node's search has been queued but not dispatched — still loading.
|
|
34443
34723
|
const status = availability?.status ?? 'loading';
|
|
34444
34724
|
return (React__default.createElement(React__default.Fragment, { key: line.guid },
|
|
@@ -34458,12 +34738,12 @@ const TrajectResults = ({ isLoading }) => {
|
|
|
34458
34738
|
node.preferredAccommodationName,
|
|
34459
34739
|
" \u2014 ",
|
|
34460
34740
|
translations.SRP.NO_RESULTS))),
|
|
34461
|
-
React__default.createElement("div", { className: "search__results__cards search__results__cards--scroll" }, [selected, ...configured].map((result) => (React__default.createElement(TrajectNodeCard, { key: result.code, node: node, result: result, isSelected: result.code === selected.code, languageCode: context.languageCode, translations: translations, onSelect: () => handleSelect(item, result.code), onEditOptions: node.serviceType === ACCOMMODATION_SERVICE_TYPE ? () => handleEditOptions(item) : undefined, showNights: node.serviceType === ACCOMMODATION_SERVICE_TYPE })))),
|
|
34462
|
-
|
|
34741
|
+
React__default.createElement("div", { className: "search__results__cards search__results__cards--scroll" }, [selected, ...configured, ...fill].map((result) => (React__default.createElement(TrajectNodeCard, { key: result.code, node: node, result: result, isSelected: result.code === selected.code, languageCode: context.languageCode, translations: translations, onSelect: () => handleSelect(item, result.code), onEditOptions: node.serviceType === ACCOMMODATION_SERVICE_TYPE ? () => handleEditOptions(item) : undefined, showNights: node.serviceType === ACCOMMODATION_SERVICE_TYPE })))),
|
|
34742
|
+
remaining > 0 && !hideShowMoreResults && (React__default.createElement("div", { className: "search__results__cards__actions" },
|
|
34463
34743
|
React__default.createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMore(item) },
|
|
34464
34744
|
translations.SRP.SHOW_MORE,
|
|
34465
34745
|
" (",
|
|
34466
|
-
|
|
34746
|
+
remaining,
|
|
34467
34747
|
")")))))));
|
|
34468
34748
|
};
|
|
34469
34749
|
const handleSelectFlight = (item, flight) => {
|
|
@@ -34554,6 +34834,7 @@ const TrajectResults = ({ isLoading }) => {
|
|
|
34554
34834
|
return null;
|
|
34555
34835
|
const visible = cards.slice(0, MAX_DAY_ACTIVITIES);
|
|
34556
34836
|
const hidden = cards.length - visible.length;
|
|
34837
|
+
const awaitsRequest = loadDayActivitiesOnDemand && !suggestions && canSearch && !nodesResolving && hidden === 0;
|
|
34557
34838
|
return (React__default.createElement(React__default.Fragment, { key: `activities-${day.order}` },
|
|
34558
34839
|
React__default.createElement("div", { className: "search__results__label search__results__label--sub" },
|
|
34559
34840
|
React__default.createElement("div", { className: "search__results__label__text" },
|
|
@@ -34563,11 +34844,13 @@ const TrajectResults = ({ isLoading }) => {
|
|
|
34563
34844
|
(nodesResolving || isSearching) && !cards.length && React__default.createElement(Spinner, { label: translations.SRP.LOADING_ACTIVITIES }),
|
|
34564
34845
|
!!cards.length && React__default.createElement("div", { className: "search__results__cards search__results__cards--scroll" }, visible.map(renderActivityCard)),
|
|
34565
34846
|
!nodesResolving && !isSearching && !cards.length && (!!items.length || !!suggestions) && (React__default.createElement("div", { className: "no-results" }, translations.SRP.NO_RESULTS)),
|
|
34566
|
-
React__default.createElement("div", { className: "search__results__cards__actions" },
|
|
34567
|
-
translations.SRP.
|
|
34568
|
-
|
|
34569
|
-
|
|
34570
|
-
|
|
34847
|
+
React__default.createElement("div", { className: "search__results__cards__actions" },
|
|
34848
|
+
awaitsRequest && (React__default.createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => loadDay(day) }, translations.SRP.SHOW_ACTIVITIES)),
|
|
34849
|
+
hidden > 0 && !hideShowMoreResults && (React__default.createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMoreActivities(day.order) },
|
|
34850
|
+
translations.SRP.SHOW_MORE,
|
|
34851
|
+
" (",
|
|
34852
|
+
hidden,
|
|
34853
|
+
")")))));
|
|
34571
34854
|
};
|
|
34572
34855
|
/**
|
|
34573
34856
|
* An activity the traject books is swapped for another, the way a hotel is; one the traveller
|