@qite/tide-booking-component 1.4.110 → 1.4.111

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 (53) hide show
  1. package/build/build-cjs/index.js +2316 -1555
  2. package/build/build-cjs/src/booking-wizard/features/travelers-form/travelers-form.d.ts +1 -2
  3. package/build/build-cjs/src/search-results/components/book-packaging-entry/index.d.ts +1 -0
  4. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +3 -1
  5. package/build/build-cjs/src/search-results/types.d.ts +3 -0
  6. package/build/build-cjs/src/shared/booking/shared-confirmation.d.ts +25 -0
  7. package/build/build-cjs/src/shared/booking/summary.d.ts +43 -0
  8. package/build/build-cjs/src/shared/booking/travelers-form.d.ts +93 -0
  9. package/build/build-cjs/src/shared/utils/booking-summary.d.ts +1 -0
  10. package/build/build-cjs/src/shared/utils/localization-util.d.ts +6 -0
  11. package/build/build-esm/index.js +2213 -1453
  12. package/build/build-esm/src/booking-wizard/features/travelers-form/travelers-form.d.ts +1 -2
  13. package/build/build-esm/src/search-results/components/book-packaging-entry/index.d.ts +1 -0
  14. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +3 -1
  15. package/build/build-esm/src/search-results/types.d.ts +3 -0
  16. package/build/build-esm/src/shared/booking/shared-confirmation.d.ts +25 -0
  17. package/build/build-esm/src/shared/booking/summary.d.ts +43 -0
  18. package/build/build-esm/src/shared/booking/travelers-form.d.ts +93 -0
  19. package/build/build-esm/src/shared/utils/booking-summary.d.ts +1 -0
  20. package/build/build-esm/src/shared/utils/localization-util.d.ts +6 -0
  21. package/package.json +2 -2
  22. package/src/booking-wizard/components/step-indicator.tsx +1 -1
  23. package/src/booking-wizard/components/step-route.tsx +1 -1
  24. package/src/booking-wizard/features/confirmation/confirmation.tsx +11 -55
  25. package/src/booking-wizard/features/sidebar/index.tsx +1 -1
  26. package/src/booking-wizard/features/summary/summary.tsx +1 -1
  27. package/src/booking-wizard/features/travelers-form/travelers-form.tsx +84 -1010
  28. package/src/search-results/components/book-packaging-entry/index.tsx +192 -11
  29. package/src/search-results/components/book-packaging-entry/wl-sidebar.tsx +1 -4
  30. package/src/search-results/components/group-tour/group-tour-card.tsx +1 -1
  31. package/src/search-results/components/group-tour/group-tour-results.tsx +1 -1
  32. package/src/search-results/components/search-results-container/search-results-container.tsx +42 -14
  33. package/src/search-results/store/search-results-slice.ts +8 -2
  34. package/src/search-results/types.ts +4 -0
  35. package/src/shared/booking/shared-confirmation.tsx +105 -0
  36. package/src/shared/booking/summary.tsx +380 -0
  37. package/src/shared/booking/travelers-form.tsx +870 -0
  38. package/src/shared/components/flyin/flyin.tsx +8 -9
  39. package/src/shared/components/flyin/packaging-flights-flyin.tsx +4 -4
  40. package/src/shared/utils/booking-summary.tsx +46 -0
  41. package/src/shared/utils/tide-api-utils.ts +2 -2
  42. package/styles/components/_dropdown.scss +5 -0
  43. package/styles/components/_flyin.scss +43 -0
  44. package/styles/components/_search.scss +5 -0
  45. /package/build/build-cjs/src/shared/booking/{BookingPanel.d.ts → booking-panel.d.ts} +0 -0
  46. /package/build/build-cjs/src/shared/booking/{Sidebar.d.ts → shared-sidebar.d.ts} +0 -0
  47. /package/build/build-cjs/src/shared/booking/{StepIndicators.d.ts → step-indicators.d.ts} +0 -0
  48. /package/build/build-esm/src/shared/booking/{BookingPanel.d.ts → booking-panel.d.ts} +0 -0
  49. /package/build/build-esm/src/shared/booking/{Sidebar.d.ts → shared-sidebar.d.ts} +0 -0
  50. /package/build/build-esm/src/shared/booking/{StepIndicators.d.ts → step-indicators.d.ts} +0 -0
  51. /package/src/shared/booking/{BookingPanel.tsx → booking-panel.tsx} +0 -0
  52. /package/src/shared/booking/{Sidebar.tsx → shared-sidebar.tsx} +0 -0
  53. /package/src/shared/booking/{StepIndicators.tsx → step-indicators.tsx} +0 -0
@@ -13,9 +13,9 @@ var reactRedux = require('react-redux');
13
13
  var toolkit = require('@reduxjs/toolkit');
14
14
  var reactRouter = require('react-router');
15
15
  require('react-dom');
16
- var flat = require('flat');
17
- var formik = require('formik');
18
16
  var produce = require('immer');
17
+ var formik = require('formik');
18
+ var flat = require('flat');
19
19
  var uuid = require('uuid');
20
20
 
