@qite/tide-booking-component 1.4.110 → 1.4.112

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 (58) hide show
  1. package/build/build-cjs/index.js +2301 -1565
  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 +2198 -1463
  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 +201 -21
  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 +40 -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/{BookingPanel.tsx → booking-panel.tsx} +1 -1
  36. package/src/shared/booking/shared-confirmation.tsx +105 -0
  37. package/src/shared/booking/summary.tsx +380 -0
  38. package/src/shared/booking/travelers-form.tsx +868 -0
  39. package/src/shared/components/flyin/flyin.tsx +8 -9
  40. package/src/shared/components/flyin/packaging-flights-flyin.tsx +4 -4
  41. package/src/shared/utils/booking-summary.tsx +46 -0
  42. package/src/shared/utils/tide-api-utils.ts +2 -2
  43. package/styles/components/_booking.scss +33 -15
  44. package/styles/components/_cta.scss +2 -2
  45. package/styles/components/_dropdown.scss +5 -0
  46. package/styles/components/_flight-option.scss +1 -1
  47. package/styles/components/_flyin.scss +43 -0
  48. package/styles/components/_search.scss +5 -0
  49. package/styles/components/_step-indicators.scss +41 -15
  50. package/styles/components/_tree.scss +2 -2
  51. /package/build/build-cjs/src/shared/booking/{BookingPanel.d.ts → booking-panel.d.ts} +0 -0
  52. /package/build/build-cjs/src/shared/booking/{Sidebar.d.ts → shared-sidebar.d.ts} +0 -0
  53. /package/build/build-cjs/src/shared/booking/{StepIndicators.d.ts → step-indicators.d.ts} +0 -0
  54. /package/build/build-esm/src/shared/booking/{BookingPanel.d.ts → booking-panel.d.ts} +0 -0
  55. /package/build/build-esm/src/shared/booking/{Sidebar.d.ts → shared-sidebar.d.ts} +0 -0
  56. /package/build/build-esm/src/shared/booking/{StepIndicators.d.ts → step-indicators.d.ts} +0 -0
  57. /package/src/shared/booking/{Sidebar.tsx → shared-sidebar.tsx} +0 -0
  58. /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,
@@ -20833,7 +20848,7 @@ var BookingPanel = function (_a) {
20833
20848
  StepIndicatorsComponent = _a.StepIndicatorsComponent;
20834
20849
  return React__default['default'].createElement(
20835
20850
  'div',
20836
- { className: 'booking__panel' },
20851
+ { className: 'booking__panel__wrapper' },
20837
20852
  React__default['default'].createElement(StepIndicatorsComponent, { currentStep: currentStep, stepLabels: stepLabels }),
20838
20853
  React__default['default'].createElement(
20839
20854
  'div',
@@ -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,334 @@ 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
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;
28090
+ console.log('editablePackagingEntry?.pax:', editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.pax);
28091
+ var pax =
28092
+ (_a = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.pax) !== null && _a !== void 0 ? _a : [];
28093
+ var rooms = editablePackagingEntry.rooms.map(function (room) {
28094
+ var roomPax = pax.filter(function (x) {
28095
+ return room.paxIds.includes(x.id);
28096
+ });
28097
+ return {
28098
+ adults: roomPax.map(function (roomTraveler) {
28099
+ var _a, _b;
28100
+ return {
28101
+ id: roomTraveler.id,
28102
+ firstName: (_a = roomTraveler.firstName) !== null && _a !== void 0 ? _a : '',
28103
+ lastName: (_b = roomTraveler.lastName) !== null && _b !== void 0 ? _b : '',
28104
+ birthDate: roomTraveler.dateOfBirth ? dateFns.format(new Date(roomTraveler.dateOfBirth), 'yyyy-MM-dd') : '',
28105
+ gender: ''
28106
+ };
28107
+ }),
28108
+ children: []
28109
+ };
28110
+ });
28111
+ var values = createInitialValuesFromRooms(
28112
+ rooms.map(function (room) {
28113
+ return { adults: room.adults, children: room.children };
28114
+ }),
28115
+ (_c =
28116
+ (_b = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.lines) === null || _b === void 0
28072
28117
  ? 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
- }
28105
- })
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
- }
28118
+ : _b[0]) === null || _c === void 0
28119
+ ? void 0
28120
+ : _c.from,
28121
+ agentAdressId
28122
+ );
28123
+ values.rooms = rooms;
28124
+ values.mainBookerId =
28125
+ (_j =
28126
+ (_e =
28127
+ (_d = pax.find(function (x) {
28128
+ return x.isMainBooker;
28129
+ })) === null || _d === void 0
28130
+ ? void 0
28131
+ : _d.id) !== null && _e !== void 0
28132
+ ? _e
28133
+ : (_h = (_g = (_f = rooms[0]) === null || _f === void 0 ? void 0 : _f.adults) === null || _g === void 0 ? void 0 : _g[0]) === null || _h === void 0
28134
+ ? void 0
28135
+ : _h.id) !== null && _j !== void 0
28136
+ ? _j
28137
+ : -1;
28138
+ var address = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.address;
28139
+ values.street = (_k = address === null || address === void 0 ? void 0 : address.street) !== null && _k !== void 0 ? _k : '';
28140
+ values.houseNumber = (_l = address === null || address === void 0 ? void 0 : address.houseNumber) !== null && _l !== void 0 ? _l : '';
28141
+ values.box = (_m = address === null || address === void 0 ? void 0 : address.box) !== null && _m !== void 0 ? _m : '';
28142
+ values.zipCode = (_o = address === null || address === void 0 ? void 0 : address.zipCode) !== null && _o !== void 0 ? _o : '';
28143
+ values.place = (_p = address === null || address === void 0 ? void 0 : address.place) !== null && _p !== void 0 ? _p : '';
28144
+ values.country = (_q = address === null || address === void 0 ? void 0 : address.country) !== null && _q !== void 0 ? _q : '';
28145
+ values.phone = (_r = address === null || address === void 0 ? void 0 : address.phone) !== null && _r !== void 0 ? _r : '';
28146
+ values.email = (_s = address === null || address === void 0 ? void 0 : address.email) !== null && _s !== void 0 ? _s : '';
28147
+ values.emailConfirmation = (_t = address === null || address === void 0 ? void 0 : address.email) !== null && _t !== void 0 ? _t : '';
28148
+ values.travelAgentId =
28149
+ (_v = (_u = address === null || address === void 0 ? void 0 : address.travelAgentId) !== null && _u !== void 0 ? _u : agentAdressId) !== null &&
28150
+ _v !== void 0
28151
+ ? _v
28152
+ : 0;
28153
+ return values;
28154
+ }
28155
+ function applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry, values) {
28156
+ var _a;
28157
+ var travelers = values.rooms.flatMap(function (room) {
28158
+ return __spreadArray(__spreadArray([], room.adults, true), room.children, true);
28159
+ });
28160
+ console.log('Applying form values:', values);
28161
+ console.log('editablePackagingEntry:', editablePackagingEntry);
28162
+ return __assign(__assign({}, editablePackagingEntry), {
28163
+ pax: ((_a = editablePackagingEntry.pax) !== null && _a !== void 0 ? _a : []).map(function (pax) {
28164
+ var _a, _b;
28165
+ var traveler = travelers.find(function (x) {
28166
+ return x.id === pax.id;
28145
28167
  });
28146
- React.useEffect(function () {
28147
- dispatch(fetchPriceDetails());
28148
- }, []);
28149
- React.useEffect(
28168
+ if (!traveler) return pax;
28169
+ return __assign(__assign({}, pax), {
28170
+ firstName: (_a = traveler.firstName) !== null && _a !== void 0 ? _a : '',
28171
+ lastName: (_b = traveler.lastName) !== null && _b !== void 0 ? _b : '',
28172
+ dateOfBirth: traveler.birthDate || null,
28173
+ isMainBooker: traveler.id === values.mainBookerId
28174
+ });
28175
+ }),
28176
+ address: __assign(__assign({}, editablePackagingEntry.address), {
28177
+ street: values.street,
28178
+ houseNumber: values.houseNumber,
28179
+ box: values.box,
28180
+ zipCode: values.zipCode,
28181
+ place: values.place,
28182
+ country: values.country,
28183
+ travelAgentId: values.travelAgentId,
28184
+ phone: values.phone,
28185
+ email: values.email
28186
+ })
28187
+ });
28188
+ }
28189
+ var SharedTravelersForm = function (_a) {
28190
+ var _b, _c, _d, _e, _f, _g;
28191
+ var formik = _a.formik,
28192
+ translations = _a.translations,
28193
+ travellersSettings = _a.travellersSettings,
28194
+ countries = _a.countries,
28195
+ agents = _a.agents,
28196
+ bookingType = _a.bookingType,
28197
+ agentAdressId = _a.agentAdressId,
28198
+ _h = _a.travelersFirstStep,
28199
+ travelersFirstStep = _h === void 0 ? false : _h,
28200
+ _j = _a.isUnavailable,
28201
+ isUnavailable = _j === void 0 ? false : _j,
28202
+ _k = _a.useCompactForm,
28203
+ useCompactForm = _k === void 0 ? false : _k,
28204
+ _l = _a.showAllCountries,
28205
+ showAllCountries = _l === void 0 ? false : _l,
28206
+ _m = _a.showAgentSelection,
28207
+ showAgentSelection = _m === void 0 ? false : _m,
28208
+ _o = _a.initialShowAgents,
28209
+ initialShowAgents = _o === void 0 ? false : _o,
28210
+ renderPreviousButton = _a.renderPreviousButton,
28211
+ onBookingTypeChange = _a.onBookingTypeChange;
28212
+ var _p = React.useState(initialShowAgents),
28213
+ showAgents = _p[0],
28214
+ setShowAgents = _p[1];
28215
+ var typeaheadAgents = React.useMemo(
28150
28216
  function () {
28151
28217
  var _a;
28152
- if (
28153
- !((_a = bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms) === null || _a === void 0
28218
+ return (_a = lodash.sortBy(
28219
+ agents === null || agents === void 0
28154
28220
  ? 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
- }
28221
+ : agents.map(function (agent) {
28222
+ return {
28223
+ key: ''.concat(agent.id),
28224
+ value: ''
28225
+ .concat(agent.name)
28226
+ .concat(agent.postalCode || agent.location ? ' ('.concat(lodash.compact([agent.postalCode, agent.location]).join(' '), ')') : ''),
28227
+ text: ''
28228
+ .concat(agent.name)
28229
+ .concat(agent.postalCode || agent.location ? ' ('.concat(lodash.compact([agent.postalCode, agent.location]).join(' '), ')') : '')
28230
+ };
28231
+ }),
28232
+ 'value'
28233
+ )) !== null && _a !== void 0
28234
+ ? _a
28235
+ : [];
28240
28236
  },
28241
- [agents, settings.affiliateSlug]
28237
+ [agents]
28242
28238
  );
28243
- var handleMainBookerChange = function (e) {
28244
- var id = parseInt(e.currentTarget.value);
28245
- formik$1.setFieldValue('mainBookerId', id);
28239
+ var _q = React.useState(typeaheadAgents),
28240
+ filteredAgents = _q[0],
28241
+ setFilteredAgents = _q[1];
28242
+ var flatErrors = flat__default['default'](formik.errors);
28243
+ var errorKeys = Object.keys(flatErrors).filter(function (key) {
28244
+ return lodash.get(formik.touched, key);
28245
+ });
28246
+ var hasVisibleError = function (key) {
28247
+ return lodash.get(formik.errors, key) && lodash.get(formik.touched, key);
28246
28248
  };
28247
28249
  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;
28250
+ (_b = formik.values.rooms.find(function (room) {
28251
+ return room.adults.find(function (traveler) {
28252
+ return traveler.id === formik.values.mainBookerId;
28251
28253
  });
28252
- })) === null || _d === void 0
28254
+ })) === null || _b === void 0
28253
28255
  ? void 0
28254
- : _d.adults.find(function (traveler) {
28255
- return traveler.id === formik$1.values.mainBookerId;
28256
+ : _b.adults.find(function (traveler) {
28257
+ return traveler.id === formik.values.mainBookerId;
28256
28258
  });
28259
+ var countryOptions = __spreadArray(
28260
+ [{ key: 'empty', value: undefined, label: translations.TRAVELERS_FORM.SELECT_COUNTRY }],
28261
+ showAllCountries
28262
+ ? (_c =
28263
+ countries === null || countries === void 0
28264
+ ? void 0
28265
+ : countries.map(function (country) {
28266
+ return { key: country.iso2, value: country.iso2, label: country.name };
28267
+ })) !== null && _c !== void 0
28268
+ ? _c
28269
+ : []
28270
+ : (_e =
28271
+ (_d = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.countries) === null || _d === void 0
28272
+ ? void 0
28273
+ : _d.map(function (country) {
28274
+ return { key: country.iso2, value: country.iso2, label: country.name };
28275
+ })) !== null && _e !== void 0
28276
+ ? _e
28277
+ : [
28278
+ { key: 'be', value: 'be', label: translations.TRAVELERS_FORM.COUNTRIES.BELGIUM },
28279
+ { key: 'nl', value: 'nl', label: translations.TRAVELERS_FORM.COUNTRIES.NETHERLANDS },
28280
+ { key: 'fr', value: 'fr', label: translations.TRAVELERS_FORM.COUNTRIES.FRANCE }
28281
+ ],
28282
+ true
28283
+ );
28284
+ var handleMainBookerChange = function (event) {
28285
+ formik.setFieldValue('mainBookerId', parseInt(event.currentTarget.value, 10));
28286
+ };
28257
28287
  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);
28288
+ setFilteredAgents(
28289
+ typeaheadAgents.filter(function (x) {
28290
+ return x.value.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) > -1;
28291
+ })
28292
+ );
28293
+ formik.setFieldValue('travelAgentName', value);
28263
28294
  };
