@qite/tide-booking-component 1.4.2 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vs/ProjectSettings.json +3 -3
- package/.vs/VSWorkspaceState.json +5 -5
- package/README.md +8 -8
- package/build/build-cjs/booking-wizard/components/phone-input.d.ts +17 -0
- package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +41 -12
- package/build/build-cjs/booking-wizard/features/summary/summary-flight.d.ts +2 -2
- package/build/build-cjs/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
- package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
- package/build/build-cjs/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
- package/build/build-cjs/booking-wizard/types.d.ts +13 -0
- package/build/build-cjs/index.js +458 -273
- package/build/build-cjs/shared/utils/localization-util.d.ts +3 -0
- package/build/build-esm/booking-wizard/components/phone-input.d.ts +17 -0
- package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +41 -12
- package/build/build-esm/booking-wizard/features/summary/summary-flight.d.ts +2 -2
- package/build/build-esm/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
- package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
- package/build/build-esm/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
- package/build/build-esm/booking-wizard/types.d.ts +13 -0
- package/build/build-esm/index.js +460 -275
- package/build/build-esm/shared/utils/localization-util.d.ts +3 -0
- package/package.json +1 -1
- package/rollup.config.js +23 -23
- package/src/booking-product/components/age-select.tsx +35 -35
- package/src/booking-product/components/amount-input.tsx +78 -78
- package/src/booking-product/components/date-range-picker/calendar-day.tsx +58 -58
- package/src/booking-product/components/date-range-picker/calendar.tsx +178 -178
- package/src/booking-product/components/date-range-picker/index.tsx +196 -196
- package/src/booking-product/components/dates.tsx +136 -136
- package/src/booking-product/components/footer.tsx +69 -69
- package/src/booking-product/components/header.tsx +79 -79
- package/src/booking-product/components/icon.tsx +251 -251
- package/src/booking-product/components/rating.tsx +21 -21
- package/src/booking-product/components/rooms.tsx +199 -199
- package/src/booking-product/index.tsx +30 -30
- package/src/booking-product/settings-context.ts +14 -14
- package/src/booking-product/types.ts +28 -28
- package/src/booking-product/utils/api.ts +25 -25
- package/src/booking-product/utils/price.ts +28 -28
- package/src/booking-wizard/api-settings-slice.ts +24 -24
- package/src/booking-wizard/components/icon.tsx +508 -508
- package/src/booking-wizard/components/labeled-input.tsx +64 -64
- package/src/booking-wizard/components/labeled-select.tsx +69 -69
- package/src/booking-wizard/components/message.tsx +34 -34
- package/src/booking-wizard/components/multi-range-filter.tsx +113 -113
- package/src/booking-wizard/components/phone-input.tsx +181 -0
- package/src/booking-wizard/components/product-card.tsx +37 -37
- package/src/booking-wizard/components/step-indicator.tsx +51 -51
- package/src/booking-wizard/components/step-route.tsx +27 -27
- package/src/booking-wizard/declarations.d.ts +4 -4
- package/src/booking-wizard/features/booking/api.ts +49 -49
- package/src/booking-wizard/features/booking/booking-slice.ts +2 -0
- package/src/booking-wizard/features/booking/booking.tsx +28 -28
- package/src/booking-wizard/features/booking/constants.ts +16 -16
- package/src/booking-wizard/features/booking/selectors.ts +17 -14
- package/src/booking-wizard/features/error/error.tsx +78 -78
- package/src/booking-wizard/features/flight-options/flight-filter.tsx +432 -432
- package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +385 -385
- package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +229 -229
- package/src/booking-wizard/features/flight-options/flight-option.tsx +80 -80
- package/src/booking-wizard/features/flight-options/index.tsx +196 -196
- package/src/booking-wizard/features/price-details/price-details-api.ts +24 -24
- package/src/booking-wizard/features/price-details/price-details-slice.ts +178 -178
- package/src/booking-wizard/features/price-details/util.ts +155 -155
- package/src/booking-wizard/features/product-options/no-options.tsx +21 -21
- package/src/booking-wizard/features/product-options/none-option.tsx +121 -121
- package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +64 -64
- package/src/booking-wizard/features/product-options/option-booking-group.tsx +216 -216
- package/src/booking-wizard/features/product-options/option-item.tsx +321 -321
- package/src/booking-wizard/features/product-options/option-pax-card.tsx +201 -201
- package/src/booking-wizard/features/product-options/option-pax-group.tsx +175 -175
- package/src/booking-wizard/features/product-options/option-unit-group.tsx +198 -198
- package/src/booking-wizard/features/product-options/option-units-card.tsx +185 -185
- package/src/booking-wizard/features/room-options/index.tsx +187 -187
- package/src/booking-wizard/features/room-options/room-utils.ts +190 -190
- package/src/booking-wizard/features/room-options/room.tsx +161 -161
- package/src/booking-wizard/features/room-options/traveler-rooms.tsx +75 -75
- package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +4 -2
- package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -0
- package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +25 -25
- package/src/booking-wizard/features/summary/summary-flight.tsx +7 -6
- package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +69 -69
- package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +63 -63
- package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +66 -66
- package/src/booking-wizard/features/summary/summary-slice.ts +28 -28
- package/src/booking-wizard/features/summary/summary.tsx +91 -62
- package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +70 -0
- package/src/booking-wizard/features/travelers-form/travelers-form-util.ts +11 -0
- package/src/booking-wizard/features/travelers-form/travelers-form.tsx +451 -313
- package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +101 -101
- package/src/booking-wizard/features/travelers-form/validate-form.ts +84 -98
- package/src/booking-wizard/index.tsx +36 -36
- package/src/booking-wizard/store.ts +31 -31
- package/src/booking-wizard/types.ts +15 -0
- package/src/index.ts +4 -4
- package/src/shared/components/loader.tsx +16 -16
- package/src/shared/translations/en-GB.json +3 -0
- package/src/shared/translations/fr-BE.json +3 -0
- package/src/shared/translations/nl-BE.json +3 -0
- package/src/shared/types.ts +4 -4
- package/src/shared/utils/class-util.ts +9 -9
- package/src/shared/utils/localization-util.ts +62 -62
- package/src/shared/utils/query-string-util.ts +119 -119
- package/styles/booking-product-variables.scss +394 -394
- package/styles/booking-product.scss +446 -446
- package/styles/booking-wizard.scss +1 -0
- package/styles/components/_animations.scss +39 -39
- package/styles/components/_base.scss +107 -107
- package/styles/components/_button.scss +238 -238
- package/styles/components/_checkbox.scss +219 -219
- package/styles/components/_cta.scss +208 -208
- package/styles/components/_date-list.scss +41 -41
- package/styles/components/_date-range-picker.scss +225 -225
- package/styles/components/_decrement-increment.scss +35 -35
- package/styles/components/_flight-option.scss +1429 -1429
- package/styles/components/_info-message.scss +71 -71
- package/styles/components/_input.scss +25 -25
- package/styles/components/_list.scss +187 -187
- package/styles/components/_loader.scss +72 -72
- package/styles/components/_mixins.scss +550 -550
- package/styles/components/_phone-input.scss +8 -0
- package/styles/components/_placeholders.scss +166 -166
- package/styles/components/_pricing-summary.scss +155 -155
- package/styles/components/_qsm.scss +17 -17
- package/styles/components/_radiobutton.scss +170 -170
- package/styles/components/_select-wrapper.scss +80 -80
- package/styles/components/_spinner.scss +29 -29
- package/styles/components/_table.scss +81 -81
- package/styles/components/_tree.scss +530 -530
- package/styles/components/_typeahead.scss +281 -281
- package/styles/components/_variables.scss +89 -89
- package/tsconfig.json +24 -24
package/build/build-cjs/index.js
CHANGED
|
@@ -266,8 +266,11 @@ var TRAVELERS_FORM$2 = {
|
|
|
266
266
|
CHOOSE_AGENT_PLACEHOLDER: "Choisissez votre agent de voyage",
|
|
267
267
|
VALIDATION: {
|
|
268
268
|
TRAVELER_X_FIELD: "Chambre {0} - Voyageur {1} : {2}",
|
|
269
|
+
SINGLE_ROOM_TRAVELER_X_FIELD: "Voyageur {0} : {1}",
|
|
269
270
|
TRAVELER_X_IS_NO_ADULT: "Chambre {0} - Voyageur {1} : n'est pas un adulte",
|
|
271
|
+
SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT: "Voyageur {0} : n'est pas un adulte",
|
|
270
272
|
TRAVELER_X_IS_NO_CHILD: "Chambre {0} - Voyageur {1} : n'est pas un enfant",
|
|
273
|
+
SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD: "Voyageur {0} : n'est pas un enfant",
|
|
271
274
|
NO_MAIN_BOOKER_SELECTED: "Aucun réservant principal n'a été sélectionné",
|
|
272
275
|
MAIN_BOOKER_FIELD: "Principal réservant : {0}",
|
|
273
276
|
MAIN_BOOKER_EMAIL_IS_INVALID: "Principal réservant : e-mail invalide",
|
|
@@ -525,8 +528,11 @@ var TRAVELERS_FORM$1 = {
|
|
|
525
528
|
CHOOSE_AGENT_PLACEHOLDER: "Kies uw reisagent",
|
|
526
529
|
VALIDATION: {
|
|
527
530
|
TRAVELER_X_FIELD: "Kamer {0} - Reiziger {1}: {2}",
|
|
531
|
+
SINGLE_ROOM_TRAVELER_X_FIELD: "Reiziger {0}: {1}",
|
|
528
532
|
TRAVELER_X_IS_NO_ADULT: "Kamer {0} - Reiziger {1}: is geen volwassene",
|
|
533
|
+
SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT: "Reiziger {0}: is geen volwassene",
|
|
529
534
|
TRAVELER_X_IS_NO_CHILD: "Kamer {0} - Reiziger {1}: is geen kind",
|
|
535
|
+
SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD: "Reiziger {0}: is geen kind",
|
|
530
536
|
NO_MAIN_BOOKER_SELECTED: "Er werd geen hoofdboeker geselecteerd",
|
|
531
537
|
MAIN_BOOKER_FIELD: "Hoofdboeker: {0}",
|
|
532
538
|
MAIN_BOOKER_EMAIL_IS_INVALID: "Hoofdboeker: e-mail is ongeldig",
|
|
@@ -784,8 +790,11 @@ var TRAVELERS_FORM = {
|
|
|
784
790
|
CHOOSE_AGENT_PLACEHOLDER: "Choose your travel agent",
|
|
785
791
|
VALIDATION: {
|
|
786
792
|
TRAVELER_X_FIELD: "Room {0} - Traveler {1}: {2}",
|
|
793
|
+
SINGLE_ROOM_TRAVELER_X_FIELD: "Traveler {0}: {1}",
|
|
787
794
|
TRAVELER_X_IS_NO_ADULT: "Room {0} - Traveler {1}: is not an adult",
|
|
795
|
+
SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT: "Traveler {0}: is not an adult",
|
|
788
796
|
TRAVELER_X_IS_NO_CHILD: "Room {0} - Traveler {1}: is not a child",
|
|
797
|
+
SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD: "Traveler {0}: is not a child",
|
|
789
798
|
NO_MAIN_BOOKER_SELECTED: "No main booker has been selected",
|
|
790
799
|
MAIN_BOOKER_FIELD: "Main booker: {0}",
|
|
791
800
|
MAIN_BOOKER_EMAIL_IS_INVALID: "Main booker: email is invalid",
|
|
@@ -10012,18 +10021,27 @@ var selectLanguageCode = function (state) {
|
|
|
10012
10021
|
return state.booking.languageCode;
|
|
10013
10022
|
};
|
|
10014
10023
|
var selectCurrencyCode = function (state) { var _a, _b; return (_b = (_a = state.booking.package) === null || _a === void 0 ? void 0 : _a.currencyCode) !== null && _b !== void 0 ? _b : "EUR"; };
|
|
10015
|
-
var
|
|
10024
|
+
var selectDefaultStaticTranslations = function (state) {
|
|
10025
|
+
return getTranslations(state.booking.languageCode);
|
|
10026
|
+
};
|
|
10027
|
+
var selectLanguage = function (state) {
|
|
10028
|
+
return state.booking.languageCode;
|
|
10029
|
+
};
|
|
10030
|
+
var selectAllDynamicTranslations = function (state) {
|
|
10031
|
+
return state.booking.translations;
|
|
10032
|
+
};
|
|
10033
|
+
var selectDynamicTranslations = toolkit.createSelector([selectAllDynamicTranslations, selectLanguage], function (allDynamicTranslations, language) {
|
|
10016
10034
|
var _a, _b;
|
|
10017
|
-
|
|
10018
|
-
|
|
10019
|
-
|
|
10035
|
+
return ((_b = (_a = allDynamicTranslations === null || allDynamicTranslations === void 0 ? void 0 : allDynamicTranslations.find(function (x) { return x.language == language; })) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : {});
|
|
10036
|
+
});
|
|
10037
|
+
var selectTranslations = toolkit.createSelector([selectDefaultStaticTranslations, selectDynamicTranslations], function (defaultStaticTranslations, dynamicTranslations) {
|
|
10020
10038
|
var merged = {};
|
|
10021
|
-
for (var _i = 0,
|
|
10022
|
-
var key =
|
|
10039
|
+
for (var _i = 0, _a = Array.from(new Set(__spreadArray(__spreadArray([], Object.keys(defaultStaticTranslations), true), Object.keys(dynamicTranslations), true))); _i < _a.length; _i++) {
|
|
10040
|
+
var key = _a[_i];
|
|
10023
10041
|
merged[key] = __assign(__assign({}, (defaultStaticTranslations[key] || {})), (dynamicTranslations[key] || {}));
|
|
10024
10042
|
}
|
|
10025
10043
|
return merged;
|
|
10026
|
-
};
|
|
10044
|
+
});
|
|
10027
10045
|
var selectBookingOptions = function (state) {
|
|
10028
10046
|
return state.booking.bookingOptions;
|
|
10029
10047
|
};
|
|
@@ -10367,12 +10385,14 @@ var fetchPackageDetails = toolkit.createAsyncThunk("booking/details", function (
|
|
|
10367
10385
|
flightCode: bookingAttributes.flight.outwardCode,
|
|
10368
10386
|
startDateTime: bookingAttributes.flight.outwardDepartureDate,
|
|
10369
10387
|
endDateTime: bookingAttributes.flight.outwardArrivalDate,
|
|
10388
|
+
flightNumbers: bookingAttributes.flight.outwardNumbers,
|
|
10370
10389
|
};
|
|
10371
10390
|
if (bookingAttributes.flight.returnCode) {
|
|
10372
10391
|
returnFlight = {
|
|
10373
10392
|
flightCode: bookingAttributes.flight.returnCode,
|
|
10374
10393
|
startDateTime: bookingAttributes.flight.returnDepartureDate,
|
|
10375
10394
|
endDateTime: bookingAttributes.flight.returnArrivalDate,
|
|
10395
|
+
flightNumbers: bookingAttributes.flight.returnNumbers
|
|
10376
10396
|
};
|
|
10377
10397
|
}
|
|
10378
10398
|
}
|
|
@@ -11837,6 +11857,8 @@ var parseFlightLines = function (metaDatas) {
|
|
|
11837
11857
|
airlineDescription: parsedFlightLine.operatingAirlineDescription,
|
|
11838
11858
|
airlineNumber: parsedFlightLine.number,
|
|
11839
11859
|
travelClass: parsedFlightLine.travelClass,
|
|
11860
|
+
number: parsedFlightLine.number,
|
|
11861
|
+
airlineCode: parsedFlightLine.operatingAirlineCode || parsedFlightLine.airlineCode,
|
|
11840
11862
|
};
|
|
11841
11863
|
});
|
|
11842
11864
|
return lodash.orderBy(parsedFlightLines, "departureDate", "asc");
|
|
@@ -13619,7 +13641,10 @@ var SidebarFlight = function (_a) {
|
|
|
13619
13641
|
React__default["default"].createElement("br", null),
|
|
13620
13642
|
getDateText(firstFlight === null || firstFlight === void 0 ? void 0 : firstFlight.departureDate),
|
|
13621
13643
|
" ", firstFlight === null || firstFlight === void 0 ? void 0 :
|
|
13622
|
-
firstFlight.departureTime
|
|
13644
|
+
firstFlight.departureTime,
|
|
13645
|
+
React__default["default"].createElement("br", null), firstFlight === null || firstFlight === void 0 ? void 0 :
|
|
13646
|
+
firstFlight.airlineCode, firstFlight === null || firstFlight === void 0 ? void 0 :
|
|
13647
|
+
firstFlight.number)),
|
|
13623
13648
|
React__default["default"].createElement("div", { className: "pricing-summary__row" },
|
|
13624
13649
|
React__default["default"].createElement("div", { className: "pricing-summary__property" }, translations.SIDEBAR.FLIGHT_ARRIVAL),
|
|
13625
13650
|
React__default["default"].createElement("div", { className: "pricing-summary__value pricing-summary__value--flight" }, lastFlight === null || lastFlight === void 0 ? void 0 :
|
|
@@ -13630,7 +13655,10 @@ var SidebarFlight = function (_a) {
|
|
|
13630
13655
|
React__default["default"].createElement("br", null),
|
|
13631
13656
|
getDateText(lastFlight === null || lastFlight === void 0 ? void 0 : lastFlight.arrivalDate),
|
|
13632
13657
|
" ", lastFlight === null || lastFlight === void 0 ? void 0 :
|
|
13633
|
-
lastFlight.arrivalTime
|
|
13658
|
+
lastFlight.arrivalTime,
|
|
13659
|
+
React__default["default"].createElement("br", null), lastFlight === null || lastFlight === void 0 ? void 0 :
|
|
13660
|
+
lastFlight.airlineCode, lastFlight === null || lastFlight === void 0 ? void 0 :
|
|
13661
|
+
lastFlight.number)),
|
|
13634
13662
|
React__default["default"].createElement("div", { className: "pricing-summary__row" },
|
|
13635
13663
|
React__default["default"].createElement("div", { className: "pricing-summary__property" }, flightMetaData.flightLines.length > 1 && (React__default["default"].createElement("i", null,
|
|
13636
13664
|
flightMetaData.flightLines.length - 1,
|
|
@@ -13873,10 +13901,10 @@ var SummaryBookingOptionUnit = function (_a) {
|
|
|
13873
13901
|
|
|
13874
13902
|
var SummaryFlight = function (_a) {
|
|
13875
13903
|
var _b;
|
|
13876
|
-
var
|
|
13904
|
+
var flightMetaData = _a.flightMetaData, header = _a.header;
|
|
13877
13905
|
var translations = reactRedux.useSelector(selectTranslations);
|
|
13878
13906
|
return (React__default["default"].createElement("li", null,
|
|
13879
|
-
React__default["default"].createElement("h6", null, header), (_b = parseFlightLines(
|
|
13907
|
+
React__default["default"].createElement("h6", null, header), (_b = parseFlightLines(flightMetaData)) === null || _b === void 0 ? void 0 :
|
|
13880
13908
|
_b.map(function (flightLine) { return (React__default["default"].createElement("p", { key: flightLine.departureAirportIata },
|
|
13881
13909
|
flightLine.departureAirportDescription,
|
|
13882
13910
|
" (",
|
|
@@ -13889,6 +13917,10 @@ var SummaryFlight = function (_a) {
|
|
|
13889
13917
|
") ",
|
|
13890
13918
|
" - ",
|
|
13891
13919
|
flightLine.travelClass,
|
|
13920
|
+
" ",
|
|
13921
|
+
" - ",
|
|
13922
|
+
flightLine.airlineCode,
|
|
13923
|
+
flightLine.number,
|
|
13892
13924
|
React__default["default"].createElement("br", null),
|
|
13893
13925
|
getDateText(flightLine.departureDate),
|
|
13894
13926
|
" ",
|
|
@@ -13900,7 +13932,7 @@ var SummaryFlight = function (_a) {
|
|
|
13900
13932
|
flightLine.arrivalTime,
|
|
13901
13933
|
React__default["default"].createElement("br", null),
|
|
13902
13934
|
flightLine.airlineDescription)); }),
|
|
13903
|
-
|
|
13935
|
+
flightMetaData.luggageIncluded && (React__default["default"].createElement("p", null, translations.SIDEBAR.LUGGAGE_INCLUDED))));
|
|
13904
13936
|
};
|
|
13905
13937
|
|
|
13906
13938
|
var SummaryPerBookingOptionGroup = function (_a) {
|
|
@@ -13937,13 +13969,13 @@ var SummaryPerBookingOptionGroup = function (_a) {
|
|
|
13937
13969
|
};
|
|
13938
13970
|
|
|
13939
13971
|
var Summary = function () {
|
|
13940
|
-
var _a, _b;
|
|
13972
|
+
var _a, _b, _c, _d, _e, _f;
|
|
13941
13973
|
var dispatch = useAppDispatch();
|
|
13942
13974
|
var settings = React.useContext(SettingsContext);
|
|
13943
|
-
var
|
|
13944
|
-
var
|
|
13945
|
-
var
|
|
13946
|
-
var
|
|
13975
|
+
var _g = React.useState(false), isSubmitting = _g[0], setIsSubmitting = _g[1];
|
|
13976
|
+
var _h = React.useState((_a = settings.summary) === null || _a === void 0 ? void 0 : _a.checkboxes), checkboxes = _h[0], setCheckboxes = _h[1];
|
|
13977
|
+
var _j = React.useState(""), remarks = _j[0], setRemarks = _j[1];
|
|
13978
|
+
var _k = React.useState({}), voucher = _k[0], setVoucher = _k[1];
|
|
13947
13979
|
var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
|
|
13948
13980
|
var travelerFormValues = reactRedux.useSelector(selectTravelersFormValues);
|
|
13949
13981
|
var packageDetails = reactRedux.useSelector(selectPackageDetails);
|
|
@@ -13952,6 +13984,10 @@ var Summary = function () {
|
|
|
13952
13984
|
var languageCode = reactRedux.useSelector(selectLanguageCode);
|
|
13953
13985
|
var officeId = reactRedux.useSelector(selectOfficeId);
|
|
13954
13986
|
var agentId = reactRedux.useSelector(selectAgentAdressId);
|
|
13987
|
+
var departureFlight = reactRedux.useSelector(selectDepartureFlight);
|
|
13988
|
+
var departureFlightMetaData = (_b = departureFlight === null || departureFlight === void 0 ? void 0 : departureFlight.flightMetaData) !== null && _b !== void 0 ? _b : (_c = reactRedux.useSelector(selectRoomOptionDepartureFlightsMetaData)) === null || _c === void 0 ? void 0 : _c[0];
|
|
13989
|
+
var returnFlight = reactRedux.useSelector(selectReturnFlight);
|
|
13990
|
+
var returnFlightMetaData = (_d = returnFlight === null || returnFlight === void 0 ? void 0 : returnFlight.flightMetaData) !== null && _d !== void 0 ? _d : (_e = reactRedux.useSelector(selectRoomOptionReturnFlightsMetaData)) === null || _e === void 0 ? void 0 : _e[0];
|
|
13955
13991
|
if (!travelerFormValues) {
|
|
13956
13992
|
if (settings.skipRouter) {
|
|
13957
13993
|
dispatch(setCurrentStep(TRAVELERS_FORM_STEP));
|
|
@@ -14152,13 +14188,14 @@ var Summary = function () {
|
|
|
14152
14188
|
translations.SUMMARY.MAIN_BOOKER,
|
|
14153
14189
|
")"))),
|
|
14154
14190
|
React__default["default"].createElement("li", { className: "list__item" }, traveler.birthDate.split("-").reverse().join("/")),
|
|
14155
|
-
isMainBooker && (
|
|
14156
|
-
|
|
14157
|
-
travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.
|
|
14158
|
-
|
|
14159
|
-
|
|
14160
|
-
|
|
14161
|
-
React__default["default"].createElement("li", { className: "list__item" }, travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.
|
|
14191
|
+
isMainBooker && (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14192
|
+
(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.street) && (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14193
|
+
React__default["default"].createElement("li", { className: "list__item" }, "".concat(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.street, " ").concat(lodash.compact([
|
|
14194
|
+
travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.houseNumber,
|
|
14195
|
+
travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.box,
|
|
14196
|
+
]).join(" "), ", ").concat(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.zipCode, " ").concat(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.place)))),
|
|
14197
|
+
(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.phone) && (React__default["default"].createElement("li", { className: "list__item" }, travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.phone)),
|
|
14198
|
+
(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.email) && (React__default["default"].createElement("li", { className: "list__item" }, travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.email)))))));
|
|
14162
14199
|
}))); })),
|
|
14163
14200
|
React__default["default"].createElement("div", { className: "form__region" },
|
|
14164
14201
|
React__default["default"].createElement("div", { className: "form__row" },
|
|
@@ -14167,41 +14204,45 @@ var Summary = function () {
|
|
|
14167
14204
|
React__default["default"].createElement("h5", { className: "form__region-heading" }, translations.SUMMARY.OPTIONS)))),
|
|
14168
14205
|
React__default["default"].createElement("div", { className: "form__row" },
|
|
14169
14206
|
React__default["default"].createElement("div", { className: "form__group" },
|
|
14170
|
-
React__default["default"].createElement("ul", { className: "list list--booking-summary" }, activeOption === null || activeOption === void 0 ? void 0 : activeOption.
|
|
14171
|
-
React__default["default"].createElement("
|
|
14172
|
-
React__default["default"].createElement(
|
|
14173
|
-
React__default["default"].createElement(
|
|
14174
|
-
|
|
14175
|
-
|
|
14176
|
-
|
|
14177
|
-
|
|
14178
|
-
|
|
14179
|
-
|
|
14180
|
-
|
|
14181
|
-
|
|
14182
|
-
|
|
14183
|
-
|
|
14184
|
-
|
|
14185
|
-
getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.
|
|
14186
|
-
|
|
14187
|
-
|
|
14188
|
-
|
|
14189
|
-
|
|
14190
|
-
|
|
14191
|
-
|
|
14192
|
-
|
|
14193
|
-
|
|
14194
|
-
|
|
14195
|
-
|
|
14196
|
-
|
|
14197
|
-
|
|
14198
|
-
|
|
14199
|
-
|
|
14200
|
-
.map(function (
|
|
14201
|
-
|
|
14202
|
-
|
|
14203
|
-
|
|
14204
|
-
|
|
14207
|
+
React__default["default"].createElement("ul", { className: "list list--booking-summary" }, (activeOption === null || activeOption === void 0 ? void 0 : activeOption.serviceType) == build.ServiceType.flight && departureFlightMetaData && returnFlightMetaData
|
|
14208
|
+
? React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14209
|
+
React__default["default"].createElement(SummaryFlight, { flightMetaData: departureFlightMetaData, header: translations.SIDEBAR.DEPARTURE_FLIGHT }),
|
|
14210
|
+
React__default["default"].createElement(SummaryFlight, { flightMetaData: returnFlightMetaData, header: translations.SIDEBAR.ARRIVAL_FLIGHT }))
|
|
14211
|
+
: React__default["default"].createElement(React__default["default"].Fragment, null, activeOption === null || activeOption === void 0 ? void 0 : activeOption.rooms.flatMap(function (r) { return r.options; }).filter(function (x) { return x.isSelected; }).map(function (roomOption, roomOptionIndex) { return (React__default["default"].createElement(React__default["default"].Fragment, { key: roomOptionIndex },
|
|
14212
|
+
React__default["default"].createElement("li", null,
|
|
14213
|
+
React__default["default"].createElement("h6", null, roomOption === null || roomOption === void 0 ? void 0 : roomOption.productName),
|
|
14214
|
+
React__default["default"].createElement("ul", null,
|
|
14215
|
+
React__default["default"].createElement("li", { className: "list__item" }, roomOption === null || roomOption === void 0 ? void 0 :
|
|
14216
|
+
roomOption.accommodationName,
|
|
14217
|
+
!lodash.isNil(roomOption === null || roomOption === void 0 ? void 0 : roomOption.regimeName) && ", ", roomOption === null || roomOption === void 0 ? void 0 :
|
|
14218
|
+
roomOption.regimeName)),
|
|
14219
|
+
React__default["default"].createElement("p", null,
|
|
14220
|
+
"(",
|
|
14221
|
+
(roomOption === null || roomOption === void 0 ? void 0 : roomOption.from) === (roomOption === null || roomOption === void 0 ? void 0 : roomOption.to)
|
|
14222
|
+
? getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.from)
|
|
14223
|
+
: React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14224
|
+
getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.from),
|
|
14225
|
+
" > ",
|
|
14226
|
+
getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.to)),
|
|
14227
|
+
")")),
|
|
14228
|
+
!lodash.isEmpty(activeOption === null || activeOption === void 0 ? void 0 : activeOption.groups) &&
|
|
14229
|
+
(activeOption === null || activeOption === void 0 ? void 0 : activeOption.groups.map(function (x, i) {
|
|
14230
|
+
if (!x.options.some(function (y) { return y.isSelected; }))
|
|
14231
|
+
return;
|
|
14232
|
+
return React__default["default"].createElement(SummaryPerBookingOptionGroup, { key: i, group: x });
|
|
14233
|
+
})),
|
|
14234
|
+
!lodash.isEmpty(activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionUnits) &&
|
|
14235
|
+
(activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionUnits.map(function (x, i) { return (React__default["default"].createElement(SummaryBookingOptionUnit, { key: i, unit: x })); })),
|
|
14236
|
+
!lodash.isEmpty(activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionPax) &&
|
|
14237
|
+
(activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionPax.map(function (x, i) { return (React__default["default"].createElement(SummaryBookingOptionPax, { key: i, pax: x })); })),
|
|
14238
|
+
(packageDetails === null || packageDetails === void 0 ? void 0 : packageDetails.outwardFlights) &&
|
|
14239
|
+
packageDetails.outwardFlights
|
|
14240
|
+
.filter(function (x) { return x.isSelected; })
|
|
14241
|
+
.map(function (flight, i) { return (React__default["default"].createElement(SummaryFlight, { key: i, flightMetaData: flight.flightMetaData, header: translations.SIDEBAR.DEPARTURE_FLIGHT })); }),
|
|
14242
|
+
(packageDetails === null || packageDetails === void 0 ? void 0 : packageDetails.returnFlights) &&
|
|
14243
|
+
packageDetails.returnFlights
|
|
14244
|
+
.filter(function (x) { return x.isSelected; })
|
|
14245
|
+
.map(function (flight, i) { return (React__default["default"].createElement(SummaryFlight, { key: i, flightMetaData: flight.flightMetaData, header: translations.SIDEBAR.ARRIVAL_FLIGHT })); }))); })))))),
|
|
14205
14246
|
settings.enableVoucher && (React__default["default"].createElement("div", { className: "form__region" },
|
|
14206
14247
|
React__default["default"].createElement("div", { className: "form__row" },
|
|
14207
14248
|
React__default["default"].createElement("div", { className: "form__group" },
|
|
@@ -14222,7 +14263,7 @@ var Summary = function () {
|
|
|
14222
14263
|
!voucher.isValid && voucher.isValidated && (React__default["default"].createElement("div", { className: "info-message--error" }, translations.SUMMARY.VOUCHER_INVALID)))),
|
|
14223
14264
|
React__default["default"].createElement("div", { className: "form__row" },
|
|
14224
14265
|
React__default["default"].createElement("ul", { className: "info-message__voucher" }, !lodash.isEmpty(bookRequest === null || bookRequest === void 0 ? void 0 : bookRequest.payload.voucherCodes) &&
|
|
14225
|
-
((
|
|
14266
|
+
((_f = bookRequest === null || bookRequest === void 0 ? void 0 : bookRequest.payload.voucherCodes) === null || _f === void 0 ? void 0 : _f.map(function (y, i) { return (React__default["default"].createElement("li", { key: i },
|
|
14226
14267
|
React__default["default"].createElement("div", { className: "info-message__voucher__list" },
|
|
14227
14268
|
y,
|
|
14228
14269
|
" ",
|
|
@@ -14375,80 +14416,69 @@ function getAge(birthDateText, startDateText) {
|
|
|
14375
14416
|
}
|
|
14376
14417
|
return age;
|
|
14377
14418
|
}
|
|
14378
|
-
var validateForm = function (values, agentRequired, bookingType, translations) {
|
|
14419
|
+
var validateForm = function (values, agentRequired, bookingType, translations, formFields, mainBookerFormFields) {
|
|
14379
14420
|
var errors = {};
|
|
14421
|
+
var isFormFieldPresent = function (type) {
|
|
14422
|
+
var _a;
|
|
14423
|
+
return (_a = formFields === null || formFields === void 0 ? void 0 : formFields.some(function (f) { return f.type === type; })) !== null && _a !== void 0 ? _a : true;
|
|
14424
|
+
};
|
|
14425
|
+
var isMainBookerFormFieldPresent = function (type) {
|
|
14426
|
+
var _a;
|
|
14427
|
+
return (_a = mainBookerFormFields === null || mainBookerFormFields === void 0 ? void 0 : mainBookerFormFields.some(function (f) { return f.type === type; })) !== null && _a !== void 0 ? _a : true;
|
|
14428
|
+
};
|
|
14429
|
+
var formatTravelerField = function (room, pax, field) {
|
|
14430
|
+
return values.rooms.length > 1 ? format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [room, pax, field]) : format(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD, [pax, field]);
|
|
14431
|
+
};
|
|
14432
|
+
var formatTravelerIsNoAdult = function (room, pax) {
|
|
14433
|
+
return values.rooms.length > 1 ? format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_ADULT, [room, pax]) : format(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT, [pax]);
|
|
14434
|
+
};
|
|
14435
|
+
var formatTravelerIsNoChild = function (room, pax) {
|
|
14436
|
+
return values.rooms.length > 1 ? format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_CHILD, [room, pax]) : format(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD, [pax]);
|
|
14437
|
+
};
|
|
14380
14438
|
values.rooms.forEach(function (r, rIndex) {
|
|
14381
14439
|
return r.adults.forEach(function (adult, index) {
|
|
14382
|
-
if (lodash.isEmpty(adult.gender)) {
|
|
14383
|
-
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].gender"),
|
|
14384
|
-
rIndex + 1,
|
|
14385
|
-
index + 1,
|
|
14386
|
-
translations.TRAVELERS_FORM.GENDER,
|
|
14387
|
-
]));
|
|
14388
|
-
}
|
|
14389
|
-
if (lodash.isEmpty(adult.firstName)) {
|
|
14390
|
-
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].firstName"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
|
|
14391
|
-
rIndex + 1,
|
|
14392
|
-
index + 1,
|
|
14393
|
-
translations.TRAVELERS_FORM.FIRST_NAME,
|
|
14394
|
-
]));
|
|
14440
|
+
if (lodash.isEmpty(adult.gender) && isFormFieldPresent("gender")) {
|
|
14441
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].gender"), formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.GENDER));
|
|
14395
14442
|
}
|
|
14396
|
-
if (lodash.isEmpty(adult.
|
|
14397
|
-
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].
|
|
14398
|
-
rIndex + 1,
|
|
14399
|
-
index + 1,
|
|
14400
|
-
translations.TRAVELERS_FORM.LAST_NAME,
|
|
14401
|
-
]));
|
|
14443
|
+
if (lodash.isEmpty(adult.firstName) && isFormFieldPresent("firstName")) {
|
|
14444
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].firstName"), formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
14402
14445
|
}
|
|
14403
|
-
if (lodash.isEmpty(adult.
|
|
14404
|
-
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].
|
|
14405
|
-
rIndex + 1,
|
|
14406
|
-
index + 1,
|
|
14407
|
-
translations.TRAVELERS_FORM.BIRTHDATE,
|
|
14408
|
-
]));
|
|
14446
|
+
if (lodash.isEmpty(adult.lastName) && isFormFieldPresent("lastName")) {
|
|
14447
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].lastName"), formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
14409
14448
|
}
|
|
14410
|
-
|
|
14411
|
-
|
|
14412
|
-
|
|
14413
|
-
|
|
14449
|
+
if (isFormFieldPresent("birthDate")) {
|
|
14450
|
+
if (lodash.isEmpty(adult.birthDate)) {
|
|
14451
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].birthDate"), formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.BIRTHDATE));
|
|
14452
|
+
}
|
|
14453
|
+
else if (values.startDate) {
|
|
14454
|
+
var age = getAge(adult.birthDate, values.startDate);
|
|
14455
|
+
if (age <= CHILD_MAX_AGE) {
|
|
14456
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].birthDate"), formatTravelerIsNoAdult(rIndex + 1, index + 1));
|
|
14457
|
+
}
|
|
14414
14458
|
}
|
|
14415
14459
|
}
|
|
14416
14460
|
});
|
|
14417
14461
|
});
|
|
14418
14462
|
values.rooms.forEach(function (r, rIndex) {
|
|
14419
14463
|
return r.children.forEach(function (child, index) {
|
|
14420
|
-
if (lodash.isEmpty(child.gender)) {
|
|
14421
|
-
lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].gender"),
|
|
14422
|
-
rIndex + 1,
|
|
14423
|
-
r.adults.length + index + 1,
|
|
14424
|
-
translations.TRAVELERS_FORM.GENDER,
|
|
14425
|
-
]));
|
|
14426
|
-
}
|
|
14427
|
-
if (lodash.isEmpty(child.firstName)) {
|
|
14428
|
-
lodash.set(errors, "children[".concat(index, "].firstName"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
|
|
14429
|
-
rIndex + 1,
|
|
14430
|
-
r.adults.length + index + 1,
|
|
14431
|
-
translations.TRAVELERS_FORM.FIRST_NAME,
|
|
14432
|
-
]));
|
|
14464
|
+
if (lodash.isEmpty(child.gender) && isFormFieldPresent("gender")) {
|
|
14465
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].gender"), formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.GENDER));
|
|
14433
14466
|
}
|
|
14434
|
-
if (lodash.isEmpty(child.
|
|
14435
|
-
lodash.set(errors, "
|
|
14436
|
-
rIndex + 1,
|
|
14437
|
-
r.adults.length + index + 1,
|
|
14438
|
-
translations.TRAVELERS_FORM.LAST_NAME,
|
|
14439
|
-
]));
|
|
14467
|
+
if (lodash.isEmpty(child.firstName) && isFormFieldPresent("firstName")) {
|
|
14468
|
+
lodash.set(errors, "children[".concat(index, "].firstName"), formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME));
|
|
14440
14469
|
}
|
|
14441
|
-
if (lodash.isEmpty(child.
|
|
14442
|
-
lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].
|
|
14443
|
-
rIndex + 1,
|
|
14444
|
-
r.adults.length + index + 1,
|
|
14445
|
-
translations.TRAVELERS_FORM.BIRTHDATE,
|
|
14446
|
-
]));
|
|
14470
|
+
if (lodash.isEmpty(child.lastName) && isFormFieldPresent("lastName")) {
|
|
14471
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].lastName"), formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME));
|
|
14447
14472
|
}
|
|
14448
|
-
|
|
14449
|
-
|
|
14450
|
-
|
|
14451
|
-
|
|
14473
|
+
if (isFormFieldPresent("birthDate")) {
|
|
14474
|
+
if (lodash.isEmpty(child.birthDate)) {
|
|
14475
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].birthDate"), formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.BIRTHDATE));
|
|
14476
|
+
}
|
|
14477
|
+
else if (values.startDate) {
|
|
14478
|
+
var age = getAge(child.birthDate, values.startDate);
|
|
14479
|
+
if (age > CHILD_MAX_AGE) {
|
|
14480
|
+
lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].birthDate"), formatTravelerIsNoChild(rIndex + 1, r.adults.length + index + 1));
|
|
14481
|
+
}
|
|
14452
14482
|
}
|
|
14453
14483
|
}
|
|
14454
14484
|
});
|
|
@@ -14457,37 +14487,39 @@ var validateForm = function (values, agentRequired, bookingType, translations) {
|
|
|
14457
14487
|
errors.mainBookerId =
|
|
14458
14488
|
translations.TRAVELERS_FORM.VALIDATION.NO_MAIN_BOOKER_SELECTED;
|
|
14459
14489
|
}
|
|
14460
|
-
if (bookingType != "b2b") {
|
|
14461
|
-
if (lodash.isEmpty(values.street)) {
|
|
14490
|
+
if (bookingType != "b2b" || (mainBookerFormFields === null || mainBookerFormFields === void 0 ? void 0 : mainBookerFormFields.length)) {
|
|
14491
|
+
if (lodash.isEmpty(values.street) && isMainBookerFormFieldPresent("street")) {
|
|
14462
14492
|
errors.street = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.STREET]);
|
|
14463
14493
|
}
|
|
14464
|
-
if (lodash.isEmpty(values.houseNumber)) {
|
|
14494
|
+
if (lodash.isEmpty(values.houseNumber) && isMainBookerFormFieldPresent("houseNumber")) {
|
|
14465
14495
|
errors.houseNumber = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.HOUSE_NUMBER]);
|
|
14466
14496
|
}
|
|
14467
|
-
if (lodash.isEmpty(values.zipCode)) {
|
|
14497
|
+
if (lodash.isEmpty(values.zipCode) && isMainBookerFormFieldPresent("zipCode")) {
|
|
14468
14498
|
errors.zipCode = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.ZIPCODE]);
|
|
14469
14499
|
}
|
|
14470
|
-
if (lodash.isEmpty(values.place)) {
|
|
14500
|
+
if (lodash.isEmpty(values.place) && isMainBookerFormFieldPresent("place")) {
|
|
14471
14501
|
errors.place = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.CITY]);
|
|
14472
14502
|
}
|
|
14473
|
-
if (
|
|
14474
|
-
|
|
14475
|
-
|
|
14476
|
-
|
|
14477
|
-
|
|
14478
|
-
|
|
14479
|
-
|
|
14480
|
-
|
|
14481
|
-
|
|
14482
|
-
|
|
14483
|
-
|
|
14484
|
-
|
|
14485
|
-
|
|
14503
|
+
if (isMainBookerFormFieldPresent("email")) {
|
|
14504
|
+
if (lodash.isEmpty(values.email)) {
|
|
14505
|
+
errors.email = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.EMAIL]);
|
|
14506
|
+
}
|
|
14507
|
+
else if (isValidEmail(values.email)) {
|
|
14508
|
+
errors.email =
|
|
14509
|
+
translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_IS_INVALID;
|
|
14510
|
+
}
|
|
14511
|
+
if (lodash.isEmpty(values.emailConfirmation)) {
|
|
14512
|
+
errors.emailConfirmation = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.REPEAT_EMAIL]);
|
|
14513
|
+
}
|
|
14514
|
+
else if (values.emailConfirmation !== values.email) {
|
|
14515
|
+
errors.emailConfirmation =
|
|
14516
|
+
translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_DOES_NOT_MATCH;
|
|
14517
|
+
}
|
|
14486
14518
|
}
|
|
14487
|
-
if (lodash.isEmpty(values.country)) {
|
|
14519
|
+
if (lodash.isEmpty(values.country) && isMainBookerFormFieldPresent("country")) {
|
|
14488
14520
|
errors.country = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.COUNTRY]);
|
|
14489
14521
|
}
|
|
14490
|
-
if (lodash.isEmpty(values.phone)) {
|
|
14522
|
+
if (lodash.isEmpty(values.phone) && isMainBookerFormFieldPresent("phone")) {
|
|
14491
14523
|
errors.phone = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
|
|
14492
14524
|
}
|
|
14493
14525
|
}
|
|
@@ -14503,6 +14535,116 @@ var validateForm = function (values, agentRequired, bookingType, translations) {
|
|
|
14503
14535
|
return errors;
|
|
14504
14536
|
};
|
|
14505
14537
|
|
|
14538
|
+
var hasVisibleError = function (formik, key) {
|
|
14539
|
+
return lodash.get(formik.errors, key) && lodash.get(formik.touched, key);
|
|
14540
|
+
};
|
|
14541
|
+
|
|
14542
|
+
var GenderControl = function (_a) {
|
|
14543
|
+
var translations = _a.translations, value = _a.value, formik = _a.formik, name = _a.name;
|
|
14544
|
+
return (React__default["default"].createElement("div", { className: buildClassName([
|
|
14545
|
+
"form__group",
|
|
14546
|
+
hasVisibleError(formik, name) && "form__group--error",
|
|
14547
|
+
]) },
|
|
14548
|
+
React__default["default"].createElement("label", { className: "form__label" },
|
|
14549
|
+
translations.TRAVELERS_FORM.GENDER,
|
|
14550
|
+
" *"),
|
|
14551
|
+
React__default["default"].createElement("div", { className: "radiobutton-group" },
|
|
14552
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14553
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14554
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: name, onChange: formik.handleChange, onBlur: formik.handleBlur, value: "m", checked: value.gender === "m" }),
|
|
14555
|
+
translations.TRAVELERS_FORM.MALE)),
|
|
14556
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14557
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14558
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: name, onChange: formik.handleChange, onBlur: formik.handleBlur, value: "f", checked: value.gender === "f" }),
|
|
14559
|
+
translations.TRAVELERS_FORM.FEMALE)),
|
|
14560
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14561
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14562
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: name, onChange: formik.handleChange, onBlur: formik.handleBlur, value: "x", checked: value.gender === "x" }),
|
|
14563
|
+
translations.TRAVELERS_FORM.OTHER)))));
|
|
14564
|
+
};
|
|
14565
|
+
|
|
14566
|
+
var normalize = function (v) { return (v == null ? "" : String(v)); };
|
|
14567
|
+
var parseCombined = function (raw, countries) {
|
|
14568
|
+
var value = normalize(raw).trim();
|
|
14569
|
+
if (!value)
|
|
14570
|
+
return { prefix: "", number: "" };
|
|
14571
|
+
// Try to match a known prefix at the start. Prefer longest match.
|
|
14572
|
+
var sorted = __spreadArray([], countries, true).sort(function (a, b) { return b.phonePrefix.length - a.phonePrefix.length; });
|
|
14573
|
+
var hit = sorted.find(function (c) { return value.startsWith(c.phonePrefix); });
|
|
14574
|
+
if (hit) {
|
|
14575
|
+
var rest = value
|
|
14576
|
+
.slice(hit.phonePrefix.length)
|
|
14577
|
+
.trim()
|
|
14578
|
+
.replace(/^[-\s]+/, "");
|
|
14579
|
+
return { prefix: hit.phonePrefix, number: rest };
|
|
14580
|
+
}
|
|
14581
|
+
// Fallback: split on first space if it looks like a +prefix number
|
|
14582
|
+
var m = value.match(/^(\+\d{1,4})[\s-]*(.*)$/);
|
|
14583
|
+
if (m)
|
|
14584
|
+
return { prefix: m[1], number: m[2] };
|
|
14585
|
+
return { prefix: "", number: value };
|
|
14586
|
+
};
|
|
14587
|
+
var PhoneInput = function (_a) {
|
|
14588
|
+
var name = _a.name, required = _a.required, value = _a.value, label = _a.label, placeholder = _a.placeholder, extraClassName = _a.extraClassName, hasError = _a.hasError, countries = _a.countries, countryIso2 = _a.countryIso2, onChange = _a.onChange, onBlur = _a.onBlur;
|
|
14589
|
+
// Derive initial state from `value`
|
|
14590
|
+
var initialCountry = countries.find(function (c) { return c.iso2 === countryIso2; });
|
|
14591
|
+
var initial = React.useMemo(function () { return parseCombined(normalize(value), countries); }, [value, countries]);
|
|
14592
|
+
var _b = React.useState(initial.prefix), prefix = _b[0], setPrefix = _b[1];
|
|
14593
|
+
var _c = React.useState(initial.number), number = _c[0], setNumber = _c[1];
|
|
14594
|
+
// Keep state in sync if the parent changes `value`
|
|
14595
|
+
React.useEffect(function () {
|
|
14596
|
+
var parsed = !prefix && !number && initialCountry
|
|
14597
|
+
? { prefix: initialCountry.phonePrefix, number: "" }
|
|
14598
|
+
: parseCombined(normalize(value), countries);
|
|
14599
|
+
if (parsed.prefix)
|
|
14600
|
+
setPrefix(parsed.prefix);
|
|
14601
|
+
if (parsed.number)
|
|
14602
|
+
setNumber(parsed.number);
|
|
14603
|
+
}, [value, countries, countryIso2]);
|
|
14604
|
+
var emitCombinedChange = function (e, nextPrefix, nextNumber) {
|
|
14605
|
+
// Combine with a space, unless the number already starts with a dash or space
|
|
14606
|
+
var combined = nextPrefix && nextNumber
|
|
14607
|
+
? lodash.compact([nextPrefix, nextNumber]).join(" ")
|
|
14608
|
+
: null;
|
|
14609
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(__assign(__assign({}, e), { type: "change", target: { name: name, value: combined }, currentTarget: { name: name, value: combined } }));
|
|
14610
|
+
};
|
|
14611
|
+
var handleCountryBlur = function (e) {
|
|
14612
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
|
|
14613
|
+
};
|
|
14614
|
+
var onCountryChange = function (e) {
|
|
14615
|
+
var next = e.target.value;
|
|
14616
|
+
setPrefix(next);
|
|
14617
|
+
emitCombinedChange(e, next, number);
|
|
14618
|
+
};
|
|
14619
|
+
var onPhoneChange = function (e) {
|
|
14620
|
+
var cleaned = e.target.value.replace(/[^\d\s-]/g, "");
|
|
14621
|
+
setNumber(cleaned);
|
|
14622
|
+
emitCombinedChange(e, prefix, cleaned);
|
|
14623
|
+
};
|
|
14624
|
+
var handleNumberBlur = function (e) {
|
|
14625
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
|
|
14626
|
+
};
|
|
14627
|
+
// Ensure the select shows a reasonable default when prefix is empty
|
|
14628
|
+
var selectValue = prefix || "";
|
|
14629
|
+
return (React__default["default"].createElement("label", { className: buildClassName([
|
|
14630
|
+
"form__group",
|
|
14631
|
+
extraClassName,
|
|
14632
|
+
hasError && "form__group--error",
|
|
14633
|
+
]) },
|
|
14634
|
+
label && (React__default["default"].createElement("span", { className: "form__label" }, lodash.compact([label, required && "*"]).join(" "))),
|
|
14635
|
+
React__default["default"].createElement("div", { className: "phone-input" },
|
|
14636
|
+
React__default["default"].createElement("div", { className: "dropdown" },
|
|
14637
|
+
React__default["default"].createElement("select", { "aria-label": label ? "".concat(label, " \u2013 country code") : "Country calling code", name: "".concat(name, "__country"), value: selectValue, onBlur: handleCountryBlur, onChange: onCountryChange },
|
|
14638
|
+
React__default["default"].createElement("option", { value: "", disabled: true }), countries === null || countries === void 0 ? void 0 :
|
|
14639
|
+
countries.map(function (option) { return (React__default["default"].createElement("option", { key: option.iso2, value: option.phonePrefix },
|
|
14640
|
+
option.name,
|
|
14641
|
+
" (",
|
|
14642
|
+
option.phonePrefix,
|
|
14643
|
+
")")); }))),
|
|
14644
|
+
React__default["default"].createElement("input", { "aria-label": label ? "".concat(label, " \u2013 number") : "Phone number", name: "".concat(name, "__number"), type: "tel", inputMode: "tel", required: required, className: "form__input", placeholder: placeholder, onChange: onPhoneChange, onBlur: handleNumberBlur, value: number }),
|
|
14645
|
+
React__default["default"].createElement("input", { type: "hidden", name: name, value: lodash.compact([prefix, number]).join(" ") }))));
|
|
14646
|
+
};
|
|
14647
|
+
|
|
14506
14648
|
function createTraveler(traveler, followNumber, personTranslation, isCompact) {
|
|
14507
14649
|
if (isCompact) {
|
|
14508
14650
|
return { id: traveler.id, firstName: personTranslation, lastName: "".concat(followNumber.number++), birthDate: "", gender: "", age: traveler.age || 30 };
|
|
@@ -14541,7 +14683,7 @@ function createInitialValues(formRooms, startDate, agentAdressId, personTranslat
|
|
|
14541
14683
|
return initialValues;
|
|
14542
14684
|
}
|
|
14543
14685
|
var TravelersForm = function () {
|
|
14544
|
-
var _a, _b, _c, _d;
|
|
14686
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
14545
14687
|
var dispatch = useAppDispatch();
|
|
14546
14688
|
var settings = React.useContext(SettingsContext);
|
|
14547
14689
|
var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
|
|
@@ -14553,14 +14695,14 @@ var TravelersForm = function () {
|
|
|
14553
14695
|
var translations = reactRedux.useSelector(selectTranslations);
|
|
14554
14696
|
var useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
|
|
14555
14697
|
var initialValues = (_a = reactRedux.useSelector(selectTravelersFormValues)) !== null && _a !== void 0 ? _a : createInitialValues(formRooms, startDate, agentAdressId, translations.TRAVELERS_FORM.PERSON, useCompactForm);
|
|
14556
|
-
var
|
|
14557
|
-
var
|
|
14698
|
+
var _j = React.useState((_b = settings.agentRequired) !== null && _b !== void 0 ? _b : false), showAgents = _j[0], setShowAgents = _j[1];
|
|
14699
|
+
var _k = React.useState(!settings.agentAdressId && !settings.hideAgentSelection), showAgentSelection = _k[0], setShowAgentSelection = _k[1];
|
|
14558
14700
|
var typeaheadAgents = (_c = lodash.sortBy(agents === null || agents === void 0 ? void 0 : agents.map(function (x) { return ({
|
|
14559
14701
|
key: "".concat(x.id),
|
|
14560
14702
|
value: "".concat(x.name, " (").concat(x.postalCode, " ").concat(x.location, ")"),
|
|
14561
14703
|
text: "".concat(x.name, " (").concat(x.postalCode, " ").concat(x.location, ")"),
|
|
14562
14704
|
}); }), "value")) !== null && _c !== void 0 ? _c : [];
|
|
14563
|
-
var
|
|
14705
|
+
var _l = React.useState(typeaheadAgents), filteredAgents = _l[0], setFilteredAgents = _l[1];
|
|
14564
14706
|
var formik$1 = useCompactForm
|
|
14565
14707
|
? formik.useFormik({
|
|
14566
14708
|
initialValues: initialValues,
|
|
@@ -14579,7 +14721,7 @@ var TravelersForm = function () {
|
|
|
14579
14721
|
: formik.useFormik({
|
|
14580
14722
|
initialValues: initialValues,
|
|
14581
14723
|
validate: function (values) {
|
|
14582
|
-
return validateForm(values, settings.agentRequired, bookingType, translations);
|
|
14724
|
+
return validateForm(values, settings.agentRequired, bookingType, translations, settings.travellers.formFields, settings.travellers.mainBookerFormFields);
|
|
14583
14725
|
},
|
|
14584
14726
|
onSubmit: function (values) {
|
|
14585
14727
|
dispatch(setFormValues(values));
|
|
@@ -14651,6 +14793,34 @@ var TravelersForm = function () {
|
|
|
14651
14793
|
var hasVisibleError = function (key) {
|
|
14652
14794
|
return lodash.get(formik$1.errors, key) && lodash.get(formik$1.touched, key);
|
|
14653
14795
|
};
|
|
14796
|
+
var getControl = function (type, value, name) {
|
|
14797
|
+
var _a, _b, _c, _d, _e;
|
|
14798
|
+
switch (type) {
|
|
14799
|
+
case "gender": {
|
|
14800
|
+
return React__default["default"].createElement(GenderControl, { translations: translations, value: value, formik: formik$1, name: name });
|
|
14801
|
+
}
|
|
14802
|
+
case "firstName": {
|
|
14803
|
+
return (React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError(name), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.FIRST_NAME, required: true, name: name, onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: value.firstName }));
|
|
14804
|
+
}
|
|
14805
|
+
case "lastName": {
|
|
14806
|
+
return (React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError(name), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.LAST_NAME, required: true, name: name, onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: value.lastName }));
|
|
14807
|
+
}
|
|
14808
|
+
case "birthDate": {
|
|
14809
|
+
return (React__default["default"].createElement(LabeledInput, { type: "date", hasError: hasVisibleError(name), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.BIRTHDATE, required: true, name: name, onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: value.birthDate }));
|
|
14810
|
+
}
|
|
14811
|
+
case "country": {
|
|
14812
|
+
return (React__default["default"].createElement(LabeledSelect, { hasError: hasVisibleError("country"), label: translations.TRAVELERS_FORM.COUNTRY, required: true, name: "country", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.country, options: __spreadArray([{ key: "empty", value: undefined, label: translations.TRAVELERS_FORM.SELECT_COUNTRY }], (_c = (_b = (_a = settings.travellers) === null || _a === void 0 ? void 0 : _a.countries) === null || _b === void 0 ? void 0 : _b.map(function (country) { return ({ key: country.iso2, value: country.iso2, label: country.name }); })) !== null && _c !== void 0 ? _c : [], true) }));
|
|
14813
|
+
}
|
|
14814
|
+
case "phone": {
|
|
14815
|
+
return (React__default["default"].createElement(PhoneInput, { countries: (_e = (_d = settings.travellers) === null || _d === void 0 ? void 0 : _d.countries) !== null && _e !== void 0 ? _e : [], countryIso2: formik$1.values.country, hasError: hasVisibleError("phone"), label: translations.TRAVELERS_FORM.PHONE, required: true, name: "phone", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.phone }));
|
|
14816
|
+
}
|
|
14817
|
+
case "email": {
|
|
14818
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14819
|
+
React__default["default"].createElement(LabeledInput, { type: "email", hasError: hasVisibleError("email"), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.EMAIL, required: true, name: "email", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.email }),
|
|
14820
|
+
React__default["default"].createElement(LabeledInput, { type: "email", hasError: hasVisibleError("emailConfirmation"), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.REPEAT_EMAIL, required: true, name: "emailConfirmation", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.emailConfirmation })));
|
|
14821
|
+
}
|
|
14822
|
+
}
|
|
14823
|
+
};
|
|
14654
14824
|
return (React__default["default"].createElement("form", { className: "form form__travelers", name: "booking--travellers", id: "booking--travellers", noValidate: true, onSubmit: formik$1.handleSubmit, onReset: formik$1.handleReset },
|
|
14655
14825
|
useCompactForm
|
|
14656
14826
|
? (React__default["default"].createElement("div", { className: "form__travelers__wrapper" }, formik$1.values.rooms.map(function (room, rIndex) { return (React__default["default"].createElement("div", { key: rIndex },
|
|
@@ -14725,75 +14895,89 @@ var TravelersForm = function () {
|
|
|
14725
14895
|
room.children.length > 1 &&
|
|
14726
14896
|
" ".concat(translations.TRAVELERS_FORM.CHILDREN),
|
|
14727
14897
|
]).join("")))),
|
|
14728
|
-
room.adults.map(function (travelerValues, index) {
|
|
14729
|
-
|
|
14730
|
-
|
|
14731
|
-
|
|
14732
|
-
" ",
|
|
14733
|
-
|
|
14734
|
-
|
|
14735
|
-
|
|
14736
|
-
React__default["default"].createElement("
|
|
14737
|
-
|
|
14738
|
-
|
|
14739
|
-
|
|
14740
|
-
|
|
14741
|
-
|
|
14742
|
-
|
|
14743
|
-
|
|
14744
|
-
React__default["default"].createElement("
|
|
14745
|
-
|
|
14746
|
-
|
|
14747
|
-
|
|
14748
|
-
|
|
14749
|
-
|
|
14750
|
-
React__default["default"].createElement("
|
|
14751
|
-
|
|
14752
|
-
|
|
14753
|
-
|
|
14754
|
-
|
|
14755
|
-
|
|
14756
|
-
|
|
14757
|
-
|
|
14758
|
-
|
|
14759
|
-
|
|
14760
|
-
|
|
14761
|
-
|
|
14762
|
-
|
|
14763
|
-
|
|
14764
|
-
|
|
14765
|
-
|
|
14766
|
-
|
|
14767
|
-
|
|
14768
|
-
|
|
14769
|
-
|
|
14770
|
-
|
|
14771
|
-
|
|
14772
|
-
|
|
14773
|
-
|
|
14774
|
-
|
|
14775
|
-
]
|
|
14776
|
-
|
|
14777
|
-
|
|
14778
|
-
|
|
14779
|
-
React__default["default"].createElement("
|
|
14780
|
-
|
|
14781
|
-
|
|
14782
|
-
|
|
14783
|
-
|
|
14784
|
-
React__default["default"].createElement("div", { className: "
|
|
14785
|
-
React__default["default"].createElement("
|
|
14786
|
-
|
|
14787
|
-
|
|
14788
|
-
|
|
14789
|
-
|
|
14790
|
-
|
|
14791
|
-
|
|
14792
|
-
|
|
14793
|
-
|
|
14794
|
-
|
|
14795
|
-
|
|
14796
|
-
|
|
14898
|
+
room.adults.map(function (travelerValues, index) {
|
|
14899
|
+
var _a;
|
|
14900
|
+
return (React__default["default"].createElement("div", { className: "form__region", key: travelerValues.id },
|
|
14901
|
+
React__default["default"].createElement("div", { className: "form__region-header" },
|
|
14902
|
+
React__default["default"].createElement("h5", { className: "form__region-heading" },
|
|
14903
|
+
translations.TRAVELERS_FORM.TRAVELER,
|
|
14904
|
+
" ",
|
|
14905
|
+
index + 1),
|
|
14906
|
+
React__default["default"].createElement("p", { className: "form__region-label" }, translations.TRAVELERS_FORM.ADULT),
|
|
14907
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14908
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14909
|
+
React__default["default"].createElement("input", { type: "radio", name: "mainBookerId", onChange: handleMainBookerChange, onBlur: formik$1.handleBlur, value: travelerValues.id, checked: formik$1.values.mainBookerId === travelerValues.id, className: "radiobutton__input" }),
|
|
14910
|
+
translations.TRAVELERS_FORM.MAIN_BOOKER))),
|
|
14911
|
+
((_a = settings.travellers.formFields) === null || _a === void 0 ? void 0 : _a.length)
|
|
14912
|
+
? React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14913
|
+
React__default["default"].createElement("div", { className: "travelers-form__grid" }, settings.travellers.formFields.map(function (field, fIndex) { return React__default["default"].createElement("div", { key: fIndex, className: "control control--".concat(field.type) }, getControl(field.type, travelerValues, "rooms[".concat(rIndex, "].adults[").concat(index, "].").concat(field.type))); })))
|
|
14914
|
+
: React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14915
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
14916
|
+
React__default["default"].createElement("div", { className: buildClassName([
|
|
14917
|
+
"form__group",
|
|
14918
|
+
hasVisibleError("rooms[".concat(rIndex, "].adults[").concat(index, "].gender")) && "form__group--error",
|
|
14919
|
+
]) },
|
|
14920
|
+
React__default["default"].createElement("label", { className: "form__label" },
|
|
14921
|
+
translations.TRAVELERS_FORM.GENDER,
|
|
14922
|
+
" *"),
|
|
14923
|
+
React__default["default"].createElement("div", { className: "radiobutton-group" },
|
|
14924
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14925
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14926
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: "rooms[".concat(rIndex, "].adults[").concat(index, "].gender"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: "m", checked: travelerValues.gender === "m" }),
|
|
14927
|
+
translations.TRAVELERS_FORM.MALE)),
|
|
14928
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14929
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14930
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: "rooms[".concat(rIndex, "].adults[").concat(index, "].gender"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: "f", checked: travelerValues.gender === "f" }),
|
|
14931
|
+
translations.TRAVELERS_FORM.FEMALE)),
|
|
14932
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14933
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14934
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: "rooms[".concat(rIndex, "].adults[").concat(index, "].gender"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: "x", checked: travelerValues.gender === "x" }),
|
|
14935
|
+
translations.TRAVELERS_FORM.OTHER))))),
|
|
14936
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
14937
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("rooms[".concat(rIndex, "].adults[").concat(index, "].firstName")), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.FIRST_NAME, required: true, name: "rooms[".concat(rIndex, "].adults[").concat(index, "].firstName"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: travelerValues.firstName }),
|
|
14938
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("rooms[".concat(rIndex, "].adults[").concat(index, "].lastName")), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.LAST_NAME, required: true, name: "rooms[".concat(rIndex, "].adults[").concat(index, "].lastName"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: travelerValues.lastName }),
|
|
14939
|
+
React__default["default"].createElement(LabeledInput, { type: "date", hasError: hasVisibleError("rooms[".concat(rIndex, "].adults[").concat(index, "].birthDate")), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.BIRTHDATE, required: true, name: "rooms[".concat(rIndex, "].adults[").concat(index, "].birthDate"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: travelerValues.birthDate })))));
|
|
14940
|
+
}),
|
|
14941
|
+
room.children.map(function (travelerValues, index) {
|
|
14942
|
+
var _a;
|
|
14943
|
+
return (React__default["default"].createElement("div", { className: "form__region", key: travelerValues.id },
|
|
14944
|
+
React__default["default"].createElement("div", { className: "form__region-header" },
|
|
14945
|
+
React__default["default"].createElement("h5", { className: "form__region-heading" },
|
|
14946
|
+
translations.TRAVELERS_FORM.TRAVELER,
|
|
14947
|
+
" ",
|
|
14948
|
+
room.adults.length + index + 1),
|
|
14949
|
+
React__default["default"].createElement("p", { className: "form__region-label" }, translations.TRAVELERS_FORM.CHILD)),
|
|
14950
|
+
((_a = settings.travellers.formFields) === null || _a === void 0 ? void 0 : _a.length)
|
|
14951
|
+
? React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14952
|
+
React__default["default"].createElement("div", { className: "travelers-form__grid" }, settings.travellers.formFields.map(function (field, fIndex) { return React__default["default"].createElement("div", { key: fIndex, className: "control control--".concat(field.type) }, getControl(field.type, travelerValues, "rooms[".concat(rIndex, "].children[").concat(index, "].").concat(field.type))); })))
|
|
14953
|
+
: React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14954
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
14955
|
+
React__default["default"].createElement("div", { className: buildClassName([
|
|
14956
|
+
"form__group",
|
|
14957
|
+
hasVisibleError("rooms[".concat(rIndex, "].children[").concat(index, "].gender")) && "form__group--error",
|
|
14958
|
+
]) },
|
|
14959
|
+
React__default["default"].createElement("label", { className: "form__label" },
|
|
14960
|
+
translations.TRAVELERS_FORM.GENDER,
|
|
14961
|
+
" *"),
|
|
14962
|
+
React__default["default"].createElement("div", { className: "radiobutton-group" },
|
|
14963
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14964
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14965
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: "rooms[".concat(rIndex, "].children[").concat(index, "].gender"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: "m", checked: travelerValues.gender === "m" }),
|
|
14966
|
+
translations.TRAVELERS_FORM.MALE)),
|
|
14967
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14968
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14969
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: "rooms[".concat(rIndex, "].children[").concat(index, "].gender"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: "f", checked: travelerValues.gender === "f" }),
|
|
14970
|
+
translations.TRAVELERS_FORM.FEMALE)),
|
|
14971
|
+
React__default["default"].createElement("div", { className: "radiobutton" },
|
|
14972
|
+
React__default["default"].createElement("label", { className: "radiobutton__label" },
|
|
14973
|
+
React__default["default"].createElement("input", { type: "radio", className: "radiobutton__input", name: "rooms[".concat(rIndex, "].children[").concat(index, "].gender"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: "x", checked: travelerValues.gender === "x" }),
|
|
14974
|
+
translations.TRAVELERS_FORM.OTHER))))),
|
|
14975
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
14976
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("rooms[".concat(rIndex, "].children[").concat(index, "].firstName")), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.FIRST_NAME, required: true, name: "rooms[".concat(rIndex, "].children[").concat(index, "].firstName"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: travelerValues.firstName }),
|
|
14977
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("rooms[".concat(rIndex, "].children[").concat(index, "].lastName")), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.LAST_NAME, required: true, name: "rooms[".concat(rIndex, "].children[").concat(index, "].lastName"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: travelerValues.lastName }),
|
|
14978
|
+
React__default["default"].createElement(LabeledInput, { type: "date", hasError: hasVisibleError("rooms[".concat(rIndex, "].children[").concat(index, "].birthDate")), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.BIRTHDATE, required: true, name: "rooms[".concat(rIndex, "].children[").concat(index, "].birthDate"), onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: travelerValues.birthDate })))));
|
|
14979
|
+
}))); }),
|
|
14980
|
+
bookingType != "b2b" || ((_f = (_e = settings.travellers) === null || _e === void 0 ? void 0 : _e.mainBookerFormFields) === null || _f === void 0 ? void 0 : _f.length) ? (React__default["default"].createElement("div", { className: "form__region" },
|
|
14797
14981
|
React__default["default"].createElement("div", { className: "form__region-header" },
|
|
14798
14982
|
React__default["default"].createElement("h5", { className: "form__region-heading" }, translations.TRAVELERS_FORM.MAIN_BOOKER),
|
|
14799
14983
|
React__default["default"].createElement("p", { className: "form__region-label" }, lodash.compact([
|
|
@@ -14801,43 +14985,46 @@ var TravelersForm = function () {
|
|
|
14801
14985
|
(mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.birthDate) &&
|
|
14802
14986
|
dateFns.format(dateFns.parse(mainBooker.birthDate, "yyyy-MM-dd", new Date()), "dd-MM-yyyy"),
|
|
14803
14987
|
]).join(", "))),
|
|
14804
|
-
React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14805
|
-
React__default["default"].createElement("
|
|
14806
|
-
React__default["default"].createElement("div", { className: "
|
|
14807
|
-
|
|
14808
|
-
|
|
14809
|
-
|
|
14810
|
-
React__default["default"].createElement(
|
|
14811
|
-
|
|
14812
|
-
|
|
14813
|
-
|
|
14814
|
-
|
|
14815
|
-
React__default["default"].createElement(
|
|
14816
|
-
|
|
14817
|
-
|
|
14818
|
-
|
|
14819
|
-
|
|
14820
|
-
|
|
14821
|
-
|
|
14822
|
-
|
|
14823
|
-
|
|
14824
|
-
|
|
14825
|
-
|
|
14826
|
-
|
|
14827
|
-
|
|
14828
|
-
|
|
14829
|
-
|
|
14830
|
-
|
|
14831
|
-
|
|
14832
|
-
|
|
14833
|
-
|
|
14834
|
-
|
|
14835
|
-
|
|
14836
|
-
|
|
14837
|
-
|
|
14838
|
-
|
|
14839
|
-
|
|
14840
|
-
React__default["default"].createElement(
|
|
14988
|
+
React__default["default"].createElement(React__default["default"].Fragment, null, ((_h = (_g = settings.travellers) === null || _g === void 0 ? void 0 : _g.mainBookerFormFields) === null || _h === void 0 ? void 0 : _h.length)
|
|
14989
|
+
? React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14990
|
+
React__default["default"].createElement("div", { className: "main-booker-form__grid" }, settings.travellers.mainBookerFormFields.map(function (field, fIndex) { return React__default["default"].createElement("div", { key: fIndex, className: "control control--".concat(field.type) }, getControl(field.type, {}, field.type)); })))
|
|
14991
|
+
: React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
14992
|
+
React__default["default"].createElement("div", { className: "form__twocolumn" },
|
|
14993
|
+
React__default["default"].createElement("div", { className: "form__twocolumn-column" },
|
|
14994
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
14995
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("street"), extraClassName: "form__group--50 form__group--sm-60", label: translations.TRAVELERS_FORM.STREET, required: true, name: "street", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.street }),
|
|
14996
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("houseNumber"), extraClassName: "form__group--30 form__group--sm-20", label: translations.TRAVELERS_FORM.HOUSE_NUMBER, required: true, name: "houseNumber", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.houseNumber }),
|
|
14997
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("box"), extraClassName: "form__group--20", label: translations.TRAVELERS_FORM.POST_BOX, name: "box", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.box }))),
|
|
14998
|
+
React__default["default"].createElement("div", { className: "form__twocolumn-column" },
|
|
14999
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
15000
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("zipCode"), extraClassName: "form__group--40 form__group--sm-20", label: translations.TRAVELERS_FORM.ZIPCODE, required: true, name: "zipCode", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.zipCode }),
|
|
15001
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("place"), extraClassName: "form__group--60 form__group--sm-40", label: translations.TRAVELERS_FORM.CITY, required: true, name: "place", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.place }),
|
|
15002
|
+
React__default["default"].createElement(LabeledSelect, { hasError: hasVisibleError("country"), extraClassName: "form__group--sm-40", label: translations.TRAVELERS_FORM.COUNTRY, required: true, name: "country", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.country, options: [
|
|
15003
|
+
{
|
|
15004
|
+
key: "empty",
|
|
15005
|
+
label: translations.TRAVELERS_FORM.SELECT_COUNTRY,
|
|
15006
|
+
value: undefined,
|
|
15007
|
+
},
|
|
15008
|
+
{
|
|
15009
|
+
key: "be",
|
|
15010
|
+
value: "be",
|
|
15011
|
+
label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM,
|
|
15012
|
+
},
|
|
15013
|
+
{
|
|
15014
|
+
key: "nl",
|
|
15015
|
+
value: "nl",
|
|
15016
|
+
label: translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS,
|
|
15017
|
+
},
|
|
15018
|
+
{
|
|
15019
|
+
key: "fr",
|
|
15020
|
+
value: "fr",
|
|
15021
|
+
label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE,
|
|
15022
|
+
},
|
|
15023
|
+
] })))),
|
|
15024
|
+
React__default["default"].createElement("div", { className: "form__row" },
|
|
15025
|
+
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("phone"), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.PHONE, required: true, name: "phone", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.phone }),
|
|
15026
|
+
React__default["default"].createElement(LabeledInput, { type: "email", hasError: hasVisibleError("email"), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.EMAIL, required: true, name: "email", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.email }),
|
|
15027
|
+
React__default["default"].createElement(LabeledInput, { type: "email", hasError: hasVisibleError("emailConfirmation"), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.REPEAT_EMAIL, required: true, name: "emailConfirmation", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.emailConfirmation })))))) : (React__default["default"].createElement("div", { className: "form__region" },
|
|
14841
15028
|
React__default["default"].createElement("div", { className: "form__row" },
|
|
14842
15029
|
React__default["default"].createElement(LabeledInput, { hasError: hasVisibleError("phone"), extraClassName: "form__group--md-33", label: translations.TRAVELERS_FORM.PHONE, required: true, name: "phone", onChange: formik$1.handleChange, onBlur: formik$1.handleBlur, value: formik$1.values.phone })))),
|
|
14843
15030
|
showAgentSelection && (React__default["default"].createElement("div", { className: "form__region" },
|
|
@@ -14904,23 +15091,26 @@ var Booking = function (_a) {
|
|
|
14904
15091
|
dispatch(setBookingNumber(bookingNumber));
|
|
14905
15092
|
router.navigate("".concat(basePath).concat(confirmation.pathSuffix, "?bookingNr=").concat(bookingNumber));
|
|
14906
15093
|
}
|
|
15094
|
+
var nextBookingAttrs = {
|
|
15095
|
+
startDate: startDate,
|
|
15096
|
+
endDate: endDate,
|
|
15097
|
+
catalogueId: catalogueId,
|
|
15098
|
+
rooms: rooms,
|
|
15099
|
+
flight: flight,
|
|
15100
|
+
includeFlights: includeFlights,
|
|
15101
|
+
allotmentName: allotmentName,
|
|
15102
|
+
allotmentIds: allotmentIds,
|
|
15103
|
+
tourCode: tourCode,
|
|
15104
|
+
flightRouteId: flightRouteId,
|
|
15105
|
+
vendorConfigurationId: vendorConfigurationId,
|
|
15106
|
+
};
|
|
14907
15107
|
if (!lodash.isNil(startDate) &&
|
|
14908
15108
|
!lodash.isNil(endDate) &&
|
|
14909
15109
|
!lodash.isNil(catalogueId) &&
|
|
14910
15110
|
!lodash.isNil(rooms)) {
|
|
14911
|
-
|
|
14912
|
-
|
|
14913
|
-
|
|
14914
|
-
catalogueId: catalogueId,
|
|
14915
|
-
rooms: rooms,
|
|
14916
|
-
flight: flight,
|
|
14917
|
-
includeFlights: includeFlights,
|
|
14918
|
-
allotmentName: allotmentName,
|
|
14919
|
-
allotmentIds: allotmentIds,
|
|
14920
|
-
tourCode: tourCode,
|
|
14921
|
-
flightRouteId: flightRouteId,
|
|
14922
|
-
vendorConfigurationId: vendorConfigurationId,
|
|
14923
|
-
}));
|
|
15111
|
+
if (!lodash.isEqual(bookingAttributes, nextBookingAttrs)) {
|
|
15112
|
+
dispatch(setBookingAttributes(nextBookingAttrs));
|
|
15113
|
+
}
|
|
14924
15114
|
}
|
|
14925
15115
|
else {
|
|
14926
15116
|
console.error("Failure when setting booking attributes", startDate, endDate, catalogueId, rooms);
|
|
@@ -14942,11 +15132,11 @@ var Booking = function (_a) {
|
|
|
14942
15132
|
};
|
|
14943
15133
|
}, [isRetry]);
|
|
14944
15134
|
React.useEffect(function () {
|
|
15135
|
+
var next = { productCode: productCode, productName: productName };
|
|
14945
15136
|
if (!lodash.isNil(productCode) && !lodash.isNil(productName)) {
|
|
14946
|
-
|
|
14947
|
-
|
|
14948
|
-
|
|
14949
|
-
}));
|
|
15137
|
+
if (!lodash.isEqual(productAttributes, next)) {
|
|
15138
|
+
dispatch(setProductAttributes(next));
|
|
15139
|
+
}
|
|
14950
15140
|
}
|
|
14951
15141
|
else {
|
|
14952
15142
|
console.error("Failure when setting product attributes", productCode, productName);
|
|
@@ -15015,9 +15205,7 @@ var Booking = function (_a) {
|
|
|
15015
15205
|
React.useEffect(function () {
|
|
15016
15206
|
if (!productAttributes ||
|
|
15017
15207
|
!bookingAttributes ||
|
|
15018
|
-
!(rooms === null || rooms === void 0 ? void 0 : rooms.length)
|
|
15019
|
-
!lodash.isNil(bookingNumber) ||
|
|
15020
|
-
!lodash.isNil(packageDetails)) {
|
|
15208
|
+
!(rooms === null || rooms === void 0 ? void 0 : rooms.length)) {
|
|
15021
15209
|
return;
|
|
15022
15210
|
}
|
|
15023
15211
|
// Fetch data
|
|
@@ -15028,9 +15216,6 @@ var Booking = function (_a) {
|
|
|
15028
15216
|
}, [
|
|
15029
15217
|
productAttributes,
|
|
15030
15218
|
bookingAttributes,
|
|
15031
|
-
rooms,
|
|
15032
|
-
bookingNumber,
|
|
15033
|
-
packageDetails,
|
|
15034
15219
|
]);
|
|
15035
15220
|
var numberIndex = 1;
|
|
15036
15221
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|