21
21
  function _interopDefaultLegacy(e) {
@@ -77,8 +77,8 @@ function _mergeNamespaces(n, m) {
77
77
  var React__default = /*#__PURE__*/ _interopDefaultLegacy(React);
78
78
  var React__namespace = /*#__PURE__*/ _interopNamespace(React);
79
79
  var JsonURL__default = /*#__PURE__*/ _interopDefaultLegacy(JsonURL);
80
- var flat__default = /*#__PURE__*/ _interopDefaultLegacy(flat);
81
80
  var produce__default = /*#__PURE__*/ _interopDefaultLegacy(produce);
81
+ var flat__default = /*#__PURE__*/ _interopDefaultLegacy(flat);
82
82
 
83
83
  /******************************************************************************
84
84
  Copyright (c) Microsoft Corporation.
@@ -7086,7 +7086,7 @@ function getLocale(code) {
7086
7086
  var getPriceDifferenceText = function (price, currencyCode) {
7087
7087
  return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
7088
7088
  };
7089
- function format(text, args) {
7089
+ function format$1(text, args) {
7090
7090
  return text.replace(/{([0-9]+)}/g, function (match, index) {
7091
7091
  return typeof args[index] == 'undefined' ? match : args[index];
7092
7092
  });
@@ -13055,7 +13055,7 @@ PERFORMANCE OF THIS SOFTWARE.
13055
13055
  };
13056
13056
  var ENDPOINT_BOOKABLE_DATES = ENDPOINT$8 + '/bookable-dates';
13057
13057
  var ENDPOINT_PRICE_DETAILS$1 = ENDPOINT$8 + '/price-details';
13058
- var ENDPOINT_BOOK = ENDPOINT$8 + '/book';
13058
+ var ENDPOINT_BOOK$1 = ENDPOINT$8 + '/book';
13059
13059
  var ENDPOINT_UPDATE = ENDPOINT$8 + '/update';
13060
13060
  var ENDPOINT_AGENTS = ENDPOINT$8 + '/agents';
13061
13061
  var ENDPOINT_AVAILABLE_ALLOTMENTS = function (eventId, productCode) {
@@ -13160,7 +13160,7 @@ PERFORMANCE OF THIS SOFTWARE.
13160
13160
  return post(url, apiKey, body, config.token, signal, true, languageCode);
13161
13161
  };
13162
13162
  var book = function (config, request, signal, languageCode) {
13163
- var url = '' + config.host + ENDPOINT_BOOK;
13163
+ var url = '' + config.host + ENDPOINT_BOOK$1;
13164
13164
  var apiKey = config.apiKey;
13165
13165
  var body = JSON.stringify(request);
13166
13166
  return post(url, apiKey, body, config.token, signal, true, languageCode);
@@ -13683,6 +13683,7 @@ PERFORMANCE OF THIS SOFTWARE.
13683
13683
  var ENDPOINT_EXCURSIONS = ENDPOINT + '/excursions';
13684
13684
  var ENDPOINT_FLIGHTS = ENDPOINT + '/flights';
13685
13685
  var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
13686
+ var ENDPOINT_BOOK = ENDPOINT + '/book';
13686
13687
  var ENDPOINT_ITINERARY = ENDPOINT + '/itinerary';
13687
13688
  var ENDPOINT_ENTRY = function (magicLinkCode) {
13688
13689
  return ENDPOINT + '/entry/' + magicLinkCode;
@@ -13727,6 +13728,12 @@ PERFORMANCE OF THIS SOFTWARE.
13727
13728
  var body = JSON.stringify(request);
13728
13729
  return post(url, apiKey, body, config.token, signal, true);
13729
13730
  };
13731
+ var bookPackagingEntry = function (config, request, signal) {
13732
+ var url = '' + config.host + ENDPOINT_BOOK;
13733
+ var apiKey = config.apiKey;
13734
+ var body = JSON.stringify(request);
13735
+ return post(url, apiKey, body, config.token, signal, true);
13736
+ };
13730
13737
 
13731
13738
  exports.AllotmentType = AllotmentType;
13732
13739
  exports.ContactForm = ContactForm;
@@ -13750,6 +13757,7 @@ PERFORMANCE OF THIS SOFTWARE.
13750
13757
  exports.availableCountries = availableCountries;
13751
13758
  exports.availableFlights = availableFlights;
13752
13759
  exports.book = book;
13760
+ exports.bookPackagingEntry = bookPackagingEntry;
13753
13761
  exports.bookableDates = bookableDates;
13754
13762
  exports.changeEntryAgentSurcharge = changeEntryAgentSurcharge;
13755
13763
  exports.confirm = confirm;
@@ -13814,9 +13822,16 @@ PERFORMANCE OF THIS SOFTWARE.
13814
13822
  exports.validateVoucher = validateVoucher;
13815
13823
  })(build);
13816
13824
 
13825
+ var tideConnection = {
13826
+ // host: 'https://localhost:44341',
13827
+ host: 'https://preview-tide.tidesoftware.be',
13828
+ apiKey: 'e9b95d79-de4c-41d6-ab7e-3dd429873058',
13829
+ catalogueIds: [1],
13830
+ officeId: 1
13831
+ };
13817
13832
  function buildTideClientConfig(settings) {
13818
- var HOST = (settings === null || settings === void 0 ? void 0 : settings.apiUrl) || process.env.REACT_APP_BOOKING_HOST;
13819
- var API_KEY = (settings === null || settings === void 0 ? void 0 : settings.apiKey) || process.env.REACT_APP_BOOKING_API_KEY;
13833
+ var HOST = (settings === null || settings === void 0 ? void 0 : settings.apiUrl) || tideConnection.host;
13834
+ var API_KEY = (settings === null || settings === void 0 ? void 0 : settings.apiKey) || tideConnection.apiKey;
13820
13835
  var token = selectAgentToken();
13821
13836
  if (lodash.isNil(HOST)) {
13822
13837
  throw Error('Environment variable "HOST" was not set.');
@@ -20687,7 +20702,7 @@ var setOfficeId = ((_a$3 = bookingSlice.actions), _a$3.setOfficeId),
20687
20702
  setBookingAttributes = _a$3.setBookingAttributes,
20688
20703
  setCalculateDeposit = _a$3.setCalculateDeposit,
20689
20704
  setShowCommission = _a$3.setShowCommission,
20690
- setBookingNumber = _a$3.setBookingNumber,
20705
+ setBookingNumber$1 = _a$3.setBookingNumber,
20691
20706
  setIsRetry = _a$3.setIsRetry,
20692
20707
  setFetchingPackage = _a$3.setFetchingPackage,
20693
20708
  setIsFetching = _a$3.setIsFetching,
@@ -20703,7 +20718,7 @@ var setOfficeId = ((_a$3 = bookingSlice.actions), _a$3.setOfficeId),
20703
20718
  setAgentAdressId = _a$3.setAgentAdressId,
20704
20719
  setBookingRemarks = _a$3.setBookingRemarks,
20705
20720
  setVoucherCodes = _a$3.setVoucherCodes,
20706
- setCurrentStep = _a$3.setCurrentStep,
20721
+ setCurrentStep$1 = _a$3.setCurrentStep,
20707
20722
  setPackageAirlineGroups = _a$3.setPackageAirlineGroups,
20708
20723
  setPackageAirportGroups = _a$3.setPackageAirportGroups,
20709
20724
  setFlights = _a$3.setFlights,
@@ -20954,37 +20969,27 @@ var Message = function (_a) {
20954
20969
  );
20955
20970
  };
20956
20971
 
20957
- var Confirmation = function () {
20958
- var dispatch = useAppDispatch();
20959
- var settings = React.useContext(SettingsContext);
20960
- var navigate = settings.skipRouter ? function () {} : reactRouter.useNavigate();
20961
- var bookingNumber = reactRedux.useSelector(selectBookingNumber);
20962
- var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
20963
- var isOption = reactRedux.useSelector(selectIsOption);
20964
- React.useEffect(
20965
- function () {
20966
- if (!bookingNumber) {
20967
- if (settings.skipRouter) {
20968
- dispatch(setCurrentStep(OPTIONS_FORM_STEP));
20969
- } else {
20970
- navigate(
20971
- ''
20972
- .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
20973
- .concat(settings.error.pathSuffix, '?')
20974
- .concat(bookingQueryString)
20975
- );
20976
- }
20977
- }
20978
- },
20979
- [bookingNumber]
20980
- );
20981
- var translations = reactRedux.useSelector(selectTranslations);
20982
- var encodedMailSubject = encodeURI(translations.CONFIRMATION.MAIL_SUBJECT);
20972
+ function format(str, args) {
20973
+ // Simple format function: replaces {0}, {1}, ... with args
20974
+ return str.replace(/\{(\d+)\}/g, function (match, number) {
20975
+ return typeof args[number] !== 'undefined' ? String(args[number]) : match;
20976
+ });
20977
+ }
20978
+ var SharedConfirmation = function (_a) {
20979
+ var bookingNumber = _a.bookingNumber,
20980
+ isOption = _a.isOption,
20981
+ isOffer = _a.isOffer,
20982
+ translations = _a.translations,
20983
+ companyContactPhone = _a.companyContactPhone,
20984
+ companyContactEmail = _a.companyContactEmail,
20985
+ _b = _a.homeUrl,
20986
+ homeUrl = _b === void 0 ? '/' : _b;
20987
+ var encodedMailSubject = encodeURI(translations.MAIL_SUBJECT);
20983
20988
  var titleText = isOption
20984
- ? format(translations.CONFIRMATION.TITLE_TEXT_OPTION, [bookingNumber])
20985
- : settings.isOffer
20986
- ? format(translations.CONFIRMATION.TITLE_TEXT_OFFER, [bookingNumber])
20987
- : format(translations.CONFIRMATION.TITLE_TEXT_BOOKING, [bookingNumber]);
20989
+ ? format(translations.TITLE_TEXT_OPTION, [bookingNumber])
20990
+ : isOffer
20991
+ ? format(translations.TITLE_TEXT_OFFER, [bookingNumber])
20992
+ : format(translations.TITLE_TEXT_BOOKING, [bookingNumber]);
20988
20993
  return React__default['default'].createElement(
20989
20994
  'div',
20990
20995
  { className: 'form form__booking--message', id: 'booking--confirmation' },
@@ -21002,25 +21007,31 @@ var Confirmation = function () {
21002
21007
  {
21003
21008
  type: 'success',
21004
21009
  title: titleText,
21005
- actionComponent: React__default['default'].createElement(
21006
- 'div',
21007
- { className: 'sm' },
21008
- React__default['default'].createElement(
21009
- 'a',
21010
- { href: 'tel://'.concat(settings.companyContactPhone), className: 'sm__icon' },
21011
- React__default['default'].createElement(Icon, { name: 'tel' })
21012
- ),
21013
- React__default['default'].createElement(
21014
- 'a',
21015
- { href: 'mailto://'.concat(settings.companyContactEmail), className: 'sm__icon' },
21016
- React__default['default'].createElement(Icon, { name: 'mail' })
21017
- ),
21018
- React__default['default'].createElement(
21019
- 'a',
21020
- { href: '/', className: 'sm__icon' },
21021
- React__default['default'].createElement(Icon, { name: 'home' })
21022
- )
21023
- )
21010
+ actionComponent:
21011
+ companyContactPhone || companyContactEmail
21012
+ ? React__default['default'].createElement(
21013
+ 'div',
21014
+ { className: 'sm' },
21015
+ companyContactPhone &&
21016
+ React__default['default'].createElement(
21017
+ 'a',
21018
+ { href: 'tel://'.concat(companyContactPhone), className: 'sm__icon' },
21019
+ React__default['default'].createElement(Icon, { name: 'tel' })
21020
+ ),
21021
+ companyContactEmail &&
21022
+ React__default['default'].createElement(
21023
+ 'a',
21024
+ { href: 'mailto://'.concat(companyContactEmail), className: 'sm__icon' },
21025
+ React__default['default'].createElement(Icon, { name: 'mail' })
21026
+ ),
21027
+ homeUrl &&
21028
+ React__default['default'].createElement(
21029
+ 'a',
21030
+ { href: homeUrl, className: 'sm__icon' },
21031
+ React__default['default'].createElement(Icon, { name: 'home' })
21032
+ )
21033
+ )
21034
+ : undefined
21024
21035
  },
21025
21036
  !isOption
21026
21037
  ? React__default['default'].createElement(
@@ -21029,25 +21040,23 @@ var Confirmation = function () {
21029
21040
  React__default['default'].createElement(
21030
21041
  'p',
21031
21042
  null,
21032
- translations.CONFIRMATION.MESSAGE_TEXT1,
21043
+ translations.MESSAGE_TEXT1,
21033
21044
  React__default['default'].createElement('br', null),
21034
- settings.isOffer ? translations.CONFIRMATION.MESSAGE_TEXT2_OFFER : translations.CONFIRMATION.MESSAGE_TEXT2_BOOKING
21045
+ isOffer ? translations.MESSAGE_TEXT2_OFFER : translations.MESSAGE_TEXT2_BOOKING
21035
21046
  ),
21036
- React__default['default'].createElement(
21037
- 'p',
21038
- null,
21039
- translations.CONFIRMATION.QUESTIONS_TEXT1,
21040
- ' ',
21047
+ companyContactEmail &&
21041
21048
  React__default['default'].createElement(
21042
- 'a',
21043
- {
21044
- href: 'mailto:'.concat(settings.companyContactEmail, '?subject=').concat(encodedMailSubject),
21045
- title: translations.CONFIRMATION.QUESTIONS_ALT
21046
- },
21047
- translations.CONFIRMATION.QUESTIONS_TEXT2
21048
- ),
21049
- translations.CONFIRMATION.QUESTIONS_TEXT3
21050
- )
21049
+ 'p',
21050
+ null,
21051
+ translations.QUESTIONS_TEXT1,
21052
+ ' ',
21053
+ React__default['default'].createElement(
21054
+ 'a',
21055
+ { href: 'mailto:'.concat(companyContactEmail, '?subject=').concat(encodedMailSubject), title: translations.QUESTIONS_ALT },
21056
+ translations.QUESTIONS_TEXT2
21057
+ ),
21058
+ translations.QUESTIONS_TEXT3
21059
+ )
21051
21060
  )
21052
21061
  : undefined
21053
21062
  )
@@ -21057,6 +21066,42 @@ var Confirmation = function () {
21057
21066
  );
21058
21067
  };
21059
21068
 
21069
+ var Confirmation = function () {
21070
+ var dispatch = useAppDispatch();
21071
+ var settings = React.useContext(SettingsContext);
21072
+ var navigate = settings.skipRouter ? function () {} : reactRouter.useNavigate();
21073
+ var bookingNumber = reactRedux.useSelector(selectBookingNumber);
21074
+ var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
21075
+ var isOption = reactRedux.useSelector(selectIsOption);
21076
+ var translations = reactRedux.useSelector(selectTranslations);
21077
+ React.useEffect(
21078
+ function () {
21079
+ if (!bookingNumber) {
21080
+ if (settings.skipRouter) {
21081
+ dispatch(setCurrentStep$1(OPTIONS_FORM_STEP));
21082
+ } else {
21083
+ navigate(
21084
+ ''
21085
+ .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
21086
+ .concat(settings.error.pathSuffix, '?')
21087
+ .concat(bookingQueryString)
21088
+ );
21089
+ }
21090
+ }
21091
+ },
21092
+ [bookingNumber]
21093
+ );
21094
+ return React__default['default'].createElement(SharedConfirmation, {
21095
+ bookingNumber: bookingNumber,
21096
+ isOption: isOption,
21097
+ isOffer: settings.isOffer,
21098
+ translations: translations.CONFIRMATION,
21099
+ companyContactPhone: settings.companyContactPhone,
21100
+ companyContactEmail: settings.companyContactEmail,
21101
+ homeUrl: settings.basePath || '/'
21102
+ });
21103
+ };
21104
+
21060
21105
  var Error$1 = function () {
21061
21106
  var dispatch = useAppDispatch();
21062
21107
  var settings = React.useContext(SettingsContext);
@@ -22717,9 +22762,9 @@ var FlightOptionsForm = function () {
22717
22762
  var handleSubmit = function (e) {
22718
22763
  if (settings.skipRouter) {
22719
22764
  if (settings.roomOptions.isHidden) {
22720
- dispatch(setCurrentStep(OPTIONS_FORM_STEP));
22765
+ dispatch(setCurrentStep$1(OPTIONS_FORM_STEP));
22721
22766
  } else {
22722
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
22767
+ dispatch(setCurrentStep$1(ROOM_OPTIONS_FORM_STEP));
22723
22768
  }
22724
22769
  } else {
22725
22770
  if (settings.roomOptions.isHidden) {
@@ -22800,7 +22845,7 @@ var FlightOptionsForm = function () {
22800
22845
  var filteredGroups = filterGroupedFlights(flightGroups, filterOptions);
22801
22846
  var resultCount = filteredGroups.length;
22802
22847
  var goPrevious = function () {
22803
- dispatch(setCurrentStep(TRAVELERS_FORM_STEP));
22848
+ dispatch(setCurrentStep$1(TRAVELERS_FORM_STEP));
22804
22849
  };
22805
22850
  return React__default['default'].createElement(
22806
22851
  React__default['default'].Fragment,
@@ -24851,9 +24896,9 @@ var OptionsForm = function () {
24851
24896
  var handleSubmit = function (e) {
24852
24897
  if (settings.skipRouter) {
24853
24898
  if (travelersFirstStep) {
24854
- dispatch(setCurrentStep(SUMMARY_STEP));
24899
+ dispatch(setCurrentStep$1(SUMMARY_STEP));
24855
24900
  } else {
24856
- dispatch(setCurrentStep(TRAVELERS_FORM_STEP));
24901
+ dispatch(setCurrentStep$1(TRAVELERS_FORM_STEP));
24857
24902
  }
24858
24903
  } else {
24859
24904
  if (travelersFirstStep) {
@@ -24962,9 +25007,9 @@ var OptionsForm = function () {
24962
25007
  }, []);
24963
25008
  var goPrevious = function () {
24964
25009
  if (settings.roomOptions.isHidden) {
24965
- dispatch(setCurrentStep(FLIGHT_OPTIONS_FORM_STEP));
25010
+ dispatch(setCurrentStep$1(FLIGHT_OPTIONS_FORM_STEP));
24966
25011
  } else {
24967
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
25012
+ dispatch(setCurrentStep$1(ROOM_OPTIONS_FORM_STEP));
24968
25013
  }
24969
25014
  };
24970
25015
  var previousUrl = settings.roomOptions.isHidden
@@ -25416,11 +25461,11 @@ var RoomOptionsForm = function () {
25416
25461
  var isLoading = reactRedux.useSelector(selectIsFetchingProductOptions);
25417
25462
  var rooms = buildSelectableRooms(packageRooms, settings.accommodations, settings.regimes, accommodationViews);
25418
25463
  var goPrevious = function () {
25419
- dispatch(setCurrentStep(FLIGHT_OPTIONS_FORM_STEP));
25464
+ dispatch(setCurrentStep$1(FLIGHT_OPTIONS_FORM_STEP));
25420
25465
  };
25421
25466
  var handleSubmit = function (e) {
25422
25467
  if (settings.skipRouter) {
25423
- dispatch(setCurrentStep(OPTIONS_FORM_STEP));
25468
+ dispatch(setCurrentStep$1(OPTIONS_FORM_STEP));
25424
25469
  } else {
25425
25470
  navigate(
25426
25471
  ''
@@ -26658,7 +26703,7 @@ var Summary = function () {
26658
26703
  : _e[0];
26659
26704
  if (!travelerFormValues) {
26660
26705
  if (settings.skipRouter) {
26661
- dispatch(setCurrentStep(TRAVELERS_FORM_STEP));
26706
+ dispatch(setCurrentStep$1(TRAVELERS_FORM_STEP));
26662
26707
  } else {
26663
26708
  navigate(''.concat(!settings.skipBasePathInRouting ? settings.basePath : '', '?').concat(bookingQueryString));
26664
26709
  }
@@ -26728,12 +26773,12 @@ var Summary = function () {
26728
26773
  case 2:
26729
26774
  bookingResponse = _b.sent();
26730
26775
  // Booking successfull
26731
- dispatch(setBookingNumber(bookingResponse.number));
26776
+ dispatch(setBookingNumber$1(bookingResponse.number));
26732
26777
  if (bookingResponse.paymentUrl) {
26733
26778
  window.location.href = bookingResponse.paymentUrl;
26734
26779
  } else {
26735
26780
  if (settings.skipRouter) {
26736
- dispatch(setCurrentStep(CONFIRMATION_STEP));
26781
+ dispatch(setCurrentStep$1(CONFIRMATION_STEP));
26737
26782
  } else {
26738
26783
  navigate(
26739
26784
  ''
@@ -26747,7 +26792,7 @@ var Summary = function () {
26747
26792
  case 3:
26748
26793
  _b.sent();
26749
26794
  if (settings.skipRouter) {
26750
- dispatch(setCurrentStep(ERROR_STEP));
26795
+ dispatch(setCurrentStep$1(ERROR_STEP));
26751
26796
  } else {
26752
26797
  navigate(
26753
26798
  ''
@@ -26855,7 +26900,7 @@ var Summary = function () {
26855
26900
  dispatch(fetchPriceDetails());
26856
26901
  };
26857
26902
  var goPrevious = function () {
26858
- dispatch(setCurrentStep(TRAVELERS_FORM_STEP));
26903
+ dispatch(setCurrentStep$1(TRAVELERS_FORM_STEP));
26859
26904
  };
26860
26905
  var translations = reactRedux.useSelector(selectTranslations);
26861
26906
  return React__default['default'].createElement(
@@ -27455,6 +27500,185 @@ var Summary = function () {
27455
27500
  );
27456
27501
  };
27457
27502
 
27503
+ function isValidEmail(email) {
27504
+ return !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i.test(email);
27505
+ }
27506
+ function getAge(birthDateText, startDateText) {
27507
+ var birthDate = new Date(birthDateText);
27508
+ var startDate = new Date(startDateText);
27509
+ var age = startDate.getFullYear() - birthDate.getFullYear();
27510
+ var m = startDate.getMonth() - birthDate.getMonth();
27511
+ if (m < 0 || (m === 0 && startDate.getDate() < birthDate.getDate())) {
27512
+ age--;
27513
+ }
27514
+ return age;
27515
+ }
27516
+ var validateForm = function (values, agentRequired, bookingType, translations, formFields, mainBookerFormFields) {
27517
+ var errors = {};
27518
+ var isFormFieldPresent = function (type) {
27519
+ var _a;
27520
+ return (_a =
27521
+ formFields === null || formFields === void 0
27522
+ ? void 0
27523
+ : formFields.some(function (f) {
27524
+ return f.type === type;
27525
+ })) !== null && _a !== void 0
27526
+ ? _a
27527
+ : true;
27528
+ };
27529
+ var isMainBookerFormFieldPresent = function (type) {
27530
+ var _a;
27531
+ return (_a =
27532
+ mainBookerFormFields === null || mainBookerFormFields === void 0
27533
+ ? void 0
27534
+ : mainBookerFormFields.some(function (f) {
27535
+ return f.type === type;
27536
+ })) !== null && _a !== void 0
27537
+ ? _a
27538
+ : true;
27539
+ };
27540
+ var formatTravelerField = function (room, pax, field) {
27541
+ return values.rooms.length > 1
27542
+ ? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [room, pax, field])
27543
+ : format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD, [pax, field]);
27544
+ };
27545
+ var formatTravelerIsNoAdult = function (room, pax) {
27546
+ return values.rooms.length > 1
27547
+ ? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_ADULT, [room, pax])
27548
+ : format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT, [pax]);
27549
+ };
27550
+ var formatTravelerIsNoChild = function (room, pax) {
27551
+ return values.rooms.length > 1
27552
+ ? format$1(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_CHILD, [room, pax])
27553
+ : format$1(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD, [pax]);
27554
+ };
27555
+ values.rooms.forEach(function (r, rIndex) {
27556
+ return r.adults.forEach(function (adult, index) {
27557
+ if (lodash.isEmpty(adult.gender) && isFormFieldPresent('gender')) {
27558
+ lodash.set(
27559
+ errors,
27560
+ 'rooms['.concat(rIndex, '].adults[').concat(index, '].gender'),
27561
+ formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.GENDER)
27562
+ );
27563
+ }
27564
+ if (lodash.isEmpty(adult.firstName) && isFormFieldPresent('firstName')) {
27565
+ lodash.set(
27566
+ errors,
27567
+ 'rooms['.concat(rIndex, '].adults[').concat(index, '].firstName'),
27568
+ formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME)
27569
+ );
27570
+ }
27571
+ if (lodash.isEmpty(adult.lastName) && isFormFieldPresent('lastName')) {
27572
+ lodash.set(
27573
+ errors,
27574
+ 'rooms['.concat(rIndex, '].adults[').concat(index, '].lastName'),
27575
+ formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME)
27576
+ );
27577
+ }
27578
+ if (isFormFieldPresent('birthDate')) {
27579
+ if (lodash.isEmpty(adult.birthDate)) {
27580
+ lodash.set(
27581
+ errors,
27582
+ 'rooms['.concat(rIndex, '].adults[').concat(index, '].birthDate'),
27583
+ formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.BIRTHDATE)
27584
+ );
27585
+ } else if (values.startDate) {
27586
+ var age = getAge(adult.birthDate, values.startDate);
27587
+ if (age <= CHILD_MAX_AGE) {
27588
+ lodash.set(errors, 'rooms['.concat(rIndex, '].adults[').concat(index, '].birthDate'), formatTravelerIsNoAdult(rIndex + 1, index + 1));
27589
+ }
27590
+ }
27591
+ }
27592
+ });
27593
+ });
27594
+ values.rooms.forEach(function (r, rIndex) {
27595
+ return r.children.forEach(function (child, index) {
27596
+ if (lodash.isEmpty(child.gender) && isFormFieldPresent('gender')) {
27597
+ lodash.set(
27598
+ errors,
27599
+ 'rooms['.concat(rIndex, '].children[').concat(index, '].gender'),
27600
+ formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.GENDER)
27601
+ );
27602
+ }
27603
+ if (lodash.isEmpty(child.firstName) && isFormFieldPresent('firstName')) {
27604
+ lodash.set(
27605
+ errors,
27606
+ 'children['.concat(index, '].firstName'),
27607
+ formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME)
27608
+ );
27609
+ }
27610
+ if (lodash.isEmpty(child.lastName) && isFormFieldPresent('lastName')) {
27611
+ lodash.set(
27612
+ errors,
27613
+ 'rooms['.concat(rIndex, '].children[').concat(index, '].lastName'),
27614
+ formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME)
27615
+ );
27616
+ }
27617
+ if (isFormFieldPresent('birthDate')) {
27618
+ if (lodash.isEmpty(child.birthDate)) {
27619
+ lodash.set(
27620
+ errors,
27621
+ 'rooms['.concat(rIndex, '].children[').concat(index, '].birthDate'),
27622
+ formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.BIRTHDATE)
27623
+ );
27624
+ } else if (values.startDate) {
27625
+ var age = getAge(child.birthDate, values.startDate);
27626
+ if (age > CHILD_MAX_AGE) {
27627
+ lodash.set(
27628
+ errors,
27629
+ 'rooms['.concat(rIndex, '].children[').concat(index, '].birthDate'),
27630
+ formatTravelerIsNoChild(rIndex + 1, r.adults.length + index + 1)
27631
+ );
27632
+ }
27633
+ }
27634
+ }
27635
+ });
27636
+ });
27637
+ if (values.mainBookerId < 0) {
27638
+ errors.mainBookerId = translations.TRAVELERS_FORM.VALIDATION.NO_MAIN_BOOKER_SELECTED;
27639
+ }
27640
+ if (bookingType != 'b2b' || (mainBookerFormFields === null || mainBookerFormFields === void 0 ? void 0 : mainBookerFormFields.length)) {
27641
+ if (lodash.isEmpty(values.street) && isMainBookerFormFieldPresent('street')) {
27642
+ errors.street = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.STREET]);
27643
+ }
27644
+ if (lodash.isEmpty(values.houseNumber) && isMainBookerFormFieldPresent('houseNumber')) {
27645
+ errors.houseNumber = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.HOUSE_NUMBER]);
27646
+ }
27647
+ if (lodash.isEmpty(values.zipCode) && isMainBookerFormFieldPresent('zipCode')) {
27648
+ errors.zipCode = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.ZIPCODE]);
27649
+ }
27650
+ if (lodash.isEmpty(values.place) && isMainBookerFormFieldPresent('place')) {
27651
+ errors.place = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.CITY]);
27652
+ }
27653
+ if (isMainBookerFormFieldPresent('email')) {
27654
+ if (lodash.isEmpty(values.email)) {
27655
+ errors.email = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.EMAIL]);
27656
+ } else if (isValidEmail(values.email)) {
27657
+ errors.email = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_IS_INVALID;
27658
+ }
27659
+ if (lodash.isEmpty(values.emailConfirmation)) {
27660
+ errors.emailConfirmation = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.REPEAT_EMAIL]);
27661
+ } else if (values.emailConfirmation !== values.email) {
27662
+ errors.emailConfirmation = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_DOES_NOT_MATCH;
27663
+ }
27664
+ }
27665
+ if (lodash.isEmpty(values.country) && isMainBookerFormFieldPresent('country')) {
27666
+ errors.country = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.COUNTRY]);
27667
+ }
27668
+ if (lodash.isEmpty(values.phone) && isMainBookerFormFieldPresent('phone')) {
27669
+ errors.phone = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
27670
+ }
27671
+ } else {
27672
+ if (lodash.isEmpty(values.phone)) {
27673
+ errors.phone = format$1(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
27674
+ }
27675
+ }
27676
+ if (agentRequired && !values.travelAgentId) {
27677
+ errors.travelAgentId = translations.TRAVELERS_FORM.VALIDATION.AGENT_IS_REQUIRED;
27678
+ }
27679
+ return errors;
27680
+ };
27681
+
27458
27682
  var LabeledInput = function (_a) {
27459
27683
  var name = _a.name,
27460
27684
  type = _a.type,
@@ -27522,6 +27746,144 @@ var LabeledSelect = function (_a) {
27522
27746
  );
27523
27747
  };
27524
27748
 
27749
+ var normalize = function (v) {
27750
+ return v == null ? '' : String(v);
27751
+ };
27752
+ var parseCombined = function (raw, countries) {
27753
+ var value = normalize(raw).trim();
27754
+ if (!value) return { prefix: '', number: '' };
27755
+ // Try to match a known prefix at the start. Prefer longest match.
27756
+ var sorted = __spreadArray([], countries, true).sort(function (a, b) {
27757
+ return b.phonePrefix.length - a.phonePrefix.length;
27758
+ });
27759
+ var hit = sorted.find(function (c) {
27760
+ return value.startsWith(c.phonePrefix);
27761
+ });
27762
+ if (hit) {
27763
+ var rest = value
27764
+ .slice(hit.phonePrefix.length)
27765
+ .trim()
27766
+ .replace(/^[-\s]+/, '');
27767
+ return { prefix: hit.phonePrefix, number: rest };
27768
+ }
27769
+ // Fallback: split on first space if it looks like a +prefix number
27770
+ var m = value.match(/^(\+\d{1,4})[\s-]*(.*)$/);
27771
+ if (m) return { prefix: m[1], number: m[2] };
27772
+ return { prefix: '', number: value };
27773
+ };
27774
+ var PhoneInput = function (_a) {
27775
+ var name = _a.name,
27776
+ required = _a.required,
27777
+ value = _a.value,
27778
+ label = _a.label,
27779
+ placeholder = _a.placeholder,
27780
+ extraClassName = _a.extraClassName,
27781
+ hasError = _a.hasError,
27782
+ countries = _a.countries,
27783
+ countryIso2 = _a.countryIso2,
27784
+ onChange = _a.onChange,
27785
+ onBlur = _a.onBlur;
27786
+ // Derive initial state from `value`
27787
+ var initialCountry = countries.find(function (c) {
27788
+ return c.iso2 === countryIso2;
27789
+ });
27790
+ var initial = React.useMemo(
27791
+ function () {
27792
+ return parseCombined(normalize(value), countries);
27793
+ },
27794
+ [value, countries]
27795
+ );
27796
+ var _b = React.useState(initial.prefix),
27797
+ prefix = _b[0],
27798
+ setPrefix = _b[1];
27799
+ var _c = React.useState(initial.number),
27800
+ number = _c[0],
27801
+ setNumber = _c[1];
27802
+ // Keep state in sync if the parent changes `value`
27803
+ React.useEffect(
27804
+ function () {
27805
+ var parsed = !prefix && !number && initialCountry ? { prefix: initialCountry.phonePrefix, number: '' } : parseCombined(normalize(value), countries);
27806
+ if (parsed.prefix) setPrefix(parsed.prefix);
27807
+ if (parsed.number) setNumber(parsed.number);
27808
+ },
27809
+ [value, countries, countryIso2]
27810
+ );
27811
+ var emitCombinedChange = function (e, nextPrefix, nextNumber) {
27812
+ // Combine with a space, unless the number already starts with a dash or space
27813
+ var combined = nextPrefix && nextNumber ? lodash.compact([nextPrefix, nextNumber]).join(' ') : null;
27814
+ onChange === null || onChange === void 0
27815
+ ? void 0
27816
+ : onChange(__assign(__assign({}, e), { type: 'change', target: { name: name, value: combined }, currentTarget: { name: name, value: combined } }));
27817
+ };
27818
+ var handleCountryBlur = function (e) {
27819
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
27820
+ };
27821
+ var onCountryChange = function (e) {
27822
+ var next = e.target.value;
27823
+ setPrefix(next);
27824
+ emitCombinedChange(e, next, number);
27825
+ };
27826
+ var onPhoneChange = function (e) {
27827
+ var cleaned = e.target.value.replace(/[^\d\s-]/g, '');
27828
+ setNumber(cleaned);
27829
+ emitCombinedChange(e, prefix, cleaned);
27830
+ };
27831
+ var handleNumberBlur = function (e) {
27832
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
27833
+ };
27834
+ // Ensure the select shows a reasonable default when prefix is empty
27835
+ var selectValue = prefix || '';
27836
+ return React__default['default'].createElement(
27837
+ 'label',
27838
+ { className: buildClassName(['form__group', extraClassName, hasError && 'form__group--error']) },
27839
+ label && React__default['default'].createElement('span', { className: 'form__label' }, lodash.compact([label, required && '*']).join(' ')),
27840
+ React__default['default'].createElement(
27841
+ 'div',
27842
+ { className: 'phone-input' },
27843
+ React__default['default'].createElement(
27844
+ 'div',
27845
+ { className: 'dropdown' },
27846
+ React__default['default'].createElement(
27847
+ 'select',
27848
+ {
27849
+ 'aria-label': label ? ''.concat(label, ' \u2013 country code') : 'Country calling code',
27850
+ name: ''.concat(name, '__country'),
27851
+ value: selectValue,
27852
+ onBlur: handleCountryBlur,
27853
+ onChange: onCountryChange
27854
+ },
27855
+ React__default['default'].createElement('option', { value: '', disabled: true }),
27856
+ countries === null || countries === void 0
27857
+ ? void 0
27858
+ : countries.map(function (option) {
27859
+ return React__default['default'].createElement(
27860
+ 'option',
27861
+ { key: option.iso2, value: option.phonePrefix },
27862
+ option.name,
27863
+ ' (',
27864
+ option.phonePrefix,
27865
+ ')'
27866
+ );
27867
+ })
27868
+ )
27869
+ ),
27870
+ React__default['default'].createElement('input', {
27871
+ 'aria-label': label ? ''.concat(label, ' \u2013 number') : 'Phone number',
27872
+ name: ''.concat(name, '__number'),
27873
+ type: 'tel',
27874
+ inputMode: 'tel',
27875
+ required: required,
27876
+ className: 'form__input',
27877
+ placeholder: placeholder,
27878
+ onChange: onPhoneChange,
27879
+ onBlur: handleNumberBlur,
27880
+ value: number
27881
+ }),
27882
+ React__default['default'].createElement('input', { type: 'hidden', name: name, value: lodash.compact([prefix, number]).join(' ') })
27883
+ )
27884
+ );
27885
+ };
27886
+
27525
27887
  var hasVisibleError = function (formik, key) {
27526
27888
  return lodash.get(formik.errors, key) && lodash.get(formik.touched, key);
27527
27889
  };
@@ -27667,323 +28029,6 @@ var TypeAheadInput = function (_a) {
27667
28029
  );
27668
28030
  };
27669
28031
 
27670
- function isValidEmail(email) {
27671
- return !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,24}$/i.test(email);
27672
- }
27673
- function getAge(birthDateText, startDateText) {
27674
- var birthDate = new Date(birthDateText);
27675
- var startDate = new Date(startDateText);
27676
- var age = startDate.getFullYear() - birthDate.getFullYear();
27677
- var m = startDate.getMonth() - birthDate.getMonth();
27678
- if (m < 0 || (m === 0 && startDate.getDate() < birthDate.getDate())) {
27679
- age--;
27680
- }
27681
- return age;
27682
- }
27683
- var validateForm = function (values, agentRequired, bookingType, translations, formFields, mainBookerFormFields) {
27684
- var errors = {};
27685
- var isFormFieldPresent = function (type) {
27686
- var _a;
27687
- return (_a =
27688
- formFields === null || formFields === void 0
27689
- ? void 0
27690
- : formFields.some(function (f) {
27691
- return f.type === type;
27692
- })) !== null && _a !== void 0
27693
- ? _a
27694
- : true;
27695
- };
27696
- var isMainBookerFormFieldPresent = function (type) {
27697
- var _a;
27698
- return (_a =
27699
- mainBookerFormFields === null || mainBookerFormFields === void 0
27700
- ? void 0
27701
- : mainBookerFormFields.some(function (f) {
27702
- return f.type === type;
27703
- })) !== null && _a !== void 0
27704
- ? _a
27705
- : true;
27706
- };
27707
- var formatTravelerField = function (room, pax, field) {
27708
- return values.rooms.length > 1
27709
- ? format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_FIELD, [room, pax, field])
27710
- : format(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_FIELD, [pax, field]);
27711
- };
27712
- var formatTravelerIsNoAdult = function (room, pax) {
27713
- return values.rooms.length > 1
27714
- ? format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_ADULT, [room, pax])
27715
- : format(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_ADULT, [pax]);
27716
- };
27717
- var formatTravelerIsNoChild = function (room, pax) {
27718
- return values.rooms.length > 1
27719
- ? format(translations.TRAVELERS_FORM.VALIDATION.TRAVELER_X_IS_NO_CHILD, [room, pax])
27720
- : format(translations.TRAVELERS_FORM.VALIDATION.SINGLE_ROOM_TRAVELER_X_IS_NO_CHILD, [pax]);
27721
- };
27722
- values.rooms.forEach(function (r, rIndex) {
27723
- return r.adults.forEach(function (adult, index) {
27724
- if (lodash.isEmpty(adult.gender) && isFormFieldPresent('gender')) {
27725
- lodash.set(
27726
- errors,
27727
- 'rooms['.concat(rIndex, '].adults[').concat(index, '].gender'),
27728
- formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.GENDER)
27729
- );
27730
- }
27731
- if (lodash.isEmpty(adult.firstName) && isFormFieldPresent('firstName')) {
27732
- lodash.set(
27733
- errors,
27734
- 'rooms['.concat(rIndex, '].adults[').concat(index, '].firstName'),
27735
- formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.FIRST_NAME)
27736
- );
27737
- }
27738
- if (lodash.isEmpty(adult.lastName) && isFormFieldPresent('lastName')) {
27739
- lodash.set(
27740
- errors,
27741
- 'rooms['.concat(rIndex, '].adults[').concat(index, '].lastName'),
27742
- formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.LAST_NAME)
27743
- );
27744
- }
27745
- if (isFormFieldPresent('birthDate')) {
27746
- if (lodash.isEmpty(adult.birthDate)) {
27747
- lodash.set(
27748
- errors,
27749
- 'rooms['.concat(rIndex, '].adults[').concat(index, '].birthDate'),
27750
- formatTravelerField(rIndex + 1, index + 1, translations.TRAVELERS_FORM.BIRTHDATE)
27751
- );
27752
- } else if (values.startDate) {
27753
- var age = getAge(adult.birthDate, values.startDate);
27754
- if (age <= CHILD_MAX_AGE) {
27755
- lodash.set(errors, 'rooms['.concat(rIndex, '].adults[').concat(index, '].birthDate'), formatTravelerIsNoAdult(rIndex + 1, index + 1));
27756
- }
27757
- }
27758
- }
27759
- });
27760
- });
27761
- values.rooms.forEach(function (r, rIndex) {
27762
- return r.children.forEach(function (child, index) {
27763
- if (lodash.isEmpty(child.gender) && isFormFieldPresent('gender')) {
27764
- lodash.set(
27765
- errors,
27766
- 'rooms['.concat(rIndex, '].children[').concat(index, '].gender'),
27767
- formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.GENDER)
27768
- );
27769
- }
27770
- if (lodash.isEmpty(child.firstName) && isFormFieldPresent('firstName')) {
27771
- lodash.set(
27772
- errors,
27773
- 'children['.concat(index, '].firstName'),
27774
- formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.FIRST_NAME)
27775
- );
27776
- }
27777
- if (lodash.isEmpty(child.lastName) && isFormFieldPresent('lastName')) {
27778
- lodash.set(
27779
- errors,
27780
- 'rooms['.concat(rIndex, '].children[').concat(index, '].lastName'),
27781
- formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.LAST_NAME)
27782
- );
27783
- }
27784
- if (isFormFieldPresent('birthDate')) {
27785
- if (lodash.isEmpty(child.birthDate)) {
27786
- lodash.set(
27787
- errors,
27788
- 'rooms['.concat(rIndex, '].children[').concat(index, '].birthDate'),
27789
- formatTravelerField(rIndex + 1, r.adults.length + index + 1, translations.TRAVELERS_FORM.BIRTHDATE)
27790
- );
27791
- } else if (values.startDate) {
27792
- var age = getAge(child.birthDate, values.startDate);
27793
- if (age > CHILD_MAX_AGE) {
27794
- lodash.set(
27795
- errors,
27796
- 'rooms['.concat(rIndex, '].children[').concat(index, '].birthDate'),
27797
- formatTravelerIsNoChild(rIndex + 1, r.adults.length + index + 1)
27798
- );
27799
- }
27800
- }
27801
- }
27802
- });
27803
- });
27804
- if (values.mainBookerId < 0) {
27805
- errors.mainBookerId = translations.TRAVELERS_FORM.VALIDATION.NO_MAIN_BOOKER_SELECTED;
27806
- }
27807
- if (bookingType != 'b2b' || (mainBookerFormFields === null || mainBookerFormFields === void 0 ? void 0 : mainBookerFormFields.length)) {
27808
- if (lodash.isEmpty(values.street) && isMainBookerFormFieldPresent('street')) {
27809
- errors.street = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.STREET]);
27810
- }
27811
- if (lodash.isEmpty(values.houseNumber) && isMainBookerFormFieldPresent('houseNumber')) {
27812
- errors.houseNumber = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.HOUSE_NUMBER]);
27813
- }
27814
- if (lodash.isEmpty(values.zipCode) && isMainBookerFormFieldPresent('zipCode')) {
27815
- errors.zipCode = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.ZIPCODE]);
27816
- }
27817
- if (lodash.isEmpty(values.place) && isMainBookerFormFieldPresent('place')) {
27818
- errors.place = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.CITY]);
27819
- }
27820
- if (isMainBookerFormFieldPresent('email')) {
27821
- if (lodash.isEmpty(values.email)) {
27822
- errors.email = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.EMAIL]);
27823
- } else if (isValidEmail(values.email)) {
27824
- errors.email = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_IS_INVALID;
27825
- }
27826
- if (lodash.isEmpty(values.emailConfirmation)) {
27827
- errors.emailConfirmation = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.REPEAT_EMAIL]);
27828
- } else if (values.emailConfirmation !== values.email) {
27829
- errors.emailConfirmation = translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_EMAIL_DOES_NOT_MATCH;
27830
- }
27831
- }
27832
- if (lodash.isEmpty(values.country) && isMainBookerFormFieldPresent('country')) {
27833
- errors.country = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.COUNTRY]);
27834
- }
27835
- if (lodash.isEmpty(values.phone) && isMainBookerFormFieldPresent('phone')) {
27836
- errors.phone = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
27837
- }
27838
- } else {
27839
- if (lodash.isEmpty(values.phone)) {
27840
- errors.phone = format(translations.TRAVELERS_FORM.VALIDATION.MAIN_BOOKER_FIELD, [translations.TRAVELERS_FORM.PHONE]);
27841
- }
27842
- }
27843
- if (agentRequired && !values.travelAgentId) {
27844
- errors.travelAgentId = translations.TRAVELERS_FORM.VALIDATION.AGENT_IS_REQUIRED;
27845
- }
27846
- return errors;
27847
- };
27848
-
27849
- var normalize = function (v) {
27850
- return v == null ? '' : String(v);
27851
- };
27852
- var parseCombined = function (raw, countries) {
27853
- var value = normalize(raw).trim();
27854
- if (!value) return { prefix: '', number: '' };
27855
- // Try to match a known prefix at the start. Prefer longest match.
27856
- var sorted = __spreadArray([], countries, true).sort(function (a, b) {
27857
- return b.phonePrefix.length - a.phonePrefix.length;
27858
- });
27859
- var hit = sorted.find(function (c) {
27860
- return value.startsWith(c.phonePrefix);
27861
- });
27862
- if (hit) {
27863
- var rest = value
27864
- .slice(hit.phonePrefix.length)
27865
- .trim()
27866
- .replace(/^[-\s]+/, '');
27867
- return { prefix: hit.phonePrefix, number: rest };
27868
- }
27869
- // Fallback: split on first space if it looks like a +prefix number
27870
- var m = value.match(/^(\+\d{1,4})[\s-]*(.*)$/);
27871
- if (m) return { prefix: m[1], number: m[2] };
27872
- return { prefix: '', number: value };
27873
- };
27874
- var PhoneInput = function (_a) {
27875
- var name = _a.name,
27876
- required = _a.required,
27877
- value = _a.value,
27878
- label = _a.label,
27879
- placeholder = _a.placeholder,
27880
- extraClassName = _a.extraClassName,
27881
- hasError = _a.hasError,
27882
- countries = _a.countries,
27883
- countryIso2 = _a.countryIso2,
27884
- onChange = _a.onChange,
27885
- onBlur = _a.onBlur;
27886
- // Derive initial state from `value`
27887
- var initialCountry = countries.find(function (c) {
27888
- return c.iso2 === countryIso2;
27889
- });
27890
- var initial = React.useMemo(
27891
- function () {
27892
- return parseCombined(normalize(value), countries);
27893
- },
27894
- [value, countries]
27895
- );
27896
- var _b = React.useState(initial.prefix),
27897
- prefix = _b[0],
27898
- setPrefix = _b[1];
27899
- var _c = React.useState(initial.number),
27900
- number = _c[0],
27901
- setNumber = _c[1];
27902
- // Keep state in sync if the parent changes `value`
27903
- React.useEffect(
27904
- function () {
27905
- var parsed = !prefix && !number && initialCountry ? { prefix: initialCountry.phonePrefix, number: '' } : parseCombined(normalize(value), countries);
27906
- if (parsed.prefix) setPrefix(parsed.prefix);
27907
- if (parsed.number) setNumber(parsed.number);
27908
- },
27909
- [value, countries, countryIso2]
27910
- );
27911
- var emitCombinedChange = function (e, nextPrefix, nextNumber) {
27912
- // Combine with a space, unless the number already starts with a dash or space
27913
- var combined = nextPrefix && nextNumber ? lodash.compact([nextPrefix, nextNumber]).join(' ') : null;
27914
- onChange === null || onChange === void 0
27915
- ? void 0
27916
- : onChange(__assign(__assign({}, e), { type: 'change', target: { name: name, value: combined }, currentTarget: { name: name, value: combined } }));
27917
- };
27918
- var handleCountryBlur = function (e) {
27919
- onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
27920
- };
27921
- var onCountryChange = function (e) {
27922
- var next = e.target.value;
27923
- setPrefix(next);
27924
- emitCombinedChange(e, next, number);
27925
- };
27926
- var onPhoneChange = function (e) {
27927
- var cleaned = e.target.value.replace(/[^\d\s-]/g, '');
27928
- setNumber(cleaned);
27929
- emitCombinedChange(e, prefix, cleaned);
27930
- };
27931
- var handleNumberBlur = function (e) {
27932
- onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
27933
- };
27934
- // Ensure the select shows a reasonable default when prefix is empty
27935
- var selectValue = prefix || '';
27936
- return React__default['default'].createElement(
27937
- 'label',
27938
- { className: buildClassName(['form__group', extraClassName, hasError && 'form__group--error']) },
27939
- label && React__default['default'].createElement('span', { className: 'form__label' }, lodash.compact([label, required && '*']).join(' ')),
27940
- React__default['default'].createElement(
27941
- 'div',
27942
- { className: 'phone-input' },
27943
- React__default['default'].createElement(
27944
- 'div',
27945
- { className: 'dropdown' },
27946
- React__default['default'].createElement(
27947
- 'select',
27948
- {
27949
- 'aria-label': label ? ''.concat(label, ' \u2013 country code') : 'Country calling code',
27950
- name: ''.concat(name, '__country'),
27951
- value: selectValue,
27952
- onBlur: handleCountryBlur,
27953
- onChange: onCountryChange
27954
- },
27955
- React__default['default'].createElement('option', { value: '', disabled: true }),
27956
- countries === null || countries === void 0
27957
- ? void 0
27958
- : countries.map(function (option) {
27959
- return React__default['default'].createElement(
27960
- 'option',
27961
- { key: option.iso2, value: option.phonePrefix },
27962
- option.name,
27963
- ' (',
27964
- option.phonePrefix,
27965
- ')'
27966
- );
27967
- })
27968
- )
27969
- ),
27970
- React__default['default'].createElement('input', {
27971
- 'aria-label': label ? ''.concat(label, ' \u2013 number') : 'Phone number',
27972
- name: ''.concat(name, '__number'),
27973
- type: 'tel',
27974
- inputMode: 'tel',
27975
- required: required,
27976
- className: 'form__input',
27977
- placeholder: placeholder,
27978
- onChange: onPhoneChange,
27979
- onBlur: handleNumberBlur,
27980
- value: number
27981
- }),
27982
- React__default['default'].createElement('input', { type: 'hidden', name: name, value: lodash.compact([prefix, number]).join(' ') })
27983
- )
27984
- );
27985
- };
27986
-
27987
28032
  function createTraveler(traveler, followNumber, personTranslation, isCompact) {
27988
28033
  if (isCompact) {
27989
28034
  return {
@@ -27994,27 +28039,27 @@ function createTraveler(traveler, followNumber, personTranslation, isCompact) {
27994
28039
  gender: '',
27995
28040
  age: traveler.age || 30
27996
28041
  };
27997
- } else {
27998
- return {
27999
- id: traveler.id,
28000
- firstName: '',
28001
- lastName: '',
28002
- birthDate: '',
28003
- gender: ''
28004
- };
28005
28042
  }
28043
+ return {
28044
+ id: traveler.id,
28045
+ firstName: '',
28046
+ lastName: '',
28047
+ birthDate: '',
28048
+ gender: ''
28049
+ };
28006
28050
  }
28007
- function createInitialValues(formRooms, startDate, agentAdressId, personTranslation, isCompact) {
28051
+ function createInitialValuesFromRooms(formRooms, startDate, agentAdressId, personTranslation, isCompact) {
28052
+ var _a, _b, _c;
28008
28053
  var followNumber = { number: 1 };
28009
28054
  var initialValues = {
28010
28055
  startDate: startDate,
28011
- rooms: formRooms.map(function (r) {
28056
+ rooms: formRooms.map(function (room) {
28012
28057
  return {
28013
- adults: r.adults.map(function (x) {
28014
- return createTraveler(x, followNumber, personTranslation, isCompact);
28058
+ adults: room.adults.map(function (traveler) {
28059
+ return createTraveler(traveler, followNumber, personTranslation, isCompact);
28015
28060
  }),
28016
- children: r.children.map(function (x) {
28017
- return createTraveler(x, followNumber, personTranslation, isCompact);
28061
+ children: room.children.map(function (traveler) {
28062
+ return createTraveler(traveler, followNumber, personTranslation, isCompact);
28018
28063
  })
28019
28064
  };
28020
28065
  }),
@@ -28031,344 +28076,363 @@ function createInitialValues(formRooms, startDate, agentAdressId, personTranslat
28031
28076
  travelAgentId: agentAdressId !== null && agentAdressId !== void 0 ? agentAdressId : 0,
28032
28077
  travelAgentName: ''
28033
28078
  };
28034
- if (initialValues.rooms && initialValues.rooms.length && initialValues.rooms[0].adults && initialValues.rooms[0].adults.length) {
28079
+ if (
28080
+ (_c = (_b = (_a = initialValues.rooms) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.adults) === null || _c === void 0
28081
+ ? void 0
28082
+ : _c[0]
28083
+ ) {
28035
28084
  initialValues.mainBookerId = initialValues.rooms[0].adults[0].id;
28036
28085
  }
28037
28086
  return initialValues;
28038
28087
  }
28039
- var TravelersForm = function () {
28040
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
28041
- var dispatch = useAppDispatch();
28042
- var settings = React.useContext(SettingsContext);
28043
- var navigate = settings.skipRouter ? function () {} : reactRouter.useNavigate();
28044
- var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
28045
- var startDate = reactRedux.useSelector(selectStartDate);
28046
- var formRooms = reactRedux.useSelector(selectFormRooms);
28047
- var bookingType = reactRedux.useSelector(selectBookingType);
28048
- var agents = reactRedux.useSelector(selectAgents);
28049
- var agentAdressId = reactRedux.useSelector(selectAgentAdressId);
28050
- var translations = reactRedux.useSelector(selectTranslations);
28051
- var travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
28052
- var isUnavailable = reactRedux.useSelector(selectIsUnavailable);
28053
- var bookingAttributes = reactRedux.useSelector(selectBookingAttributes);
28054
- var isFetching = reactRedux.useSelector(selectIsFetching);
28055
- var hasMounted = reactRedux.useSelector(selectHasMounted);
28056
- var countries = reactRedux.useSelector(selectCountries);
28057
- var useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
28058
- var showAllCountries = !!settings.travellers.showAllCountries;
28059
- var initialValues =
28060
- (_a = reactRedux.useSelector(selectTravelersFormValues)) !== null && _a !== void 0
28061
- ? _a
28062
- : createInitialValues(formRooms, startDate, agentAdressId, translations.TRAVELERS_FORM.PERSON, useCompactForm);
28063
- var _k = React.useState((_b = settings.agentRequired) !== null && _b !== void 0 ? _b : false),
28064
- showAgents = _k[0],
28065
- setShowAgents = _k[1];
28066
- var _l = React.useState(!settings.agentAdressId && !settings.hideAgentSelection),
28067
- showAgentSelection = _l[0],
28068
- setShowAgentSelection = _l[1];
28069
- var typeaheadAgents =
28070
- (_c = lodash.sortBy(
28071
- agents === null || agents === void 0
28072
- ? void 0
28073
- : agents.map(function (x) {
28074
- return {
28075
- key: ''.concat(x.id),
28076
- value: ''.concat(x.name, ' (').concat(x.postalCode, ' ').concat(x.location, ')'),
28077
- text: ''.concat(x.name, ' (').concat(x.postalCode, ' ').concat(x.location, ')')
28078
- };
28079
- }),
28080
- 'value'
28081
- )) !== null && _c !== void 0
28082
- ? _c
28083
- : [];
28084
- var _m = React.useState(typeaheadAgents),
28085
- filteredAgents = _m[0],
28086
- setFilteredAgents = _m[1];
28087
- var formik$1 = useCompactForm
28088
- ? formik.useFormik({
28089
- initialValues: initialValues,
28090
- validate: function (values) {},
28091
- onSubmit: function (values) {
28092
- dispatch(setFormValues(values));
28093
- dispatch(fetchPriceDetails());
28094
- if (settings.skipRouter) {
28095
- dispatch(setCurrentStep(SUMMARY_STEP));
28096
- } else {
28097
- navigate(
28098
- ''
28099
- .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
28100
- .concat(settings.summary.pathSuffix, '?')
28101
- .concat(bookingQueryString)
28102
- );
28103
- }
28104
- }
28088
+ function createInitialValuesFromEditablePackagingEntry(editablePackagingEntry, agentAdressId) {
28089
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
28090
+ var accommodationLine =
28091
+ (_a = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.lines) === null || _a === void 0
28092
+ ? void 0
28093
+ : _a.find(function (line) {
28094
+ var _a;
28095
+ return (_a = line.pax) === null || _a === void 0 ? void 0 : _a.length;
28096
+ });
28097
+ var pax =
28098
+ (_b = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.pax) !== null && _b !== void 0 ? _b : [];
28099
+ var roomNumbers = Array.from(
28100
+ new Set(
28101
+ ((_c = accommodationLine === null || accommodationLine === void 0 ? void 0 : accommodationLine.pax) !== null && _c !== void 0 ? _c : []).map(function (
28102
+ x
28103
+ ) {
28104
+ var _a;
28105
+ return (_a = x.room) !== null && _a !== void 0 ? _a : 0;
28105
28106
  })
28106
- : formik.useFormik({
28107
- initialValues: initialValues,
28108
- validate: function (values) {
28109
- return validateForm(
28110
- values,
28111
- settings.agentRequired,
28112
- bookingType,
28113
- translations,
28114
- settings.travellers.formFields,
28115
- settings.travellers.mainBookerFormFields
28116
- );
28117
- },
28118
- onSubmit: function (values) {
28119
- dispatch(setFormValues(values));
28120
- dispatch(fetchPackage());
28121
- if (settings.skipRouter) {
28122
- if (travelersFirstStep) {
28123
- dispatch(setCurrentStep(FLIGHT_OPTIONS_FORM_STEP));
28124
- } else {
28125
- dispatch(setCurrentStep(SUMMARY_STEP));
28126
- }
28127
- } else {
28128
- if (travelersFirstStep) {
28129
- navigate(
28130
- ''
28131
- .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
28132
- .concat(settings.flightOptions.pathSuffix, '?')
28133
- .concat(bookingQueryString)
28134
- );
28135
- } else {
28136
- navigate(
28137
- ''
28138
- .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
28139
- .concat(settings.summary.pathSuffix, '?')
28140
- .concat(bookingQueryString)
28141
- );
28142
- }
28143
- }
28144
- }
28107
+ )
28108
+ );
28109
+ var rooms = (roomNumbers.length ? roomNumbers : [0]).map(function (roomNumber) {
28110
+ var _a;
28111
+ var roomPax = ((_a = accommodationLine === null || accommodationLine === void 0 ? void 0 : accommodationLine.pax) !== null && _a !== void 0 ? _a : [])
28112
+ .filter(function (x) {
28113
+ var _a;
28114
+ return ((_a = x.room) !== null && _a !== void 0 ? _a : 0) === roomNumber;
28115
+ })
28116
+ .sort(function (a, b) {
28117
+ var _a, _b;
28118
+ return ((_a = a.order) !== null && _a !== void 0 ? _a : 0) - ((_b = b.order) !== null && _b !== void 0 ? _b : 0);
28145
28119
  });
28146
- React.useEffect(function () {
28147
- dispatch(fetchPriceDetails());
28148
- }, []);
28149
- React.useEffect(
28120
+ return {
28121
+ adults: roomPax.map(function (roomTraveler) {
28122
+ var _a, _b, _c, _d, _e;
28123
+ var entryPax =
28124
+ (_a = pax.find(function (x) {
28125
+ return x.id === roomTraveler.paxId;
28126
+ })) !== null && _a !== void 0
28127
+ ? _a
28128
+ : {};
28129
+ return {
28130
+ id: (_b = entryPax.id) !== null && _b !== void 0 ? _b : roomTraveler.paxId,
28131
+ firstName: (_c = entryPax.firstName) !== null && _c !== void 0 ? _c : '',
28132
+ lastName: (_d = entryPax.lastName) !== null && _d !== void 0 ? _d : '',
28133
+ birthDate: entryPax.dateOfBirth ? dateFns.format(new Date(entryPax.dateOfBirth), 'yyyy-MM-dd') : '',
28134
+ gender: (_e = entryPax.gender) !== null && _e !== void 0 ? _e : ''
28135
+ };
28136
+ }),
28137
+ children: []
28138
+ };
28139
+ });
28140
+ var values = createInitialValuesFromRooms(
28141
+ rooms.map(function (room) {
28142
+ return { adults: room.adults, children: room.children };
28143
+ }),
28144
+ (_e =
28145
+ (_d = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.lines) === null || _d === void 0
28146
+ ? void 0
28147
+ : _d[0]) === null || _e === void 0
28148
+ ? void 0
28149
+ : _e.from,
28150
+ agentAdressId
28151
+ );
28152
+ values.rooms = rooms;
28153
+ values.mainBookerId =
28154
+ (_l =
28155
+ (_g =
28156
+ (_f = pax.find(function (x) {
28157
+ return x.isMainBooker;
28158
+ })) === null || _f === void 0
28159
+ ? void 0
28160
+ : _f.id) !== null && _g !== void 0
28161
+ ? _g
28162
+ : (_k = (_j = (_h = rooms[0]) === null || _h === void 0 ? void 0 : _h.adults) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0
28163
+ ? void 0
28164
+ : _k.id) !== null && _l !== void 0
28165
+ ? _l
28166
+ : -1;
28167
+ var address = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.address;
28168
+ values.street = (_m = address === null || address === void 0 ? void 0 : address.street) !== null && _m !== void 0 ? _m : '';
28169
+ values.houseNumber = (_o = address === null || address === void 0 ? void 0 : address.houseNumber) !== null && _o !== void 0 ? _o : '';
28170
+ values.box = (_p = address === null || address === void 0 ? void 0 : address.box) !== null && _p !== void 0 ? _p : '';
28171
+ values.zipCode = (_q = address === null || address === void 0 ? void 0 : address.zipCode) !== null && _q !== void 0 ? _q : '';
28172
+ values.place = (_r = address === null || address === void 0 ? void 0 : address.place) !== null && _r !== void 0 ? _r : '';
28173
+ values.country = (_s = address === null || address === void 0 ? void 0 : address.country) !== null && _s !== void 0 ? _s : '';
28174
+ values.phone = (_t = address === null || address === void 0 ? void 0 : address.phone) !== null && _t !== void 0 ? _t : '';
28175
+ values.email = (_u = address === null || address === void 0 ? void 0 : address.email) !== null && _u !== void 0 ? _u : '';
28176
+ values.emailConfirmation = (_v = address === null || address === void 0 ? void 0 : address.email) !== null && _v !== void 0 ? _v : '';
28177
+ values.travelAgentId =
28178
+ (_x = (_w = address === null || address === void 0 ? void 0 : address.travelAgentId) !== null && _w !== void 0 ? _w : agentAdressId) !== null &&
28179
+ _x !== void 0
28180
+ ? _x
28181
+ : 0;
28182
+ return values;
28183
+ }
28184
+ function applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry, values) {
28185
+ var _a;
28186
+ var travelers = values.rooms.flatMap(function (room) {
28187
+ return __spreadArray(__spreadArray([], room.adults, true), room.children, true);
28188
+ });
28189
+ console.log('Applying form values:', values);
28190
+ console.log('editablePackagingEntry:', editablePackagingEntry);
28191
+ return __assign(__assign({}, editablePackagingEntry), {
28192
+ pax: ((_a = editablePackagingEntry.pax) !== null && _a !== void 0 ? _a : []).map(function (pax) {
28193
+ var _a, _b;
28194
+ var traveler = travelers.find(function (x) {
28195
+ return x.id === pax.id;
28196
+ });
28197
+ if (!traveler) return pax;
28198
+ return __assign(__assign({}, pax), {
28199
+ firstName: (_a = traveler.firstName) !== null && _a !== void 0 ? _a : '',
28200
+ lastName: (_b = traveler.lastName) !== null && _b !== void 0 ? _b : '',
28201
+ dateOfBirth: traveler.birthDate || null,
28202
+ isMainBooker: traveler.id === values.mainBookerId
28203
+ });
28204
+ }),
28205
+ address: __assign(__assign({}, editablePackagingEntry.address), {
28206
+ street: values.street,
28207
+ houseNumber: values.houseNumber,
28208
+ box: values.box,
28209
+ zipCode: values.zipCode,
28210
+ place: values.place,
28211
+ country: values.country,
28212
+ travelAgentId: values.travelAgentId,
28213
+ phone: values.phone,
28214
+ email: values.email
28215
+ })
28216
+ });
28217
+ }
28218
+ var SharedTravelersForm = function (_a) {
28219
+ var _b, _c, _d, _e, _f, _g;
28220
+ var formik = _a.formik,
28221
+ translations = _a.translations,
28222
+ travellersSettings = _a.travellersSettings,
28223
+ countries = _a.countries,
28224
+ agents = _a.agents,
28225
+ bookingType = _a.bookingType,
28226
+ agentAdressId = _a.agentAdressId,
28227
+ _h = _a.travelersFirstStep,
28228
+ travelersFirstStep = _h === void 0 ? false : _h,
28229
+ _j = _a.isUnavailable,
28230
+ isUnavailable = _j === void 0 ? false : _j,
28231
+ _k = _a.useCompactForm,
28232
+ useCompactForm = _k === void 0 ? false : _k,
28233
+ _l = _a.showAllCountries,
28234
+ showAllCountries = _l === void 0 ? false : _l,
28235
+ _m = _a.showAgentSelection,
28236
+ showAgentSelection = _m === void 0 ? false : _m,
28237
+ _o = _a.initialShowAgents,
28238
+ initialShowAgents = _o === void 0 ? false : _o,
28239
+ renderPreviousButton = _a.renderPreviousButton,
28240
+ onBookingTypeChange = _a.onBookingTypeChange;
28241
+ var _p = React.useState(initialShowAgents),
28242
+ showAgents = _p[0],
28243
+ setShowAgents = _p[1];
28244
+ var typeaheadAgents = React.useMemo(
28150
28245
  function () {
28151
28246
  var _a;
28152
- if (
28153
- !((_a = bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms) === null || _a === void 0
28247
+ return (_a = lodash.sortBy(
28248
+ agents === null || agents === void 0
28154
28249
  ? void 0
28155
- : _a.length) ||
28156
- isFetching
28157
- )
28158
- return;
28159
- if (!hasMounted) {
28160
- dispatch(setHasMounted(true));
28161
- return;
28162
- }
28163
- var fetchAll = function () {
28164
- return __awaiter(void 0, void 0, void 0, function () {
28165
- return __generator(this, function (_a) {
28166
- switch (_a.label) {
28167
- case 0:
28168
- dispatch(setIsFetching(true));
28169
- _a.label = 1;
28170
- case 1:
28171
- _a.trys.push([1, , 4, 5]);
28172
- return [4 /*yield*/, dispatch(fetchPackage())];
28173
- case 2:
28174
- _a.sent();
28175
- return [4 /*yield*/, dispatch(fetchPriceDetails())];
28176
- case 3:
28177
- _a.sent();
28178
- return [3 /*break*/, 5];
28179
- case 4:
28180
- dispatch(setIsFetching(false));
28181
- return [7 /*endfinally*/];
28182
- case 5:
28183
- return [2 /*return*/];
28184
- }
28185
- });
28186
- });
28187
- };
28188
- fetchAll();
28189
- },
28190
- [bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms]
28191
- );
28192
- // Update URL querystring when form data changes
28193
- React.useEffect(
28194
- function () {
28195
- if (settings.skipRouter || !travelersFirstStep) return;
28196
- var params = new URLSearchParams(bookingQueryString);
28197
- params.delete('rooms');
28198
- var roomsString = formik$1.values.rooms
28199
- .map(function (room) {
28200
- var adults = room.adults ? room.adults.length : 0;
28201
- var childAges =
28202
- room.children && room.children.length
28203
- ? room.children
28204
- .map(function (c) {
28205
- return c.age;
28206
- })
28207
- .join(',')
28208
- : '';
28209
- return 'adults:'.concat(adults, ',childAges:(').concat(childAges, ')');
28210
- })
28211
- .map(function (s) {
28212
- return '('.concat(s, ')');
28213
- })
28214
- .join(',');
28215
- var query = params.toString();
28216
- if (query) {
28217
- query += '&rooms=('.concat(roomsString, ')');
28218
- } else {
28219
- query = 'rooms=('.concat(roomsString, ')');
28220
- }
28221
- var newUrl = ''.concat(window.location.pathname, '?').concat(query);
28222
- navigate(newUrl, { replace: true });
28223
- },
28224
- [formik$1.values]
28225
- );
28226
- React.useEffect(
28227
- function () {
28228
- if (agents && settings.affiliateSlug) {
28229
- var agent_1 = agents.find(function (x) {
28230
- return x.affiliateSlug && x.affiliateSlug === settings.affiliateSlug;
28231
- });
28232
- if (!agent_1) return;
28233
- var formValues = produce__default['default'](formik$1.values, function (values) {
28234
- (values.travelAgentId = Number(agent_1.id)), (values.travelAgentName = agent_1.name);
28235
- });
28236
- formik$1.setValues(formValues, false);
28237
- dispatch(setFormValues(formValues));
28238
- setShowAgentSelection(false);
28239
- }
28250
+ : agents.map(function (agent) {
28251
+ return {
28252
+ key: ''.concat(agent.id),
28253
+ value: ''
28254
+ .concat(agent.name)
28255
+ .concat(agent.postalCode || agent.location ? ' ('.concat(lodash.compact([agent.postalCode, agent.location]).join(' '), ')') : ''),
28256
+ text: ''
28257
+ .concat(agent.name)
28258
+ .concat(agent.postalCode || agent.location ? ' ('.concat(lodash.compact([agent.postalCode, agent.location]).join(' '), ')') : '')
28259
+ };
28260
+ }),
28261
+ 'value'
28262
+ )) !== null && _a !== void 0
28263
+ ? _a
28264
+ : [];
28240
28265
  },