28264
28295
  var handleAgentSelect = function (key) {
28265
28296
  var _a;
28266
28297
  var agent = typeaheadAgents.find(function (x) {
28267
28298
  return x.key === key;
28268
28299
  });
28269
- formik$1.setValues(
28270
- __assign(__assign({}, formik$1.values), {
28300
+ formik.setValues(
28301
+ __assign(__assign({}, formik.values), {
28271
28302
  travelAgentId: Number(agent === null || agent === void 0 ? void 0 : agent.key),
28272
28303
  travelAgentName: (_a = agent === null || agent === void 0 ? void 0 : agent.value) !== null && _a !== void 0 ? _a : ''
28273
28304
  })
28274
28305
  );
28275
- var bookingType = 'b2b2c';
28276
- if (agentAdressId && agentAdressId != 0) {
28277
- bookingType = 'b2b';
28278
- }
28279
- dispatch(setBookingType(bookingType));
28306
+ onBookingTypeChange === null || onBookingTypeChange === void 0 ? void 0 : onBookingTypeChange(agentAdressId && agentAdressId !== 0 ? 'b2b' : 'b2b2c');
28280
28307
  };
28281
28308
  var handleAgentClear = function () {
28282
- formik$1.setValues(__assign(__assign({}, formik$1.values), { travelAgentId: 0, travelAgentName: '' }));
28283
- dispatch(setBookingType('b2c'));
28309
+ formik.setValues(__assign(__assign({}, formik.values), { travelAgentId: 0, travelAgentName: '' }));
28310
+ onBookingTypeChange === null || onBookingTypeChange === void 0 ? void 0 : onBookingTypeChange('b2c');
28311
+ };
28312
+ var toggleAgent = function (value) {
28313
+ setShowAgents(value);
28314
+ if (!value) {
28315
+ handleAgentClear();
28316
+ setFilteredAgents([]);
28317
+ }
28284
28318
  };
28285
28319
  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
- };
28320
+ var rooms = __spreadArray([], formik.values.rooms, true);
28321
+ var newAdult = { id: Date.now(), firstName: '', lastName: '', birthDate: '', gender: '' };
28294
28322
  rooms[roomIndex] = __assign(__assign({}, rooms[roomIndex]), { adults: __spreadArray(__spreadArray([], rooms[roomIndex].adults, true), [newAdult], false) });
28295
- formik$1.setFieldValue('rooms', rooms);
28323
+ formik.setFieldValue('rooms', rooms);
28296
28324
  };
28297
28325
  var handleRemoveTraveler = function (roomIndex, travelerIndex) {
28298
- var rooms = __spreadArray([], formik$1.values.rooms, true);
28326
+ var rooms = __spreadArray([], formik.values.rooms, true);
28299
28327
  var adults = __spreadArray([], rooms[roomIndex].adults, true);
28300
- if (adults.length <= 1) {
28301
- return;
28302
- }
28328
+ if (adults.length <= 1) return;
28303
28329
  adults.splice(travelerIndex, 1);
28304
28330
  rooms[roomIndex] = __assign(__assign({}, rooms[roomIndex]), { adults: adults });
28305
- formik$1.setFieldValue('rooms', rooms);
28331
+ formik.setFieldValue('rooms', rooms);
28306
28332
  };
28307
28333
  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);
28334
+ var rooms = __spreadArray([], formik.values.rooms, true);
28335
+ rooms.push({ adults: [{ id: Date.now(), firstName: '', lastName: '', birthDate: '', gender: '' }], children: [] });
28336
+ formik.setFieldValue('rooms', rooms);
28318
28337
  };
28319
28338
  var handleRemoveRoom = function (roomIndex) {
28320
- var rooms = __spreadArray([], formik$1.values.rooms, true);
28339
+ var rooms = __spreadArray([], formik.values.rooms, true);
28321
28340
  rooms.splice(roomIndex, 1);
28322
- formik$1.setFieldValue('rooms', rooms);
28341
+ formik.setFieldValue('rooms', rooms);
28323
28342
  };
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);
28343
+ var renderGenderControl = function (name, value) {
28344
+ return React__default['default'].createElement(
28345
+ 'div',
28346
+ { className: buildClassName(['form__group', hasVisibleError(name) && 'form__group--error']) },
28347
+ React__default['default'].createElement('label', { className: 'form__label' }, translations.TRAVELERS_FORM.GENDER_ID, ' *'),
28348
+ React__default['default'].createElement(
28349
+ 'div',
28350
+ { className: 'radiobutton-group' },
28351
+ [
28352
+ ['m', translations.TRAVELERS_FORM.MALE_GENDER],
28353
+ ['f', translations.TRAVELERS_FORM.FEMALE_GENDER]
28354
+ ].map(function (_a) {
28355
+ var gender = _a[0],
28356
+ label = _a[1];
28357
+ return React__default['default'].createElement(
28358
+ 'div',
28359
+ { className: 'radiobutton', key: gender },
28360
+ React__default['default'].createElement(
28361
+ 'label',
28362
+ { className: 'radiobutton__label' },
28363
+ React__default['default'].createElement('input', {
28364
+ type: 'radio',
28365
+ className: 'radiobutton__input',
28366
+ name: name,
28367
+ onChange: formik.handleChange,
28368
+ onBlur: formik.handleBlur,
28369
+ value: gender,
28370
+ checked: value.gender === gender
28371
+ }),
28372
+ label
28373
+ )
28374
+ );
28375
+ })
28376
+ )
28377
+ );
28340
28378
  };
28341
28379
  var getControl = function (type, value, name) {
28342
- var _a, _b, _c, _d, _e, _f;
28380
+ var _a;
28343
28381
  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': {
28382
+ case 'gender':
28383
+ return React__default['default'].createElement(GenderControl, { translations: translations, value: value, formik: formik, name: name });
28384
+ case 'firstName':
28348
28385
  return React__default['default'].createElement(LabeledInput, {
28349
28386
  hasError: hasVisibleError(name),
28350
28387
  extraClassName: 'form__group--md-33',
28351
28388
  label: translations.TRAVELERS_FORM.FIRST_NAME,
28352
28389
  required: true,
28353
28390
  name: name,
28354
- onChange: formik$1.handleChange,
28355
- onBlur: formik$1.handleBlur,
28391
+ onChange: formik.handleChange,
28392
+ onBlur: formik.handleBlur,
28356
28393
  value: value.firstName
28357
28394
  });
28358
- }
28359
- case 'lastName': {
28395
+ case 'lastName':
28360
28396
  return React__default['default'].createElement(LabeledInput, {
28361
28397
  hasError: hasVisibleError(name),
28362
28398
  extraClassName: 'form__group--md-33',
28363
28399
  label: translations.TRAVELERS_FORM.LAST_NAME,
28364
28400
  required: true,
28365
28401
  name: name,
28366
- onChange: formik$1.handleChange,
28367
- onBlur: formik$1.handleBlur,
28402
+ onChange: formik.handleChange,
28403
+ onBlur: formik.handleBlur,
28368
28404
  value: value.lastName
28369
28405
  });
28370
- }
28371
- case 'birthDate': {
28406
+ case 'birthDate':
28372
28407
  return React__default['default'].createElement(LabeledInput, {
28373
28408
  type: 'date',
28374
28409
  hasError: hasVisibleError(name),
@@ -28376,71 +28411,35 @@ var TravelersForm = function () {
28376
28411
  label: translations.TRAVELERS_FORM.BIRTHDATE,
28377
28412
  required: true,
28378
28413
  name: name,
28379
- onChange: formik$1.handleChange,
28380
- onBlur: formik$1.handleBlur,
28414
+ onChange: formik.handleChange,
28415
+ onBlur: formik.handleBlur,
28381
28416
  value: value.birthDate
28382
28417
  });
28383
- }
28384
- case 'country': {
28418
+ case 'country':
28385
28419
  return React__default['default'].createElement(LabeledSelect, {
28386
28420
  hasError: hasVisibleError('country'),
28387
28421
  label: translations.TRAVELERS_FORM.COUNTRY,
28388
28422
  required: true,
28389
28423
  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
- )
28424
+ onChange: formik.handleChange,
28425
+ onBlur: formik.handleBlur,
28426
+ value: formik.values.country,
28427
+ options: countryOptions
28428
28428
  });
28429
- }
28430
- case 'phone': {
28429
+ case 'phone':
28431
28430
  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,
28431
+ countries:
28432
+ (_a = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.countries) !== null && _a !== void 0 ? _a : [],
28433
+ countryIso2: formik.values.country,
28434
28434
  hasError: hasVisibleError('phone'),
28435
28435
  label: translations.TRAVELERS_FORM.PHONE,
28436
28436
  required: true,
28437
28437
  name: 'phone',
28438
- onChange: formik$1.handleChange,
28439
- onBlur: formik$1.handleBlur,
28440
- value: formik$1.values.phone
28438
+ onChange: formik.handleChange,
28439
+ onBlur: formik.handleBlur,
28440
+ value: formik.values.phone
28441
28441
  });
28442
- }
28443
- case 'email': {
28442
+ case 'email':
28444
28443
  return React__default['default'].createElement(
28445
28444
  React__default['default'].Fragment,
28446
28445
  null,
@@ -28451,9 +28450,9 @@ var TravelersForm = function () {
28451
28450
  label: translations.TRAVELERS_FORM.EMAIL,
28452
28451
  required: true,
28453
28452
  name: 'email',
28454
- onChange: formik$1.handleChange,
28455
- onBlur: formik$1.handleBlur,
28456
- value: formik$1.values.email
28453
+ onChange: formik.handleChange,
28454
+ onBlur: formik.handleBlur,
28455
+ value: formik.values.email
28457
28456
  }),
28458
28457
  React__default['default'].createElement(LabeledInput, {
28459
28458
  type: 'email',
@@ -28462,14 +28461,173 @@ var TravelersForm = function () {
28462
28461
  label: translations.TRAVELERS_FORM.REPEAT_EMAIL,
28463
28462
  required: true,
28464
28463
  name: 'emailConfirmation',
28465
- onChange: formik$1.handleChange,
28466
- onBlur: formik$1.handleBlur,
28467
- value: formik$1.values.emailConfirmation
28464
+ onChange: formik.handleChange,
28465
+ onBlur: formik.handleBlur,
28466
+ value: formik.values.emailConfirmation
28468
28467
  })
28469
28468
  );
28470
- }
28469
+ case 'street':
28470
+ return React__default['default'].createElement(LabeledInput, {
28471
+ hasError: hasVisibleError('street'),
28472
+ extraClassName: 'form__group--50 form__group--sm-60',
28473
+ label: translations.TRAVELERS_FORM.STREET,
28474
+ required: true,
28475
+ name: 'street',
28476
+ onChange: formik.handleChange,
28477
+ onBlur: formik.handleBlur,
28478
+ value: formik.values.street
28479
+ });
28480
+ case 'houseNumber':
28481
+ return React__default['default'].createElement(LabeledInput, {
28482
+ hasError: hasVisibleError('houseNumber'),
28483
+ extraClassName: 'form__group--30 form__group--sm-20',
28484
+ label: translations.TRAVELERS_FORM.HOUSE_NUMBER,
28485
+ required: true,
28486
+ name: 'houseNumber',
28487
+ onChange: formik.handleChange,
28488
+ onBlur: formik.handleBlur,
28489
+ value: formik.values.houseNumber
28490
+ });
28491
+ case 'box':
28492
+ return React__default['default'].createElement(LabeledInput, {
28493
+ hasError: hasVisibleError('box'),
28494
+ extraClassName: 'form__group--20',
28495
+ label: translations.TRAVELERS_FORM.POST_BOX,
28496
+ name: 'box',
28497
+ onChange: formik.handleChange,
28498
+ onBlur: formik.handleBlur,
28499
+ value: formik.values.box
28500
+ });
28501
+ case 'zipCode':
28502
+ return React__default['default'].createElement(LabeledInput, {
28503
+ hasError: hasVisibleError('zipCode'),
28504
+ extraClassName: 'form__group--40 form__group--sm-20',
28505
+ label: translations.TRAVELERS_FORM.ZIPCODE,
28506
+ required: true,
28507
+ name: 'zipCode',
28508
+ onChange: formik.handleChange,
28509
+ onBlur: formik.handleBlur,
28510
+ value: formik.values.zipCode
28511
+ });
28512
+ case 'place':
28513
+ return React__default['default'].createElement(LabeledInput, {
28514
+ hasError: hasVisibleError('place'),
28515
+ extraClassName: 'form__group--60 form__group--sm-40',
28516
+ label: translations.TRAVELERS_FORM.CITY,
28517
+ required: true,
28518
+ name: 'place',
28519
+ onChange: formik.handleChange,
28520
+ onBlur: formik.handleBlur,
28521
+ value: formik.values.place
28522
+ });
28523
+ default:
28524
+ return null;
28471
28525
  }
