@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.
Files changed (132) hide show
  1. package/.vs/ProjectSettings.json +3 -3
  2. package/.vs/VSWorkspaceState.json +5 -5
  3. package/README.md +8 -8
  4. package/build/build-cjs/booking-wizard/components/phone-input.d.ts +17 -0
  5. package/build/build-cjs/booking-wizard/features/booking/selectors.d.ts +41 -12
  6. package/build/build-cjs/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  7. package/build/build-cjs/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  8. package/build/build-cjs/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  9. package/build/build-cjs/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
  10. package/build/build-cjs/booking-wizard/types.d.ts +13 -0
  11. package/build/build-cjs/index.js +458 -273
  12. package/build/build-cjs/shared/utils/localization-util.d.ts +3 -0
  13. package/build/build-esm/booking-wizard/components/phone-input.d.ts +17 -0
  14. package/build/build-esm/booking-wizard/features/booking/selectors.d.ts +41 -12
  15. package/build/build-esm/booking-wizard/features/summary/summary-flight.d.ts +2 -2
  16. package/build/build-esm/booking-wizard/features/travelers-form/controls/gender-control.d.ts +5 -0
  17. package/build/build-esm/booking-wizard/features/travelers-form/travelers-form-util.d.ts +7 -0
  18. package/build/build-esm/booking-wizard/features/travelers-form/validate-form.d.ts +2 -2
  19. package/build/build-esm/booking-wizard/types.d.ts +13 -0
  20. package/build/build-esm/index.js +460 -275
  21. package/build/build-esm/shared/utils/localization-util.d.ts +3 -0
  22. package/package.json +1 -1
  23. package/rollup.config.js +23 -23
  24. package/src/booking-product/components/age-select.tsx +35 -35
  25. package/src/booking-product/components/amount-input.tsx +78 -78
  26. package/src/booking-product/components/date-range-picker/calendar-day.tsx +58 -58
  27. package/src/booking-product/components/date-range-picker/calendar.tsx +178 -178
  28. package/src/booking-product/components/date-range-picker/index.tsx +196 -196
  29. package/src/booking-product/components/dates.tsx +136 -136
  30. package/src/booking-product/components/footer.tsx +69 -69
  31. package/src/booking-product/components/header.tsx +79 -79
  32. package/src/booking-product/components/icon.tsx +251 -251
  33. package/src/booking-product/components/rating.tsx +21 -21
  34. package/src/booking-product/components/rooms.tsx +199 -199
  35. package/src/booking-product/index.tsx +30 -30
  36. package/src/booking-product/settings-context.ts +14 -14
  37. package/src/booking-product/types.ts +28 -28
  38. package/src/booking-product/utils/api.ts +25 -25
  39. package/src/booking-product/utils/price.ts +28 -28
  40. package/src/booking-wizard/api-settings-slice.ts +24 -24
  41. package/src/booking-wizard/components/icon.tsx +508 -508
  42. package/src/booking-wizard/components/labeled-input.tsx +64 -64
  43. package/src/booking-wizard/components/labeled-select.tsx +69 -69
  44. package/src/booking-wizard/components/message.tsx +34 -34
  45. package/src/booking-wizard/components/multi-range-filter.tsx +113 -113
  46. package/src/booking-wizard/components/phone-input.tsx +181 -0
  47. package/src/booking-wizard/components/product-card.tsx +37 -37
  48. package/src/booking-wizard/components/step-indicator.tsx +51 -51
  49. package/src/booking-wizard/components/step-route.tsx +27 -27
  50. package/src/booking-wizard/declarations.d.ts +4 -4
  51. package/src/booking-wizard/features/booking/api.ts +49 -49
  52. package/src/booking-wizard/features/booking/booking-slice.ts +2 -0
  53. package/src/booking-wizard/features/booking/booking.tsx +28 -28
  54. package/src/booking-wizard/features/booking/constants.ts +16 -16
  55. package/src/booking-wizard/features/booking/selectors.ts +17 -14
  56. package/src/booking-wizard/features/error/error.tsx +78 -78
  57. package/src/booking-wizard/features/flight-options/flight-filter.tsx +432 -432
  58. package/src/booking-wizard/features/flight-options/flight-option-flight.tsx +385 -385
  59. package/src/booking-wizard/features/flight-options/flight-option-modal.tsx +229 -229
  60. package/src/booking-wizard/features/flight-options/flight-option.tsx +80 -80
  61. package/src/booking-wizard/features/flight-options/index.tsx +196 -196
  62. package/src/booking-wizard/features/price-details/price-details-api.ts +24 -24
  63. package/src/booking-wizard/features/price-details/price-details-slice.ts +178 -178
  64. package/src/booking-wizard/features/price-details/util.ts +155 -155
  65. package/src/booking-wizard/features/product-options/no-options.tsx +21 -21
  66. package/src/booking-wizard/features/product-options/none-option.tsx +121 -121
  67. package/src/booking-wizard/features/product-options/option-booking-airline-group.tsx +64 -64
  68. package/src/booking-wizard/features/product-options/option-booking-group.tsx +216 -216
  69. package/src/booking-wizard/features/product-options/option-item.tsx +321 -321
  70. package/src/booking-wizard/features/product-options/option-pax-card.tsx +201 -201
  71. package/src/booking-wizard/features/product-options/option-pax-group.tsx +175 -175
  72. package/src/booking-wizard/features/product-options/option-unit-group.tsx +198 -198
  73. package/src/booking-wizard/features/product-options/option-units-card.tsx +185 -185
  74. package/src/booking-wizard/features/room-options/index.tsx +187 -187
  75. package/src/booking-wizard/features/room-options/room-utils.ts +190 -190
  76. package/src/booking-wizard/features/room-options/room.tsx +161 -161
  77. package/src/booking-wizard/features/room-options/traveler-rooms.tsx +75 -75
  78. package/src/booking-wizard/features/sidebar/sidebar-flight.tsx +4 -2
  79. package/src/booking-wizard/features/sidebar/sidebar-util.ts +2 -0
  80. package/src/booking-wizard/features/summary/summary-booking-option-unit.tsx +25 -25
  81. package/src/booking-wizard/features/summary/summary-flight.tsx +7 -6
  82. package/src/booking-wizard/features/summary/summary-per-booking-option-group.tsx +69 -69
  83. package/src/booking-wizard/features/summary/summary-per-pax-option-group.tsx +63 -63
  84. package/src/booking-wizard/features/summary/summary-per-unit-option-group.tsx +66 -66
  85. package/src/booking-wizard/features/summary/summary-slice.ts +28 -28
  86. package/src/booking-wizard/features/summary/summary.tsx +91 -62
  87. package/src/booking-wizard/features/travelers-form/controls/gender-control.tsx +70 -0
  88. package/src/booking-wizard/features/travelers-form/travelers-form-util.ts +11 -0
  89. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +451 -313
  90. package/src/booking-wizard/features/travelers-form/type-ahead-input.tsx +101 -101
  91. package/src/booking-wizard/features/travelers-form/validate-form.ts +84 -98
  92. package/src/booking-wizard/index.tsx +36 -36
  93. package/src/booking-wizard/store.ts +31 -31
  94. package/src/booking-wizard/types.ts +15 -0
  95. package/src/index.ts +4 -4
  96. package/src/shared/components/loader.tsx +16 -16
  97. package/src/shared/translations/en-GB.json +3 -0
  98. package/src/shared/translations/fr-BE.json +3 -0
  99. package/src/shared/translations/nl-BE.json +3 -0
  100. package/src/shared/types.ts +4 -4
  101. package/src/shared/utils/class-util.ts +9 -9
  102. package/src/shared/utils/localization-util.ts +62 -62
  103. package/src/shared/utils/query-string-util.ts +119 -119
  104. package/styles/booking-product-variables.scss +394 -394
  105. package/styles/booking-product.scss +446 -446
  106. package/styles/booking-wizard.scss +1 -0
  107. package/styles/components/_animations.scss +39 -39
  108. package/styles/components/_base.scss +107 -107
  109. package/styles/components/_button.scss +238 -238
  110. package/styles/components/_checkbox.scss +219 -219
  111. package/styles/components/_cta.scss +208 -208
  112. package/styles/components/_date-list.scss +41 -41
  113. package/styles/components/_date-range-picker.scss +225 -225
  114. package/styles/components/_decrement-increment.scss +35 -35
  115. package/styles/components/_flight-option.scss +1429 -1429
  116. package/styles/components/_info-message.scss +71 -71
  117. package/styles/components/_input.scss +25 -25
  118. package/styles/components/_list.scss +187 -187
  119. package/styles/components/_loader.scss +72 -72
  120. package/styles/components/_mixins.scss +550 -550
  121. package/styles/components/_phone-input.scss +8 -0
  122. package/styles/components/_placeholders.scss +166 -166
  123. package/styles/components/_pricing-summary.scss +155 -155
  124. package/styles/components/_qsm.scss +17 -17
  125. package/styles/components/_radiobutton.scss +170 -170
  126. package/styles/components/_select-wrapper.scss +80 -80
  127. package/styles/components/_spinner.scss +29 -29
  128. package/styles/components/_table.scss +81 -81
  129. package/styles/components/_tree.scss +530 -530
  130. package/styles/components/_typeahead.scss +281 -281
  131. package/styles/components/_variables.scss +89 -89
  132. package/tsconfig.json +24 -24