28241
- [agents, settings.affiliateSlug]
28266
+ [agents]
28242
28267
  );
28243
- var handleMainBookerChange = function (e) {
28244
- var id = parseInt(e.currentTarget.value);
28245
- formik$1.setFieldValue('mainBookerId', id);
28268
+ var _q = React.useState(typeaheadAgents),
28269
+ filteredAgents = _q[0],
28270
+ setFilteredAgents = _q[1];
28271
+ var flatErrors = flat__default['default'](formik.errors);
28272
+ var errorKeys = Object.keys(flatErrors).filter(function (key) {
28273
+ return lodash.get(formik.touched, key);
28274
+ });
28275
+ var hasVisibleError = function (key) {
28276
+ return lodash.get(formik.errors, key) && lodash.get(formik.touched, key);
28246
28277
  };
28247
28278
  var mainBooker =
28248
- (_d = formik$1.values.rooms.find(function (r) {
28249
- return r.adults.find(function (traveler) {
28250
- return traveler.id === formik$1.values.mainBookerId;
28279
+ (_b = formik.values.rooms.find(function (room) {
28280
+ return room.adults.find(function (traveler) {
28281
+ return traveler.id === formik.values.mainBookerId;
28251
28282
  });
28252
- })) === null || _d === void 0
28283
+ })) === null || _b === void 0
28253
28284
  ? void 0
28254
- : _d.adults.find(function (traveler) {
28255
- return traveler.id === formik$1.values.mainBookerId;
28285
+ : _b.adults.find(function (traveler) {
28286
+ return traveler.id === formik.values.mainBookerId;
28256
28287
  });
28288
+ var countryOptions = __spreadArray(
28289
+ [{ key: 'empty', value: undefined, label: translations.TRAVELERS_FORM.SELECT_COUNTRY }],
28290
+ showAllCountries
28291
+ ? (_c =
28292
+ countries === null || countries === void 0
28293
+ ? void 0
28294
+ : countries.map(function (country) {
28295
+ return { key: country.iso2, value: country.iso2, label: country.name };
28296
+ })) !== null && _c !== void 0
28297
+ ? _c
28298
+ : []
28299
+ : (_e =
28300
+ (_d = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.countries) === null || _d === void 0
28301
+ ? void 0
28302
+ : _d.map(function (country) {
28303
+ return { key: country.iso2, value: country.iso2, label: country.name };
28304
+ })) !== null && _e !== void 0
28305
+ ? _e
28306
+ : [
28307
+ { key: 'be', value: 'be', label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM },
28308
+ { key: 'nl', value: 'nl', label: translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS },
28309
+ { key: 'fr', value: 'fr', label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE }
28310
+ ],
28311
+ true
28312
+ );
28313
+ var handleMainBookerChange = function (event) {
28314
+ formik.setFieldValue('mainBookerId', parseInt(event.currentTarget.value, 10));
28315
+ };
28257
28316
  var handleAgentChange = function (value) {
28258
- var filteredAgents = typeaheadAgents.filter(function (x) {
28259
- return x.value.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) > -1;
28260
- });
28261
- setFilteredAgents(filteredAgents);
28262
- formik$1.setFieldValue('travelAgentName', value);
28317
+ setFilteredAgents(
28318
+ typeaheadAgents.filter(function (x) {
28319
+ return x.value.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) > -1;
28320
+ })
28321
+ );
28322
+ formik.setFieldValue('travelAgentName', value);
28263
28323
  };
28264
28324
  var handleAgentSelect = function (key) {
28265
28325
  var _a;
28266
28326
  var agent = typeaheadAgents.find(function (x) {
28267
28327
  return x.key === key;
28268
28328
  });
28269
- formik$1.setValues(
28270
- __assign(__assign({}, formik$1.values), {
28329
+ formik.setValues(
28330
+ __assign(__assign({}, formik.values), {
28271
28331
  travelAgentId: Number(agent === null || agent === void 0 ? void 0 : agent.key),
28272
28332
  travelAgentName: (_a = agent === null || agent === void 0 ? void 0 : agent.value) !== null && _a !== void 0 ? _a : ''
28273
28333
  })
28274
28334
  );
28275
- var bookingType = 'b2b2c';
28276
- if (agentAdressId && agentAdressId != 0) {
28277
- bookingType = 'b2b';
28278
- }
28279
- dispatch(setBookingType(bookingType));
28335
+ onBookingTypeChange === null || onBookingTypeChange === void 0 ? void 0 : onBookingTypeChange(agentAdressId && agentAdressId !== 0 ? 'b2b' : 'b2b2c');
28280
28336
  };
28281
28337
  var handleAgentClear = function () {
28282
- formik$1.setValues(__assign(__assign({}, formik$1.values), { travelAgentId: 0, travelAgentName: '' }));
28283
- dispatch(setBookingType('b2c'));
28338
+ formik.setValues(__assign(__assign({}, formik.values), { travelAgentId: 0, travelAgentName: '' }));
28339
+ onBookingTypeChange === null || onBookingTypeChange === void 0 ? void 0 : onBookingTypeChange('b2c');
28340
+ };
28341
+ var toggleAgent = function (value) {
28342
+ setShowAgents(value);
28343
+ if (!value) {
28344
+ handleAgentClear();
28345
+ setFilteredAgents([]);
28346
+ }
28284
28347
  };
28285
28348
  var handleAddTraveler = function (roomIndex) {
28286
- var rooms = __spreadArray([], formik$1.values.rooms, true);
28287
- var newAdult = {
28288
- id: Date.now(),
28289
- firstName: '',
28290
- lastName: '',
28291
- birthDate: '',
28292
- gender: ''
28293
- };
28349
+ var rooms = __spreadArray([], formik.values.rooms, true);
28350
+ var newAdult = { id: Date.now(), firstName: '', lastName: '', birthDate: '', gender: '' };
28294
28351
  rooms[roomIndex] = __assign(__assign({}, rooms[roomIndex]), { adults: __spreadArray(__spreadArray([], rooms[roomIndex].adults, true), [newAdult], false) });
28295
- formik$1.setFieldValue('rooms', rooms);
28352
+ formik.setFieldValue('rooms', rooms);
28296
28353
  };
28297
28354
  var handleRemoveTraveler = function (roomIndex, travelerIndex) {
28298
- var rooms = __spreadArray([], formik$1.values.rooms, true);
28355
+ var rooms = __spreadArray([], formik.values.rooms, true);
28299
28356
  var adults = __spreadArray([], rooms[roomIndex].adults, true);
28300
- if (adults.length <= 1) {
28301
- return;
28302
- }
28357
+ if (adults.length <= 1) return;
28303
28358
  adults.splice(travelerIndex, 1);
28304
28359
  rooms[roomIndex] = __assign(__assign({}, rooms[roomIndex]), { adults: adults });
28305
- formik$1.setFieldValue('rooms', rooms);
28360
+ formik.setFieldValue('rooms', rooms);
28306
28361
  };
28307
28362
  var handleAddRoom = function () {
28308
- var rooms = __spreadArray([], formik$1.values.rooms, true);
28309
- var newAdult = {
28310
- id: Date.now(),
28311
- firstName: '',
28312
- lastName: '',
28313
- birthDate: '',
28314
- gender: ''
28315
- };
28316
- rooms.push({ adults: [newAdult], children: [] });
28317
- formik$1.setFieldValue('rooms', rooms);
28363
+ var rooms = __spreadArray([], formik.values.rooms, true);
28364
+ rooms.push({ adults: [{ id: Date.now(), firstName: '', lastName: '', birthDate: '', gender: '' }], children: [] });
28365
+ formik.setFieldValue('rooms', rooms);
28318
28366
  };
28319
28367
  var handleRemoveRoom = function (roomIndex) {
28320
- var rooms = __spreadArray([], formik$1.values.rooms, true);
28368
+ var rooms = __spreadArray([], formik.values.rooms, true);
28321
28369
  rooms.splice(roomIndex, 1);
28322
- formik$1.setFieldValue('rooms', rooms);
28370
+ formik.setFieldValue('rooms', rooms);
28323
28371
  };
28324
- var toggleAgent = function (value) {
28325
- setShowAgents(value);
28326
- if (!value) {
28327
- handleAgentClear();
28328
- setFilteredAgents([]);
28329
- }
28330
- };
28331
- var goPrevious = function () {
28332
- dispatch(setCurrentStep(OPTIONS_FORM_STEP));
28333
- };
28334
- var flatErrors = flat__default['default'](formik$1.errors);
28335
- var errorKeys = Object.keys(flatErrors).filter(function (key) {
28336
- return lodash.get(formik$1.touched, key);
28337
- });
28338
- var hasVisibleError = function (key) {
28339
- return lodash.get(formik$1.errors, key) && lodash.get(formik$1.touched, key);
28372
+ var renderGenderControl = function (name, value) {
28373
+ return React__default['default'].createElement(
28374
+ 'div',
28375
+ { className: buildClassName(['form__group', hasVisibleError(name) && 'form__group--error']) },
28376
+ React__default['default'].createElement('label', { className: 'form__label' }, translations.TRAVELERS_FORM.GENDER_ID, ' *'),
28377
+ React__default['default'].createElement(
28378
+ 'div',
28379
+ { className: 'radiobutton-group' },
28380
+ [
28381
+ ['m', translations.TRAVELERS_FORM.MALE_GENDER],
28382
+ ['f', translations.TRAVELERS_FORM.FEMALE_GENDER]
28383
+ ].map(function (_a) {
28384
+ var gender = _a[0],
28385
+ label = _a[1];
28386
+ return React__default['default'].createElement(
28387
+ 'div',
28388
+ { className: 'radiobutton', key: gender },
28389
+ React__default['default'].createElement(
28390
+ 'label',
28391
+ { className: 'radiobutton__label' },
28392
+ React__default['default'].createElement('input', {
28393
+ type: 'radio',
28394
+ className: 'radiobutton__input',
28395
+ name: name,
28396
+ onChange: formik.handleChange,
28397
+ onBlur: formik.handleBlur,
28398
+ value: gender,
28399
+ checked: value.gender === gender
28400
+ }),
28401
+ label
28402
+ )
28403
+ );
28404
+ })
28405
+ )
28406
+ );
28340
28407
  };
28341
28408
  var getControl = function (type, value, name) {
28342
- var _a, _b, _c, _d, _e, _f;
28409
+ var _a;
28343
28410
  switch (type) {
28344
- case 'gender': {
28345
- return React__default['default'].createElement(GenderControl, { translations: translations, value: value, formik: formik$1, name: name });
28346
- }
28347
- case 'firstName': {
28411
+ case 'gender':
28412
+ return React__default['default'].createElement(GenderControl, { translations: translations, value: value, formik: formik, name: name });
28413
+ case 'firstName':
28348
28414
  return React__default['default'].createElement(LabeledInput, {
28349
28415
  hasError: hasVisibleError(name),
28350
28416
  extraClassName: 'form__group--md-33',
28351
28417
  label: translations.TRAVELERS_FORM.FIRST_NAME,
28352
28418
  required: true,
28353
28419
  name: name,
28354
- onChange: formik$1.handleChange,
28355
- onBlur: formik$1.handleBlur,
28420
+ onChange: formik.handleChange,
28421
+ onBlur: formik.handleBlur,
28356
28422
  value: value.firstName
28357
28423
  });
28358
- }
28359
- case 'lastName': {
28424
+ case 'lastName':
28360
28425
  return React__default['default'].createElement(LabeledInput, {
28361
28426
  hasError: hasVisibleError(name),
28362
28427
  extraClassName: 'form__group--md-33',
28363
28428
  label: translations.TRAVELERS_FORM.LAST_NAME,
28364
28429
  required: true,
28365
28430
  name: name,
28366
- onChange: formik$1.handleChange,
28367
- onBlur: formik$1.handleBlur,
28431
+ onChange: formik.handleChange,
28432
+ onBlur: formik.handleBlur,
28368
28433
  value: value.lastName
28369
28434
  });
28370
- }
28371
- case 'birthDate': {
28435
+ case 'birthDate':
28372
28436
  return React__default['default'].createElement(LabeledInput, {
28373
28437
  type: 'date',
28374
28438
  hasError: hasVisibleError(name),
@@ -28376,71 +28440,35 @@ var TravelersForm = function () {
28376
28440
  label: translations.TRAVELERS_FORM.BIRTHDATE,
28377
28441
  required: true,
28378
28442
  name: name,
28379
- onChange: formik$1.handleChange,
28380
- onBlur: formik$1.handleBlur,
28443
+ onChange: formik.handleChange,
28444
+ onBlur: formik.handleBlur,
28381
28445
  value: value.birthDate
28382
28446
  });
28383
- }
28384
- case 'country': {
28447
+ case 'country':
28385
28448
  return React__default['default'].createElement(LabeledSelect, {
28386
28449
  hasError: hasVisibleError('country'),
28387
28450
  label: translations.TRAVELERS_FORM.COUNTRY,
28388
28451
  required: true,
28389
28452
  name: 'country',
28390
- onChange: formik$1.handleChange,
28391
- onBlur: formik$1.handleBlur,
28392
- value: formik$1.values.country,
28393
- options: __spreadArray(
28394
- [
28395
- {
28396
- key: 'empty',
28397
- value: undefined,
28398
- label: translations.TRAVELERS_FORM.SELECT_COUNTRY
28399
- }
28400
- ],
28401
- showAllCountries
28402
- ? (_a =
28403
- countries === null || countries === void 0
28404
- ? void 0
28405
- : countries.map(function (country) {
28406
- return {
28407
- key: country.iso2,
28408
- value: country.iso2,
28409
- label: country.name
28410
- };
28411
- })) !== null && _a !== void 0
28412
- ? _a
28413
- : []
28414
- : (_d =
28415
- (_c = (_b = settings.travellers) === null || _b === void 0 ? void 0 : _b.countries) === null || _c === void 0
28416
- ? void 0
28417
- : _c.map(function (country) {
28418
- return {
28419
- key: country.iso2,
28420
- value: country.iso2,
28421
- label: country.name
28422
- };
28423
- })) !== null && _d !== void 0
28424
- ? _d
28425
- : [],
28426
- true
28427
- )
28453
+ onChange: formik.handleChange,
28454
+ onBlur: formik.handleBlur,
28455
+ value: formik.values.country,
28456
+ options: countryOptions
28428
28457
  });
28429
- }
28430
- case 'phone': {
28458
+ case 'phone':
28431
28459
  return React__default['default'].createElement(PhoneInput, {
28432
- countries: (_f = (_e = settings.travellers) === null || _e === void 0 ? void 0 : _e.countries) !== null && _f !== void 0 ? _f : [],
28433
- countryIso2: formik$1.values.country,
28460
+ countries:
28461
+ (_a = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.countries) !== null && _a !== void 0 ? _a : [],
28462
+ countryIso2: formik.values.country,
28434
28463
  hasError: hasVisibleError('phone'),
28435
28464
  label: translations.TRAVELERS_FORM.PHONE,
28436
28465
  required: true,
28437
28466
  name: 'phone',
28438
- onChange: formik$1.handleChange,
28439
- onBlur: formik$1.handleBlur,
28440
- value: formik$1.values.phone
28467
+ onChange: formik.handleChange,
28468
+ onBlur: formik.handleBlur,
28469
+ value: formik.values.phone
28441
28470
  });
28442
- }
28443
- case 'email': {
28471
+ case 'email':
28444
28472
  return React__default['default'].createElement(
28445
28473
  React__default['default'].Fragment,
28446
28474
  null,
@@ -28451,9 +28479,9 @@ var TravelersForm = function () {
28451
28479
  label: translations.TRAVELERS_FORM.EMAIL,
28452
28480
  required: true,
28453
28481
  name: 'email',
28454
- onChange: formik$1.handleChange,
28455
- onBlur: formik$1.handleBlur,
28456
- value: formik$1.values.email
28482
+ onChange: formik.handleChange,
28483
+ onBlur: formik.handleBlur,
28484
+ value: formik.values.email
28457
28485
  }),
28458
28486
  React__default['default'].createElement(LabeledInput, {
28459
28487
  type: 'email',
@@ -28462,14 +28490,173 @@ var TravelersForm = function () {
28462
28490
  label: translations.TRAVELERS_FORM.REPEAT_EMAIL,
28463
28491
  required: true,
28464
28492
  name: 'emailConfirmation',
28465
- onChange: formik$1.handleChange,
28466
- onBlur: formik$1.handleBlur,
28467
- value: formik$1.values.emailConfirmation
28493
+ onChange: formik.handleChange,
28494
+ onBlur: formik.handleBlur,
28495
+ value: formik.values.emailConfirmation
28468
28496
  })
28469
28497
  );
28470
- }
28498
+ case 'street':
28499
+ return React__default['default'].createElement(LabeledInput, {
28500
+ hasError: hasVisibleError('street'),
28501
+ extraClassName: 'form__group--50 form__group--sm-60',
28502
+ label: translations.TRAVELERS_FORM.STREET,
28503
+ required: true,
28504
+ name: 'street',
28505
+ onChange: formik.handleChange,
28506
+ onBlur: formik.handleBlur,
28507
+ value: formik.values.street
28508
+ });
28509
+ case 'houseNumber':
28510
+ return React__default['default'].createElement(LabeledInput, {
28511
+ hasError: hasVisibleError('houseNumber'),
28512
+ extraClassName: 'form__group--30 form__group--sm-20',
28513
+ label: translations.TRAVELERS_FORM.HOUSE_NUMBER,
28514
+ required: true,
28515
+ name: 'houseNumber',
28516
+ onChange: formik.handleChange,
28517
+ onBlur: formik.handleBlur,
28518
+ value: formik.values.houseNumber
28519
+ });
28520
+ case 'box':
28521
+ return React__default['default'].createElement(LabeledInput, {
28522
+ hasError: hasVisibleError('box'),
28523
+ extraClassName: 'form__group--20',
28524
+ label: translations.TRAVELERS_FORM.POST_BOX,
28525
+ name: 'box',
28526
+ onChange: formik.handleChange,
28527
+ onBlur: formik.handleBlur,
28528
+ value: formik.values.box
28529
+ });
28530
+ case 'zipCode':
28531
+ return React__default['default'].createElement(LabeledInput, {
28532
+ hasError: hasVisibleError('zipCode'),
28533
+ extraClassName: 'form__group--40 form__group--sm-20',
28534
+ label: translations.TRAVELERS_FORM.ZIPCODE,
28535
+ required: true,
28536
+ name: 'zipCode',
28537
+ onChange: formik.handleChange,
28538
+ onBlur: formik.handleBlur,
28539
+ value: formik.values.zipCode
28540
+ });
28541
+ case 'place':
28542
+ return React__default['default'].createElement(LabeledInput, {
28543
+ hasError: hasVisibleError('place'),
28544
+ extraClassName: 'form__group--60 form__group--sm-40',
28545
+ label: translations.TRAVELERS_FORM.CITY,
28546
+ required: true,
28547
+ name: 'place',
28548
+ onChange: formik.handleChange,
28549
+ onBlur: formik.handleBlur,
28550
+ value: formik.values.place
28551
+ });
28552
+ default:
28553
+ return null;
28471
28554
  }
28472
28555
  };
28556
+ var renderRoomLabel = function (room) {
28557
+ var _a, _b;
28558
+ return lodash
28559
+ .compact([
28560
+ room.adults.length,
28561
+ room.adults.length === 1 && ' '.concat(translations.TRAVELERS_FORM.ADULT),
28562
+ room.adults.length > 1 && ' '.concat(translations.TRAVELERS_FORM.ADULTS),
28563
+ ((_a = room.adults) === null || _a === void 0 ? void 0 : _a.length) && ((_b = room.children) === null || _b === void 0 ? void 0 : _b.length) && ', ',
28564
+ room.children.length,
28565
+ room.children.length === 1 && ' '.concat(translations.TRAVELERS_FORM.CHILD),
28566
+ room.children.length > 1 && ' '.concat(translations.TRAVELERS_FORM.CHILDREN)
28567
+ ])
28568
+ .join('');
28569
+ };
28570
+ var renderTravelerFields = function (travelerValues, namePrefix, isAdult, roomIndex, travelerIndex) {
28571
+ var _a;
28572
+ if (useCompactForm) {
28573
+ return React__default['default'].createElement(
28574
+ 'div',
28575
+ { className: 'form__row' },
28576
+ React__default['default'].createElement(LabeledInput, {
28577
+ hasError: hasVisibleError(''.concat(namePrefix, '.age')),
28578
+ extraClassName: 'form__group--md-33',
28579
+ label: translations.TRAVELERS_FORM.AGE,
28580
+ required: true,
28581
+ name: ''.concat(namePrefix, '.age'),
28582
+ onChange: formik.handleChange,
28583
+ onBlur: formik.handleBlur,
28584
+ value: travelerValues.age
28585
+ })
28586
+ );
28587
+ }
28588
+ if (
28589
+ (_a = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.formFields) === null || _a === void 0
28590
+ ? void 0
28591
+ : _a.length
28592
+ ) {
28593
+ return React__default['default'].createElement(
28594
+ 'div',
28595
+ { className: 'travelers-form__grid' },
28596
+ travellersSettings.formFields.map(function (field, index) {
28597
+ return React__default['default'].createElement(
28598
+ 'div',
28599
+ { key: index, className: 'control control--'.concat(field.type) },
28600
+ getControl(field.type, travelerValues, ''.concat(namePrefix, '.').concat(field.type))
28601
+ );
28602
+ })
28603
+ );
28604
+ }
28605
+ return React__default['default'].createElement(
28606
+ React__default['default'].Fragment,
28607
+ null,
28608
+ React__default['default'].createElement('div', { className: 'form__row' }, renderGenderControl(''.concat(namePrefix, '.gender'), travelerValues)),
28609
+ React__default['default'].createElement(
28610
+ 'div',
28611
+ { className: 'form__row' },
28612
+ React__default['default'].createElement(LabeledInput, {
28613
+ hasError: hasVisibleError(''.concat(namePrefix, '.firstName')),
28614
+ extraClassName: 'form__group--md-33',
28615
+ label: translations.TRAVELERS_FORM.FIRST_NAME,
28616
+ required: true,
28617
+ name: ''.concat(namePrefix, '.firstName'),
28618
+ onChange: formik.handleChange,
28619
+ onBlur: formik.handleBlur,
28620
+ value: travelerValues.firstName
28621
+ }),
28622
+ React__default['default'].createElement(LabeledInput, {
28623
+ hasError: hasVisibleError(''.concat(namePrefix, '.lastName')),
28624
+ extraClassName: 'form__group--md-33',
28625
+ label: translations.TRAVELERS_FORM.LAST_NAME,
28626
+ required: true,
28627
+ name: ''.concat(namePrefix, '.lastName'),
28628
+ onChange: formik.handleChange,
28629
+ onBlur: formik.handleBlur,
28630
+ value: travelerValues.lastName
28631
+ }),
28632
+ React__default['default'].createElement(LabeledInput, {
28633
+ type: 'date',
28634
+ hasError: hasVisibleError(''.concat(namePrefix, '.birthDate')),
28635
+ extraClassName: 'form__group--md-33',
28636
+ label: translations.TRAVELERS_FORM.BIRTHDATE,
28637
+ required: true,
28638
+ name: ''.concat(namePrefix, '.birthDate'),
28639
+ onChange: formik.handleChange,
28640
+ onBlur: formik.handleBlur,
28641
+ value: travelerValues.birthDate
28642
+ })
28643
+ ),
28644
+ travelersFirstStep &&
28645
+ isAdult &&
28646
+ formik.values.rooms[roomIndex].adults.length > 1 &&
28647
+ React__default['default'].createElement(
28648
+ 'button',
28649
+ {
28650
+ type: 'button',
28651
+ className: 'cta cta--secondary',
28652
+ onClick: function () {
28653
+ return handleRemoveTraveler(roomIndex, travelerIndex);
28654
+ }
28655
+ },
28656
+ translations.TRAVELERS_FORM.REMOVE_TRAVELER
28657
+ )
28658
+ );
28659
+ };
28473
28660
  return React__default['default'].createElement(
28474
28661
  'form',
28475
28662
  {
@@ -28477,687 +28664,238 @@ var TravelersForm = function () {
28477
28664
  name: 'booking--travellers',
28478
28665
  id: 'booking--travellers',
28479
28666
  noValidate: true,
28480
- onSubmit: formik$1.handleSubmit,
28481
- onReset: formik$1.handleReset
28667
+ onSubmit: formik.handleSubmit,
28668
+ onReset: formik.handleReset
28482
28669
  },
28483
- useCompactForm
28484
- ? React__default['default'].createElement(
28670
+ React__default['default'].createElement(
28671
+ 'div',
28672
+ { className: 'form__travelers__wrapper' },
28673
+ formik.values.rooms.map(function (room, roomIndex) {
28674
+ return React__default['default'].createElement(
28485
28675
  'div',
28486
- { className: 'form__travelers__wrapper' },
28487
- formik$1.values.rooms.map(function (room, rIndex) {
28676
+ { key: roomIndex },
28677
+ formik.values.rooms.length > 1 &&
28678
+ React__default['default'].createElement(
28679
+ 'div',
28680
+ { className: 'form__region' },
28681
+ React__default['default'].createElement(
28682
+ 'div',
28683
+ { className: 'form__region-header' },
28684
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SHARED.ROOM, ' ', roomIndex + 1),
28685
+ React__default['default'].createElement('p', { className: 'form__region-label' }, renderRoomLabel(room))
28686
+ ),
28687
+ !useCompactForm &&
28688
+ travelersFirstStep &&
28689
+ formik.values.rooms.length > 1 &&
28690
+ React__default['default'].createElement(
28691
+ 'button',
28692
+ {
28693
+ type: 'button',
28694
+ className: 'cta cta--secondary',
28695
+ onClick: function () {
28696
+ return handleRemoveRoom(roomIndex);
28697
+ }
28698
+ },
28699
+ 'Verwijder reisgezelschap'
28700
+ )
28701
+ ),
28702
+ room.adults.map(function (travelerValues, index) {
28488
28703
  return React__default['default'].createElement(
28489
28704
  'div',
28490
- { key: rIndex },
28491
- formik$1.values.rooms.length > 1 &&
28705
+ { className: 'form__region', key: travelerValues.id },
28706
+ React__default['default'].createElement(
28707
+ 'div',
28708
+ { className: 'form__region-header' },
28709
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.TRAVELER, ' ', index + 1),
28710
+ React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.ADULT),
28492
28711
  React__default['default'].createElement(
28493
28712
  'div',
28494
- { className: 'form__region' },
28713
+ { className: 'radiobutton' },
28495
28714
  React__default['default'].createElement(
28496
- 'div',
28497
- { className: 'form__region-header' },
28498
- React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SHARED.ROOM, ' ', rIndex + 1),
28499
- React__default['default'].createElement(
28500
- 'p',
28501
- { className: 'form__region-label' },
28502
- lodash
28503
- .compact([
28504
- room.adults.length,
28505
- room.adults.length === 1 && ' '.concat(translations.TRAVELERS_FORM.ADULT),
28506
- room.adults.length > 1 && ' '.concat(translations.TRAVELERS_FORM.ADULTS),
28507
- room.adults && room.adults.length && room.children && room.children.length && ', ',
28508
- room.children.length,
28509
- room.children.length === 1 && ' '.concat(translations.TRAVELERS_FORM.CHILD),
28510
- room.children.length > 1 && ' '.concat(translations.TRAVELERS_FORM.CHILDREN)
28511
- ])
28512
- .join('')
28513
- )
28715
+ 'label',
28716
+ { className: 'radiobutton__label' },
28717
+ React__default['default'].createElement('input', {
28718
+ type: 'radio',
28719
+ name: 'mainBookerId',
28720
+ onChange: handleMainBookerChange,
28721
+ onBlur: formik.handleBlur,
28722
+ value: travelerValues.id,
28723
+ checked: formik.values.mainBookerId === travelerValues.id,
28724
+ className: 'radiobutton__input'
28725
+ }),
28726
+ translations.TRAVELERS_FORM.MAIN_BOOKER
28514
28727
  )
28728
+ )
28729
+ ),
28730
+ renderTravelerFields(travelerValues, 'rooms['.concat(roomIndex, '].adults[').concat(index, ']'), true, roomIndex, index)
28731
+ );
28732
+ }),
28733
+ room.children.map(function (travelerValues, index) {
28734
+ return React__default['default'].createElement(
28735
+ 'div',
28736
+ { className: 'form__region', key: travelerValues.id },
28737
+ React__default['default'].createElement(
28738
+ 'div',
28739
+ { className: 'form__region-header' },
28740
+ React__default['default'].createElement(
28741
+ 'h5',
28742
+ { className: 'form__region-heading' },
28743
+ translations.TRAVELERS_FORM.TRAVELER,
28744
+ ' ',
28745
+ room.adults.length + index + 1
28515
28746
  ),
28516
- room.adults.map(function (travelerValues, index) {
28517
- return React__default['default'].createElement(
28518
- 'div',
28519
- { className: 'form__region', key: travelerValues.id },
28520
- React__default['default'].createElement(
28521
- 'div',
28522
- { className: 'form__region-header' },
28523
- React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.TRAVELER, ' ', index + 1),
28524
- React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.ADULT),
28525
- React__default['default'].createElement(
28526
- 'div',
28527
- { className: 'radiobutton' },
28528
- React__default['default'].createElement(
28529
- 'label',
28530
- { className: 'radiobutton__label' },
28531
- React__default['default'].createElement('input', {
28532
- type: 'radio',
28533
- name: 'mainBookerId',
28534
- onChange: handleMainBookerChange,
28535
- onBlur: formik$1.handleBlur,
28536
- value: travelerValues.id,
28537
- checked: formik$1.values.mainBookerId === travelerValues.id,
28538
- className: 'radiobutton__input'
28539
- }),
28540
- translations.TRAVELERS_FORM.MAIN_BOOKER
28541
- )
28542
- )
28543
- ),
28544
- React__default['default'].createElement(
28545
- 'div',
28546
- { className: 'form__row' },
28547
- React__default['default'].createElement(LabeledInput, {
28548
- hasError: hasVisibleError('rooms['.concat(rIndex, '].adults[').concat(index, '].age')),
28549
- extraClassName: 'form__group--md-33',
28550
- label: translations.TRAVELERS_FORM.AGE,
28551
- required: true,
28552
- name: 'rooms['.concat(rIndex, '].adults[').concat(index, '].age'),
28553
- onChange: formik$1.handleChange,
28554
- onBlur: formik$1.handleBlur,
28555
- value: travelerValues.age
28556
- })
28557
- )
28558
- );
28559
- }),
28560
- room.children.map(function (travelerValues, index) {
28561
- return React__default['default'].createElement(
28562
- 'div',
28563
- { className: 'form__region', key: travelerValues.id },
28564
- React__default['default'].createElement(
28565
- 'div',
28566
- { className: 'form__region-header' },
28567
- React__default['default'].createElement(
28568
- 'h5',
28569
- { className: 'form__region-heading' },
28570
- translations.TRAVELERS_FORM.TRAVELER,
28571
- ' ',
28572
- room.adults.length + index + 1
28573
- ),
28574
- React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.CHILD)
28575
- ),
28576
- React__default['default'].createElement(
28577
- 'div',
28578
- { className: 'form__row' },
28579
- React__default['default'].createElement(LabeledInput, {
28580
- hasError: hasVisibleError('rooms['.concat(rIndex, '].children[').concat(index, '].age')),
28581
- extraClassName: 'form__group--md-33',
28582
- label: translations.TRAVELERS_FORM.AGE,
28583
- required: true,
28584
- name: 'rooms['.concat(rIndex, '].children[').concat(index, '].age'),
28585
- onChange: formik$1.handleChange,
28586
- onBlur: formik$1.handleBlur,
28587
- value: travelerValues.age
28588
- })
28589
- )
28590
- );
28591
- })
28747
+ React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.CHILD)
28748
+ ),
28749
+ renderTravelerFields(travelerValues, 'rooms['.concat(roomIndex, '].children[').concat(index, ']'), false, roomIndex, index)
28592
28750
  );
28593
- })
28594
- )
28595
- : React__default['default'].createElement(
28596
- React__default['default'].Fragment,
28597
- null,
28598
- React__default['default'].createElement(
28751
+ }),
28752
+ !useCompactForm &&
28753
+ travelersFirstStep &&
28754
+ React__default['default'].createElement(
28755
+ 'div',
28756
+ { className: 'form__region' },
28757
+ React__default['default'].createElement(
28758
+ 'button',
28759
+ {
28760
+ type: 'button',
28761
+ className: 'cta cta--select',
28762
+ onClick: function () {
28763
+ return handleAddTraveler(roomIndex);
28764
+ }
28765
+ },
28766
+ translations.TRAVELERS_FORM.ADD_TRAVELER
28767
+ )
28768
+ )
28769
+ );
28770
+ }),
28771
+ !useCompactForm &&
28772
+ (bookingType !== 'b2b' ||
28773
+ ((_f = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.mainBookerFormFields) === null || _f === void 0
28774
+ ? void 0
28775
+ : _f.length))
28776
+ ? React__default['default'].createElement(
28599
28777
  'div',
28600
- { className: 'form__travelers__wrapper' },
28601
- formik$1.values.rooms.map(function (room, rIndex) {
28602
- return React__default['default'].createElement(
28603
- 'div',
28604
- { key: rIndex },
28605
- formik$1.values.rooms.length > 1 &&
28778
+ { className: 'form__region' },
28779
+ React__default['default'].createElement(
28780
+ 'div',
28781
+ { className: 'form__region-header' },
28782
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.MAIN_BOOKER),
28783
+ React__default['default'].createElement(
28784
+ 'p',
28785
+ { className: 'form__region-label' },
28786
+ lodash
28787
+ .compact([
28788
+ lodash
28789
+ .compact([
28790
+ mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.firstName,
28791
+ mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.lastName
28792
+ ])
28793
+ .join(' '),
28794
+ (mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.birthDate) &&
28795
+ dateFns.format(dateFns.parse(mainBooker.birthDate, 'yyyy-MM-dd', new Date()), 'dd-MM-yyyy')
28796
+ ])
28797
+ .join(', ')
28798
+ )
28799
+ ),
28800
+ (
28801
+ (_g = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.mainBookerFormFields) === null || _g === void 0
28802
+ ? void 0
28803
+ : _g.length
28804
+ )
28805
+ ? React__default['default'].createElement(
28806
+ 'div',
28807
+ { className: 'main-booker-form__grid' },
28808
+ travellersSettings.mainBookerFormFields.map(function (field, index) {
28809
+ return React__default['default'].createElement(
28810
+ 'div',
28811
+ { key: index, className: 'control control--'.concat(field.type) },
28812
+ getControl(field.type, {}, field.type)
28813
+ );
28814
+ })
28815
+ )
28816
+ : React__default['default'].createElement(
28817
+ React__default['default'].Fragment,
28818
+ null,
28606
28819
  React__default['default'].createElement(
28607
28820
  'div',
28608
- { className: 'form__region' },
28821
+ { className: 'form__twocolumn' },
28609
28822
  React__default['default'].createElement(
28610
28823
  'div',
28611
- { className: 'form__region-header' },
28612
- React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SHARED.ROOM, ' ', rIndex + 1),
28824
+ { className: 'form__twocolumn-column' },
28613
28825
  React__default['default'].createElement(
28614
- 'p',
28615
- { className: 'form__region-label' },
28616
- lodash
28617
- .compact([
28618
- room.adults.length,
28619
- room.adults.length === 1 && ' '.concat(translations.TRAVELERS_FORM.ADULT),
28620
- room.adults.length > 1 && ' '.concat(translations.TRAVELERS_FORM.ADULTS),
28621
- room.adults && room.adults.length && room.children && room.children.length && ', ',
28622
- room.children.length,
28623
- room.children.length === 1 && ' '.concat(translations.TRAVELERS_FORM.CHILD),
28624
- room.children.length > 1 && ' '.concat(translations.TRAVELERS_FORM.CHILDREN)
28625
- ])
28626
- .join('')
28826
+ 'div',
28827
+ { className: 'form__row' },
28828
+ React__default['default'].createElement(LabeledInput, {
28829
+ hasError: hasVisibleError('street'),
28830
+ extraClassName: 'form__group--50 form__group--sm-60',
28831
+ label: translations.TRAVELERS_FORM.STREET,
28832
+ required: true,
28833
+ name: 'street',
28834
+ onChange: formik.handleChange,
28835
+ onBlur: formik.handleBlur,
28836
+ value: formik.values.street
28837
+ }),
28838
+ React__default['default'].createElement(LabeledInput, {
28839
+ hasError: hasVisibleError('houseNumber'),
28840
+ extraClassName: 'form__group--30 form__group--sm-20',
28841
+ label: translations.TRAVELERS_FORM.HOUSE_NUMBER,
28842
+ required: true,
28843
+ name: 'houseNumber',
28844
+ onChange: formik.handleChange,
28845
+ onBlur: formik.handleBlur,
28846
+ value: formik.values.houseNumber
28847
+ }),
28848
+ React__default['default'].createElement(LabeledInput, {
28849
+ hasError: hasVisibleError('box'),
28850
+ extraClassName: 'form__group--20',
28851
+ label: translations.TRAVELERS_FORM.POST_BOX,
28852
+ name: 'box',
28853
+ onChange: formik.handleChange,
28854
+ onBlur: formik.handleBlur,
28855
+ value: formik.values.box
28856
+ })
28627
28857
  )
28628
28858
  ),
28629
- travelersFirstStep &&
28630
- formik$1.values.rooms.length > 1 &&
28631
- React__default['default'].createElement(
28632
- 'button',
28633
- {
28634
- type: 'button',
28635
- className: 'cta cta--secondary',
28636
- onClick: function () {
28637
- return handleRemoveRoom(rIndex);
28638
- }
28639
- },
28640
- 'Verwijder reisgezelschap'
28641
- )
28642
- ),
28643
- room.adults.map(function (travelerValues, index) {
28644
- var _a;
28645
- return React__default['default'].createElement(
28646
- 'div',
28647
- { className: 'form__region', key: travelerValues.id },
28648
28859
  React__default['default'].createElement(
28649
28860
  'div',
28650
- { className: 'form__region-header' },
28651
- React__default['default'].createElement(
28652
- 'h5',
28653
- { className: 'form__region-heading' },
28654
- translations.TRAVELERS_FORM.TRAVELER,
28655
- ' ',
28656
- index + 1
28657
- ),
28658
- React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.ADULT),
28861
+ { className: 'form__twocolumn-column' },
28659
28862
  React__default['default'].createElement(
28660
28863
  'div',
28661
- { className: 'radiobutton' },
28662
- React__default['default'].createElement(
28663
- 'label',
28664
- { className: 'radiobutton__label' },
28665
- React__default['default'].createElement('input', {
28666
- type: 'radio',
28667
- name: 'mainBookerId',
28668
- onChange: handleMainBookerChange,
28669
- onBlur: formik$1.handleBlur,
28670
- value: travelerValues.id,
28671
- checked: formik$1.values.mainBookerId === travelerValues.id,
28672
- className: 'radiobutton__input'
28673
- }),
28674
- translations.TRAVELERS_FORM.MAIN_BOOKER
28675
- )
28864
+ { className: 'form__row' },
28865
+ React__default['default'].createElement(LabeledInput, {
28866
+ hasError: hasVisibleError('zipCode'),
28867
+ extraClassName: 'form__group--40 form__group--sm-20',
28868
+ label: translations.TRAVELERS_FORM.ZIPCODE,
28869
+ required: true,
28870
+ name: 'zipCode',
28871
+ onChange: formik.handleChange,
28872
+ onBlur: formik.handleBlur,
28873
+ value: formik.values.zipCode
28874
+ }),
28875
+ React__default['default'].createElement(LabeledInput, {
28876
+ hasError: hasVisibleError('place'),
28877
+ extraClassName: 'form__group--60 form__group--sm-40',
28878
+ label: translations.TRAVELERS_FORM.CITY,
28879
+ required: true,
28880
+ name: 'place',
28881
+ onChange: formik.handleChange,
28882
+ onBlur: formik.handleBlur,
28883
+ value: formik.values.place
28884
+ }),
28885
+ React__default['default'].createElement(LabeledSelect, {
28886
+ hasError: hasVisibleError('country'),
28887
+ extraClassName: 'form__group--sm-40',
28888
+ label: translations.TRAVELERS_FORM.COUNTRY,
28889
+ required: true,
28890
+ name: 'country',
28891
+ onChange: formik.handleChange,
28892
+ onBlur: formik.handleBlur,
28893
+ value: formik.values.country,
28894
+ options: countryOptions
28895
+ })
28676
28896
  )
28677
- ),
28678
- ((_a = settings.travellers.formFields) === null || _a === void 0 ? void 0 : _a.length)
28679
- ? React__default['default'].createElement(
28680
- React__default['default'].Fragment,
28681
- null,
28682
- React__default['default'].createElement(
28683
- 'div',
28684
- { className: 'travelers-form__grid' },
28685
- settings.travellers.formFields.map(function (field, fIndex) {
28686
- return React__default['default'].createElement(
28687
- 'div',
28688
- { key: fIndex, className: 'control control--'.concat(field.type) },
28689
- getControl(field.type, travelerValues, 'rooms['.concat(rIndex, '].adults[').concat(index, '].').concat(field.type))
28690
- );
28691
- })
28692
- )
28693
- )
28694
- : React__default['default'].createElement(
28695
- React__default['default'].Fragment,
28696
- null,
28697
- React__default['default'].createElement(
28698
- 'div',
28699
- { className: 'form__row' },
28700
- React__default['default'].createElement(
28701
- 'div',
28702
- {
28703
- className: buildClassName([
28704
- 'form__group',
28705
- hasVisibleError('rooms['.concat(rIndex, '].adults[').concat(index, '].gender')) && 'form__group--error'
28706
- ])
28707
- },
28708
- React__default['default'].createElement('label', { className: 'form__label' }, translations.TRAVELERS_FORM.GENDER_ID, ' *'),
28709
- React__default['default'].createElement(
28710
- 'div',
28711
- { className: 'radiobutton-group' },
28712
- React__default['default'].createElement(
28713
- 'div',
28714
- { className: 'radiobutton' },
28715
- React__default['default'].createElement(
28716
- 'label',
28717
- { className: 'radiobutton__label' },
28718
- React__default['default'].createElement('input', {
28719
- type: 'radio',
28720
- className: 'radiobutton__input',
28721
- name: 'rooms['.concat(rIndex, '].adults[').concat(index, '].gender'),
28722
- onChange: formik$1.handleChange,
28723
- onBlur: formik$1.handleBlur,
28724
- value: 'm',
28725
- checked: travelerValues.gender === 'm'
28726
- }),
28727
- translations.TRAVELERS_FORM.MALE_GENDER
28728
- )
28729
- ),
28730
- React__default['default'].createElement(
28731
- 'div',
28732
- { className: 'radiobutton' },
28733
- React__default['default'].createElement(
28734
- 'label',
28735
- { className: 'radiobutton__label' },
28736
- React__default['default'].createElement('input', {
28737
- type: 'radio',
28738
- className: 'radiobutton__input',
28739
- name: 'rooms['.concat(rIndex, '].adults[').concat(index, '].gender'),
28740
- onChange: formik$1.handleChange,
28741
- onBlur: formik$1.handleBlur,
28742
- value: 'f',
28743
- checked: travelerValues.gender === 'f'
28744
- }),
28745
- translations.TRAVELERS_FORM.FEMALE_GENDER
28746
- )
28747
- )
28748
- )
28749
- )
28750
- ),
28751
- React__default['default'].createElement(
28752
- 'div',
28753
- { className: 'form__row' },
28754
- React__default['default'].createElement(LabeledInput, {
28755
- hasError: hasVisibleError('rooms['.concat(rIndex, '].adults[').concat(index, '].firstName')),
28756
- extraClassName: 'form__group--md-33',
28757
- label: translations.TRAVELERS_FORM.FIRST_NAME,
28758
- required: true,
28759
- name: 'rooms['.concat(rIndex, '].adults[').concat(index, '].firstName'),
28760
- onChange: formik$1.handleChange,
28761
- onBlur: formik$1.handleBlur,
28762
- value: travelerValues.firstName
28763
- }),
28764
- React__default['default'].createElement(LabeledInput, {
28765
- hasError: hasVisibleError('rooms['.concat(rIndex, '].adults[').concat(index, '].lastName')),
28766
- extraClassName: 'form__group--md-33',
28767
- label: translations.TRAVELERS_FORM.LAST_NAME,
28768
- required: true,
28769
- name: 'rooms['.concat(rIndex, '].adults[').concat(index, '].lastName'),
28770
- onChange: formik$1.handleChange,
28771
- onBlur: formik$1.handleBlur,
28772
- value: travelerValues.lastName
28773
- }),
28774
- React__default['default'].createElement(LabeledInput, {
28775
- type: 'date',
28776
- hasError: hasVisibleError('rooms['.concat(rIndex, '].adults[').concat(index, '].birthDate')),
28777
- extraClassName: 'form__group--md-33',
28778
- label: translations.TRAVELERS_FORM.BIRTHDATE,
28779
- required: true,
28780
- name: 'rooms['.concat(rIndex, '].adults[').concat(index, '].birthDate'),
28781
- onChange: formik$1.handleChange,
28782
- onBlur: formik$1.handleBlur,
28783
- value: travelerValues.birthDate
28784
- })
28785
- ),
28786
- travelersFirstStep &&
28787
- room.adults.length > 1 &&
28788
- React__default['default'].createElement(
28789
- 'button',
28790
- {
28791
- type: 'button',
28792
- className: 'cta cta--secondary',
28793
- onClick: function () {
28794
- return handleRemoveTraveler(rIndex, index);
28795
- }
28796
- },
28797
- translations.TRAVELERS_FORM.REMOVE_TRAVELER
28798
- )
28799
- )
28800
- );
28801
- }),
28802
- room.children.map(function (travelerValues, index) {
28803
- var _a;
28804
- return React__default['default'].createElement(
28805
- 'div',
28806
- { className: 'form__region', key: travelerValues.id },
28807
- React__default['default'].createElement(
28808
- 'div',
28809
- { className: 'form__region-header' },
28810
- React__default['default'].createElement(
28811
- 'h5',
28812
- { className: 'form__region-heading' },
28813
- translations.TRAVELERS_FORM.TRAVELER,
28814
- ' ',
28815
- room.adults.length + index + 1
28816
- ),
28817
- React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.CHILD)
28818
- ),
28819
- ((_a = settings.travellers.formFields) === null || _a === void 0 ? void 0 : _a.length)
28820
- ? React__default['default'].createElement(
28821
- React__default['default'].Fragment,
28822
- null,
28823
- React__default['default'].createElement(
28824
- 'div',
28825
- { className: 'travelers-form__grid' },
28826
- settings.travellers.formFields.map(function (field, fIndex) {
28827
- return React__default['default'].createElement(
28828
- 'div',
28829
- { key: fIndex, className: 'control control--'.concat(field.type) },
28830
- getControl(field.type, travelerValues, 'rooms['.concat(rIndex, '].children[').concat(index, '].').concat(field.type))
28831
- );
28832
- })
28833
- )
28834
- )
28835
- : React__default['default'].createElement(
28836
- React__default['default'].Fragment,
28837
- null,
28838
- React__default['default'].createElement(
28839
- 'div',
28840
- { className: 'form__row' },
28841
- React__default['default'].createElement(
28842
- 'div',
28843
- {
28844
- className: buildClassName([
28845
- 'form__group',
28846
- hasVisibleError('rooms['.concat(rIndex, '].children[').concat(index, '].gender')) && 'form__group--error'
28847
- ])
28848
- },
28849
- React__default['default'].createElement('label', { className: 'form__label' }, translations.TRAVELERS_FORM.GENDER_ID, ' *'),
28850
- React__default['default'].createElement(
28851
- 'div',
28852
- { className: 'radiobutton-group' },
28853
- React__default['default'].createElement(
28854
- 'div',
28855
- { className: 'radiobutton' },
28856
- React__default['default'].createElement(
28857
- 'label',
28858
- { className: 'radiobutton__label' },
28859
- React__default['default'].createElement('input', {
28860
- type: 'radio',
28861
- className: 'radiobutton__input',
28862
- name: 'rooms['.concat(rIndex, '].children[').concat(index, '].gender'),
28863
- onChange: formik$1.handleChange,
28864
- onBlur: formik$1.handleBlur,
28865
- value: 'm',
28866
- checked: travelerValues.gender === 'm'
28867
- }),
28868
- translations.TRAVELERS_FORM.MALE_GENDER
28869
- )
28870
- ),
28871
- React__default['default'].createElement(
28872
- 'div',
28873
- { className: 'radiobutton' },
28874
- React__default['default'].createElement(
28875
- 'label',
28876
- { className: 'radiobutton__label' },
28877
- React__default['default'].createElement('input', {
28878
- type: 'radio',
28879
- className: 'radiobutton__input',
28880
- name: 'rooms['.concat(rIndex, '].children[').concat(index, '].gender'),
28881
- onChange: formik$1.handleChange,
28882
- onBlur: formik$1.handleBlur,
28883
- value: 'f',
28884
- checked: travelerValues.gender === 'f'
28885
- }),
28886
- translations.TRAVELERS_FORM.FEMALE_GENDER
28887
- )
28888
- )
28889
- )
28890
- )
28891
- ),
28892
- React__default['default'].createElement(
28893
- 'div',
28894
- { className: 'form__row' },
28895
- React__default['default'].createElement(LabeledInput, {
28896
- hasError: hasVisibleError('rooms['.concat(rIndex, '].children[').concat(index, '].firstName')),
28897
- extraClassName: 'form__group--md-33',
28898
- label: translations.TRAVELERS_FORM.FIRST_NAME,
28899
- required: true,
28900
- name: 'rooms['.concat(rIndex, '].children[').concat(index, '].firstName'),
28901
- onChange: formik$1.handleChange,
28902
- onBlur: formik$1.handleBlur,
28903
- value: travelerValues.firstName
28904
- }),
28905
- React__default['default'].createElement(LabeledInput, {
28906
- hasError: hasVisibleError('rooms['.concat(rIndex, '].children[').concat(index, '].lastName')),
28907
- extraClassName: 'form__group--md-33',
28908
- label: translations.TRAVELERS_FORM.LAST_NAME,
28909
- required: true,
28910
- name: 'rooms['.concat(rIndex, '].children[').concat(index, '].lastName'),
28911
- onChange: formik$1.handleChange,
28912
- onBlur: formik$1.handleBlur,
28913
- value: travelerValues.lastName
28914
- }),
28915
- React__default['default'].createElement(LabeledInput, {
28916
- type: 'date',
28917
- hasError: hasVisibleError('rooms['.concat(rIndex, '].children[').concat(index, '].birthDate')),
28918
- extraClassName: 'form__group--md-33',
28919
- label: translations.TRAVELERS_FORM.BIRTHDATE,
28920
- required: true,
28921
- name: 'rooms['.concat(rIndex, '].children[').concat(index, '].birthDate'),
28922
- onChange: formik$1.handleChange,
28923
- onBlur: formik$1.handleBlur,
28924
- value: travelerValues.birthDate
28925
- })
28926
- )
28927
- )
28928
- );
28929
- }),
28930
- travelersFirstStep &&
28931
- React__default['default'].createElement(
28932
- 'div',
28933
- { className: 'form__region' },
28934
- React__default['default'].createElement(
28935
- 'button',
28936
- {
28937
- type: 'button',
28938
- className: 'cta cta--select',
28939
- onClick: function () {
28940
- return handleAddTraveler(rIndex);
28941
- }
28942
- },
28943
- translations.TRAVELERS_FORM.ADD_TRAVELER
28944
- )
28945
- )
28946
- );
28947
- }),
28948
- bookingType != 'b2b' ||
28949
- ((_f = (_e = settings.travellers) === null || _e === void 0 ? void 0 : _e.mainBookerFormFields) === null || _f === void 0 ? void 0 : _f.length)
28950
- ? React__default['default'].createElement(
28951
- 'div',
28952
- { className: 'form__region' },
28953
- React__default['default'].createElement(
28954
- 'div',
28955
- { className: 'form__region-header' },
28956
- React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.MAIN_BOOKER),
28957
- React__default['default'].createElement(
28958
- 'p',
28959
- { className: 'form__region-label' },
28960
- lodash
28961
- .compact([
28962
- lodash
28963
- .compact([
28964
- mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.firstName,
28965
- mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.lastName
28966
- ])
28967
- .join(' '),
28968
- (mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.birthDate) &&
28969
- dateFns.format(dateFns.parse(mainBooker.birthDate, 'yyyy-MM-dd', new Date()), 'dd-MM-yyyy')
28970
- ])
28971
- .join(', ')
28972
28897
  )
28973
28898
  ),
28974
- React__default['default'].createElement(
28975
- React__default['default'].Fragment,
28976
- null,
28977
- (
28978
- (_h = (_g = settings.travellers) === null || _g === void 0 ? void 0 : _g.mainBookerFormFields) === null || _h === void 0
28979
- ? void 0
28980
- : _h.length
28981
- )
28982
- ? React__default['default'].createElement(
28983
- React__default['default'].Fragment,
28984
- null,
28985
- React__default['default'].createElement(
28986
- 'div',
28987
- { className: 'main-booker-form__grid' },
28988
- settings.travellers.mainBookerFormFields.map(function (field, fIndex) {
28989
- return React__default['default'].createElement(
28990
- 'div',
28991
- { key: fIndex, className: 'control control--'.concat(field.type) },
28992
- getControl(field.type, {}, field.type)
28993
- );
28994
- })
28995
- )
28996
- )
28997
- : React__default['default'].createElement(
28998
- React__default['default'].Fragment,
28999
- null,
29000
- React__default['default'].createElement(
29001
- 'div',
29002
- { className: 'form__twocolumn' },
29003
- React__default['default'].createElement(
29004
- 'div',
29005
- { className: 'form__twocolumn-column' },
29006
- React__default['default'].createElement(
29007
- 'div',
29008
- { className: 'form__row' },
29009
- React__default['default'].createElement(LabeledInput, {
29010
- hasError: hasVisibleError('street'),
29011
- extraClassName: 'form__group--50 form__group--sm-60',
29012
- label: translations.TRAVELERS_FORM.STREET,
29013
- required: true,
29014
- name: 'street',
29015
- onChange: formik$1.handleChange,
29016
- onBlur: formik$1.handleBlur,
29017
- value: formik$1.values.street
29018
- }),
29019
- React__default['default'].createElement(LabeledInput, {
29020
- hasError: hasVisibleError('houseNumber'),
29021
- extraClassName: 'form__group--30 form__group--sm-20',
29022
- label: translations.TRAVELERS_FORM.HOUSE_NUMBER,
29023
- required: true,
29024
- name: 'houseNumber',
29025
- onChange: formik$1.handleChange,
29026
- onBlur: formik$1.handleBlur,
29027
- value: formik$1.values.houseNumber
29028
- }),
29029
- React__default['default'].createElement(LabeledInput, {
29030
- hasError: hasVisibleError('box'),
29031
- extraClassName: 'form__group--20',
29032
- label: translations.TRAVELERS_FORM.POST_BOX,
29033
- name: 'box',
29034
- onChange: formik$1.handleChange,
29035
- onBlur: formik$1.handleBlur,
29036
- value: formik$1.values.box
29037
- })
29038
- )
29039
- ),
29040
- React__default['default'].createElement(
29041
- 'div',
29042
- { className: 'form__twocolumn-column' },
29043
- React__default['default'].createElement(
29044
- 'div',
29045
- { className: 'form__row' },
29046
- React__default['default'].createElement(LabeledInput, {
29047
- hasError: hasVisibleError('zipCode'),
29048
- extraClassName: 'form__group--40 form__group--sm-20',
29049
- label: translations.TRAVELERS_FORM.ZIPCODE,
29050
- required: true,
29051
- name: 'zipCode',
29052
- onChange: formik$1.handleChange,
29053
- onBlur: formik$1.handleBlur,
29054
- value: formik$1.values.zipCode
29055
- }),
29056
- React__default['default'].createElement(LabeledInput, {
29057
- hasError: hasVisibleError('place'),
29058
- extraClassName: 'form__group--60 form__group--sm-40',
29059
- label: translations.TRAVELERS_FORM.CITY,
29060
- required: true,
29061
- name: 'place',
29062
- onChange: formik$1.handleChange,
29063
- onBlur: formik$1.handleBlur,
29064
- value: formik$1.values.place
29065
- }),
29066
- React__default['default'].createElement(LabeledSelect, {
29067
- hasError: hasVisibleError('country'),
29068
- extraClassName: 'form__group--sm-40',
29069
- label: translations.TRAVELERS_FORM.COUNTRY,
29070
- required: true,
29071
- name: 'country',
29072
- onChange: formik$1.handleChange,
29073
- onBlur: formik$1.handleBlur,
29074
- value: formik$1.values.country,
29075
- options: __spreadArray(
29076
- [
29077
- {
29078
- key: 'empty',
29079
- value: undefined,
29080
- label: translations.TRAVELERS_FORM.SELECT_COUNTRY
29081
- }
29082
- ],
29083
- showAllCountries
29084
- ? (_j =
29085
- countries === null || countries === void 0
29086
- ? void 0
29087
- : countries.map(function (country) {
29088
- return {
29089
- key: country.iso2,
29090
- value: country.iso2,
29091
- label: country.name
29092
- };
29093
- })) !== null && _j !== void 0
29094
- ? _j
29095
- : []
29096
- : [
29097
- {
29098
- key: 'be',
29099
- value: 'be',
29100
- label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM
29101
- },
29102
- {
29103
- key: 'nl',
29104
- value: 'nl',
29105
- label: translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS
29106
- },
29107
- {
29108
- key: 'fr',
29109
- value: 'fr',
29110
- label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE
29111
- }
29112
- ],
29113
- true
29114
- )
29115
- })
29116
- )
29117
- )
29118
- ),
29119
- React__default['default'].createElement(
29120
- 'div',
29121
- { className: 'form__row' },
29122
- React__default['default'].createElement(LabeledInput, {
29123
- hasError: hasVisibleError('phone'),
29124
- extraClassName: 'form__group--md-33',
29125
- label: translations.TRAVELERS_FORM.PHONE,
29126
- required: true,
29127
- name: 'phone',
29128
- onChange: formik$1.handleChange,
29129
- onBlur: formik$1.handleBlur,
29130
- value: formik$1.values.phone
29131
- }),
29132
- React__default['default'].createElement(LabeledInput, {
29133
- type: 'email',
29134
- hasError: hasVisibleError('email'),
29135
- extraClassName: 'form__group--md-33',
29136
- label: translations.TRAVELERS_FORM.EMAIL,
29137
- required: true,
29138
- name: 'email',
29139
- onChange: formik$1.handleChange,
29140
- onBlur: formik$1.handleBlur,
29141
- value: formik$1.values.email
29142
- }),
29143
- React__default['default'].createElement(LabeledInput, {
29144
- type: 'email',
29145
- hasError: hasVisibleError('emailConfirmation'),
29146
- extraClassName: 'form__group--md-33',
29147
- label: translations.TRAVELERS_FORM.REPEAT_EMAIL,
29148
- required: true,
29149
- name: 'emailConfirmation',
29150
- onChange: formik$1.handleChange,
29151
- onBlur: formik$1.handleBlur,
29152
- value: formik$1.values.emailConfirmation
29153
- })
29154
- )
29155
- )
29156
- )
29157
- )
29158
- : React__default['default'].createElement(
29159
- 'div',
29160
- { className: 'form__region' },
29161
28899
  React__default['default'].createElement(
29162
28900
  'div',
29163
28901
  { className: 'form__row' },
@@ -29167,81 +28905,125 @@ var TravelersForm = function () {
29167
28905
  label: translations.TRAVELERS_FORM.PHONE,
29168
28906
  required: true,
29169
28907
  name: 'phone',
29170
- onChange: formik$1.handleChange,
29171
- onBlur: formik$1.handleBlur,
29172
- value: formik$1.values.phone
28908
+ onChange: formik.handleChange,
28909
+ onBlur: formik.handleBlur,
28910
+ value: formik.values.phone
28911
+ }),
28912
+ React__default['default'].createElement(LabeledInput, {
28913
+ type: 'email',
28914
+ hasError: hasVisibleError('email'),
28915
+ extraClassName: 'form__group--md-33',
28916
+ label: translations.TRAVELERS_FORM.EMAIL,
28917
+ required: true,
28918
+ name: 'email',
28919
+ onChange: formik.handleChange,
28920
+ onBlur: formik.handleBlur,
28921
+ value: formik.values.email
28922
+ }),
28923
+ React__default['default'].createElement(LabeledInput, {
28924
+ type: 'email',
28925
+ hasError: hasVisibleError('emailConfirmation'),
28926
+ extraClassName: 'form__group--md-33',
28927
+ label: translations.TRAVELERS_FORM.REPEAT_EMAIL,
28928
+ required: true,
28929
+ name: 'emailConfirmation',
28930
+ onChange: formik.handleChange,
28931
+ onBlur: formik.handleBlur,
28932
+ value: formik.values.emailConfirmation
29173
28933
  })
29174
28934
  )
29175
- ),
29176
- showAgentSelection &&
28935
+ )
28936
+ )
28937
+ : !useCompactForm
28938
+ ? React__default['default'].createElement(
28939
+ 'div',
28940
+ { className: 'form__region' },
28941
+ React__default['default'].createElement(
28942
+ 'div',
28943
+ { className: 'form__row' },
28944
+ React__default['default'].createElement(LabeledInput, {
28945
+ hasError: hasVisibleError('phone'),
28946
+ extraClassName: 'form__group--md-33',
28947
+ label: translations.TRAVELERS_FORM.PHONE,
28948
+ required: true,
28949
+ name: 'phone',
28950
+ onChange: formik.handleChange,
28951
+ onBlur: formik.handleBlur,
28952
+ value: formik.values.phone
28953
+ })
28954
+ )
28955
+ )
28956
+ : null,
28957
+ !useCompactForm &&
28958
+ showAgentSelection &&
28959
+ React__default['default'].createElement(
28960
+ 'div',
28961
+ { className: 'form__region' },
28962
+ React__default['default'].createElement(
28963
+ 'div',
28964
+ { className: 'form__region-header' },
28965
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.BOOK_WITH_AGENT),
28966
+ React__default['default'].createElement(
28967
+ 'div',
28968
+ { className: 'checkbox', id: 'cbxChooseOffice' },
29177
28969
  React__default['default'].createElement(
29178
- 'div',
29179
- { className: 'form__region' },
29180
- React__default['default'].createElement(
29181
- 'div',
29182
- { className: 'form__region-header' },
29183
- React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.BOOK_WITH_AGENT),
29184
- React__default['default'].createElement(
29185
- 'div',
29186
- { className: 'checkbox', id: 'cbxChooseOffice' },
29187
- React__default['default'].createElement(
29188
- 'label',
29189
- { className: 'checkbox__label' },
29190
- React__default['default'].createElement('input', {
29191
- type: 'checkbox',
29192
- name: 'booking--mainbooker',
29193
- defaultChecked: showAgents,
29194
- onClick: function () {
29195
- return toggleAgent(!showAgents);
29196
- },
29197
- className: 'checkbox__input'
29198
- }),
29199
- translations.TRAVELERS_FORM.CHOOSE_OFFICE
29200
- )
29201
- )
29202
- ),
29203
- showAgents &&
29204
- React__default['default'].createElement(
29205
- 'div',
29206
- { className: 'form__row form__row--choose-office' },
29207
- React__default['default'].createElement(
29208
- 'div',
29209
- { className: buildClassName(['form__group', 'form__group--icon', hasVisibleError('travelAgentId') && 'form__group--error']) },
29210
- React__default['default'].createElement(TypeAheadInput, {
29211
- value: formik$1.values.travelAgentName,
29212
- options: filteredAgents,
29213
- onChange: handleAgentChange,
29214
- onSelect: handleAgentSelect,
29215
- onClear: handleAgentClear,
29216
- name: 'travelAgentName',
29217
- placeholder: translations.TRAVELERS_FORM.CHOOSE_AGENT_PLACEHOLDER
29218
- })
29219
- )
29220
- )
28970
+ 'label',
28971
+ { className: 'checkbox__label' },
28972
+ React__default['default'].createElement('input', {
28973
+ type: 'checkbox',
28974
+ name: 'booking--mainbooker',
28975
+ checked: showAgents,
28976
+ onChange: function () {
28977
+ return toggleAgent(!showAgents);
28978
+ },
28979
+ className: 'checkbox__input'
28980
+ }),
28981
+ translations.TRAVELERS_FORM.CHOOSE_OFFICE
29221
28982
  )
28983
+ )
29222
28984
  ),