28472
28526
  };
28527
+ var renderRoomLabel = function (room) {
28528
+ var _a, _b;
28529
+ return lodash
28530
+ .compact([
28531
+ room.adults.length,
28532
+ room.adults.length === 1 && ' '.concat(translations.TRAVELERS_FORM.ADULT),
28533
+ room.adults.length > 1 && ' '.concat(translations.TRAVELERS_FORM.ADULTS),
28534
+ ((_a = room.adults) === null || _a === void 0 ? void 0 : _a.length) && ((_b = room.children) === null || _b === void 0 ? void 0 : _b.length) && ', ',
28535
+ room.children.length,
28536
+ room.children.length === 1 && ' '.concat(translations.TRAVELERS_FORM.CHILD),
28537
+ room.children.length > 1 && ' '.concat(translations.TRAVELERS_FORM.CHILDREN)
28538
+ ])
28539
+ .join('');
28540
+ };
28541
+ var renderTravelerFields = function (travelerValues, namePrefix, isAdult, roomIndex, travelerIndex) {
28542
+ var _a;
28543
+ if (useCompactForm) {
28544
+ return React__default['default'].createElement(
28545
+ 'div',
28546
+ { className: 'form__row' },
28547
+ React__default['default'].createElement(LabeledInput, {
28548
+ hasError: hasVisibleError(''.concat(namePrefix, '.age')),
28549
+ extraClassName: 'form__group--md-33',
28550
+ label: translations.TRAVELERS_FORM.AGE,
28551
+ required: true,
28552
+ name: ''.concat(namePrefix, '.age'),
28553
+ onChange: formik.handleChange,
28554
+ onBlur: formik.handleBlur,
28555
+ value: travelerValues.age
28556
+ })
28557
+ );
28558
+ }
28559
+ if (
28560
+ (_a = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.formFields) === null || _a === void 0
28561
+ ? void 0
28562
+ : _a.length
28563
+ ) {
28564
+ return React__default['default'].createElement(
28565
+ 'div',
28566
+ { className: 'travelers-form__grid' },
28567
+ travellersSettings.formFields.map(function (field, index) {
28568
+ return React__default['default'].createElement(
28569
+ 'div',
28570
+ { key: index, className: 'control control--'.concat(field.type) },
28571
+ getControl(field.type, travelerValues, ''.concat(namePrefix, '.').concat(field.type))
28572
+ );
28573
+ })
28574
+ );
28575
+ }
28576
+ return React__default['default'].createElement(
28577
+ React__default['default'].Fragment,
28578
+ null,
28579
+ React__default['default'].createElement('div', { className: 'form__row' }, renderGenderControl(''.concat(namePrefix, '.gender'), travelerValues)),
28580
+ React__default['default'].createElement(
28581
+ 'div',
28582
+ { className: 'form__row' },
28583
+ React__default['default'].createElement(LabeledInput, {
28584
+ hasError: hasVisibleError(''.concat(namePrefix, '.firstName')),
28585
+ extraClassName: 'form__group--md-33',
28586
+ label: translations.TRAVELERS_FORM.FIRST_NAME,
28587
+ required: true,
28588
+ name: ''.concat(namePrefix, '.firstName'),
28589
+ onChange: formik.handleChange,
28590
+ onBlur: formik.handleBlur,
28591
+ value: travelerValues.firstName
28592
+ }),
28593
+ React__default['default'].createElement(LabeledInput, {
28594
+ hasError: hasVisibleError(''.concat(namePrefix, '.lastName')),
28595
+ extraClassName: 'form__group--md-33',
28596
+ label: translations.TRAVELERS_FORM.LAST_NAME,
28597
+ required: true,
28598
+ name: ''.concat(namePrefix, '.lastName'),
28599
+ onChange: formik.handleChange,
28600
+ onBlur: formik.handleBlur,
28601
+ value: travelerValues.lastName
28602
+ }),
28603
+ React__default['default'].createElement(LabeledInput, {
28604
+ type: 'date',
28605
+ hasError: hasVisibleError(''.concat(namePrefix, '.birthDate')),
28606
+ extraClassName: 'form__group--md-33',
28607
+ label: translations.TRAVELERS_FORM.BIRTHDATE,
28608
+ required: true,
28609
+ name: ''.concat(namePrefix, '.birthDate'),
28610
+ onChange: formik.handleChange,
28611
+ onBlur: formik.handleBlur,
28612
+ value: travelerValues.birthDate
28613
+ })
28614
+ ),
28615
+ travelersFirstStep &&
28616
+ isAdult &&
28617
+ formik.values.rooms[roomIndex].adults.length > 1 &&
28618
+ React__default['default'].createElement(
28619
+ 'button',
28620
+ {
28621
+ type: 'button',
28622
+ className: 'cta cta--secondary',
28623
+ onClick: function () {
28624
+ return handleRemoveTraveler(roomIndex, travelerIndex);
28625
+ }
28626
+ },
28627
+ translations.TRAVELERS_FORM.REMOVE_TRAVELER
28628
+ )
28629
+ );
28630
+ };
28473
28631
  return React__default['default'].createElement(
28474
28632
  'form',
28475
28633
  {
@@ -28477,687 +28635,238 @@ var TravelersForm = function () {
28477
28635
  name: 'booking--travellers',
28478
28636
  id: 'booking--travellers',
28479
28637
  noValidate: true,
28480
- onSubmit: formik$1.handleSubmit,
28481
- onReset: formik$1.handleReset
28638
+ onSubmit: formik.handleSubmit,
28639
+ onReset: formik.handleReset
28482
28640
  },
28483
- useCompactForm
28484
- ? React__default['default'].createElement(
28641
+ React__default['default'].createElement(
28642
+ 'div',
28643
+ { className: 'form__travelers__wrapper' },
28644
+ formik.values.rooms.map(function (room, roomIndex) {
28645
+ return React__default['default'].createElement(
28485
28646
  'div',
28486
- { className: 'form__travelers__wrapper' },
28487
- formik$1.values.rooms.map(function (room, rIndex) {
28647
+ { key: roomIndex },
28648
+ formik.values.rooms.length > 1 &&
28649
+ React__default['default'].createElement(
28650
+ 'div',
28651
+ { className: 'form__region' },
28652
+ React__default['default'].createElement(
28653
+ 'div',
28654
+ { className: 'form__region-header' },
28655
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SHARED.ROOM, ' ', roomIndex + 1),
28656
+ React__default['default'].createElement('p', { className: 'form__region-label' }, renderRoomLabel(room))
28657
+ ),
28658
+ !useCompactForm &&
28659
+ travelersFirstStep &&
28660
+ formik.values.rooms.length > 1 &&
28661
+ React__default['default'].createElement(
28662
+ 'button',
28663
+ {
28664
+ type: 'button',
28665
+ className: 'cta cta--secondary',
28666
+ onClick: function () {
28667
+ return handleRemoveRoom(roomIndex);
28668
+ }
28669
+ },
28670
+ 'Verwijder reisgezelschap'
28671
+ )
28672
+ ),
28673
+ room.adults.map(function (travelerValues, index) {
28488
28674
  return React__default['default'].createElement(
28489
28675
  'div',
28490
- { key: rIndex },
28491
- formik$1.values.rooms.length > 1 &&
28676
+ { className: 'form__region', key: travelerValues.id },
28677
+ React__default['default'].createElement(
28678
+ 'div',
28679
+ { className: 'form__region-header' },
28680
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.TRAVELER, ' ', index + 1),
28681
+ React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.ADULT),
28492
28682
  React__default['default'].createElement(
28493
28683
  'div',
28494
- { className: 'form__region' },
28684
+ { className: 'radiobutton' },
28495
28685
  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
- )
28686
+ 'label',
28687
+ { className: 'radiobutton__label' },
28688
+ React__default['default'].createElement('input', {
28689
+ type: 'radio',
28690
+ name: 'mainBookerId',
28691
+ onChange: handleMainBookerChange,
28692
+ onBlur: formik.handleBlur,
28693
+ value: travelerValues.id,
28694
+ checked: formik.values.mainBookerId === travelerValues.id,
28695
+ className: 'radiobutton__input'
28696
+ }),
28697
+ translations.TRAVELERS_FORM.MAIN_BOOKER
28514
28698
  )
28699
+ )
28700
+ ),
28701
+ renderTravelerFields(travelerValues, 'rooms['.concat(roomIndex, '].adults[').concat(index, ']'), true, roomIndex, index)
28702
+ );
28703
+ }),
28704
+ room.children.map(function (travelerValues, index) {
28705
+ return React__default['default'].createElement(
28706
+ 'div',
28707
+ { className: 'form__region', key: travelerValues.id },
28708
+ React__default['default'].createElement(
28709
+ 'div',
28710
+ { className: 'form__region-header' },
28711
+ React__default['default'].createElement(
28712
+ 'h5',
28713
+ { className: 'form__region-heading' },
28714
+ translations.TRAVELERS_FORM.TRAVELER,
28715
+ ' ',
28716
+ room.adults.length + index + 1
28515
28717
  ),
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
- })
28718
+ React__default['default'].createElement('p', { className: 'form__region-label' }, translations.TRAVELERS_FORM.CHILD)
28719
+ ),
28720
+ renderTravelerFields(travelerValues, 'rooms['.concat(roomIndex, '].children[').concat(index, ']'), false, roomIndex, index)
28592
28721
  );
28593
- })
28594
- )
28595
- : React__default['default'].createElement(
28596
- React__default['default'].Fragment,
28597
- null,
28598
- React__default['default'].createElement(
28722
+ }),
28723
+ !useCompactForm &&
28724
+ travelersFirstStep &&
28725
+ React__default['default'].createElement(
28726
+ 'div',
28727
+ { className: 'form__region' },
28728
+ React__default['default'].createElement(
28729
+ 'button',
28730
+ {
28731
+ type: 'button',
28732
+ className: 'cta cta--select',
28733
+ onClick: function () {
28734
+ return handleAddTraveler(roomIndex);
28735
+ }
28736
+ },
28737
+ translations.TRAVELERS_FORM.ADD_TRAVELER
28738
+ )
28739
+ )
28740
+ );
28741
+ }),
28742
+ !useCompactForm &&
28743
+ (bookingType !== 'b2b' ||
28744
+ ((_f = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.mainBookerFormFields) === null || _f === void 0
28745
+ ? void 0
28746
+ : _f.length))
28747
+ ? React__default['default'].createElement(
28599
28748
  '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 &&
28749
+ { className: 'form__region' },
28750
+ React__default['default'].createElement(
28751
+ 'div',
28752
+ { className: 'form__region-header' },
28753
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.MAIN_BOOKER),
28754
+ React__default['default'].createElement(
28755
+ 'p',
28756
+ { className: 'form__region-label' },
28757
+ lodash
28758
+ .compact([
28759
+ lodash
28760
+ .compact([
28761
+ mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.firstName,
28762
+ mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.lastName
28763
+ ])
28764
+ .join(' '),
28765
+ (mainBooker === null || mainBooker === void 0 ? void 0 : mainBooker.birthDate) &&
28766
+ dateFns.format(dateFns.parse(mainBooker.birthDate, 'yyyy-MM-dd', new Date()), 'dd-MM-yyyy')
28767
+ ])
28768
+ .join(', ')
28769
+ )
28770
+ ),
28771
+ (
28772
+ (_g = travellersSettings === null || travellersSettings === void 0 ? void 0 : travellersSettings.mainBookerFormFields) === null || _g === void 0
28773
+ ? void 0
28774
+ : _g.length
28775
+ )
28776
+ ? React__default['default'].createElement(
28777
+ 'div',
28778
+ { className: 'main-booker-form__grid' },
28779
+ travellersSettings.mainBookerFormFields.map(function (field, index) {
28780
+ return React__default['default'].createElement(
28781
+ 'div',
28782
+ { key: index, className: 'control control--'.concat(field.type) },
28783
+ getControl(field.type, {}, field.type)
28784
+ );
28785
+ })
28786
+ )
28787
+ : React__default['default'].createElement(
28788
+ React__default['default'].Fragment,
28789
+ null,
28606
28790
  React__default['default'].createElement(
28607
28791
  'div',
28608
- { className: 'form__region' },
28792
+ { className: 'form__twocolumn' },
28609
28793
  React__default['default'].createElement(
28610
28794
  'div',
28611
- { className: 'form__region-header' },
28612
- React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SHARED.ROOM, ' ', rIndex + 1),
28795
+ { className: 'form__twocolumn-column' },
28613
28796
  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('')
28797
+ 'div',
28798
+ { className: 'form__row' },
28799
+ React__default['default'].createElement(LabeledInput, {
28800
+ hasError: hasVisibleError('street'),
28801
+ extraClassName: 'form__group--50 form__group--sm-60',
28802
+ label: translations.TRAVELERS_FORM.STREET,
28803
+ required: true,
28804
+ name: 'street',
28805
+ onChange: formik.handleChange,
28806
+ onBlur: formik.handleBlur,
28807
+ value: formik.values.street
28808
+ }),
28809
+ React__default['default'].createElement(LabeledInput, {
28810
+ hasError: hasVisibleError('houseNumber'),
28811
+ extraClassName: 'form__group--30 form__group--sm-20',
28812
+ label: translations.TRAVELERS_FORM.HOUSE_NUMBER,
28813
+ required: true,
28814
+ name: 'houseNumber',
28815
+ onChange: formik.handleChange,
28816
+ onBlur: formik.handleBlur,
28817
+ value: formik.values.houseNumber
28818
+ }),
28819
+ React__default['default'].createElement(LabeledInput, {
28820
+ hasError: hasVisibleError('box'),
28821
+ extraClassName: 'form__group--20',
28822
+ label: translations.TRAVELERS_FORM.POST_BOX,
28823
+ name: 'box',
28824
+ onChange: formik.handleChange,
28825
+ onBlur: formik.handleBlur,
28826
+ value: formik.values.box
28827
+ })
28627
28828
  )
28628
28829
  ),
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
28830
  React__default['default'].createElement(
28649
28831
  '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),
28832
+ { className: 'form__twocolumn-column' },
28659
28833
  React__default['default'].createElement(
28660
28834
  '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
- )
28835
+ { className: 'form__row' },
28836
+ React__default['default'].createElement(LabeledInput, {
28837
+ hasError: hasVisibleError('zipCode'),
28838
+ extraClassName: 'form__group--40 form__group--sm-20',
28839
+ label: translations.TRAVELERS_FORM.ZIPCODE,
28840
+ required: true,
28841
+ name: 'zipCode',
28842
+ onChange: formik.handleChange,
28843
+ onBlur: formik.handleBlur,
28844
+ value: formik.values.zipCode
28845
+ }),
28846
+ React__default['default'].createElement(LabeledInput, {
28847
+ hasError: hasVisibleError('place'),
28848
+ extraClassName: 'form__group--60 form__group--sm-40',
28849
+ label: translations.TRAVELERS_FORM.CITY,
28850
+ required: true,
28851
+ name: 'place',
28852
+ onChange: formik.handleChange,
28853
+ onBlur: formik.handleBlur,
28854
+ value: formik.values.place
28855
+ }),
28856
+ React__default['default'].createElement(LabeledSelect, {
28857
+ hasError: hasVisibleError('country'),
28858
+ extraClassName: 'form__group--sm-40',
28859
+ label: translations.TRAVELERS_FORM.COUNTRY,
28860
+ required: true,
28861
+ name: 'country',
28862
+ onChange: formik.handleChange,
28863
+ onBlur: formik.handleBlur,
28864
+ value: formik.values.country,
28865
+ options: countryOptions
28866
+ })
28676
28867
  )
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
28868
  )