@@ -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 selectTranslations = function (state) {
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
- var defaultStaticTranslations = getTranslations(state.booking.languageCode);
10018
- var dynamicTranslations = (_b = (state.booking.translations &&
10019
- ((_a = state.booking.translations.find(function (x) { return x.language == state.booking.languageCode; })) === null || _a === void 0 ? void 0 : _a.value))) !== null && _b !== void 0 ? _b : {};
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, _c = Array.from(new Set(__spreadArray(__spreadArray([], Object.keys(defaultStaticTranslations), true), Object.keys(dynamicTranslations), true))); _i < _c.length; _i++) {
10022
- var key = _c[_i];
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 flight = _a.flight, header = _a.header;
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(flight.flightMetaData)) === null || _b === void 0 ? void 0 :
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
- flight.flightMetaData.luggageIncluded && (React__default["default"].createElement("p", null, translations.SIDEBAR.LUGGAGE_INCLUDED))));
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 _c = React.useState(false), isSubmitting = _c[0], setIsSubmitting = _c[1];
13944
- var _d = React.useState((_a = settings.summary) === null || _a === void 0 ? void 0 : _a.checkboxes), checkboxes = _d[0], setCheckboxes = _d[1];
13945
- var _e = React.useState(""), remarks = _e[0], setRemarks = _e[1];
13946
- var _f = React.useState({}), voucher = _f[0], setVoucher = _f[1];
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 && (travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.street) && (React__default["default"].createElement(React__default["default"].Fragment, null,
14156
- React__default["default"].createElement("li", { className: "list__item" }, "".concat(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.street, " ").concat(lodash.compact([
14157
- travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.houseNumber,
14158
- travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.box,
14159
- ]).join(" "), ", ").concat(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.zipCode, " ").concat(travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.place)),
14160
- React__default["default"].createElement("li", { className: "list__item" }, travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.phone),
14161
- React__default["default"].createElement("li", { className: "list__item" }, travelerFormValues === null || travelerFormValues === void 0 ? void 0 : travelerFormValues.email))))));
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.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, null,
14171
- React__default["default"].createElement("li", { key: roomOptionIndex },
14172
- React__default["default"].createElement("h6", null, roomOption === null || roomOption === void 0 ? void 0 : roomOption.productName),
14173
- React__default["default"].createElement("ul", null,
14174
- React__default["default"].createElement("li", { className: "list__item" }, roomOption === null || roomOption === void 0 ? void 0 :
14175
- roomOption.accommodationName,
14176
- !lodash.isNil(roomOption === null || roomOption === void 0 ? void 0 : roomOption.regimeName) && ", ", roomOption === null || roomOption === void 0 ? void 0 :
14177
- roomOption.regimeName)),
14178
- React__default["default"].createElement("p", null,
14179
- "(",
14180
- (roomOption === null || roomOption === void 0 ? void 0 : roomOption.from) === (roomOption === null || roomOption === void 0 ? void 0 : roomOption.to)
14181
- ? getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.from)
14182
- : React__default["default"].createElement(React__default["default"].Fragment, null,
14183
- getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.from),
14184
- " > ",
14185
- getDateText(roomOption === null || roomOption === void 0 ? void 0 : roomOption.to)),
14186
- ")")),
14187
- !lodash.isEmpty(activeOption === null || activeOption === void 0 ? void 0 : activeOption.groups) &&
14188
- (activeOption === null || activeOption === void 0 ? void 0 : activeOption.groups.map(function (x, i) {
14189
- if (!x.options.some(function (y) { return y.isSelected; }))
14190
- return;
14191
- return React__default["default"].createElement(SummaryPerBookingOptionGroup, { key: i, group: x });
14192
- })),
14193
- !lodash.isEmpty(activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionUnits) &&
14194
- (activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionUnits.map(function (x, i) { return (React__default["default"].createElement(SummaryBookingOptionUnit, { key: i, unit: x })); })),
14195
- !lodash.isEmpty(activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionPax) &&
14196
- (activeOption === null || activeOption === void 0 ? void 0 : activeOption.optionPax.map(function (x, i) { return (React__default["default"].createElement(SummaryBookingOptionPax, { key: i, pax: x })); })),
14197
- (packageDetails === null || packageDetails === void 0 ? void 0 : packageDetails.outwardFlights) &&
14198
- packageDetails.outwardFlights
14199
- .filter(function (x) { return x.isSelected; })
14200
- .map(function (flight, i) { return (React__default["default"].createElement(SummaryFlight, { key: i, flight: flight, header: translations.SIDEBAR.DEPARTURE_FLIGHT })); }),
14201
- (packageDetails === null || packageDetails === void 0 ? void 0 : packageDetails.returnFlights) &&
14202
- packageDetails.returnFlights
14203
- .filter(function (x) { return x.isSelected; })
14204
- .map(function (flight, i) { return (React__default["default"].createElement(SummaryFlight, { key: i, flight: flight, header: translations.SIDEBAR.ARRIVAL_FLIGHT })); }))); }))))),
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
- ((_b = bookRequest === null || bookRequest === void 0 ? void 0 : bookRequest.payload.voucherCodes) === null || _b === void 0 ? void 0 : _b.map(function (y, i) { return (React__default["default"].createElement("li", { key: i },
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"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
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.lastName)) {
14397
- lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].lastName"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
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.birthDate)) {
14404
- lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].birthDate"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
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
- else if (values.startDate) {
14411
- var age = getAge(adult.birthDate, values.startDate);
14412
- if (age <= CHILD_MAX_AGE) {
14413
- lodash.set(errors, "rooms[".concat(rIndex, "].adults[").concat(index, "].birthDate"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_ADULT, [rIndex + 1, index + 1]));
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"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
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.lastName)) {
14435
- lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].lastName"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
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.birthDate)) {
14442
- lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].birthDate"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [
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
- else if (values.startDate) {
14449
- var age = getAge(child.birthDate, values.startDate);
14450
- if (age > CHILD_MAX_AGE) {
14451
- lodash.set(errors, "rooms[".concat(rIndex, "].children[").concat(index, "].birthDate"), format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_CHILD, [rIndex + 1, r.adults.length + index + 1]));
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 (lodash.isEmpty(values.email)) {
14474
- errors.email = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.EMAIL]);
14475
- }
14476
- else if (isValidEmail(values.email)) {
14477
- errors.email =
14478
- translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_IS_INVALID;
14479
- }
14480
- if (lodash.isEmpty(values.emailConfirmation)) {
14481
- errors.emailConfirmation = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.REPEAT_EMAIL]);
14482
- }
14483
- else if (values.emailConfirmation !== values.email) {
14484
- errors.emailConfirmation =
14485
- translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_DOES_NOT_MATCH;
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 _e = React.useState((_b = settings.agentRequired) !== null && _b !== void 0 ? _b : false), showAgents = _e[0], setShowAgents = _e[1];
14557
- var _f = React.useState(!settings.agentAdressId && !settings.hideAgentSelection), showAgentSelection = _f[0], setShowAgentSelection = _f[1];
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 _g = React.useState(typeaheadAgents), filteredAgents = _g[0], setFilteredAgents = _g[1];
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) { return (React__default["default"].createElement("div", { className: "form__region", key: travelerValues.id },
14729
- React__default["default"].createElement("div", { className: "form__region-header" },
14730
- React__default["default"].createElement("h5", { className: "form__region-heading" },
14731
- translations.TRAVELERS_FORM.TRAVELER,
14732
- " ",
14733
- index + 1),
14734
- React__default["default"].createElement("p", { className: "form__region-label" }, translations.TRAVELERS_FORM.ADULT),
14735
- React__default["default"].createElement("div", { className: "radiobutton" },
14736
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14737
- 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" }),
14738
- translations.TRAVELERS_FORM.MAIN_BOOKER))),
14739
- React__default["default"].createElement("div", { className: "form__row" },
14740
- React__default["default"].createElement("div", { className: buildClassName([
14741
- "form__group",
14742
- hasVisibleError("rooms[".concat(rIndex, "].adults[").concat(index, "].gender")) && "form__group--error",
14743
- ]) },
14744
- React__default["default"].createElement("label", { className: "form__label" },
14745
- translations.TRAVELERS_FORM.GENDER,
14746
- " *"),
14747
- React__default["default"].createElement("div", { className: "radiobutton-group" },
14748
- React__default["default"].createElement("div", { className: "radiobutton" },
14749
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14750
- 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" }),
14751
- translations.TRAVELERS_FORM.MALE)),
14752
- React__default["default"].createElement("div", { className: "radiobutton" },
14753
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14754
- 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" }),
14755
- translations.TRAVELERS_FORM.FEMALE)),
14756
- React__default["default"].createElement("div", { className: "radiobutton" },
14757
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14758
- 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" }),
14759
- translations.TRAVELERS_FORM.OTHER))))),
14760
- React__default["default"].createElement("div", { className: "form__row" },
14761
- 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 }),
14762
- 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 }),
14763
- 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 })))); }),
14764
- room.children.map(function (travelerValues, index) { return (React__default["default"].createElement("div", { className: "form__region", key: travelerValues.id },
14765
- React__default["default"].createElement("div", { className: "form__region-header" },
14766
- React__default["default"].createElement("h5", { className: "form__region-heading" },
14767
- translations.TRAVELERS_FORM.TRAVELER,
14768
- " ",
14769
- room.adults.length + index + 1),
14770
- React__default["default"].createElement("p", { className: "form__region-label" }, translations.TRAVELERS_FORM.CHILD)),
14771
- React__default["default"].createElement("div", { className: "form__row" },
14772
- React__default["default"].createElement("div", { className: buildClassName([
14773
- "form__group",
14774
- hasVisibleError("rooms[".concat(rIndex, "].children[").concat(index, "].gender")) && "form__group--error",
14775
- ]) },
14776
- React__default["default"].createElement("label", { className: "form__label" },
14777
- translations.TRAVELERS_FORM.GENDER,
14778
- " *"),
14779
- React__default["default"].createElement("div", { className: "radiobutton-group" },
14780
- React__default["default"].createElement("div", { className: "radiobutton" },
14781
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14782
- 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" }),
14783
- translations.TRAVELERS_FORM.MALE)),
14784
- React__default["default"].createElement("div", { className: "radiobutton" },
14785
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14786
- 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" }),
14787
- translations.TRAVELERS_FORM.FEMALE)),
14788
- React__default["default"].createElement("div", { className: "radiobutton" },
14789
- React__default["default"].createElement("label", { className: "radiobutton__label" },
14790
- 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" }),
14791
- translations.TRAVELERS_FORM.OTHER))))),
14792
- React__default["default"].createElement("div", { className: "form__row" },
14793
- 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 }),
14794
- 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 }),
14795
- 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 })))); }))); }),
14796
- bookingType != "b2b" ? (React__default["default"].createElement("div", { className: "form__region" },
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("div", { className: "form__twocolumn" },
14806
- React__default["default"].createElement("div", { className: "form__twocolumn-column" },
14807
- React__default["default"].createElement("div", { className: "form__row" },
14808
- 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 }),
14809
- 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 }),
14810
- 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 }))),
14811
- React__default["default"].createElement("div", { className: "form__twocolumn-column" },
14812
- React__default["default"].createElement("div", { className: "form__row" },
14813
- 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 }),
14814
- 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 }),
14815
- 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: [
14816
- {
14817
- key: "empty",
14818
- label: translations.TRAVELERS_FORM.SELECT_COUNTRY,
14819
- value: undefined,
14820
- },
14821
- {
14822
- key: "be",
14823
- value: "be",
14824
- label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM,
14825
- },
14826
- {
14827
- key: "nl",
14828
- value: "nl",
14829
- label: translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS,
14830
- },
14831
- {
14832
- key: "fr",
14833
- value: "fr",
14834
- label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE,
14835
- },
14836
- ] })))),
14837
- React__default["default"].createElement("div", { className: "form__row" },
14838
- 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 }),
14839
- 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 }),
14840
- 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" },
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
- dispatch(setBookingAttributes({
14912
- startDate: startDate,
14913
- endDate: endDate,
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
- dispatch(setProductAttributes({
14947
- productCode: productCode,
14948
- productName: productName,
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,