29223
- errorKeys.length > 0 &&
28985
+ showAgents &&
29224
28986
  React__default['default'].createElement(
29225
28987
  'div',
29226
- { className: 'form__region form__region--errors' },
28988
+ { className: 'form__row form__row--choose-office' },
29227
28989
  React__default['default'].createElement(
29228
28990
  'div',
29229
- { className: 'form__row' },
29230
- React__default['default'].createElement(
29231
- 'div',
29232
- { className: 'form__group' },
29233
- React__default['default'].createElement('p', { className: 'form__error-heading' }, translations.TRAVELERS_FORM.VALIDATION_MESSAGE, ':'),
29234
- React__default['default'].createElement(
29235
- 'ul',
29236
- { className: 'list' },
29237
- errorKeys.map(function (key) {
29238
- return React__default['default'].createElement('li', { key: key }, lodash.get(flatErrors, key));
29239
- })
29240
- )
29241
- )
28991
+ { className: buildClassName(['form__group', 'form__group--icon', hasVisibleError('travelAgentId') && 'form__group--error']) },
28992
+ React__default['default'].createElement(TypeAheadInput, {
28993
+ value: formik.values.travelAgentName,
28994
+ options: filteredAgents,
28995
+ onChange: handleAgentChange,
28996
+ onSelect: handleAgentSelect,
28997
+ onClear: handleAgentClear,
28998
+ name: 'travelAgentName',
28999
+ placeholder: translations.TRAVELERS_FORM.CHOOSE_AGENT_PLACEHOLDER
29000
+ })
29242
29001
  )
29243
29002
  )