28973
28869
  ),
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
28870
  React__default['default'].createElement(
29162
28871
  'div',
29163
28872
  { className: 'form__row' },
@@ -29167,81 +28876,125 @@ var TravelersForm = function () {
29167
28876
  label: translations.TRAVELERS_FORM.PHONE,
29168
28877
  required: true,
29169
28878
  name: 'phone',
29170
- onChange: formik$1.handleChange,
29171
- onBlur: formik$1.handleBlur,
29172
- value: formik$1.values.phone
28879
+ onChange: formik.handleChange,
28880
+ onBlur: formik.handleBlur,
28881
+ value: formik.values.phone
28882
+ }),
28883
+ React__default['default'].createElement(LabeledInput, {
28884
+ type: 'email',
28885
+ hasError: hasVisibleError('email'),
28886
+ extraClassName: 'form__group--md-33',
28887
+ label: translations.TRAVELERS_FORM.EMAIL,
28888
+ required: true,
28889
+ name: 'email',
28890
+ onChange: formik.handleChange,
28891
+ onBlur: formik.handleBlur,
28892
+ value: formik.values.email
28893
+ }),
28894
+ React__default['default'].createElement(LabeledInput, {
28895
+ type: 'email',
28896
+ hasError: hasVisibleError('emailConfirmation'),
28897
+ extraClassName: 'form__group--md-33',
28898
+ label: translations.TRAVELERS_FORM.REPEAT_EMAIL,
28899
+ required: true,
28900
+ name: 'emailConfirmation',
28901
+ onChange: formik.handleChange,
28902
+ onBlur: formik.handleBlur,
28903
+ value: formik.values.emailConfirmation
29173
28904
  })
29174
28905
  )
29175
- ),
29176
- showAgentSelection &&
28906
+ )
28907
+ )
28908
+ : !useCompactForm
28909
+ ? React__default['default'].createElement(
28910
+ 'div',
28911
+ { className: 'form__region' },
28912
+ React__default['default'].createElement(
28913
+ 'div',
28914
+ { className: 'form__row' },
28915
+ React__default['default'].createElement(LabeledInput, {
28916
+ hasError: hasVisibleError('phone'),
28917
+ extraClassName: 'form__group--md-33',
28918
+ label: translations.TRAVELERS_FORM.PHONE,
28919
+ required: true,
28920
+ name: 'phone',
28921
+ onChange: formik.handleChange,
28922
+ onBlur: formik.handleBlur,
28923
+ value: formik.values.phone
28924
+ })
28925
+ )
28926
+ )
28927
+ : null,
28928
+ !useCompactForm &&
28929
+ showAgentSelection &&
28930
+ React__default['default'].createElement(
28931
+ 'div',
28932
+ { className: 'form__region' },
28933
+ React__default['default'].createElement(
28934
+ 'div',
28935
+ { className: 'form__region-header' },
28936
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.TRAVELERS_FORM.BOOK_WITH_AGENT),
28937
+ React__default['default'].createElement(
28938
+ 'div',
28939
+ { className: 'checkbox', id: 'cbxChooseOffice' },
29177
28940
  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
- )
28941
+ 'label',
28942
+ { className: 'checkbox__label' },
28943
+ React__default['default'].createElement('input', {
28944
+ type: 'checkbox',
28945
+ name: 'booking--mainbooker',
28946
+ checked: showAgents,
28947
+ onChange: function () {
28948
+ return toggleAgent(!showAgents);
28949
+ },
28950
+ className: 'checkbox__input'
28951
+ }),
28952
+ translations.TRAVELERS_FORM.CHOOSE_OFFICE
29221
28953
  )
28954
+ )
29222
28955
  ),
29223
- errorKeys.length > 0 &&
28956
+ showAgents &&
29224
28957
  React__default['default'].createElement(
29225
28958
  'div',
29226
- { className: 'form__region form__region--errors' },
28959
+ { className: 'form__row form__row--choose-office' },
29227
28960
  React__default['default'].createElement(
29228
28961
  '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
- )
28962
+ { className: buildClassName(['form__group', 'form__group--icon', hasVisibleError('travelAgentId') && 'form__group--error']) },
28963
+ React__default['default'].createElement(TypeAheadInput, {
28964
+ value: formik.values.travelAgentName,
28965
+ options: filteredAgents,
28966
+ onChange: handleAgentChange,
28967
+ onSelect: handleAgentSelect,
28968
+ onClear: handleAgentClear,
28969
+ name: 'travelAgentName',
28970
+ placeholder: translations.TRAVELERS_FORM.CHOOSE_AGENT_PLACEHOLDER
28971
+ })
29242
28972
  )
29243
28973
  )
29244
- ),
28974
+ )
28975
+ ),
28976
+ !useCompactForm &&
28977
+ errorKeys.length > 0 &&
28978
+ React__default['default'].createElement(
28979
+ 'div',
28980
+ { className: 'form__region form__region--errors' },
28981
+ React__default['default'].createElement(
28982
+ 'div',
28983
+ { className: 'form__row' },
28984
+ React__default['default'].createElement(
28985
+ 'div',
28986
+ { className: 'form__group' },
28987
+ React__default['default'].createElement('p', { className: 'form__error-heading' }, translations.TRAVELERS_FORM.VALIDATION_MESSAGE, ':'),
28988
+ React__default['default'].createElement(
28989
+ 'ul',
28990
+ { className: 'list' },
28991
+ errorKeys.map(function (key) {
28992
+ return React__default['default'].createElement('li', { key: key }, lodash.get(flatErrors, key));
28993
+ })
28994
+ )
28995
+ )
28996
+ )
28997
+ ),
29245
28998
  travelersFirstStep &&