29244
- ),
29003
+ )
29004
+ ),
29005
+ !useCompactForm &&
29006
+ errorKeys.length > 0 &&
29007
+ React__default['default'].createElement(
29008
+ 'div',
29009
+ { className: 'form__region form__region--errors' },
29010
+ React__default['default'].createElement(
29011
+ 'div',
29012
+ { className: 'form__row' },
29013
+ React__default['default'].createElement(
29014
+ 'div',
29015
+ { className: 'form__group' },
29016
+ React__default['default'].createElement('p', { className: 'form__error-heading' }, translations.TRAVELERS_FORM.VALIDATION_MESSAGE, ':'),
29017
+ React__default['default'].createElement(
29018
+ 'ul',
29019
+ { className: 'list' },
29020
+ errorKeys.map(function (key) {
29021
+ return React__default['default'].createElement('li', { key: key }, lodash.get(flatErrors, key));
29022
+ })
29023
+ )
29024
+ )
29025
+ )
29026
+ ),
29245
29027
  travelersFirstStep &&
29246
29028
  React__default['default'].createElement(
29247
29029
  'div',
@@ -29255,14 +29037,204 @@ var TravelersForm = function () {
29255
29037
  React__default['default'].createElement(
29256
29038
  'div',
29257
29039
  { className: 'booking__navigator' },
29258
- !travelersFirstStep && settings.skipRouter
29040
+ renderPreviousButton === null || renderPreviousButton === void 0 ? void 0 : renderPreviousButton(),
29041
+ React__default['default'].createElement(
29042
+ 'button',
29043
+ { type: 'submit', title: translations.STEPS.NEXT, className: 'cta' + (isUnavailable ? ' cta--disabled' : '') },
29044
+ translations.STEPS.NEXT
29045
+ )
29046
+ )
29047
+ );
29048
+ };
29049
+
29050
+ var TravelersForm = function () {
29051
+ var _a, _b;
29052
+ var dispatch = useAppDispatch();
29053
+ var settings = React.useContext(SettingsContext);
29054
+ var navigate = settings.skipRouter ? function () {} : reactRouter.useNavigate();
29055
+ var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
29056
+ var startDate = reactRedux.useSelector(selectStartDate);
29057
+ var formRooms = reactRedux.useSelector(selectFormRooms);
29058
+ var bookingType = reactRedux.useSelector(selectBookingType);
29059
+ var agents = reactRedux.useSelector(selectAgents);
29060
+ var agentAdressId = reactRedux.useSelector(selectAgentAdressId);
29061
+ var translations = reactRedux.useSelector(selectTranslations);
29062
+ var travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
29063
+ var isUnavailable = reactRedux.useSelector(selectIsUnavailable);
29064
+ var bookingAttributes = reactRedux.useSelector(selectBookingAttributes);
29065
+ var isFetching = reactRedux.useSelector(selectIsFetching);
29066
+ var hasMounted = reactRedux.useSelector(selectHasMounted);
29067
+ var countries = reactRedux.useSelector(selectCountries);
29068
+ var useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
29069
+ var showAllCountries = !!settings.travellers.showAllCountries;
29070
+ var initialValues =
29071
+ (_a = reactRedux.useSelector(selectTravelersFormValues)) !== null && _a !== void 0
29072
+ ? _a
29073
+ : createInitialValuesFromRooms(formRooms, startDate, agentAdressId, translations.TRAVELERS_FORM.PERSON, useCompactForm);
29074
+ var _c = React.useState(!settings.agentAdressId && !settings.hideAgentSelection),
29075
+ showAgentSelection = _c[0],
29076
+ setShowAgentSelection = _c[1];
29077
+ var formik$1 = formik.useFormik({
29078
+ initialValues: initialValues,
29079
+ validate: useCompactForm
29080
+ ? function () {}
29081
+ : function (values) {
29082
+ return validateForm(
29083
+ values,
29084
+ settings.agentRequired,
29085
+ bookingType,
29086
+ translations,
29087
+ settings.travellers.formFields,
29088
+ settings.travellers.mainBookerFormFields
29089
+ );
29090
+ },
29091
+ onSubmit: function (values) {
29092
+ dispatch(setFormValues(values));
29093
+ if (useCompactForm) {
29094
+ dispatch(fetchPriceDetails());
29095
+ if (settings.skipRouter) dispatch(setCurrentStep$1(SUMMARY_STEP));
29096
+ else
29097
+ navigate(
29098
+ ''
29099
+ .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
29100
+ .concat(settings.summary.pathSuffix, '?')
29101
+ .concat(bookingQueryString)
29102
+ );
29103
+ return;
29104
+ }
29105
+ dispatch(fetchPackage());
29106
+ if (settings.skipRouter) dispatch(setCurrentStep$1(travelersFirstStep ? FLIGHT_OPTIONS_FORM_STEP : SUMMARY_STEP));
29107
+ else
29108
+ navigate(
29109
+ ''
29110
+ .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
29111
+ .concat(travelersFirstStep ? settings.flightOptions.pathSuffix : settings.summary.pathSuffix, '?')
29112
+ .concat(bookingQueryString)
29113
+ );
29114
+ }
29115
+ });
29116
+ React.useEffect(
29117
+ function () {
29118
+ dispatch(fetchPriceDetails());
29119
+ },
29120
+ [dispatch]
29121
+ );
29122
+ React.useEffect(
29123
+ function () {
29124
+ var _a;
29125
+ if (
29126
+ !((_a = bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms) === null || _a === void 0
29127
+ ? void 0
29128
+ : _a.length) ||
29129
+ isFetching
29130
+ )
29131
+ return;
29132
+ if (!hasMounted) {
29133
+ dispatch(setHasMounted(true));
29134
+ return;
29135
+ }
29136
+ var fetchAll = function () {
29137
+ return __awaiter(void 0, void 0, void 0, function () {
29138
+ return __generator(this, function (_a) {
29139
+ switch (_a.label) {
29140
+ case 0:
29141
+ dispatch(setIsFetching(true));
29142
+ _a.label = 1;
29143
+ case 1:
29144
+ _a.trys.push([1, , 4, 5]);
29145
+ return [4 /*yield*/, dispatch(fetchPackage())];
29146
+ case 2:
29147
+ _a.sent();
29148
+ return [4 /*yield*/, dispatch(fetchPriceDetails())];
29149
+ case 3:
29150
+ _a.sent();
29151
+ return [3 /*break*/, 5];
29152
+ case 4:
29153
+ dispatch(setIsFetching(false));
29154
+ return [7 /*endfinally*/];
29155
+ case 5:
29156
+ return [2 /*return*/];
29157
+ }
29158
+ });
29159
+ });
29160
+ };
29161
+ fetchAll();
29162
+ },
29163
+ [bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms, dispatch, hasMounted, isFetching]
29164
+ );
29165
+ React.useEffect(
29166
+ function () {
29167
+ if (settings.skipRouter || !travelersFirstStep) return;
29168
+ var params = new URLSearchParams(bookingQueryString);
29169
+ params.delete('rooms');
29170
+ var roomsString = formik$1.values.rooms
29171
+ .map(function (room) {
29172
+ var _a;
29173
+ var adults = room.adults ? room.adults.length : 0;
29174
+ var childAges = ((_a = room.children) === null || _a === void 0 ? void 0 : _a.length)
29175
+ ? room.children
29176
+ .map(function (child) {
29177
+ return child.age;
29178
+ })
29179
+ .join(',')
29180
+ : '';
29181
+ return 'adults:'.concat(adults, ',childAges:(').concat(childAges, ')');
29182
+ })
29183
+ .map(function (room) {
29184
+ return '('.concat(room, ')');
29185
+ })
29186
+ .join(',');
29187
+ var nextQuery = ''
29188
+ .concat(params.toString())
29189
+ .concat(params.toString() ? '&' : '', 'rooms=(')
29190
+ .concat(roomsString, ')');
29191
+ navigate(''.concat(window.location.pathname, '?').concat(nextQuery), { replace: true });
29192
+ },
29193
+ [formik$1.values.rooms, bookingQueryString, navigate, settings.skipRouter, travelersFirstStep]
29194
+ );
29195
+ React.useEffect(
29196
+ function () {
29197
+ if (!agents || !settings.affiliateSlug) return;
29198
+ var agent = agents.find(function (x) {
29199
+ return x.affiliateSlug && x.affiliateSlug === settings.affiliateSlug;
29200
+ });
29201
+ if (!agent) return;
29202
+ var formValues = produce__default['default'](formik$1.values, function (values) {
29203
+ values.travelAgentId = Number(agent.id);
29204
+ values.travelAgentName = agent.name;
29205
+ });
29206
+ formik$1.setValues(formValues, false);
29207
+ dispatch(setFormValues(formValues));
29208
+ setShowAgentSelection(false);
29209
+ },
29210
+ [agents, settings.affiliateSlug]
29211
+ );
29212
+ return React__default['default'].createElement(SharedTravelersForm, {
29213
+ formik: formik$1,
29214
+ translations: translations,
29215
+ travellersSettings: settings.travellers,
29216
+ countries: countries,
29217
+ agents: agents,
29218
+ bookingType: bookingType,
29219
+ agentAdressId: agentAdressId,
29220
+ travelersFirstStep: travelersFirstStep,
29221
+ isUnavailable: isUnavailable,
29222
+ useCompactForm: useCompactForm,
29223
+ showAllCountries: showAllCountries,
29224
+ showAgentSelection: showAgentSelection,
29225
+ initialShowAgents: (_b = settings.agentRequired) !== null && _b !== void 0 ? _b : false,
29226
+ onBookingTypeChange: function (nextBookingType) {
29227
+ return dispatch(setBookingType(nextBookingType));
29228
+ },
29229
+ renderPreviousButton: function () {
29230
+ return !travelersFirstStep && settings.skipRouter
29259
29231
  ? React__default['default'].createElement(
29260
29232
  'button',
29261
29233
  {
29262
29234
  type: 'button',
29263
29235
  title: translations.STEPS.PREVIOUS,
29264
29236
  onClick: function () {
29265
- return goPrevious();
29237
+ return dispatch(setCurrentStep$1(OPTIONS_FORM_STEP));
29266
29238
  },
29267
29239
  className: 'cta cta--secondary'
29268
29240
  },
@@ -29281,14 +29253,9 @@ var TravelersForm = function () {
29281
29253
  },
29282
29254
  translations.STEPS.PREVIOUS
29283
29255
  )
29284
- : null,
29285
- React__default['default'].createElement(
29286
- 'button',
29287
- { type: 'submit', title: translations.STEPS.NEXT, className: 'cta' + (isUnavailable ? ' cta--disabled' : '') },
29288
- translations.STEPS.NEXT
29289
- )
29290
- )
29291
- );
29256
+ : null;
29257
+ }
29258
+ });
29292
29259
  };