29246
28999
  React__default['default'].createElement(
29247
29000
  'div',
@@ -29255,14 +29008,204 @@ var TravelersForm = function () {
29255
29008
  React__default['default'].createElement(
29256
29009
  'div',
29257
29010
  { className: 'booking__navigator' },
29258
- !travelersFirstStep && settings.skipRouter
29011
+ renderPreviousButton === null || renderPreviousButton === void 0 ? void 0 : renderPreviousButton(),
29012
+ React__default['default'].createElement(
29013
+ 'button',
29014
+ { type: 'submit', title: translations.STEPS.NEXT, className: 'cta' + (isUnavailable ? ' cta--disabled' : '') },
29015
+ translations.STEPS.NEXT
29016
+ )
29017
+ )
29018
+ );
29019
+ };
29020
+
29021
+ var TravelersForm = function () {
29022
+ var _a, _b;
29023
+ var dispatch = useAppDispatch();
29024
+ var settings = React.useContext(SettingsContext);
29025
+ var navigate = settings.skipRouter ? function () {} : reactRouter.useNavigate();
29026
+ var bookingQueryString = reactRedux.useSelector(selectBookingQueryString);
29027
+ var startDate = reactRedux.useSelector(selectStartDate);
29028
+ var formRooms = reactRedux.useSelector(selectFormRooms);
29029
+ var bookingType = reactRedux.useSelector(selectBookingType);
29030
+ var agents = reactRedux.useSelector(selectAgents);
29031
+ var agentAdressId = reactRedux.useSelector(selectAgentAdressId);
29032
+ var translations = reactRedux.useSelector(selectTranslations);
29033
+ var travelersFirstStep = reactRedux.useSelector(selectTravelersFirstStep);
29034
+ var isUnavailable = reactRedux.useSelector(selectIsUnavailable);
29035
+ var bookingAttributes = reactRedux.useSelector(selectBookingAttributes);
29036
+ var isFetching = reactRedux.useSelector(selectIsFetching);
29037
+ var hasMounted = reactRedux.useSelector(selectHasMounted);
29038
+ var countries = reactRedux.useSelector(selectCountries);
29039
+ var useCompactForm = !!settings.travellers.compactForm && !!settings.agentAdressId;
29040
+ var showAllCountries = !!settings.travellers.showAllCountries;
29041
+ var initialValues =
29042
+ (_a = reactRedux.useSelector(selectTravelersFormValues)) !== null && _a !== void 0
29043
+ ? _a
29044
+ : createInitialValuesFromRooms(formRooms, startDate, agentAdressId, translations.TRAVELERS_FORM.PERSON, useCompactForm);
29045
+ var _c = React.useState(!settings.agentAdressId && !settings.hideAgentSelection),
29046
+ showAgentSelection = _c[0],
29047
+ setShowAgentSelection = _c[1];
29048
+ var formik$1 = formik.useFormik({
29049
+ initialValues: initialValues,
29050
+ validate: useCompactForm
29051
+ ? function () {}
29052
+ : function (values) {
29053
+ return validateForm(
29054
+ values,
29055
+ settings.agentRequired,
29056
+ bookingType,
29057
+ translations,
29058
+ settings.travellers.formFields,
29059
+ settings.travellers.mainBookerFormFields
29060
+ );
29061
+ },
29062
+ onSubmit: function (values) {
29063
+ dispatch(setFormValues(values));
29064
+ if (useCompactForm) {
29065
+ dispatch(fetchPriceDetails());
29066
+ if (settings.skipRouter) dispatch(setCurrentStep$1(SUMMARY_STEP));
29067
+ else
29068
+ navigate(
29069
+ ''
29070
+ .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
29071
+ .concat(settings.summary.pathSuffix, '?')
29072
+ .concat(bookingQueryString)
29073
+ );
29074
+ return;
29075
+ }
29076
+ dispatch(fetchPackage());
29077
+ if (settings.skipRouter) dispatch(setCurrentStep$1(travelersFirstStep ? FLIGHT_OPTIONS_FORM_STEP : SUMMARY_STEP));
29078
+ else
29079
+ navigate(
29080
+ ''
29081
+ .concat(!settings.skipBasePathInRouting ? settings.basePath : '')
29082
+ .concat(travelersFirstStep ? settings.flightOptions.pathSuffix : settings.summary.pathSuffix, '?')
29083
+ .concat(bookingQueryString)
29084
+ );
29085
+ }
29086
+ });
29087
+ React.useEffect(
29088
+ function () {
29089
+ dispatch(fetchPriceDetails());
29090
+ },
29091
+ [dispatch]
29092
+ );
29093
+ React.useEffect(
29094
+ function () {
29095
+ var _a;
29096
+ if (
29097
+ !((_a = bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms) === null || _a === void 0
29098
+ ? void 0
29099
+ : _a.length) ||
29100
+ isFetching
29101
+ )
29102
+ return;
29103
+ if (!hasMounted) {
29104
+ dispatch(setHasMounted(true));
29105
+ return;
29106
+ }
29107
+ var fetchAll = function () {
29108
+ return __awaiter(void 0, void 0, void 0, function () {
29109
+ return __generator(this, function (_a) {
29110
+ switch (_a.label) {
29111
+ case 0:
29112
+ dispatch(setIsFetching(true));
29113
+ _a.label = 1;
29114
+ case 1:
29115
+ _a.trys.push([1, , 4, 5]);
29116
+ return [4 /*yield*/, dispatch(fetchPackage())];
29117
+ case 2:
29118
+ _a.sent();
29119
+ return [4 /*yield*/, dispatch(fetchPriceDetails())];
29120
+ case 3:
29121
+ _a.sent();
29122
+ return [3 /*break*/, 5];
29123
+ case 4:
29124
+ dispatch(setIsFetching(false));
29125
+ return [7 /*endfinally*/];
29126
+ case 5:
29127
+ return [2 /*return*/];
29128
+ }
29129
+ });
29130
+ });
29131
+ };
29132
+ fetchAll();
29133
+ },
29134
+ [bookingAttributes === null || bookingAttributes === void 0 ? void 0 : bookingAttributes.rooms, dispatch, hasMounted, isFetching]
29135
+ );
29136
+ React.useEffect(
29137
+ function () {
29138
+ if (settings.skipRouter || !travelersFirstStep) return;
29139
+ var params = new URLSearchParams(bookingQueryString);
29140
+ params.delete('rooms');
29141
+ var roomsString = formik$1.values.rooms
29142
+ .map(function (room) {
29143
+ var _a;
29144
+ var adults = room.adults ? room.adults.length : 0;
29145
+ var childAges = ((_a = room.children) === null || _a === void 0 ? void 0 : _a.length)
29146
+ ? room.children
29147
+ .map(function (child) {
29148
+ return child.age;
29149
+ })
29150
+ .join(',')
29151
+ : '';
29152
+ return 'adults:'.concat(adults, ',childAges:(').concat(childAges, ')');
29153
+ })
29154
+ .map(function (room) {
29155
+ return '('.concat(room, ')');
29156
+ })
29157
+ .join(',');
29158
+ var nextQuery = ''
29159
+ .concat(params.toString())
29160
+ .concat(params.toString() ? '&' : '', 'rooms=(')
29161
+ .concat(roomsString, ')');
29162
+ navigate(''.concat(window.location.pathname, '?').concat(nextQuery), { replace: true });
29163
+ },
29164
+ [formik$1.values.rooms, bookingQueryString, navigate, settings.skipRouter, travelersFirstStep]
29165
+ );
29166
+ React.useEffect(
29167
+ function () {
29168
+ if (!agents || !settings.affiliateSlug) return;
29169
+ var agent = agents.find(function (x) {
29170
+ return x.affiliateSlug && x.affiliateSlug === settings.affiliateSlug;
29171
+ });
29172
+ if (!agent) return;
29173
+ var formValues = produce__default['default'](formik$1.values, function (values) {
29174
+ values.travelAgentId = Number(agent.id);
29175
+ values.travelAgentName = agent.name;
29176
+ });
29177
+ formik$1.setValues(formValues, false);
29178
+ dispatch(setFormValues(formValues));
29179
+ setShowAgentSelection(false);
29180
+ },
29181
+ [agents, settings.affiliateSlug]
29182
+ );
29183
+ return React__default['default'].createElement(SharedTravelersForm, {
29184
+ formik: formik$1,
29185
+ translations: translations,
29186
+ travellersSettings: settings.travellers,
29187
+ countries: countries,
29188
+ agents: agents,
29189
+ bookingType: bookingType,
29190
+ agentAdressId: agentAdressId,
29191
+ travelersFirstStep: travelersFirstStep,
29192
+ isUnavailable: isUnavailable,
29193
+ useCompactForm: useCompactForm,
29194
+ showAllCountries: showAllCountries,
29195
+ showAgentSelection: showAgentSelection,
29196
+ initialShowAgents: (_b = settings.agentRequired) !== null && _b !== void 0 ? _b : false,
29197
+ onBookingTypeChange: function (nextBookingType) {
29198
+ return dispatch(setBookingType(nextBookingType));
29199
+ },
29200
+ renderPreviousButton: function () {
29201
+ return !travelersFirstStep && settings.skipRouter
29259
29202
  ? React__default['default'].createElement(
29260
29203
  'button',
29261
29204
  {
29262
29205
  type: 'button',
29263
29206
  title: translations.STEPS.PREVIOUS,
29264
29207
  onClick: function () {
29265
- return goPrevious();
29208
+ return dispatch(setCurrentStep$1(OPTIONS_FORM_STEP));
29266
29209
  },
29267
29210
  className: 'cta cta--secondary'
29268
29211
  },
@@ -29281,14 +29224,9 @@ var TravelersForm = function () {
29281
29224
  },
29282
29225
  translations.STEPS.PREVIOUS
29283
29226
  )
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
- );
29227
+ : null;
29228
+ }
29229
+ });
29292
29230
  };
29293
29231
 