29293
29260
 
29294
29261
  var Booking = function (_a) {
@@ -29374,7 +29341,7 @@ var Booking = function (_a) {
29374
29341
  window.scrollTo(0, 0);
29375
29342
  }
29376
29343
  if (!lodash.isNil(bookingNumber)) {
29377
- dispatch(setBookingNumber(bookingNumber));
29344
+ dispatch(setBookingNumber$1(bookingNumber));
29378
29345
  navigate(
29379
29346
  ''
29380
29347
  .concat(!skipBasePathInRouting ? basePath : '')
@@ -29405,7 +29372,7 @@ var Booking = function (_a) {
29405
29372
  console.error('Failure when setting booking attributes', startDate, endDate, catalogueId, rooms);
29406
29373
  }
29407
29374
  },
29408
- [location.search, setBookingAttributes, setBookingNumber, includeFlights]
29375
+ [location.search, setBookingAttributes, setBookingNumber$1, includeFlights]
29409
29376
  );
29410
29377
  React.useEffect(
29411
29378
  function () {
@@ -33667,7 +33634,8 @@ var initialState$1 = {
33667
33634
  selectedExcursionSearchResult: null,
33668
33635
  confirmedExcursionsByDay: {},
33669
33636
  bookPackagingEntry: false,
33670
- currentStep: 0
33637
+ currentStep: 0,
33638
+ bookingNumber: undefined
33671
33639
  };
33672
33640
  var searchResultsSlice = toolkit.createSlice({
33673
33641
  name: 'searchResults',
@@ -33854,6 +33822,9 @@ var searchResultsSlice = toolkit.createSlice({
33854
33822
  },
33855
33823
  setCurrentStep: function (state, action) {
33856
33824
  state.currentStep = action.payload;
33825
+ },
33826
+ setBookingNumber: function (state, action) {
33827
+ state.bookingNumber = action.payload;
33857
33828
  }
33858
33829
  }
33859
33830
  });
@@ -33898,8 +33869,9 @@ var setExcursionSearchParams = _a.setExcursionSearchParams,
33898
33869
  confirmExcursionForDay = _a.confirmExcursionForDay,
33899
33870
  removeConfirmedExcursionForDay = _a.removeConfirmedExcursionForDay;
33900
33871
  _a.clearConfirmedExcursionsForDay;
33901
- var setBookPackagingEntry = _a.setBookPackagingEntry;
33902
- _a.setCurrentStep;
33872
+ var setBookPackagingEntry = _a.setBookPackagingEntry,
33873
+ setCurrentStep = _a.setCurrentStep,
33874
+ setBookingNumber = _a.setBookingNumber;
33903
33875
  var searchResultsReducer = searchResultsSlice.reducer;
33904
33876
 
33905
33877
  var ItemPicker = function (_a) {
@@ -42453,15 +42425,6 @@ var PackageingFlightsFlyIn = function (_a) {
42453
42425
  React__default['default'].createElement(
42454
42426
  'div',
42455
42427
  { className: 'search__result-row' },
42456
- React__default['default'].createElement(
42457
- 'span',
42458
- { className: 'search__result-row-text' },
42459
- (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
42460
- '\u00A0',
42461
- translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
42462
- '\u00A0',
42463
- translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
42464
- ),
42465
42428
  React__default['default'].createElement(
42466
42429
  'div',
42467
42430
  {
@@ -42473,6 +42436,15 @@ var PackageingFlightsFlyIn = function (_a) {
42473
42436
  React__default['default'].createElement(Icon, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
42474
42437
  translations.SRP.FILTERS
42475
42438
  ),
42439
+ React__default['default'].createElement(
42440
+ 'span',
42441
+ { className: 'search__result-row-text' },
42442
+ (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
42443
+ '\u00A0',
42444
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
42445
+ '\u00A0',
42446
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
42447
+ ),
42476
42448
  sortByTypes &&
42477
42449
  sortByTypes.length > 0 &&
42478
42450
  React__default['default'].createElement(
@@ -43215,13 +43187,9 @@ var FlyIn = function (_a) {
43215
43187
  className: 'flyin '
43216
43188
  .concat(isOpen ? 'flyin--active' : '', ' ')
43217
43189
  .concat(className, ' ')
43218
- .concat(
43219
- isPackageEditFlow || flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'acco-results'
43220
- ? 'flyin--large'
43221
- : '',
43222
- ' '
43223
- )
43224
- .concat(flyInType === 'excursion-results' || flyInType === 'excursion-details' ? 'flyin--medium' : '')
43190
+ .concat(isPackageEditFlow || flyInType === 'acco-results' ? 'flyin--large' : '', ' ')
43191
+ .concat(flyInType === 'excursion-results' || flyInType === 'excursion-details' ? 'flyin--medium' : '', '\n ')
43192
+ .concat(flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' ? 'flyin--flight' : '')
43225
43193
  },
43226
43194
  React__default['default'].createElement(
43227
43195
  'div',
@@ -43300,6 +43268,17 @@ var FlyIn = function (_a) {
43300
43268
  React__default['default'].createElement(
43301
43269
  'div',
43302
43270
  { className: 'search__result-row' },
43271
+ React__default['default'].createElement(
43272
+ 'div',
43273
+ {
43274
+ className: 'cta cta--filter',
43275
+ onClick: function () {
43276
+ return toggleFilters && toggleFilters();
43277
+ }
43278
+ },
43279
+ React__default['default'].createElement(Icon, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
43280
+ translations.SRP.FILTERS
43281
+ ),
43303
43282
  React__default['default'].createElement(
43304
43283
  'span',
43305
43284
  { className: 'search__result-row-text' },
@@ -43313,17 +43292,6 @@ var FlyIn = function (_a) {
43313
43292
  translations.SRP.TOTAL_RESULTS_LABEL
43314
43293
  )
43315
43294
  ),
43316
- React__default['default'].createElement(
43317
- 'div',
43318
- {
43319
- className: 'cta cta--filter',
43320
- onClick: function () {
43321
- return toggleFilters && toggleFilters();
43322
- }
43323
- },
43324
- React__default['default'].createElement(Icon, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
43325
- translations.SRP.FILTERS
43326
- ),
43327
43295
  sortByTypes &&
43328
43296
  sortByTypes.length > 0 &&
43329
43297
  React__default['default'].createElement(
@@ -45431,7 +45399,7 @@ var GroupTourCard = function (_a) {
45431
45399
  return state.searchResults;
45432
45400
  }).selectedSearchResult;
45433
45401
  if (!context) {
45434
- return;
45402
+ return null;
45435
45403
  }
45436
45404
  var dispatch = reactRedux.useDispatch();
45437
45405
  var translations = getTranslations(languageCode !== null && languageCode !== void 0 ? languageCode : 'en-GB');
@@ -45593,7 +45561,7 @@ var GroupTourResults = function (_a) {
45593
45561
  var isLoading = _a.isLoading;
45594
45562
  var context = React.useContext(SearchResultsConfigurationContext);
45595
45563
  if (!context) {
45596
- return;
45564
+ return null;
45597
45565
  }
45598
45566
  if (isLoading) {
45599
45567
  return React__default['default'].createElement(
@@ -46828,8 +46796,6 @@ var WLSidebar = function (_a) {
46828
46796
  if (!editablePackagingEntry) {
46829
46797
  return null;
46830
46798
  }
46831
- console.log('editablePackagingEntry in WLSidebar:', editablePackagingEntry);
46832
- console.log('priceDetails in WLSidebar:', priceDetails);
46833
46799
  var sortedLines = React.useMemo(
46834
46800
  function () {
46835
46801
  var _a;
@@ -46974,19 +46940,740 @@ var WLSidebar = function (_a) {
46974
46940
  });
46975
46941
  };
46976
46942
 
46977
- var BookPackagingEntry = function (_a) {
46943
+ var formatBirthDate = function (birthDate) {
46944
+ if (!birthDate) return '';
46945
+ return birthDate.split('T')[0].split('-').reverse().join('/');
46946
+ };
46947
+ var SharedSummary = function (_a) {
46978
46948
  var _b;
46979
- var activeSearchSeed = _a.activeSearchSeed;
46949
+ var translations = _a.translations,
46950
+ travelerFormValues = _a.travelerFormValues,
46951
+ checkboxes = _a.checkboxes,
46952
+ notifications = _a.notifications,
46953
+ _c = _a.remarks,
46954
+ remarks = _c === void 0 ? '' : _c,
46955
+ _d = _a.voucher,
46956
+ voucher = _d === void 0 ? {} : _d,
46957
+ _e = _a.voucherCodes,
46958
+ voucherCodes = _e === void 0 ? [] : _e,
46959
+ _f = _a.enableVoucher,
46960
+ enableVoucher = _f === void 0 ? false : _f,
46961
+ _g = _a.allowOption,
46962
+ allowOption = _g === void 0 ? false : _g,
46963
+ _h = _a.isOffer,
46964
+ isOffer = _h === void 0 ? false : _h,
46965
+ customValidateText = _a.customValidateText,
46966
+ _j = _a.isSubmitting,
46967
+ isSubmitting = _j === void 0 ? false : _j,
46968
+ _k = _a.userValidated,
46969
+ userValidated = _k === void 0 ? true : _k,
46970
+ renderOptions = _a.renderOptions,
46971
+ renderPreviousButton = _a.renderPreviousButton,
46972
+ renderLoader = _a.renderLoader,
46973
+ onSubmit = _a.onSubmit,
46974
+ onRemarksChange = _a.onRemarksChange,
46975
+ onCheckboxesChange = _a.onCheckboxesChange,
46976
+ onNotificationsChange = _a.onNotificationsChange,
46977
+ onVoucherChange = _a.onVoucherChange,
46978
+ onValidateVoucher = _a.onValidateVoucher,
46979
+ onAddVoucher = _a.onAddVoucher,
46980
+ onRemoveVoucher = _a.onRemoveVoucher,
46981
+ onUserValidatedChange = _a.onUserValidatedChange;
46982
+ var _l = React.useState(checkboxes),
46983
+ localCheckboxes = _l[0],
46984
+ setLocalCheckboxes = _l[1];
46985
+ React.useEffect(
46986
+ function () {
46987
+ setLocalCheckboxes(checkboxes);
46988
+ },
46989
+ [checkboxes]
46990
+ );
46991
+ React.useEffect(
46992
+ function () {
46993
+ var checkboxesValidated = !lodash.isNil(localCheckboxes)
46994
+ ? localCheckboxes.every(function (checkbox) {
46995
+ return checkbox.isSelected;
46996
+ })
46997
+ : true;
46998
+ var notificationsValidated = !lodash.isNil(notifications)
46999
+ ? notifications
47000
+ .filter(function (notification) {
47001
+ return notification.hasToBeConfirmed;
47002
+ })
47003
+ .every(function (notification) {
47004
+ return notification.isConfirmed;
47005
+ })
47006
+ : true;
47007
+ onUserValidatedChange === null || onUserValidatedChange === void 0 ? void 0 : onUserValidatedChange(checkboxesValidated && notificationsValidated);
47008
+ },
47009
+ [localCheckboxes, notifications, onUserValidatedChange]
47010
+ );
47011
+ var handleNotificationChange = function (id, checked) {
47012
+ var updatedNotifications = (notifications !== null && notifications !== void 0 ? notifications : []).map(function (notification) {
47013
+ return notification.id === id ? __assign(__assign({}, notification), { isConfirmed: checked }) : notification;
47014
+ });
47015
+ onNotificationsChange === null || onNotificationsChange === void 0 ? void 0 : onNotificationsChange(updatedNotifications);
47016
+ };
47017
+ var handleCheckboxChange = function (id) {
47018
+ if (lodash.isNil(localCheckboxes)) return;
47019
+ var newCheckboxes = __spreadArray([], localCheckboxes, true);
47020
+ var index = lodash.findIndex(localCheckboxes, function (checkbox) {
47021
+ return checkbox.id === id;
47022
+ });
47023
+ if (index < 0) return;
47024
+ newCheckboxes[index] = __assign(__assign({}, newCheckboxes[index]), { isSelected: !newCheckboxes[index].isSelected });
47025
+ setLocalCheckboxes(newCheckboxes);
47026
+ onCheckboxesChange === null || onCheckboxesChange === void 0 ? void 0 : onCheckboxesChange(newCheckboxes);
47027
+ };
47028
+ return React__default['default'].createElement(
47029
+ React__default['default'].Fragment,
47030
+ null,
47031
+ isSubmitting && ((renderLoader === null || renderLoader === void 0 ? void 0 : renderLoader()) || React__default['default'].createElement(Loader, null)),
47032
+ !isSubmitting &&
47033
+ React__default['default'].createElement(
47034
+ 'form',
47035
+ { className: 'form', name: 'booking--summary', id: 'booking--summary', onSubmit: onSubmit },
47036
+ React__default['default'].createElement(
47037
+ 'div',
47038
+ { className: 'form__booking--summary' },
47039
+ React__default['default'].createElement(
47040
+ 'div',
47041
+ { className: 'form__region' },
47042
+ React__default['default'].createElement(
47043
+ 'div',
47044
+ { className: 'form__row' },
47045
+ React__default['default'].createElement(
47046
+ 'div',
47047
+ { className: 'form__group' },
47048
+ React__default['default'].createElement(
47049
+ 'div',
47050
+ { className: 'form__region-header' },
47051
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.PERSONAL_DETAILS)
47052
+ )
47053
+ )
47054
+ ),
47055
+ travelerFormValues.rooms.map(function (room, roomIndex) {
47056
+ var _a, _b;
47057
+ return React__default['default'].createElement(
47058
+ 'div',
47059
+ { className: 'form__row', key: roomIndex },
47060
+ React__default['default'].createElement(
47061
+ 'div',
47062
+ { className: 'form__group' },
47063
+ React__default['default'].createElement(
47064
+ 'div',
47065
+ { className: 'form__region-header' },
47066
+ React__default['default'].createElement(
47067
+ 'h5',
47068
+ { className: 'form__region-heading' },
47069
+ travelerFormValues.rooms.length > 1
47070
+ ? ''.concat(translations.SHARED.ROOM, ' ').concat(roomIndex + 1)
47071
+ : translations.ROOM_OPTIONS_FORM.TRAVELER_GROUP
47072
+ ),
47073
+ React__default['default'].createElement(
47074
+ 'p',
47075
+ { className: 'form__region-label' },
47076
+ ''
47077
+ .concat(room.adults.length + room.children.length, ' ')
47078
+ .concat(room.adults.length + room.children.length === 1 ? translations.SUMMARY.TRAVELER : translations.SUMMARY.TRAVELERS, ': ')
47079
+ .concat(
47080
+ lodash
47081
+ .compact([
47082
+ room.adults.length,
47083
+ room.adults.length === 1 && ' '.concat(translations.SUMMARY.ADULT),
47084
+ room.adults.length > 1 && ' '.concat(translations.SUMMARY.ADULTS),
47085
+ ((_a = room.adults) === null || _a === void 0 ? void 0 : _a.length) &&
47086
+ ((_b = room.children) === null || _b === void 0 ? void 0 : _b.length) &&
47087
+ ', ',
47088
+ room.children.length,
47089
+ room.children.length === 1 && ' '.concat(translations.SUMMARY.CHILD),
47090
+ room.children.length > 1 && ' '.concat(translations.SUMMARY.CHILDREN)
47091
+ ])
47092
+ .join('')
47093
+ )
47094
+ )
47095
+ )
47096
+ ),
47097
+ __spreadArray(__spreadArray([], room.adults, true), room.children, true).map(function (traveler) {
47098
+ var isMainBooker = traveler.id === travelerFormValues.mainBookerId;
47099
+ return React__default['default'].createElement(
47100
+ 'div',
47101
+ { className: 'form__group form__group--sm-50', key: traveler.id },
47102
+ React__default['default'].createElement(
47103
+ 'ul',
47104
+ { className: 'list list--plain' },
47105
+ React__default['default'].createElement(
47106
+ 'li',
47107
+ { className: 'list__item' },
47108
+ React__default['default'].createElement('strong', null, traveler.firstName, ' ', traveler.lastName),
47109
+ ' ',
47110
+ isMainBooker && React__default['default'].createElement('em', null, '(', translations.SUMMARY.MAIN_BOOKER, ')')
47111
+ ),
47112
+ React__default['default'].createElement('li', { className: 'list__item' }, formatBirthDate(traveler.birthDate)),
47113
+ isMainBooker &&
47114
+ React__default['default'].createElement(
47115
+ React__default['default'].Fragment,
47116
+ null,
47117
+ travelerFormValues.street &&
47118
+ React__default['default'].createElement(
47119
+ 'li',
47120
+ { className: 'list__item' },
47121
+ ''
47122
+ .concat(travelerFormValues.street, ' ')
47123
+ .concat(lodash.compact([travelerFormValues.houseNumber, travelerFormValues.box]).join(' '), ', ')
47124
+ .concat(travelerFormValues.zipCode, ' ')
47125
+ .concat(travelerFormValues.place)
47126
+ ),
47127
+ travelerFormValues.phone && React__default['default'].createElement('li', { className: 'list__item' }, travelerFormValues.phone),
47128
+ travelerFormValues.email && React__default['default'].createElement('li', { className: 'list__item' }, travelerFormValues.email)
47129
+ )
47130
+ )
47131
+ );
47132
+ })
47133
+ );
47134
+ })
47135
+ ),
47136
+ React__default['default'].createElement(
47137
+ 'div',
47138
+ { className: 'form__region' },
47139
+ React__default['default'].createElement(
47140
+ 'div',
47141
+ { className: 'form__row' },
47142
+ React__default['default'].createElement(
47143
+ 'div',
47144
+ { className: 'form__group' },
47145
+ React__default['default'].createElement(
47146
+ 'div',
47147
+ { className: 'form__region-header' },
47148
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.OPTIONS)
47149
+ )
47150
+ )
47151
+ ),
47152
+ React__default['default'].createElement(
47153
+ 'div',
47154
+ { className: 'form__row' },
47155
+ React__default['default'].createElement(
47156
+ 'div',
47157
+ { className: 'form__group' },
47158
+ React__default['default'].createElement('ul', { className: 'list list--booking-summary' }, renderOptions())
47159
+ )
47160
+ )
47161
+ ),
47162
+ enableVoucher &&
47163
+ React__default['default'].createElement(
47164
+ 'div',
47165
+ { className: 'form__region' },
47166
+ React__default['default'].createElement(
47167
+ 'div',
47168
+ { className: 'form__row' },
47169
+ React__default['default'].createElement(
47170
+ 'div',
47171
+ { className: 'form__group' },
47172
+ React__default['default'].createElement(
47173
+ 'div',
47174
+ { className: 'form__region-header' },
47175
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.VOUCHERS)
47176
+ )
47177
+ )
47178
+ ),
47179
+ React__default['default'].createElement(
47180
+ 'div',
47181
+ { className: 'form__row' },
47182
+ React__default['default'].createElement(
47183
+ 'div',
47184
+ { className: 'form__group' },
47185
+ React__default['default'].createElement('input', {
47186
+ type: 'text',
47187
+ className: 'form__input info-message__voucher__input',
47188
+ value: (_b = voucher.code) !== null && _b !== void 0 ? _b : '',
47189
+ onChange: function (event) {
47190
+ return onVoucherChange === null || onVoucherChange === void 0 ? void 0 : onVoucherChange({ code: event.target.value });
47191
+ }
47192
+ }),
47193
+ React__default['default'].createElement(
47194
+ 'button',
47195
+ { type: 'button', className: buildClassName(['cta', !voucher.code && 'cta--disabled']), onClick: onValidateVoucher },
47196
+ translations.SUMMARY.VOUCHER_VALIDATE
47197
+ )
47198
+ )
47199
+ ),
47200
+ React__default['default'].createElement(
47201
+ 'div',
47202
+ { className: 'form__row' },
47203
+ React__default['default'].createElement(
47204
+ 'div',
47205
+ { className: 'form__group info-message__voucher' },
47206
+ voucher.isValid &&
47207
+ voucher.isValidated &&
47208
+ React__default['default'].createElement(
47209
+ 'div',
47210
+ { className: 'info-message info-message__voucher__valid' },
47211
+ React__default['default'].createElement('span', null, translations.SUMMARY.VOUCHER_VALID),
47212
+ React__default['default'].createElement(
47213
+ 'button',
47214
+ { type: 'button', className: 'cta cta--secondary', onClick: onAddVoucher },
47215
+ translations.SUMMARY.ADD_VOUCHER
47216
+ )
47217
+ ),
47218
+ !voucher.isValid &&
47219
+ voucher.isValidated &&
47220
+ React__default['default'].createElement('div', { className: 'info-message--error' }, translations.SUMMARY.VOUCHER_INVALID)
47221
+ )
47222
+ ),
47223
+ React__default['default'].createElement(
47224
+ 'div',
47225
+ { className: 'form__row' },
47226
+ React__default['default'].createElement(
47227
+ 'ul',
47228
+ { className: 'info-message__voucher' },
47229
+ !lodash.isEmpty(voucherCodes) &&
47230
+ voucherCodes.map(function (code, index) {
47231
+ return React__default['default'].createElement(
47232
+ 'li',
47233
+ { key: ''.concat(code, '-').concat(index) },
47234
+ React__default['default'].createElement(
47235
+ 'div',
47236
+ { className: 'info-message__voucher__list' },
47237
+ code,
47238
+ ' ',
47239
+ React__default['default'].createElement(
47240
+ 'button',
47241
+ {
47242
+ type: 'button',
47243
+ className: 'cta--add-remove',
47244
+ onClick: function () {
47245
+ return onRemoveVoucher === null || onRemoveVoucher === void 0 ? void 0 : onRemoveVoucher(code);
47246
+ }
47247
+ },
47248
+ React__default['default'].createElement(Icon, { height: 16, name: 'ui-trashcan' })
47249
+ )
47250
+ )
47251
+ );
47252
+ })
47253
+ )
47254
+ )
47255
+ ),
47256
+ !lodash.isEmpty(notifications) &&
47257
+ React__default['default'].createElement(
47258
+ 'div',
47259
+ { className: 'form__region' },
47260
+ React__default['default'].createElement(
47261
+ 'div',
47262
+ { className: 'form__row' },
47263
+ React__default['default'].createElement(
47264
+ 'div',
47265
+ { className: 'form__group' },
47266
+ React__default['default'].createElement(
47267
+ 'div',
47268
+ { className: 'info-message' },
47269
+ React__default['default'].createElement(Icon, { name: 'ui-tooltip', className: 'icon--secondary-color' }),
47270
+ React__default['default'].createElement(
47271
+ 'div',
47272
+ { className: 'info-message__copy' },
47273
+ React__default['default'].createElement('h5', null, translations.SUMMARY.NOTIFICATIONS_TITLE),
47274
+ lodash
47275
+ .uniqBy(
47276
+ (notifications !== null && notifications !== void 0 ? notifications : []).filter(function (notification) {
47277
+ return !notification.hasToBeConfirmed;
47278
+ }),
47279
+ 'id'
47280
+ )
47281
+ .map(function (notification) {
47282
+ return React__default['default'].createElement(
47283
+ 'span',
47284
+ { key: notification.id, className: 'checkbox__label-text' },
47285
+ React__default['default'].createElement('strong', { className: 'checkbox__label-text--title' }, notification.title),
47286
+ React__default['default'].createElement('span', { className: 'checkbox__label-text--description' }, notification.description)
47287
+ );
47288
+ }),
47289
+ lodash
47290
+ .uniqBy(
47291
+ (notifications !== null && notifications !== void 0 ? notifications : []).filter(function (notification) {
47292
+ return notification.hasToBeConfirmed;
47293
+ }),
47294
+ 'id'
47295
+ )
47296
+ .map(function (notification) {
47297
+ return React__default['default'].createElement(
47298
+ 'div',
47299
+ { className: 'checkbox', key: notification.id },
47300
+ React__default['default'].createElement(
47301
+ 'label',
47302
+ { className: 'checkbox__label' },
47303
+ React__default['default'].createElement('input', {
47304
+ type: 'checkbox',
47305
+ className: 'checkbox__input',
47306
+ checked: notification.isConfirmed,
47307
+ onChange: function (event) {
47308
+ return handleNotificationChange(notification.id, event.target.checked);
47309
+ }
47310
+ }),
47311
+ React__default['default'].createElement(
47312
+ 'span',
47313
+ { className: 'checkbox__label-text' },
47314
+ React__default['default'].createElement('strong', { className: 'checkbox__label-text--title' }, notification.title),
47315
+ React__default['default'].createElement('span', { className: 'checkbox__label-text--description' }, notification.description)
47316
+ )
47317
+ )
47318
+ );
47319
+ })
47320
+ )
47321
+ )
47322
+ )
47323
+ )
47324
+ ),
47325
+ React__default['default'].createElement(
47326
+ 'div',
47327
+ { className: 'form__region' },
47328
+ React__default['default'].createElement(
47329
+ 'div',
47330
+ { className: 'form__row' },
47331
+ React__default['default'].createElement(
47332
+ 'div',
47333
+ { className: 'form__group' },
47334
+ React__default['default'].createElement(
47335
+ 'div',
47336
+ { className: 'form__region-header' },
47337
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.REMARKS)
47338
+ )
47339
+ )
47340
+ ),
47341
+ React__default['default'].createElement(
47342
+ 'div',
47343
+ { className: 'form__row' },
47344
+ React__default['default'].createElement(
47345
+ 'div',
47346
+ { className: 'form__group' },
47347
+ React__default['default'].createElement('textarea', {
47348
+ className: 'form__input',
47349
+ value: remarks,
47350
+ onChange: function (event) {
47351
+ return onRemarksChange === null || onRemarksChange === void 0 ? void 0 : onRemarksChange(event.target.value);
47352
+ }
47353
+ })
47354
+ )
47355
+ )
47356
+ ),
47357
+ React__default['default'].createElement(
47358
+ 'div',
47359
+ { className: 'form__region' },
47360
+ React__default['default'].createElement(
47361
+ 'div',
47362
+ { className: 'form__row' },
47363
+ React__default['default'].createElement(
47364
+ 'div',
47365
+ { className: 'form__group' },
47366
+ React__default['default'].createElement(
47367
+ 'div',
47368
+ { className: 'info-message' },
47369
+ React__default['default'].createElement(Icon, { name: 'ui-tooltip', className: 'icon--secondary-color' }),
47370
+ React__default['default'].createElement(
47371
+ 'div',
47372
+ { className: 'info-message__copy' },
47373
+ React__default['default'].createElement('h5', null, translations.SUMMARY.VALIDATE_TITLE),
47374
+ customValidateText
47375
+ ? React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: customValidateText } })
47376
+ : React__default['default'].createElement(
47377
+ React__default['default'].Fragment,
47378
+ null,
47379
+ React__default['default'].createElement(
47380
+ 'p',
47381
+ null,
47382
+ isOffer ? translations.SUMMARY.VALIDATE_TEXT_OFFER : translations.SUMMARY.VALIDATE_TEXT_BOOKING
47383
+ ),
47384
+ allowOption && React__default['default'].createElement('p', null, translations.SUMMARY.VALIDATE_TEXT_OPTION)
47385
+ ),
47386
+ localCheckboxes === null || localCheckboxes === void 0
47387
+ ? void 0
47388
+ : localCheckboxes.map(function (checkbox) {
47389
+ return React__default['default'].createElement(
47390
+ 'div',
47391
+ { className: 'checkbox', key: checkbox.id },
47392
+ React__default['default'].createElement(
47393
+ 'label',
47394
+ { className: 'checkbox__label' },
47395
+ React__default['default'].createElement('input', {
47396
+ type: 'checkbox',
47397
+ className: 'checkbox__input',
47398
+ checked: checkbox.isSelected,
47399
+ onChange: function () {
47400
+ return handleCheckboxChange(checkbox.id);
47401
+ }
47402
+ }),
47403
+ React__default['default'].createElement('span', {
47404
+ className: 'checkbox__label-text',
47405
+ dangerouslySetInnerHTML: { __html: checkbox.text }
47406
+ })
47407
+ )
47408
+ );
47409
+ })
47410
+ )
47411
+ )
47412
+ )
47413
+ )
47414
+ )
47415
+ ),
47416
+ React__default['default'].createElement(
47417
+ 'div',
47418
+ { className: 'booking__navigator' },
47419
+ renderPreviousButton(),
47420
+ allowOption &&
47421
+ React__default['default'].createElement(
47422
+ 'button',
47423
+ {
47424
+ title: translations.STEPS.SUBMIT_OPTION,
47425
+ className: buildClassName(['cta', !userValidated && 'cta--disabled']),
47426
+ disabled: !userValidated,
47427
+ name: 'option'
47428
+ },
47429
+ translations.STEPS.SUBMIT_OPTION
47430
+ ),
47431
+ React__default['default'].createElement(
47432
+ 'button',
47433
+ {
47434
+ title: isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING,
47435
+ className: buildClassName(['cta', !userValidated && 'cta--disabled']),
47436
+ disabled: !userValidated,
47437
+ name: 'default'
47438
+ },
47439
+ isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING
47440
+ )
47441
+ )
47442
+ )
47443
+ );
47444
+ };
47445
+
47446
+ var renderEditablePackagingEntrySummaryOptions = function (editablePackagingEntry, priceDetails, translations) {
47447
+ var _a, _b;
47448
+ var priceDetailsByProduct = lodash.groupBy(
47449
+ (_a = priceDetails === null || priceDetails === void 0 ? void 0 : priceDetails.details) !== null && _a !== void 0 ? _a : [],
47450
+ function (detail) {
47451
+ return ''.concat(detail.productCode, '|').concat(detail.accommodationCode);
47452
+ }
47453
+ );
47454
+ return (
47455
+ (_b = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.lines) !== null && _b !== void 0 ? _b : []
47456
+ ).map(function (line) {
47457
+ var _a, _b, _c;
47458
+ var groupedPriceDetails = (_a = priceDetailsByProduct[''.concat(line.productCode, '|').concat(line.accommodationCode)]) !== null && _a !== void 0 ? _a : [];
47459
+ var visiblePriceDetails = groupedPriceDetails.filter(function (detail) {
47460
+ return detail.showPrice || detail.isSeparate;
47461
+ });
47462
+ return React__default['default'].createElement(
47463
+ 'li',
47464
+ { key: line.guid },
47465
+ React__default['default'].createElement('h6', null, line.productName),
47466
+ React__default['default'].createElement(
47467
+ 'ul',
47468
+ null,
47469
+ React__default['default'].createElement('li', { className: 'list__item' }, lodash.compact([line.accommodationName, line.regimeName]).join(', ')),
47470
+ (_c = (_b = line.flightInformation) === null || _b === void 0 ? void 0 : _b.flightLines) === null || _c === void 0
47471
+ ? void 0
47472
+ : _c.map(function (flightLine, index) {
47473
+ var _a, _b;
47474
+ return React__default['default'].createElement(
47475
+ 'li',
47476
+ { className: 'list__item', key: ''.concat(line.guid, '-').concat(index) },
47477
+ flightLine.departureAirportCode,
47478
+ ' ',
47479
+ (_a = flightLine.departureTime) === null || _a === void 0 ? void 0 : _a.slice(0, 5),
47480
+ ' > ',
47481
+ flightLine.arrivalAirportCode,
47482
+ ' ',
47483
+ (_b = flightLine.arrivalTime) === null || _b === void 0 ? void 0 : _b.slice(0, 5),
47484
+ ' (',
47485
+ flightLine.operatingFlightNumber || ''.concat(flightLine.airlineCode).concat(flightLine.flightNumber),
47486
+ ')'
47487
+ );
47488
+ }),
47489
+ !lodash.isEmpty(visiblePriceDetails) &&
47490
+ visiblePriceDetails.map(function (detail, index) {
47491
+ var _a;
47492
+ return React__default['default'].createElement(
47493
+ 'li',
47494
+ { className: 'list__item', key: ''.concat(line.guid, '-price-').concat(index) },
47495
+ detail.priceDescription,
47496
+ ': ',
47497
+ (_a = detail.total) === null || _a === void 0 ? void 0 : _a.toLocaleString(undefined, { style: 'currency', currency: 'EUR' })
47498
+ );
47499
+ })
47500
+ ),
47501
+ React__default['default'].createElement(
47502
+ 'p',
47503
+ null,
47504
+ '(',
47505
+ line.from === line.to
47506
+ ? getDateText(line.from)
47507
+ : React__default['default'].createElement(React__default['default'].Fragment, null, getDateText(line.from), ' > ', getDateText(line.to)),
47508
+ ')'
47509
+ )
47510
+ );
47511
+ });
47512
+ };
47513
+
47514
+ var travelerFormFields = [{ type: 'gender' }, { type: 'firstName' }, { type: 'lastName' }, { type: 'birthDate' }];
47515
+ var mainBookerFormFields = [
47516
+ { type: 'street' },
47517
+ { type: 'houseNumber' },
47518
+ { type: 'box' },
47519
+ { type: 'zipCode' },
47520
+ { type: 'place' },
47521
+ { type: 'country' },
47522
+ { type: 'phone' },
47523
+ { type: 'email' }
47524
+ ];
47525
+ var travellersSettings = {
47526
+ countries: [
47527
+ { iso2: 'BE', name: 'Belgium', phonePrefix: '+32' },
47528
+ { iso2: 'NL', name: 'Netherlands', phonePrefix: '+31' },
47529
+ { iso2: 'FR', name: 'France', phonePrefix: '+33' }
47530
+ ],
47531
+ formFields: travelerFormFields,
47532
+ mainBookerFormFields: mainBookerFormFields
47533
+ };
47534
+ var BookPackagingEntry = function (_a) {
47535
+ var _b, _c;
47536
+ var activeSearchSeed = _a.activeSearchSeed,
47537
+ isConfirmationPage = _a.isConfirmationPage;
46980
47538
  var context = React.useContext(SearchResultsConfigurationContext);
46981
- if (!context) {
46982
- return null;
46983
- }
46984
- var translations = getTranslations((_b = context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
46985
- var currentStep = reactRedux.useSelector(function (state) {
46986
- return state.searchResults;
46987
- }).currentStep;
46988
- reactRedux.useDispatch();
47539
+ var dispatch = reactRedux.useDispatch();
47540
+ var _d = reactRedux.useSelector(function (state) {
47541
+ return state.searchResults;
47542
+ }),
47543
+ editablePackagingEntry = _d.editablePackagingEntry,
47544
+ priceDetails = _d.priceDetails,
47545
+ currentStep = _d.currentStep,
47546
+ bookingNumber = _d.bookingNumber;
47547
+ var _e = React.useState([]),
47548
+ countries = _e[0],
47549
+ setCountries = _e[1];
47550
+ var _f = React.useState(true),
47551
+ userValidated = _f[0],
47552
+ setUserValidated = _f[1];
47553
+ var _g = React.useState(''),
47554
+ remarks = _g[0],
47555
+ setRemarks = _g[1];
47556
+ var _h = React.useState(false),
47557
+ isSubmitting = _h[0],
47558
+ setIsSubmitting = _h[1];
47559
+ if (!context || !editablePackagingEntry || !priceDetails) return null;
47560
+ var config = {
47561
+ host: context.tideConnection.host,
47562
+ apiKey: context.tideConnection.apiKey
47563
+ };
47564
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
46989
47565
  var stepLabels = [translations.STEPS.PERSONAL_DETAILS, translations.STEPS.SUMMARY, translations.STEPS.CONFIRMATION];
47566
+ console.log('editablePackagingEntry in WLSidebar:', editablePackagingEntry);
47567
+ console.log('priceDetails in WLSidebar:', priceDetails);
47568
+ var initialValues = React.useMemo(
47569
+ function () {
47570
+ return createInitialValuesFromEditablePackagingEntry(editablePackagingEntry);
47571
+ },
47572
+ [editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.transactionId]
47573
+ );
47574
+ var formik$1 = formik.useFormik({
47575
+ initialValues: initialValues,
47576
+ enableReinitialize: true,
47577
+ validate: function (values) {
47578
+ return validateForm(values, false, 'b2c', translations, travellersSettings.formFields, travellersSettings.mainBookerFormFields);
47579
+ },
47580
+ onSubmit: function (values) {
47581
+ dispatch(setEditablePackagingEntry(applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry, values)));
47582
+ dispatch(setCurrentStep(1));
47583
+ }
47584
+ });
47585
+ React.useEffect(function () {
47586
+ if (!context) return;
47587
+ var controller = new AbortController();
47588
+ (function () {
47589
+ return __awaiter(void 0, void 0, void 0, function () {
47590
+ var result;
47591
+ return __generator(this, function (_b) {
47592
+ switch (_b.label) {
47593
+ case 0:
47594
+ _b.trys.push([0, 2, , 3]);
47595
+ return [4 /*yield*/, build.getCountries(config, controller.signal)];
47596
+ case 1:
47597
+ result = _b.sent();
47598
+ setCountries(result.items);
47599
+ return [3 /*break*/, 3];
47600
+ case 2:
47601
+ _b.sent();
47602
+ return [3 /*break*/, 3];
47603
+ case 3:
47604
+ return [2 /*return*/];
47605
+ }
47606
+ });
47607
+ });
47608
+ })();
47609
+ return function () {
47610
+ return controller.abort();
47611
+ };
47612
+ }, []);
47613
+ React.useEffect(
47614
+ function () {
47615
+ if (isConfirmationPage) {
47616
+ dispatch(setCurrentStep(2));
47617
+ }
47618
+ },
47619
+ [isConfirmationPage, dispatch]
47620
+ );
47621
+ var handleSummarySubmit = function (e) {
47622
+ return __awaiter(void 0, void 0, void 0, function () {
47623
+ var updatedEditablePackagingEntry, redirectUrl, request, bookingResponse;
47624
+ var _a, _b;
47625
+ return __generator(this, function (_c) {
47626
+ switch (_c.label) {
47627
+ case 0:
47628
+ e.preventDefault();
47629
+ setIsSubmitting(true);
47630
+ if (typeof window !== 'undefined') {
47631
+ window.scrollTo(0, 0);
47632
+ }
47633
+ updatedEditablePackagingEntry = __assign(__assign({}, editablePackagingEntry), { remarks: remarks });
47634
+ if (context.generatePaymentUrl && typeof window !== 'undefined') {
47635
+ redirectUrl = new URL(window.location.href);
47636
+ redirectUrl.searchParams.set('bookingConfirmation', 'true');
47637
+ redirectUrl.searchParams.set('link', '');
47638
+ updatedEditablePackagingEntry = __assign(__assign({}, updatedEditablePackagingEntry), {
47639
+ redirectUrl: redirectUrl.toString(),
47640
+ returnPaymentUrl: true
47641
+ });
47642
+ }
47643
+ dispatch(setEditablePackagingEntry(updatedEditablePackagingEntry));
47644
+ _c.label = 1;
47645
+ case 1:
47646
+ _c.trys.push([1, 3, 4, 5]);
47647
+ request = {
47648
+ language: (_a = context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB',
47649
+ officeId: context.tideConnection.officeId,
47650
+ catalogueId: (_b = context.searchConfiguration.defaultCatalogueId) !== null && _b !== void 0 ? _b : 0,
47651
+ agentId: context.agentId,
47652
+ payload: updatedEditablePackagingEntry
47653
+ };
47654
+ return [4 /*yield*/, build.bookPackagingEntry(config, request)];
47655
+ case 2:
47656
+ bookingResponse = _c.sent();
47657
+ dispatch(setBookingNumber(bookingResponse.number));
47658
+ if (bookingResponse.paymentUrl) {
47659
+ window.location.href = bookingResponse.paymentUrl;
47660
+ } else {
47661
+ dispatch(setCurrentStep(2));
47662
+ }
47663
+ return [3 /*break*/, 5];
47664
+ case 3:
47665
+ _c.sent();
47666
+ dispatch(setCurrentStep(3));
47667
+ return [3 /*break*/, 5];
47668
+ case 4:
47669
+ setIsSubmitting(false);
47670
+ return [7 /*endfinally*/];
47671
+ case 5:
47672
+ return [2 /*return*/];
47673
+ }
47674
+ });
47675
+ });
47676
+ };
46990
47677
  return React__default['default'].createElement(
46991
47678
  'div',
46992
47679
  { className: 'booking' },
@@ -47003,7 +47690,64 @@ var BookPackagingEntry = function (_a) {
47003
47690
  return React__default['default'].createElement(React__default['default'].Fragment, null, step + 1, '.\u00A0', stepLabels[step]);
47004
47691
  }
47005
47692
  },
47006
- React__default['default'].createElement('div', null)
47693
+ currentStep === 0 &&
47694
+ React__default['default'].createElement(SharedTravelersForm, {
47695
+ formik: formik$1,
47696
+ translations: translations,
47697
+ travellersSettings: travellersSettings,
47698
+ countries: countries,
47699
+ travelersFirstStep: false,
47700
+ isUnavailable: false,
47701
+ useCompactForm: false,
47702
+ showAgentSelection: false
47703
+ }),
47704
+ currentStep === 1 &&
47705
+ React__default['default'].createElement(SharedSummary, {
47706
+ translations: translations,
47707
+ travelerFormValues: formik$1.values,
47708
+ isSubmitting: isSubmitting,
47709
+ userValidated: userValidated,
47710
+ remarks: remarks,
47711
+ enableVoucher: false,
47712
+ allowOption: false,
47713
+ isOffer: false,
47714
+ onUserValidatedChange: setUserValidated,
47715
+ onRemarksChange: setRemarks,
47716
+ onSubmit: handleSummarySubmit,
47717
+ renderOptions: function () {
47718
+ return renderEditablePackagingEntrySummaryOptions(editablePackagingEntry, priceDetails);
47719
+ },
47720
+ renderPreviousButton: function () {
47721
+ return React__default['default'].createElement(
47722
+ 'button',
47723
+ {
47724
+ type: 'button',
47725
+ title: translations.STEPS.PREVIOUS,
47726
+ onClick: function () {
47727
+ return dispatch(setCurrentStep(0));
47728
+ },
47729
+ className: 'cta cta--secondary'
47730
+ },
47731
+ translations.STEPS.PREVIOUS
47732
+ );
47733
+ }
47734
+ }),
47735
+ currentStep === 2 &&
47736
+ React__default['default'].createElement(SharedConfirmation, {
47737
+ bookingNumber:
47738
+ (_c =
47739
+ bookingNumber !== null && bookingNumber !== void 0
47740
+ ? bookingNumber
47741
+ : editablePackagingEntry === null || editablePackagingEntry === void 0
47742
+ ? void 0
47743
+ : editablePackagingEntry.dossierNumber) !== null && _c !== void 0
47744
+ ? _c
47745
+ : '',
47746
+ isOption: false,
47747
+ isOffer: false,
47748
+ translations: translations.CONFIRMATION
47749
+ }),
47750
+ currentStep === 3 && React__default['default'].createElement('div', null)
47007
47751
  ),
47008
47752
  React__default['default'].createElement('div', { className: 'backdrop', id: 'backdrop' }),
47009
47753
  React__default['default'].createElement(WLSidebar, { activeSearchSeed: activeSearchSeed })
@@ -47063,9 +47807,12 @@ var SearchResultsContainer = function () {
47063
47807
  var _k = React.useState(false),
47064
47808
  itineraryOpen = _k[0],
47065
47809
  setItineraryOpen = _k[1];
47066
- var _l = React.useState(null),
47067
- selectedAccommodationSeed = _l[0],
47068
- setSelectedAccommodationSeed = _l[1];
47810
+ var _l = React.useState(false),
47811
+ isBookingConfirmation = _l[0],
47812
+ setIsBookingConfirmation = _l[1];
47813
+ var _m = React.useState(null),
47814
+ selectedAccommodationSeed = _m[0],
47815
+ setSelectedAccommodationSeed = _m[1];
47069
47816
  var skipInitialPackagingAccoDetailsRef = React.useRef(false);
47070
47817
  var panelRef = React.useRef(null);
47071
47818
  var sortByTypes = [
@@ -47810,6 +48557,13 @@ var SearchResultsContainer = function () {
47810
48557
  if (context === null || context === void 0 ? void 0 : context.packagingEntry) {
47811
48558
  dispatch(setEditablePackagingEntry(structuredClone(context.packagingEntry)));
47812
48559
  dispatch(setTransactionId(context.packagingEntry.transactionId));
48560
+ var params = new URLSearchParams(location.search);
48561
+ var bookingConfirmation = getStringFromParams(params, 'bookingConfirmation');
48562
+ console.log('bookingConfirmation', bookingConfirmation);
48563
+ if (bookingConfirmation == 'true') {
48564
+ setIsBookingConfirmation(true);
48565
+ dispatch(setBookPackagingEntry(true));
48566
+ }
47813
48567
  }
47814
48568
  },
47815
48569
  [context === null || context === void 0 ? void 0 : context.packagingEntry]
@@ -48514,38 +49268,45 @@ var SearchResultsContainer = function () {
48514
49268
  return __assign(__assign({}, entry), { language: language, transactionId: transactionId, pax: entry.pax, lines: nextLines });
48515
49269
  };
48516
49270
  var buildBasePackagingEntry = function (sourceEntry, seed, transactionId, language) {
48517
- var _a, _b;
49271
+ var _a;
48518
49272
  if (sourceEntry) {
48519
49273
  return structuredClone(sourceEntry);
48520
49274
  }
48521
49275
  var paxId = 0;
48522
- var pax =
48523
- (_b =
48524
- (_a = seed.rooms) === null || _a === void 0
48525
- ? void 0
48526
- : _a.flatMap(function (room, roomIndex) {
48527
- return room.pax.map(function (_, paxIndex) {
48528
- return {
48529
- id: paxId++,
48530
- firstName: '',
48531
- lastName: '',
48532
- dateOfBirth: null,
48533
- isMainBooker: roomIndex === 0 && paxIndex === 0
48534
- };
48535
- });
48536
- })) !== null && _b !== void 0
48537
- ? _b
48538
- : [];
49276
+ var pax = [];
49277
+ var rooms = [];
49278
+ (_a = seed.rooms) === null || _a === void 0
49279
+ ? void 0
49280
+ : _a.forEach(function (room, roomIndex) {
49281
+ var paxIds = room.pax.map(function (_, paxIndex) {
49282
+ var id = paxId++;
49283
+ pax.push({
49284
+ id: id,
49285
+ firstName: '',
49286
+ lastName: '',
49287
+ dateOfBirth: null,
49288
+ isMainBooker: roomIndex === 0 && paxIndex === 0
49289
+ });
49290
+ return id;
49291
+ });
49292
+ rooms.push({
49293
+ id: roomIndex,
49294
+ paxIds: paxIds
49295
+ });
49296
+ });
48539
49297
  return {
48540
49298
  language: language,
48541
49299
  transactionId: transactionId,
48542
49300
  dossierNumber: '',
48543
- status: 0,
49301
+ status: context === null || context === void 0 ? void 0 : context.entryStatus,
49302
+ customStatusId: context === null || context === void 0 ? void 0 : context.customEntryStatusId,
48544
49303
  bookingDate: null,
48545
49304
  price: 0,
48546
49305
  depositAmount: 0,
48547
49306
  pax: pax,
48548
- lines: []
49307
+ rooms: rooms,
49308
+ lines: [],
49309
+ address: {}
48549
49310
  };
48550
49311
  };
48551
49312
  var handleShowMoreFlights = function (flyInType) {
@@ -48560,7 +49321,7 @@ var SearchResultsContainer = function () {
48560
49321
  'div',
48561
49322
  { className: 'search' },
48562
49323
  bookPackagingEntry
48563
- ? React__default['default'].createElement(BookPackagingEntry, { activeSearchSeed: activeSearchSeed })
49324
+ ? React__default['default'].createElement(BookPackagingEntry, { activeSearchSeed: activeSearchSeed, isConfirmationPage: isBookingConfirmation })
48564
49325
  : React__default['default'].createElement(
48565
49326
  'div',
48566
49327
  { className: 'search__container' },