29294
29232
  var Booking = function (_a) {
@@ -29374,7 +29312,7 @@ var Booking = function (_a) {
29374
29312
  window.scrollTo(0, 0);
29375
29313
  }
29376
29314
  if (!lodash.isNil(bookingNumber)) {
29377
- dispatch(setBookingNumber(bookingNumber));
29315
+ dispatch(setBookingNumber$1(bookingNumber));
29378
29316
  navigate(
29379
29317
  ''
29380
29318
  .concat(!skipBasePathInRouting ? basePath : '')
@@ -29405,7 +29343,7 @@ var Booking = function (_a) {
29405
29343
  console.error('Failure when setting booking attributes', startDate, endDate, catalogueId, rooms);
29406
29344
  }
29407
29345
  },
29408
- [location.search, setBookingAttributes, setBookingNumber, includeFlights]
29346
+ [location.search, setBookingAttributes, setBookingNumber$1, includeFlights]
29409
29347
  );
29410
29348
  React.useEffect(
29411
29349
  function () {
@@ -33667,7 +33605,8 @@ var initialState$1 = {
33667
33605
  selectedExcursionSearchResult: null,
33668
33606
  confirmedExcursionsByDay: {},
33669
33607
  bookPackagingEntry: false,
33670
- currentStep: 0
33608
+ currentStep: 0,
33609
+ bookingNumber: undefined
33671
33610
  };
33672
33611
  var searchResultsSlice = toolkit.createSlice({
33673
33612
  name: 'searchResults',
@@ -33854,6 +33793,9 @@ var searchResultsSlice = toolkit.createSlice({
33854
33793
  },
33855
33794
  setCurrentStep: function (state, action) {
33856
33795
  state.currentStep = action.payload;
33796
+ },
33797
+ setBookingNumber: function (state, action) {
33798
+ state.bookingNumber = action.payload;
33857
33799
  }
33858
33800
  }
33859
33801
  });
@@ -33898,8 +33840,9 @@ var setExcursionSearchParams = _a.setExcursionSearchParams,
33898
33840
  confirmExcursionForDay = _a.confirmExcursionForDay,
33899
33841
  removeConfirmedExcursionForDay = _a.removeConfirmedExcursionForDay;
33900
33842
  _a.clearConfirmedExcursionsForDay;
33901
- var setBookPackagingEntry = _a.setBookPackagingEntry;
33902
- _a.setCurrentStep;
33843
+ var setBookPackagingEntry = _a.setBookPackagingEntry,
33844
+ setCurrentStep = _a.setCurrentStep,
33845
+ setBookingNumber = _a.setBookingNumber;
33903
33846
  var searchResultsReducer = searchResultsSlice.reducer;
33904
33847
 
33905
33848
  var ItemPicker = function (_a) {
@@ -42453,15 +42396,6 @@ var PackageingFlightsFlyIn = function (_a) {
42453
42396
  React__default['default'].createElement(
42454
42397
  'div',
42455
42398
  { 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
42399
  React__default['default'].createElement(
42466
42400
  'div',
42467
42401
  {
@@ -42473,6 +42407,15 @@ var PackageingFlightsFlyIn = function (_a) {
42473
42407
  React__default['default'].createElement(Icon, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
42474
42408
  translations.SRP.FILTERS
42475
42409
  ),
42410
+ React__default['default'].createElement(
42411
+ 'span',
42412
+ { className: 'search__result-row-text' },
42413
+ (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
42414
+ '\u00A0',
42415
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
42416
+ '\u00A0',
42417
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
42418
+ ),
42476
42419
  sortByTypes &&
42477
42420
  sortByTypes.length > 0 &&
42478
42421
  React__default['default'].createElement(
@@ -43215,13 +43158,9 @@ var FlyIn = function (_a) {
43215
43158
  className: 'flyin '
43216
43159
  .concat(isOpen ? 'flyin--active' : '', ' ')
43217
43160
  .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' : '')
43161
+ .concat(isPackageEditFlow || flyInType === 'acco-results' ? 'flyin--large' : '', ' ')
43162
+ .concat(flyInType === 'excursion-results' || flyInType === 'excursion-details' ? 'flyin--medium' : '', '\n ')
43163
+ .concat(flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' ? 'flyin--flight' : '')
43225
43164
  },
43226
43165
  React__default['default'].createElement(
43227
43166
  'div',
@@ -43300,6 +43239,17 @@ var FlyIn = function (_a) {
43300
43239
  React__default['default'].createElement(
43301
43240
  'div',
43302
43241
  { className: 'search__result-row' },
43242
+ React__default['default'].createElement(
43243
+ 'div',
43244
+ {
43245
+ className: 'cta cta--filter',
43246
+ onClick: function () {
43247
+ return toggleFilters && toggleFilters();
43248
+ }
43249
+ },
43250
+ React__default['default'].createElement(Icon, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
43251
+ translations.SRP.FILTERS
43252
+ ),
43303
43253
  React__default['default'].createElement(
43304
43254
  'span',
43305
43255
  { className: 'search__result-row-text' },
@@ -43313,17 +43263,6 @@ var FlyIn = function (_a) {
43313
43263
  translations.SRP.TOTAL_RESULTS_LABEL
43314
43264
  )
43315
43265
  ),
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
43266
  sortByTypes &&
43328
43267
  sortByTypes.length > 0 &&
43329
43268
  React__default['default'].createElement(
@@ -45431,7 +45370,7 @@ var GroupTourCard = function (_a) {
45431
45370
  return state.searchResults;
45432
45371
  }).selectedSearchResult;
45433
45372
  if (!context) {
45434
- return;
45373
+ return null;
45435
45374
  }
45436
45375
  var dispatch = reactRedux.useDispatch();
45437
45376
  var translations = getTranslations(languageCode !== null && languageCode !== void 0 ? languageCode : 'en-GB');
@@ -45593,7 +45532,7 @@ var GroupTourResults = function (_a) {
45593
45532
  var isLoading = _a.isLoading;
45594
45533
  var context = React.useContext(SearchResultsConfigurationContext);
45595
45534
  if (!context) {
45596
- return;
45535
+ return null;
45597
45536
  }
45598
45537
  if (isLoading) {
45599
45538
  return React__default['default'].createElement(
@@ -46828,8 +46767,6 @@ var WLSidebar = function (_a) {
46828
46767
  if (!editablePackagingEntry) {
46829
46768
  return null;
46830
46769
  }
46831
- console.log('editablePackagingEntry in WLSidebar:', editablePackagingEntry);
46832
- console.log('priceDetails in WLSidebar:', priceDetails);
46833
46770
  var sortedLines = React.useMemo(
46834
46771
  function () {
46835
46772
  var _a;
@@ -46974,19 +46911,740 @@ var WLSidebar = function (_a) {
46974
46911
  });
46975
46912
  };
46976
46913
 
46977
- var BookPackagingEntry = function (_a) {
46914
+ var formatBirthDate = function (birthDate) {
46915
+ if (!birthDate) return '';
46916
+ return birthDate.split('T')[0].split('-').reverse().join('/');
46917
+ };
46918
+ var SharedSummary = function (_a) {
46978
46919
  var _b;
46979
- var activeSearchSeed = _a.activeSearchSeed;
46920
+ var translations = _a.translations,
46921
+ travelerFormValues = _a.travelerFormValues,
46922
+ checkboxes = _a.checkboxes,
46923
+ notifications = _a.notifications,
46924
+ _c = _a.remarks,
46925
+ remarks = _c === void 0 ? '' : _c,
46926
+ _d = _a.voucher,
46927
+ voucher = _d === void 0 ? {} : _d,
46928
+ _e = _a.voucherCodes,
46929
+ voucherCodes = _e === void 0 ? [] : _e,
46930
+ _f = _a.enableVoucher,
46931
+ enableVoucher = _f === void 0 ? false : _f,
46932
+ _g = _a.allowOption,
46933
+ allowOption = _g === void 0 ? false : _g,
46934
+ _h = _a.isOffer,
46935
+ isOffer = _h === void 0 ? false : _h,
46936
+ customValidateText = _a.customValidateText,
46937
+ _j = _a.isSubmitting,
46938
+ isSubmitting = _j === void 0 ? false : _j,
46939
+ _k = _a.userValidated,
46940
+ userValidated = _k === void 0 ? true : _k,
46941
+ renderOptions = _a.renderOptions,
46942
+ renderPreviousButton = _a.renderPreviousButton,
46943
+ renderLoader = _a.renderLoader,
46944
+ onSubmit = _a.onSubmit,
46945
+ onRemarksChange = _a.onRemarksChange,
46946
+ onCheckboxesChange = _a.onCheckboxesChange,
46947
+ onNotificationsChange = _a.onNotificationsChange,
46948
+ onVoucherChange = _a.onVoucherChange,
46949
+ onValidateVoucher = _a.onValidateVoucher,
46950
+ onAddVoucher = _a.onAddVoucher,
46951
+ onRemoveVoucher = _a.onRemoveVoucher,
46952
+ onUserValidatedChange = _a.onUserValidatedChange;
46953
+ var _l = React.useState(checkboxes),
46954
+ localCheckboxes = _l[0],
46955
+ setLocalCheckboxes = _l[1];
46956
+ React.useEffect(
46957
+ function () {
46958
+ setLocalCheckboxes(checkboxes);
46959
+ },
46960
+ [checkboxes]
46961
+ );
46962
+ React.useEffect(
46963
+ function () {
46964
+ var checkboxesValidated = !lodash.isNil(localCheckboxes)
46965
+ ? localCheckboxes.every(function (checkbox) {
46966
+ return checkbox.isSelected;
46967
+ })
46968
+ : true;
46969
+ var notificationsValidated = !lodash.isNil(notifications)
46970
+ ? notifications
46971
+ .filter(function (notification) {
46972
+ return notification.hasToBeConfirmed;
46973
+ })
46974
+ .every(function (notification) {
46975
+ return notification.isConfirmed;
46976
+ })
46977
+ : true;
46978
+ onUserValidatedChange === null || onUserValidatedChange === void 0 ? void 0 : onUserValidatedChange(checkboxesValidated && notificationsValidated);
46979
+ },
46980
+ [localCheckboxes, notifications, onUserValidatedChange]
46981
+ );
46982
+ var handleNotificationChange = function (id, checked) {
46983
+ var updatedNotifications = (notifications !== null && notifications !== void 0 ? notifications : []).map(function (notification) {
46984
+ return notification.id === id ? __assign(__assign({}, notification), { isConfirmed: checked }) : notification;
46985
+ });
46986
+ onNotificationsChange === null || onNotificationsChange === void 0 ? void 0 : onNotificationsChange(updatedNotifications);
46987
+ };
46988
+ var handleCheckboxChange = function (id) {
46989
+ if (lodash.isNil(localCheckboxes)) return;
46990
+ var newCheckboxes = __spreadArray([], localCheckboxes, true);
46991
+ var index = lodash.findIndex(localCheckboxes, function (checkbox) {
46992
+ return checkbox.id === id;
46993
+ });
46994
+ if (index < 0) return;
46995
+ newCheckboxes[index] = __assign(__assign({}, newCheckboxes[index]), { isSelected: !newCheckboxes[index].isSelected });
46996
+ setLocalCheckboxes(newCheckboxes);
46997
+ onCheckboxesChange === null || onCheckboxesChange === void 0 ? void 0 : onCheckboxesChange(newCheckboxes);
46998
+ };
46999
+ return React__default['default'].createElement(
47000
+ React__default['default'].Fragment,
47001
+ null,
47002
+ isSubmitting && ((renderLoader === null || renderLoader === void 0 ? void 0 : renderLoader()) || React__default['default'].createElement(Loader, null)),
47003
+ !isSubmitting &&
47004
+ React__default['default'].createElement(
47005
+ 'form',
47006
+ { className: 'form', name: 'booking--summary', id: 'booking--summary', onSubmit: onSubmit },
47007
+ React__default['default'].createElement(
47008
+ 'div',
47009
+ { className: 'form__booking--summary' },
47010
+ React__default['default'].createElement(
47011
+ 'div',
47012
+ { className: 'form__region' },
47013
+ React__default['default'].createElement(
47014
+ 'div',
47015
+ { className: 'form__row' },
47016
+ React__default['default'].createElement(
47017
+ 'div',
47018
+ { className: 'form__group' },
47019
+ React__default['default'].createElement(
47020
+ 'div',
47021
+ { className: 'form__region-header' },
47022
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.PERSONAL_DETAILS)
47023
+ )
47024
+ )
47025
+ ),
47026
+ travelerFormValues.rooms.map(function (room, roomIndex) {
47027
+ var _a, _b;
47028
+ return React__default['default'].createElement(
47029
+ 'div',
47030
+ { className: 'form__row', key: roomIndex },
47031
+ React__default['default'].createElement(
47032
+ 'div',
47033
+ { className: 'form__group' },
47034
+ React__default['default'].createElement(
47035
+ 'div',
47036
+ { className: 'form__region-header' },
47037
+ React__default['default'].createElement(
47038
+ 'h5',
47039
+ { className: 'form__region-heading' },
47040
+ travelerFormValues.rooms.length > 1
47041
+ ? ''.concat(translations.SHARED.ROOM, ' ').concat(roomIndex + 1)
47042
+ : translations.ROOM_OPTIONS_FORM.TRAVELER_GROUP
47043
+ ),
47044
+ React__default['default'].createElement(
47045
+ 'p',
47046
+ { className: 'form__region-label' },
47047
+ ''
47048
+ .concat(room.adults.length + room.children.length, ' ')
47049
+ .concat(room.adults.length + room.children.length === 1 ? translations.SUMMARY.TRAVELER : translations.SUMMARY.TRAVELERS, ': ')
47050
+ .concat(
47051
+ lodash
47052
+ .compact([
47053
+ room.adults.length,
47054
+ room.adults.length === 1 && ' '.concat(translations.SUMMARY.ADULT),
47055
+ room.adults.length > 1 && ' '.concat(translations.SUMMARY.ADULTS),
47056
+ ((_a = room.adults) === null || _a === void 0 ? void 0 : _a.length) &&
47057
+ ((_b = room.children) === null || _b === void 0 ? void 0 : _b.length) &&
47058
+ ', ',
47059
+ room.children.length,
47060
+ room.children.length === 1 && ' '.concat(translations.SUMMARY.CHILD),
47061
+ room.children.length > 1 && ' '.concat(translations.SUMMARY.CHILDREN)
47062
+ ])
47063
+ .join('')
47064
+ )
47065
+ )
47066
+ )
47067
+ ),
47068
+ __spreadArray(__spreadArray([], room.adults, true), room.children, true).map(function (traveler) {
47069
+ var isMainBooker = traveler.id === travelerFormValues.mainBookerId;
47070
+ return React__default['default'].createElement(
47071
+ 'div',
47072
+ { className: 'form__group form__group--sm-50', key: traveler.id },
47073
+ React__default['default'].createElement(
47074
+ 'ul',
47075
+ { className: 'list list--plain' },
47076
+ React__default['default'].createElement(
47077
+ 'li',
47078
+ { className: 'list__item' },
47079
+ React__default['default'].createElement('strong', null, traveler.firstName, ' ', traveler.lastName),
47080
+ ' ',
47081
+ isMainBooker && React__default['default'].createElement('em', null, '(', translations.SUMMARY.MAIN_BOOKER, ')')
47082
+ ),
47083
+ React__default['default'].createElement('li', { className: 'list__item' }, formatBirthDate(traveler.birthDate)),
47084
+ isMainBooker &&
47085
+ React__default['default'].createElement(
47086
+ React__default['default'].Fragment,
47087
+ null,
47088
+ travelerFormValues.street &&
47089
+ React__default['default'].createElement(
47090
+ 'li',
47091
+ { className: 'list__item' },
47092
+ ''
47093
+ .concat(travelerFormValues.street, ' ')
47094
+ .concat(lodash.compact([travelerFormValues.houseNumber, travelerFormValues.box]).join(' '), ', ')
47095
+ .concat(travelerFormValues.zipCode, ' ')
47096
+ .concat(travelerFormValues.place)
47097
+ ),
47098
+ travelerFormValues.phone && React__default['default'].createElement('li', { className: 'list__item' }, travelerFormValues.phone),
47099
+ travelerFormValues.email && React__default['default'].createElement('li', { className: 'list__item' }, travelerFormValues.email)
47100
+ )
47101
+ )
47102
+ );
47103
+ })
47104
+ );
47105
+ })
47106
+ ),
47107
+ React__default['default'].createElement(
47108
+ 'div',
47109
+ { className: 'form__region' },
47110
+ React__default['default'].createElement(
47111
+ 'div',
47112
+ { className: 'form__row' },
47113
+ React__default['default'].createElement(
47114
+ 'div',
47115
+ { className: 'form__group' },
47116
+ React__default['default'].createElement(
47117
+ 'div',
47118
+ { className: 'form__region-header' },
47119
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.OPTIONS)
47120
+ )
47121
+ )
47122
+ ),
47123
+ React__default['default'].createElement(
47124
+ 'div',
47125
+ { className: 'form__row' },
47126
+ React__default['default'].createElement(
47127
+ 'div',
47128
+ { className: 'form__group' },
47129
+ React__default['default'].createElement('ul', { className: 'list list--booking-summary' }, renderOptions())
47130
+ )
47131
+ )
47132
+ ),
47133
+ enableVoucher &&
47134
+ React__default['default'].createElement(
47135
+ 'div',
47136
+ { className: 'form__region' },
47137
+ React__default['default'].createElement(
47138
+ 'div',
47139
+ { className: 'form__row' },
47140
+ React__default['default'].createElement(
47141
+ 'div',
47142
+ { className: 'form__group' },
47143
+ React__default['default'].createElement(
47144
+ 'div',
47145
+ { className: 'form__region-header' },
47146
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.VOUCHERS)
47147
+ )
47148
+ )
47149
+ ),
47150
+ React__default['default'].createElement(
47151
+ 'div',
47152
+ { className: 'form__row' },
47153
+ React__default['default'].createElement(
47154
+ 'div',
47155
+ { className: 'form__group' },
47156
+ React__default['default'].createElement('input', {
47157
+ type: 'text',
47158
+ className: 'form__input info-message__voucher__input',
47159
+ value: (_b = voucher.code) !== null && _b !== void 0 ? _b : '',
47160
+ onChange: function (event) {
47161
+ return onVoucherChange === null || onVoucherChange === void 0 ? void 0 : onVoucherChange({ code: event.target.value });
47162
+ }
47163
+ }),
47164
+ React__default['default'].createElement(
47165
+ 'button',
47166
+ { type: 'button', className: buildClassName(['cta', !voucher.code && 'cta--disabled']), onClick: onValidateVoucher },
47167
+ translations.SUMMARY.VOUCHER_VALIDATE
47168
+ )
47169
+ )
47170
+ ),
47171
+ React__default['default'].createElement(
47172
+ 'div',
47173
+ { className: 'form__row' },
47174
+ React__default['default'].createElement(
47175
+ 'div',
47176
+ { className: 'form__group info-message__voucher' },
47177
+ voucher.isValid &&
47178
+ voucher.isValidated &&
47179
+ React__default['default'].createElement(
47180
+ 'div',
47181
+ { className: 'info-message info-message__voucher__valid' },
47182
+ React__default['default'].createElement('span', null, translations.SUMMARY.VOUCHER_VALID),
47183
+ React__default['default'].createElement(
47184
+ 'button',
47185
+ { type: 'button', className: 'cta cta--secondary', onClick: onAddVoucher },
47186
+ translations.SUMMARY.ADD_VOUCHER
47187
+ )
47188
+ ),
47189
+ !voucher.isValid &&
47190
+ voucher.isValidated &&
47191
+ React__default['default'].createElement('div', { className: 'info-message--error' }, translations.SUMMARY.VOUCHER_INVALID)
47192
+ )
47193
+ ),
47194
+ React__default['default'].createElement(
47195
+ 'div',
47196
+ { className: 'form__row' },
47197
+ React__default['default'].createElement(
47198
+ 'ul',
47199
+ { className: 'info-message__voucher' },
47200
+ !lodash.isEmpty(voucherCodes) &&
47201
+ voucherCodes.map(function (code, index) {
47202
+ return React__default['default'].createElement(
47203
+ 'li',
47204
+ { key: ''.concat(code, '-').concat(index) },
47205
+ React__default['default'].createElement(
47206
+ 'div',
47207
+ { className: 'info-message__voucher__list' },
47208
+ code,
47209
+ ' ',
47210
+ React__default['default'].createElement(
47211
+ 'button',
47212
+ {
47213
+ type: 'button',
47214
+ className: 'cta--add-remove',
47215
+ onClick: function () {
47216
+ return onRemoveVoucher === null || onRemoveVoucher === void 0 ? void 0 : onRemoveVoucher(code);
47217
+ }
47218
+ },
47219
+ React__default['default'].createElement(Icon, { height: 16, name: 'ui-trashcan' })
47220
+ )
47221
+ )
47222
+ );
47223
+ })
47224
+ )
47225
+ )
47226
+ ),
47227
+ !lodash.isEmpty(notifications) &&
47228
+ React__default['default'].createElement(
47229
+ 'div',
47230
+ { className: 'form__region' },
47231
+ React__default['default'].createElement(
47232
+ 'div',
47233
+ { className: 'form__row' },
47234
+ React__default['default'].createElement(
47235
+ 'div',
47236
+ { className: 'form__group' },
47237
+ React__default['default'].createElement(
47238
+ 'div',
47239
+ { className: 'info-message' },
47240
+ React__default['default'].createElement(Icon, { name: 'ui-tooltip', className: 'icon--secondary-color' }),
47241
+ React__default['default'].createElement(
47242
+ 'div',
47243
+ { className: 'info-message__copy' },
47244
+ React__default['default'].createElement('h5', null, translations.SUMMARY.NOTIFICATIONS_TITLE),
47245
+ lodash
47246
+ .uniqBy(
47247
+ (notifications !== null && notifications !== void 0 ? notifications : []).filter(function (notification) {
47248
+ return !notification.hasToBeConfirmed;
47249
+ }),
47250
+ 'id'
47251
+ )
47252
+ .map(function (notification) {
47253
+ return React__default['default'].createElement(
47254
+ 'span',
47255
+ { key: notification.id, className: 'checkbox__label-text' },
47256
+ React__default['default'].createElement('strong', { className: 'checkbox__label-text--title' }, notification.title),
47257
+ React__default['default'].createElement('span', { className: 'checkbox__label-text--description' }, notification.description)
47258
+ );
47259
+ }),
47260
+ lodash
47261
+ .uniqBy(
47262
+ (notifications !== null && notifications !== void 0 ? notifications : []).filter(function (notification) {
47263
+ return notification.hasToBeConfirmed;
47264
+ }),
47265
+ 'id'
47266
+ )
47267
+ .map(function (notification) {
47268
+ return React__default['default'].createElement(
47269
+ 'div',
47270
+ { className: 'checkbox', key: notification.id },
47271
+ React__default['default'].createElement(
47272
+ 'label',
47273
+ { className: 'checkbox__label' },
47274
+ React__default['default'].createElement('input', {
47275
+ type: 'checkbox',
47276
+ className: 'checkbox__input',
47277
+ checked: notification.isConfirmed,
47278
+ onChange: function (event) {
47279
+ return handleNotificationChange(notification.id, event.target.checked);
47280
+ }
47281
+ }),
47282
+ React__default['default'].createElement(
47283
+ 'span',
47284
+ { 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
+ );
47290
+ })
47291
+ )
47292
+ )
47293
+ )
47294
+ )
47295
+ ),
47296
+ React__default['default'].createElement(
47297
+ 'div',
47298
+ { className: 'form__region' },
47299
+ React__default['default'].createElement(
47300
+ 'div',
47301
+ { className: 'form__row' },
47302
+ React__default['default'].createElement(
47303
+ 'div',
47304
+ { className: 'form__group' },
47305
+ React__default['default'].createElement(
47306
+ 'div',
47307
+ { className: 'form__region-header' },
47308
+ React__default['default'].createElement('h5', { className: 'form__region-heading' }, translations.SUMMARY.REMARKS)
47309
+ )
47310
+ )
47311
+ ),
47312
+ React__default['default'].createElement(
47313
+ 'div',
47314
+ { className: 'form__row' },
47315
+ React__default['default'].createElement(
47316
+ 'div',
47317
+ { className: 'form__group' },
47318
+ React__default['default'].createElement('textarea', {
47319
+ className: 'form__input',
47320
+ value: remarks,
47321
+ onChange: function (event) {
47322
+ return onRemarksChange === null || onRemarksChange === void 0 ? void 0 : onRemarksChange(event.target.value);
47323
+ }
47324
+ })
47325
+ )
47326
+ )
47327
+ ),
47328
+ React__default['default'].createElement(
47329
+ 'div',
47330
+ { className: 'form__region' },
47331
+ React__default['default'].createElement(
47332
+ 'div',
47333
+ { className: 'form__row' },
47334
+ React__default['default'].createElement(
47335
+ 'div',
47336
+ { className: 'form__group' },
47337
+ React__default['default'].createElement(
47338
+ 'div',
47339
+ { className: 'info-message' },
47340
+ React__default['default'].createElement(Icon, { name: 'ui-tooltip', className: 'icon--secondary-color' }),
47341
+ React__default['default'].createElement(
47342
+ 'div',
47343
+ { className: 'info-message__copy' },
47344
+ React__default['default'].createElement('h5', null, translations.SUMMARY.VALIDATE_TITLE),
47345
+ customValidateText
47346
+ ? React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: customValidateText } })
47347
+ : React__default['default'].createElement(
47348
+ React__default['default'].Fragment,
47349
+ null,
47350
+ React__default['default'].createElement(
47351
+ 'p',
47352
+ null,
47353
+ isOffer ? translations.SUMMARY.VALIDATE_TEXT_OFFER : translations.SUMMARY.VALIDATE_TEXT_BOOKING
47354
+ ),
47355
+ allowOption && React__default['default'].createElement('p', null, translations.SUMMARY.VALIDATE_TEXT_OPTION)
47356
+ ),
47357
+ localCheckboxes === null || localCheckboxes === void 0
47358
+ ? void 0
47359
+ : localCheckboxes.map(function (checkbox) {
47360
+ return React__default['default'].createElement(
47361
+ 'div',
47362
+ { className: 'checkbox', key: checkbox.id },
47363
+ React__default['default'].createElement(
47364
+ 'label',
47365
+ { className: 'checkbox__label' },
47366
+ React__default['default'].createElement('input', {
47367
+ type: 'checkbox',
47368
+ className: 'checkbox__input',
47369
+ checked: checkbox.isSelected,
47370
+ onChange: function () {
47371
+ return handleCheckboxChange(checkbox.id);
47372
+ }
47373
+ }),
47374
+ React__default['default'].createElement('span', {
47375
+ className: 'checkbox__label-text',
47376
+ dangerouslySetInnerHTML: { __html: checkbox.text }
47377
+ })
47378
+ )
47379
+ );
47380
+ })
47381
+ )
47382
+ )
47383
+ )
47384
+ )
47385
+ )
47386
+ ),
47387
+ React__default['default'].createElement(
47388
+ 'div',
47389
+ { className: 'booking__navigator' },
47390
+ renderPreviousButton(),
47391
+ allowOption &&
47392
+ React__default['default'].createElement(
47393
+ 'button',
47394
+ {
47395
+ title: translations.STEPS.SUBMIT_OPTION,
47396
+ className: buildClassName(['cta', !userValidated && 'cta--disabled']),
47397
+ disabled: !userValidated,
47398
+ name: 'option'
47399
+ },
47400
+ translations.STEPS.SUBMIT_OPTION
47401
+ ),
47402
+ React__default['default'].createElement(
47403
+ 'button',
47404
+ {
47405
+ title: isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING,
47406
+ className: buildClassName(['cta', !userValidated && 'cta--disabled']),
47407
+ disabled: !userValidated,
47408
+ name: 'default'
47409
+ },
47410
+ isOffer ? translations.STEPS.SUBMIT_OFFER : translations.STEPS.SUBMIT_BOOKING
47411
+ )
47412
+ )
47413
+ )
47414
+ );
47415
+ };
47416
+
47417
+ var renderEditablePackagingEntrySummaryOptions = function (editablePackagingEntry, priceDetails, translations) {
47418
+ var _a, _b;
47419
+ var priceDetailsByProduct = lodash.groupBy(
47420
+ (_a = priceDetails === null || priceDetails === void 0 ? void 0 : priceDetails.details) !== null && _a !== void 0 ? _a : [],
47421
+ function (detail) {
47422
+ return ''.concat(detail.productCode, '|').concat(detail.accommodationCode);
47423
+ }
47424
+ );
47425
+ return (
47426
+ (_b = editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.lines) !== null && _b !== void 0 ? _b : []
47427
+ ).map(function (line) {
47428
+ var _a, _b, _c;
47429
+ var groupedPriceDetails = (_a = priceDetailsByProduct[''.concat(line.productCode, '|').concat(line.accommodationCode)]) !== null && _a !== void 0 ? _a : [];
47430
+ var visiblePriceDetails = groupedPriceDetails.filter(function (detail) {
47431
+ return detail.showPrice || detail.isSeparate;
47432
+ });
47433
+ return React__default['default'].createElement(
47434
+ 'li',
47435
+ { key: line.guid },
47436
+ React__default['default'].createElement('h6', null, line.productName),
47437
+ React__default['default'].createElement(
47438
+ 'ul',
47439
+ null,
47440
+ React__default['default'].createElement('li', { className: 'list__item' }, lodash.compact([line.accommodationName, line.regimeName]).join(', ')),
47441
+ (_c = (_b = line.flightInformation) === null || _b === void 0 ? void 0 : _b.flightLines) === null || _c === void 0
47442
+ ? void 0
47443
+ : _c.map(function (flightLine, index) {
47444
+ var _a, _b;
47445
+ return React__default['default'].createElement(
47446
+ 'li',
47447
+ { className: 'list__item', key: ''.concat(line.guid, '-').concat(index) },
47448
+ flightLine.departureAirportCode,
47449
+ ' ',
47450
+ (_a = flightLine.departureTime) === null || _a === void 0 ? void 0 : _a.slice(0, 5),
47451
+ ' > ',
47452
+ flightLine.arrivalAirportCode,
47453
+ ' ',
47454
+ (_b = flightLine.arrivalTime) === null || _b === void 0 ? void 0 : _b.slice(0, 5),
47455
+ ' (',
47456
+ flightLine.operatingFlightNumber || ''.concat(flightLine.airlineCode).concat(flightLine.flightNumber),
47457
+ ')'
47458
+ );
47459
+ }),
47460
+ !lodash.isEmpty(visiblePriceDetails) &&
47461
+ visiblePriceDetails.map(function (detail, index) {
47462
+ var _a;
47463
+ return React__default['default'].createElement(
47464
+ 'li',
47465
+ { className: 'list__item', key: ''.concat(line.guid, '-price-').concat(index) },
47466
+ detail.priceDescription,
47467
+ ': ',
47468
+ (_a = detail.total) === null || _a === void 0 ? void 0 : _a.toLocaleString(undefined, { style: 'currency', currency: 'EUR' })
47469
+ );
47470
+ })
47471
+ ),
47472
+ React__default['default'].createElement(
47473
+ 'p',
47474
+ null,
47475
+ '(',
47476
+ line.from === line.to
47477
+ ? getDateText(line.from)
47478
+ : React__default['default'].createElement(React__default['default'].Fragment, null, getDateText(line.from), ' > ', getDateText(line.to)),
47479
+ ')'
47480
+ )
47481
+ );
47482
+ });
47483
+ };
47484
+
47485
+ var travelerFormFields = [{ type: 'gender' }, { type: 'firstName' }, { type: 'lastName' }, { type: 'birthDate' }];
47486
+ var mainBookerFormFields = [
47487
+ { type: 'street' },
47488
+ { type: 'houseNumber' },
47489
+ { type: 'box' },
47490
+ { type: 'zipCode' },
47491
+ { type: 'place' },
47492
+ { type: 'country' },
47493
+ { type: 'phone' },
47494
+ { type: 'email' }
47495
+ ];
47496
+ var travellersSettings = {
47497
+ countries: [
47498
+ { iso2: 'BE', name: 'Belgium', phonePrefix: '+32' },
47499
+ { iso2: 'NL', name: 'Netherlands', phonePrefix: '+31' },
47500
+ { iso2: 'FR', name: 'France', phonePrefix: '+33' }
47501
+ ],
47502
+ formFields: travelerFormFields,
47503
+ mainBookerFormFields: mainBookerFormFields
47504
+ };
47505
+ var BookPackagingEntry = function (_a) {
47506
+ var _b, _c;
47507
+ var activeSearchSeed = _a.activeSearchSeed,
47508
+ isConfirmationPage = _a.isConfirmationPage;
46980
47509
  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();
47510
+ var dispatch = reactRedux.useDispatch();
47511
+ var _d = reactRedux.useSelector(function (state) {
47512
+ return state.searchResults;
47513
+ }),
47514
+ editablePackagingEntry = _d.editablePackagingEntry,
47515
+ priceDetails = _d.priceDetails,
47516
+ currentStep = _d.currentStep,
47517
+ bookingNumber = _d.bookingNumber;
47518
+ var _e = React.useState([]),
47519
+ countries = _e[0],
47520
+ setCountries = _e[1];
47521
+ var _f = React.useState(true),
47522
+ userValidated = _f[0],
47523
+ setUserValidated = _f[1];
47524
+ var _g = React.useState(''),
47525
+ remarks = _g[0],
47526
+ setRemarks = _g[1];
47527
+ var _h = React.useState(false),
47528
+ isSubmitting = _h[0],
47529
+ setIsSubmitting = _h[1];
47530
+ if (!context || !editablePackagingEntry || !priceDetails) return null;
47531
+ var config = {
47532
+ host: context.tideConnection.host,
47533
+ apiKey: context.tideConnection.apiKey
47534
+ };
47535
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
46989
47536
  var stepLabels = [translations.STEPS.PERSONAL_DETAILS, translations.STEPS.SUMMARY, translations.STEPS.CONFIRMATION];
47537
+ console.log('editablePackagingEntry in WLSidebar:', editablePackagingEntry);
47538
+ console.log('priceDetails in WLSidebar:', priceDetails);
47539
+ var initialValues = React.useMemo(
47540
+ function () {
47541
+ return createInitialValuesFromEditablePackagingEntry(editablePackagingEntry);
47542
+ },
47543
+ [editablePackagingEntry === null || editablePackagingEntry === void 0 ? void 0 : editablePackagingEntry.transactionId]
47544
+ );
47545
+ var formik$1 = formik.useFormik({
47546
+ initialValues: initialValues,
47547
+ enableReinitialize: true,
47548
+ validate: function (values) {
47549
+ return validateForm(values, false, 'b2c', translations, travellersSettings.formFields, travellersSettings.mainBookerFormFields);
47550
+ },
47551
+ onSubmit: function (values) {
47552
+ dispatch(setEditablePackagingEntry(applyTravelersFormValuesToEditablePackagingEntry(editablePackagingEntry, values)));
47553
+ dispatch(setCurrentStep(1));
47554
+ }
47555
+ });
47556
+ React.useEffect(function () {
47557
+ if (!context) return;
47558
+ var controller = new AbortController();
47559
+ (function () {
47560
+ return __awaiter(void 0, void 0, void 0, function () {
47561
+ var result;
47562
+ return __generator(this, function (_b) {
47563
+ switch (_b.label) {
47564
+ case 0:
47565
+ _b.trys.push([0, 2, , 3]);
47566
+ return [4 /*yield*/, build.getCountries(config, controller.signal)];
47567
+ case 1:
47568
+ result = _b.sent();
47569
+ setCountries(result.items);
47570
+ return [3 /*break*/, 3];
47571
+ case 2:
47572
+ _b.sent();
47573
+ return [3 /*break*/, 3];
47574
+ case 3:
47575
+ return [2 /*return*/];
47576
+ }
47577
+ });
47578
+ });
47579
+ })();
47580
+ return function () {
47581
+ return controller.abort();
47582
+ };
47583
+ }, []);
47584
+ React.useEffect(
47585
+ function () {
47586
+ if (isConfirmationPage) {
47587
+ dispatch(setCurrentStep(2));
47588
+ }
47589
+ },
47590
+ [isConfirmationPage, dispatch]
47591
+ );
47592
+ var handleSummarySubmit = function (e) {
47593
+ return __awaiter(void 0, void 0, void 0, function () {
47594
+ var updatedEditablePackagingEntry, redirectUrl, request, bookingResponse;
47595
+ var _a, _b;
47596
+ return __generator(this, function (_c) {
47597
+ switch (_c.label) {
47598
+ case 0:
47599
+ e.preventDefault();
47600
+ setIsSubmitting(true);
47601
+ if (typeof window !== 'undefined') {
47602
+ window.scrollTo(0, 0);
47603
+ }
47604
+ updatedEditablePackagingEntry = __assign(__assign({}, editablePackagingEntry), { remarks: remarks });
47605
+ if (context.generatePaymentUrl && typeof window !== 'undefined') {
47606
+ redirectUrl = new URL(window.location.href);
47607
+ redirectUrl.searchParams.set('bookingConfirmation', 'true');
47608
+ redirectUrl.searchParams.set('link', '');
47609
+ updatedEditablePackagingEntry = __assign(__assign({}, updatedEditablePackagingEntry), {
47610
+ redirectUrl: redirectUrl.toString(),
47611
+ returnPaymentUrl: true
47612
+ });
47613
+ }
47614
+ dispatch(setEditablePackagingEntry(updatedEditablePackagingEntry));
47615
+ _c.label = 1;
47616
+ case 1:
47617
+ _c.trys.push([1, 3, 4, 5]);
47618
+ request = {
47619
+ language: (_a = context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB',
47620
+ officeId: context.tideConnection.officeId,
47621
+ catalogueId: (_b = context.searchConfiguration.defaultCatalogueId) !== null && _b !== void 0 ? _b : 0,
47622
+ agentId: context.agentId,
47623
+ payload: updatedEditablePackagingEntry
47624
+ };
47625
+ return [4 /*yield*/, build.bookPackagingEntry(config, request)];
47626
+ case 2:
47627
+ bookingResponse = _c.sent();
47628
+ dispatch(setBookingNumber(bookingResponse.number));
47629
+ if (bookingResponse.paymentUrl) {
47630
+ window.location.href = bookingResponse.paymentUrl;
47631
+ } else {
47632
+ dispatch(setCurrentStep(2));
47633
+ }
47634
+ return [3 /*break*/, 5];
47635
+ case 3:
47636
+ _c.sent();
47637
+ dispatch(setCurrentStep(3));
47638
+ return [3 /*break*/, 5];
47639
+ case 4:
47640
+ setIsSubmitting(false);
47641
+ return [7 /*endfinally*/];
47642
+ case 5:
47643
+ return [2 /*return*/];
47644
+ }
47645
+ });
47646
+ });
47647
+ };
46990
47648
  return React__default['default'].createElement(
46991
47649
  'div',
46992
47650
  { className: 'booking' },
@@ -46994,16 +47652,77 @@ var BookPackagingEntry = function (_a) {
46994
47652
  'div',
46995
47653
  { className: 'booking__content' },
46996
47654
  React__default['default'].createElement(
46997
- BookingPanel,
46998
- {
46999
- currentStep: currentStep,
47000
- stepLabels: stepLabels,
47001
- StepIndicatorsComponent: StepIndicators$1,
47002
- renderTitle: function (step) {
47003
- return React__default['default'].createElement(React__default['default'].Fragment, null, step + 1, '.\u00A0', stepLabels[step]);
47004
- }
47005
- },
47006
- React__default['default'].createElement('div', null)
47655
+ 'div',
47656
+ { className: 'booking__panel' },
47657
+ React__default['default'].createElement(
47658
+ BookingPanel,
47659
+ {
47660
+ currentStep: currentStep,
47661
+ stepLabels: stepLabels,
47662
+ StepIndicatorsComponent: StepIndicators$1,
47663
+ renderTitle: function (step) {
47664
+ return React__default['default'].createElement(React__default['default'].Fragment, null, step + 1, '.\u00A0', stepLabels[step]);
47665
+ }
47666
+ },
47667
+ currentStep === 0 &&
47668
+ React__default['default'].createElement(SharedTravelersForm, {
47669
+ formik: formik$1,
47670
+ translations: translations,
47671
+ travellersSettings: travellersSettings,
47672
+ countries: countries,
47673
+ travelersFirstStep: false,
47674
+ isUnavailable: false,
47675
+ useCompactForm: false,
47676
+ showAgentSelection: false
47677
+ }),
47678
+ currentStep === 1 &&
47679
+ React__default['default'].createElement(SharedSummary, {
47680
+ translations: translations,
47681
+ travelerFormValues: formik$1.values,
47682
+ isSubmitting: isSubmitting,
47683
+ userValidated: userValidated,
47684
+ remarks: remarks,
47685
+ enableVoucher: false,
47686
+ allowOption: false,
47687
+ isOffer: false,
47688
+ onUserValidatedChange: setUserValidated,
47689
+ onRemarksChange: setRemarks,
47690
+ onSubmit: handleSummarySubmit,
47691
+ renderOptions: function () {
47692
+ return renderEditablePackagingEntrySummaryOptions(editablePackagingEntry, priceDetails);
47693
+ },
47694
+ renderPreviousButton: function () {
47695
+ return React__default['default'].createElement(
47696
+ 'button',
47697
+ {
47698
+ type: 'button',
47699
+ title: translations.STEPS.PREVIOUS,
47700
+ onClick: function () {
47701
+ return dispatch(setCurrentStep(0));
47702
+ },
47703
+ className: 'cta cta--secondary'
47704
+ },
47705
+ translations.STEPS.PREVIOUS
47706
+ );
47707
+ }
47708
+ }),
47709
+ currentStep === 2 &&
47710
+ React__default['default'].createElement(SharedConfirmation, {
47711
+ bookingNumber:
47712
+ (_c =
47713
+ bookingNumber !== null && bookingNumber !== void 0
47714
+ ? bookingNumber
47715
+ : editablePackagingEntry === null || editablePackagingEntry === void 0
47716
+ ? void 0
47717
+ : editablePackagingEntry.dossierNumber) !== null && _c !== void 0
47718
+ ? _c
47719
+ : '',
47720
+ isOption: false,
47721
+ isOffer: false,
47722
+ translations: translations.CONFIRMATION
47723
+ }),
47724
+ currentStep === 3 && React__default['default'].createElement('div', null)
47725
+ )
47007
47726
  ),
47008
47727
  React__default['default'].createElement('div', { className: 'backdrop', id: 'backdrop' }),
47009
47728
  React__default['default'].createElement(WLSidebar, { activeSearchSeed: activeSearchSeed })
@@ -47063,9 +47782,12 @@ var SearchResultsContainer = function () {
47063
47782
  var _k = React.useState(false),
47064
47783
  itineraryOpen = _k[0],
47065
47784
  setItineraryOpen = _k[1];
47066
- var _l = React.useState(null),
47067
- selectedAccommodationSeed = _l[0],
47068
- setSelectedAccommodationSeed = _l[1];
47785
+ var _l = React.useState(false),
47786
+ isBookingConfirmation = _l[0],
47787
+ setIsBookingConfirmation = _l[1];
47788
+ var _m = React.useState(null),
47789
+ selectedAccommodationSeed = _m[0],
47790
+ setSelectedAccommodationSeed = _m[1];
47069
47791
  var skipInitialPackagingAccoDetailsRef = React.useRef(false);
47070
47792
  var panelRef = React.useRef(null);
47071
47793
  var sortByTypes = [
@@ -47810,6 +48532,13 @@ var SearchResultsContainer = function () {
47810
48532
  if (context === null || context === void 0 ? void 0 : context.packagingEntry) {
47811
48533
  dispatch(setEditablePackagingEntry(structuredClone(context.packagingEntry)));
47812
48534
  dispatch(setTransactionId(context.packagingEntry.transactionId));
48535
+ var params = new URLSearchParams(location.search);
48536
+ var bookingConfirmation = getStringFromParams(params, 'bookingConfirmation');
48537
+ console.log('bookingConfirmation', bookingConfirmation);
48538
+ if (bookingConfirmation == 'true') {
48539
+ setIsBookingConfirmation(true);
48540
+ dispatch(setBookPackagingEntry(true));
48541
+ }
47813
48542
  }
47814
48543
  },
47815
48544
  [context === null || context === void 0 ? void 0 : context.packagingEntry]
@@ -48514,38 +49243,45 @@ var SearchResultsContainer = function () {
48514
49243
  return __assign(__assign({}, entry), { language: language, transactionId: transactionId, pax: entry.pax, lines: nextLines });
48515
49244
  };
48516
49245
  var buildBasePackagingEntry = function (sourceEntry, seed, transactionId, language) {
48517
- var _a, _b;
49246
+ var _a;
48518
49247
  if (sourceEntry) {
48519
49248
  return structuredClone(sourceEntry);
48520
49249
  }
48521
49250
  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
- : [];
49251
+ var pax = [];
49252
+ var rooms = [];
49253
+ (_a = seed.rooms) === null || _a === void 0
49254
+ ? void 0
49255
+ : _a.forEach(function (room, roomIndex) {
49256
+ var paxIds = room.pax.map(function (_, paxIndex) {
49257
+ var id = paxId++;
49258
+ pax.push({
49259
+ id: id,
49260
+ firstName: '',
49261
+ lastName: '',
49262
+ dateOfBirth: null,
49263
+ isMainBooker: roomIndex === 0 && paxIndex === 0
49264
+ });
49265
+ return id;
49266
+ });
49267
+ rooms.push({
49268
+ id: roomIndex,
49269
+ paxIds: paxIds
49270
+ });
49271
+ });
48539
49272
  return {
48540
49273
  language: language,
48541
49274
  transactionId: transactionId,
48542
49275
  dossierNumber: '',
48543
- status: 0,
49276
+ status: context === null || context === void 0 ? void 0 : context.entryStatus,
49277
+ customStatusId: context === null || context === void 0 ? void 0 : context.customEntryStatusId,
48544
49278
  bookingDate: null,
48545
49279
  price: 0,
48546
49280
  depositAmount: 0,
48547
49281
  pax: pax,
48548
- lines: []
49282
+ rooms: rooms,
49283
+ lines: [],
49284
+ address: {}
48549
49285
  };
48550
49286
  };
48551
49287
  var handleShowMoreFlights = function (flyInType) {
@@ -48560,7 +49296,7 @@ var SearchResultsContainer = function () {
48560
49296
  'div',
48561
49297
  { className: 'search' },
48562
49298
  bookPackagingEntry
48563
- ? React__default['default'].createElement(BookPackagingEntry, { activeSearchSeed: activeSearchSeed })
49299
+ ? React__default['default'].createElement(BookPackagingEntry, { activeSearchSeed: activeSearchSeed, isConfirmationPage: isBookingConfirmation })
48564
49300
  : React__default['default'].createElement(
48565
49301
  'div',
48566
49302
  { className: 'search__container' },