@qite/tide-booking-component 1.4.103 → 1.4.104

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 (31) hide show
  1. package/build/build-cjs/index.js +2167 -1400
  2. package/build/build-cjs/src/search-results/components/filters/filters.d.ts +2 -0
  3. package/build/build-cjs/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -0
  4. package/build/build-cjs/src/search-results/store/search-results-selectors.d.ts +424 -0
  5. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +27 -8
  6. package/build/build-cjs/src/search-results/types.d.ts +14 -2
  7. package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +8 -6
  8. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +3 -3
  9. package/build/build-cjs/src/shared/components/flyin/packaging-flights-flyin.d.ts +7 -0
  10. package/build/build-esm/index.js +2152 -1395
  11. package/build/build-esm/src/search-results/components/filters/filters.d.ts +2 -0
  12. package/build/build-esm/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -0
  13. package/build/build-esm/src/search-results/store/search-results-selectors.d.ts +424 -0
  14. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +27 -8
  15. package/build/build-esm/src/search-results/types.d.ts +14 -2
  16. package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +8 -6
  17. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +3 -3
  18. package/build/build-esm/src/shared/components/flyin/packaging-flights-flyin.d.ts +7 -0
  19. package/package.json +1 -1
  20. package/src/booking-wizard/features/flight-options/index.tsx +6 -2
  21. package/src/search-results/components/filters/filters.tsx +8 -9
  22. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +81 -24
  23. package/src/search-results/components/search-results-container/search-results-container.tsx +118 -102
  24. package/src/search-results/store/search-results-selectors.ts +73 -0
  25. package/src/search-results/store/search-results-slice.ts +94 -14
  26. package/src/search-results/types.ts +14 -2
  27. package/src/search-results/utils/search-results-utils.ts +310 -58
  28. package/src/shared/components/flyin/flyin.tsx +102 -19
  29. package/src/shared/components/flyin/packaging-flights-flyin.tsx +164 -0
  30. package/styles/components/_flyin.scss +16 -0
  31. package/styles/components/_search.scss +4 -1
@@ -21756,7 +21756,11 @@ var FlightOptionsForm = function () {
21756
21756
  setFlightGroups = _f[1];
21757
21757
  var handleSubmit = function (e) {
21758
21758
  if (settings.skipRouter) {
21759
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21759
+ if (settings.roomOptions.isHidden) {
21760
+ dispatch(setCurrentStep(OPTIONS_FORM_STEP));
21761
+ } else {
21762
+ dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21763
+ }
21760
21764
  } else {
21761
21765
  if (settings.roomOptions.isHidden) {
21762
21766
  navigate(
@@ -33857,21 +33861,28 @@ var initialState$1 = {
33857
33861
  packagingAccoSearchDetails: [],
33858
33862
  selectedPackagingAccoResultCode: null,
33859
33863
  packagingFlightResults: [],
33864
+ filteredPackagingFlightResults: [],
33860
33865
  selectedPackagingFlight: null,
33866
+ selectedOutwardKey: null,
33867
+ selectedReturnKey: null,
33861
33868
  selectedFlight: null,
33862
33869
  selectedFlightDetails: null,
33863
33870
  bookingPackageDetails: null,
33871
+ priceDetails: null,
33864
33872
  isLoading: false,
33865
33873
  flightsLoading: false,
33866
- filters: [],
33867
33874
  selectedSortType: null,
33875
+ selectedFlightSortType: null,
33876
+ initialFilters: [],
33877
+ filters: [],
33878
+ initialFlightFilters: [],
33879
+ flightFilters: [],
33868
33880
  activeTab: 'compact',
33869
33881
  currentPage: 1,
33882
+ transactionId: null,
33870
33883
  flyInIsOpen: false,
33884
+ flyInType: null,
33871
33885
  editablePackagingEntry: null,
33872
- transactionId: null,
33873
- accommodationFlyInStep: 'details',
33874
- priceDetails: null,
33875
33886
  itinerary: null
33876
33887
  };
33877
33888
  var searchResultsSlice = toolkit.createSlice({
@@ -33902,6 +33913,9 @@ var searchResultsSlice = toolkit.createSlice({
33902
33913
  setPackagingFlightResults: function (state, action) {
33903
33914
  state.packagingFlightResults = action.payload;
33904
33915
  },
33916
+ setFilteredPackagingFlightResults: function (state, action) {
33917
+ state.filteredPackagingFlightResults = action.payload;
33918
+ },
33905
33919
  setSelectedPackagingFlight: function (state, action) {
33906
33920
  state.selectedPackagingFlight = action.payload;
33907
33921
  },
@@ -33930,6 +33944,9 @@ var searchResultsSlice = toolkit.createSlice({
33930
33944
  setFlightsLoading: function (state, action) {
33931
33945
  state.flightsLoading = action.payload;
33932
33946
  },
33947
+ setInitialFilters: function (state, action) {
33948
+ state.initialFilters = action.payload;
33949
+ },
33933
33950
  setFilters: function (state, action) {
33934
33951
  var updatedFilters = action.payload;
33935
33952
  updatedFilters.forEach(function (updatedFilter) {
@@ -33946,9 +33963,31 @@ var searchResultsSlice = toolkit.createSlice({
33946
33963
  resetFilters: function (state, action) {
33947
33964
  state.filters = action.payload;
33948
33965
  },
33966
+ setInitialFlightFilters: function (state, action) {
33967
+ state.initialFlightFilters = action.payload;
33968
+ },
33969
+ setFlightFilters: function (state, action) {
33970
+ var updatedFilters = action.payload;
33971
+ updatedFilters.forEach(function (updatedFilter) {
33972
+ var existingIndex = state.flightFilters.findIndex(function (f) {
33973
+ return f.property === updatedFilter.property;
33974
+ });
33975
+ if (existingIndex !== -1) {
33976
+ state.flightFilters[existingIndex] = updatedFilter;
33977
+ } else {
33978
+ state.flightFilters.push(updatedFilter); // Optional: Add new filters if not present
33979
+ }
33980
+ });
33981
+ },
33982
+ resetFlightFilters: function (state, action) {
33983
+ state.flightFilters = action.payload;
33984
+ },
33949
33985
  setSortType: function (state, action) {
33950
33986
  state.selectedSortType = action.payload;
33951
33987
  },
33988
+ setFlightSortType: function (state, action) {
33989
+ state.selectedFlightSortType = action.payload;
33990
+ },
33952
33991
  setActiveTab: function (state, action) {
33953
33992
  state.activeTab = action.payload;
33954
33993
  },
@@ -33972,14 +34011,24 @@ var searchResultsSlice = toolkit.createSlice({
33972
34011
  setTransactionId: function (state, action) {
33973
34012
  state.transactionId = action.payload;
33974
34013
  },
33975
- setAccommodationFlyInStep: function (state, action) {
33976
- state.accommodationFlyInStep = action.payload;
34014
+ setFlyInType: function (state, action) {
34015
+ state.flyInType = action.payload;
33977
34016
  },
33978
34017
  setPriceDetails: function (state, action) {
33979
34018
  state.priceDetails = action.payload;
33980
34019
  },
33981
34020
  setItinerary: function (state, action) {
33982
34021
  state.itinerary = action.payload;
34022
+ },
34023
+ setSelectedOutwardKey: function (state, action) {
34024
+ state.selectedOutwardKey = action.payload;
34025
+ },
34026
+ setSelectedReturnKey: function (state, action) {
34027
+ state.selectedReturnKey = action.payload;
34028
+ },
34029
+ resetFlightSelection: function (state) {
34030
+ state.selectedOutwardKey = null;
34031
+ state.selectedReturnKey = null;
33983
34032
  }
33984
34033
  }
33985
34034
  });
@@ -33988,6 +34037,7 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33988
34037
  setSelectedSearchResult = _a.setSelectedSearchResult,
33989
34038
  setPackagingAccoResults = _a.setPackagingAccoResults,
33990
34039
  setFilteredPackagingAccoResults = _a.setFilteredPackagingAccoResults,
34040
+ setFilteredPackagingFlightResults = _a.setFilteredPackagingFlightResults,
33991
34041
  setPackagingAccoSearchDetails = _a.setPackagingAccoSearchDetails,
33992
34042
  setSelectedPackagingAccoResult = _a.setSelectedPackagingAccoResult,
33993
34043
  setPackagingFlightResults = _a.setPackagingFlightResults,
@@ -33998,18 +34048,26 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33998
34048
  _a.selectFlight;
33999
34049
  var setIsLoading = _a.setIsLoading,
34000
34050
  setFlightsLoading = _a.setFlightsLoading,
34051
+ setInitialFilters = _a.setInitialFilters,
34001
34052
  setFilters = _a.setFilters,
34002
34053
  resetFilters = _a.resetFilters,
34054
+ setInitialFlightFilters = _a.setInitialFlightFilters,
34055
+ setFlightFilters = _a.setFlightFilters,
34056
+ resetFlightFilters = _a.resetFlightFilters,
34003
34057
  setSortType = _a.setSortType,
34058
+ setFlightSortType = _a.setFlightSortType,
34004
34059
  setActiveTab = _a.setActiveTab;
34005
34060
  _a.setCurrentPage;
34006
34061
  _a.resetSearchState;
34007
34062
  var setFlyInIsOpen = _a.setFlyInIsOpen,
34008
34063
  setEditablePackagingEntry = _a.setEditablePackagingEntry,
34009
34064
  setTransactionId = _a.setTransactionId,
34010
- setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
34065
+ setFlyInType = _a.setFlyInType,
34011
34066
  setPriceDetails = _a.setPriceDetails,
34012
- setItinerary = _a.setItinerary;
34067
+ setItinerary = _a.setItinerary,
34068
+ setSelectedOutwardKey = _a.setSelectedOutwardKey,
34069
+ setSelectedReturnKey = _a.setSelectedReturnKey;
34070
+ _a.resetFlightSelection;
34013
34071
  var searchResultsReducer = searchResultsSlice.reducer;
34014
34072
 
34015
34073
  var ItemPicker = function (_a) {
@@ -43637,7 +43695,7 @@ var mapPackagingAccoResult = function (searchResult, cmsItem, languageCode, tran
43637
43695
  contents: searchResult.contents
43638
43696
  });
43639
43697
  };
43640
- var renderHotelResults = function (results, context, activeTab, translations) {
43698
+ var renderHotelResults = function (results, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn) {
43641
43699
  var renderedResults = results.map(function (result, index) {
43642
43700
  var _a;
43643
43701
  var key = ''.concat((_a = result.id) !== null && _a !== void 0 ? _a : result.code, '-').concat(index);
@@ -43652,13 +43710,22 @@ var renderHotelResults = function (results, context, activeTab, translations) {
43652
43710
  return React__default['default'].createElement(
43653
43711
  'div',
43654
43712
  { className: 'search__results__cards '.concat(activeTab ? 'search__results__cards--'.concat(activeTab) : '') },
43713
+ selectedPackagingAccoResult &&
43714
+ !isFlyIn &&
43715
+ React__default['default'].createElement(HotelCard, {
43716
+ key: selectedPackagingAccoResult.code,
43717
+ result: selectedPackagingAccoResult,
43718
+ translations: translations
43719
+ }),
43655
43720
  renderedResults
43656
43721
  );
43657
43722
  };
43658
43723
  var HotelAccommodationResults = function (_a) {
43659
43724
  var _b, _c;
43660
- var isLoading = _a.isLoading;
43725
+ var isLoading = _a.isLoading,
43726
+ isFlyIn = _a.isFlyIn;
43661
43727
  var context = React.useContext(SearchResultsConfigurationContext);
43728
+ var dispatch = reactRedux.useDispatch();
43662
43729
  if (!context) {
43663
43730
  return null;
43664
43731
  }
@@ -43668,7 +43735,10 @@ var HotelAccommodationResults = function (_a) {
43668
43735
  }),
43669
43736
  filteredResults = _d.filteredResults,
43670
43737
  filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
43738
+ packagingAccoResults = _d.packagingAccoResults,
43671
43739
  activeTab = _d.activeTab;
43740
+ _d.flyInIsOpen;
43741
+ var selectedPackagingAccoResultCode = _d.selectedPackagingAccoResultCode;
43672
43742
  var cmsMap = React__default['default'].useMemo(
43673
43743
  function () {
43674
43744
  var _a;
@@ -43731,193 +43801,1188 @@ var HotelAccommodationResults = function (_a) {
43731
43801
  : firstPackagingResult.fromDate;
43732
43802
  var firstResultDay = firstResultDate ? dateFns.format(dateFns.parseISO(firstResultDate), 'd') : null;
43733
43803
  var firstResultMonth = firstResultDate ? dateFns.format(dateFns.parseISO(firstResultDate), 'MMM') : null;
43804
+ var selectedPackagingAccoResult = React__default['default'].useMemo(
43805
+ function () {
43806
+ var selectedResult = packagingAccoResults.find(function (result) {
43807
+ return result.code === selectedPackagingAccoResultCode;
43808
+ });
43809
+ if (selectedResult) {
43810
+ return mapPackagingAccoResult(selectedResult, cmsMap.get(selectedResult.code), context.languageCode, translations);
43811
+ }
43812
+ },
43813
+ [packagingAccoResults, selectedPackagingAccoResultCode, cmsMap, context.languageCode, translations]
43814
+ );
43815
+ var visibleResults = React__default['default'].useMemo(
43816
+ function () {
43817
+ var shouldShowAll =
43818
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) !== build.PortalQsmType.AccommodationAndFlight || isFlyIn;
43819
+ if (shouldShowAll) {
43820
+ return mappedResults;
43821
+ }
43822
+ if (selectedPackagingAccoResult) {
43823
+ return mappedResults
43824
+ .filter(function (result) {
43825
+ return result.code !== selectedPackagingAccoResult.code;
43826
+ })
43827
+ .slice(0, 2);
43828
+ }
43829
+ return mappedResults.slice(0, 3);
43830
+ },
43831
+ [context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType, mappedResults, isFlyIn, selectedPackagingAccoResult]
43832
+ );
43833
+ var handleShowMoreHotels = function (flyInType) {
43834
+ dispatch(setFlyInType(flyInType));
43835
+ dispatch(setFlyInIsOpen(true));
43836
+ };
43734
43837
  return React__default['default'].createElement(
43735
43838
  React__default['default'].Fragment,
43736
43839
  null,
43737
- React__default['default'].createElement(
43738
- 'div',
43739
- { className: 'search__results__label search__results__label--secondary' },
43740
- React__default['default'].createElement(
43741
- 'div',
43742
- { className: 'search__results__label__date' },
43743
- firstResultDay && firstResultMonth
43744
- ? React__default['default'].createElement(
43745
- React__default['default'].Fragment,
43746
- null,
43747
- React__default['default'].createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43748
- React__default['default'].createElement('p', null, firstResultMonth)
43749
- )
43750
- : React__default['default'].createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43751
- ),
43840
+ !isFlyIn &&
43752
43841
  React__default['default'].createElement(
43753
43842
  'div',
43754
- { className: 'search__results__label__text' },
43843
+ { className: 'search__results__label search__results__label--secondary' },
43755
43844
  React__default['default'].createElement(
43756
- 'h3',
43757
- null,
43758
- translations.SRP.SELECT,
43759
- ' ',
43760
- React__default['default'].createElement('strong', null, translations.SRP.ACCOMMODATION)
43845
+ 'div',
43846
+ { className: 'search__results__label__date' },
43847
+ firstResultDay && firstResultMonth
43848
+ ? React__default['default'].createElement(
43849
+ React__default['default'].Fragment,
43850
+ null,
43851
+ React__default['default'].createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43852
+ React__default['default'].createElement('p', null, firstResultMonth)
43853
+ )
43854
+ : React__default['default'].createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43855
+ ),
43856
+ React__default['default'].createElement(
43857
+ 'div',
43858
+ { className: 'search__results__label__text' },
43859
+ React__default['default'].createElement(
43860
+ 'h3',
43861
+ null,
43862
+ translations.SRP.SELECT,
43863
+ ' ',
43864
+ React__default['default'].createElement('strong', null, translations.SRP.ACCOMMODATION)
43865
+ )
43761
43866
  )
43762
- )
43763
- ),
43867
+ ),
43764
43868
  isLoading
43765
43869
  ? React__default['default'].createElement(
43766
43870
  React__default['default'].Fragment,
43767
43871
  null,
43768
43872
  (_c = context.customSpinner) !== null && _c !== void 0 ? _c : React__default['default'].createElement(Spinner, null)
43769
43873
  )
43770
- : renderHotelResults(mappedResults, context, activeTab, translations),
43874
+ : renderHotelResults(visibleResults, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn),
43875
+ packagingAccoResults.length > 3 &&
43876
+ !isFlyIn &&
43877
+ React__default['default'].createElement(
43878
+ 'div',
43879
+ { className: 'search__results__cards__actions' },
43880
+ React__default['default'].createElement(
43881
+ 'button',
43882
+ {
43883
+ className: 'cta cta--secondary',
43884
+ onClick: function () {
43885
+ return handleShowMoreHotels('acco-results');
43886
+ }
43887
+ },
43888
+ translations.SRP.SHOW_MORE
43889
+ )
43890
+ ),
43771
43891
  mappedResults.length === 0 && !isLoading && React__default['default'].createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS)
43772
43892
  );
43773
43893
  };
43774
43894
 
43775
- var FlyIn = function (_a) {
43776
- var title = _a.title,
43777
- srpType = _a.srpType,
43778
- isOpen = _a.isOpen,
43779
- setIsOpen = _a.setIsOpen,
43780
- _b = _a.className,
43781
- className = _b === void 0 ? '' : _b,
43782
- onPanelRef = _a.onPanelRef,
43783
- detailsLoading = _a.detailsLoading,
43784
- accommodationStep = _a.accommodationStep,
43785
- isPackageEditFlow = _a.isPackageEditFlow,
43786
- handleConfirm = _a.handleConfirm;
43787
- var dispatch = reactRedux.useDispatch();
43788
- var onCancelSearch = useFlightSearch().onCancelSearch;
43789
- var panelRef = React.useRef(null);
43790
- // expose DOM node if needed
43791
- React.useEffect(
43792
- function () {
43793
- onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
43794
- return function () {
43795
- return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
43796
- };
43797
- },
43798
- [onPanelRef]
43799
- );
43800
- React.useEffect(
43801
- function () {
43802
- // click outside detection
43803
- var handleClickOutside = function (event) {
43804
- if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
43805
- handleClose();
43806
- }
43807
- };
43808
- document.addEventListener('mousedown', handleClickOutside);
43809
- return function () {
43810
- return document.removeEventListener('mousedown', handleClickOutside);
43811
- };
43812
- },
43813
- [isOpen, setIsOpen]
43814
- );
43815
- // body scroll lock
43816
- React.useEffect(
43817
- function () {
43818
- document.body.style.overflow = isOpen ? 'hidden' : '';
43819
- return function () {
43820
- document.body.style.overflow = '';
43821
- };
43822
- },
43823
- [isOpen]
43824
- );
43825
- var handleClose = function () {
43826
- if (isOpen && panelRef.current) {
43827
- if (srpType === build.PortalQsmType.Flight) {
43828
- dispatch(setSelectedFlight(null));
43829
- dispatch(setSelectedFlightDetails(null));
43830
- onCancelSearch();
43831
- } else {
43832
- dispatch(setSelectedSearchResult(null));
43833
- dispatch(setSelectedPackagingAccoResult(null));
43834
- }
43835
- dispatch(setAccommodationFlyInStep('details'));
43836
- setIsOpen(false);
43895
+ var selectSearchResultsState = function (state) {
43896
+ return state.searchResults;
43897
+ };
43898
+ var selectPackagingFlightResults = toolkit.createSelector([selectSearchResultsState], function (state) {
43899
+ return state.packagingFlightResults;
43900
+ });
43901
+ var selectFilteredPackagingFlightResults = toolkit.createSelector([selectSearchResultsState], function (state) {
43902
+ return state.filteredPackagingFlightResults;
43903
+ });
43904
+ var selectSelectedOutwardKey = toolkit.createSelector([selectSearchResultsState], function (state) {
43905
+ return state.selectedOutwardKey;
43906
+ });
43907
+ var selectSelectedReturnKey = toolkit.createSelector([selectSearchResultsState], function (state) {
43908
+ return state.selectedReturnKey;
43909
+ });
43910
+ var selectUniqueOutwardFlights = toolkit.createSelector([selectFilteredPackagingFlightResults], function (packagingFlightResults) {
43911
+ var map = new Map();
43912
+ packagingFlightResults.forEach(function (flight) {
43913
+ var key = getFlightKey(flight.outward.segments);
43914
+ if (!map.has(key)) {
43915
+ map.set(key, flight);
43837
43916
  }
43838
- };
43839
- var handleGoBack = function () {
43840
- dispatch(setAccommodationFlyInStep('results'));
43841
- };
43917
+ });
43918
+ return Array.from(map.values());
43919
+ });
43920
+ var selectUniqueReturnFlights = toolkit.createSelector(
43921
+ [selectFilteredPackagingFlightResults, selectSelectedOutwardKey],
43922
+ function (packagingFlightResults, selectedOutwardKey) {
43923
+ if (!selectedOutwardKey) return [];
43924
+ var matchingCombinations = packagingFlightResults.filter(function (flight) {
43925
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
43926
+ });
43927
+ var map = new Map();
43928
+ matchingCombinations.forEach(function (flight) {
43929
+ var key = getFlightKey(flight.return.segments);
43930
+ if (!map.has(key)) {
43931
+ map.set(key, flight);
43932
+ }
43933
+ });
43934
+ return Array.from(map.values());
43935
+ }
43936
+ );
43937
+ var selectSelectedOutward = toolkit.createSelector(
43938
+ [selectPackagingFlightResults, selectSelectedOutwardKey],
43939
+ function (packagingFlightResults, selectedOutwardKey) {
43940
+ var _a;
43941
+ if (!selectedOutwardKey) return null;
43942
+ return (_a = packagingFlightResults.find(function (flight) {
43943
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
43944
+ })) !== null && _a !== void 0
43945
+ ? _a
43946
+ : null;
43947
+ }
43948
+ );
43949
+ var selectSelectedReturn = toolkit.createSelector(
43950
+ [selectPackagingFlightResults, selectSelectedReturnKey],
43951
+ function (packagingFlightResults, selectedReturnKey) {
43952
+ var _a;
43953
+ if (!selectedReturnKey) return null;
43954
+ return (_a = packagingFlightResults.find(function (flight) {
43955
+ return getFlightKey(flight.return.segments) === selectedReturnKey;
43956
+ })) !== null && _a !== void 0
43957
+ ? _a
43958
+ : null;
43959
+ }
43960
+ );
43961
+ var selectSelectedCombinationFlight = toolkit.createSelector(
43962
+ [selectPackagingFlightResults, selectSelectedOutwardKey, selectSelectedReturnKey],
43963
+ function (packagingFlightResults, selectedOutwardKey, selectedReturnKey) {
43964
+ var _a;
43965
+ if (!selectedOutwardKey || !selectedReturnKey) return null;
43966
+ return (_a = packagingFlightResults.find(function (flight) {
43967
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
43968
+ })) !== null && _a !== void 0
43969
+ ? _a
43970
+ : null;
43971
+ }
43972
+ );
43973
+
43974
+ var IndependentFlightOption = function (_a) {
43975
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
43976
+ var item = _a.item,
43977
+ onSelect = _a.onSelect,
43978
+ guid = _a.guid,
43979
+ selectedGuid = _a.selectedGuid,
43980
+ isOutward = _a.isOutward,
43981
+ showSelectedState = _a.showSelectedState,
43982
+ currentSelectedPrice = _a.currentSelectedPrice,
43983
+ price = _a.price;
43984
+ var context = React.useContext(SearchResultsConfigurationContext);
43985
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
43986
+ var translations = getTranslations(language);
43987
+ var _p = React.useState(false),
43988
+ detailsOpen = _p[0],
43989
+ setDetailsOpen = _p[1];
43990
+ var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
43842
43991
  return React__default['default'].createElement(
43843
43992
  'div',
43844
- {
43845
- className: 'flyin '
43846
- .concat(isOpen ? 'flyin--active' : '', ' ')
43847
- .concat(className, ' ')
43848
- .concat(isPackageEditFlow ? 'flyin--large' : '')
43849
- },
43993
+ { className: 'search__result-card', key: 'flight-'.concat(item.code) },
43850
43994
  React__default['default'].createElement(
43851
43995
  'div',
43852
- { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
43996
+ { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
43853
43997
  React__default['default'].createElement(
43854
43998
  'div',
43855
- { className: 'flyin__content' },
43999
+ { className: 'flight__option' },
43856
44000
  React__default['default'].createElement(
43857
44001
  'div',
43858
- { className: 'flyin__content-title-row' },
43859
- React__default['default'].createElement('h3', { className: 'flyin__content-title' }, title),
43860
- React__default['default'].createElement(
43861
- 'span',
43862
- {
43863
- className: 'flyin__close',
43864
- onClick: function () {
43865
- return handleClose();
43866
- }
43867
- },
43868
- React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
43869
- )
43870
- ),
43871
- isPackageEditFlow &&
43872
- accommodationStep === 'details' &&
44002
+ { className: 'flight__content' },
43873
44003
  React__default['default'].createElement(
43874
44004
  'div',
43875
- { className: 'flyin__content-title-row' },
44005
+ { className: 'flight__flights' },
43876
44006
  React__default['default'].createElement(
43877
44007
  'div',
43878
- { onClick: handleGoBack, className: 'flyin__content-title__back' },
43879
- React__default['default'].createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
43880
- 'Go Back'
43881
- )
43882
- )
43883
- ),
43884
- srpType === build.PortalQsmType.Flight && React__default['default'].createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
43885
- (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43886
- accommodationStep === 'results' &&
43887
- React__default['default'].createElement(
43888
- 'div',
43889
- { className: 'flyin__content' },
43890
- React__default['default'].createElement(HotelAccommodationResults, { isLoading: detailsLoading })
43891
- ),
43892
- (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43893
- accommodationStep === 'details' &&
43894
- React__default['default'].createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
43895
- srpType === build.PortalQsmType.GroupTour &&
43896
- React__default['default'].createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
43897
- )
43898
- );
43899
- };
43900
-
43901
- var RoundTripResults = function () {
43902
- var activeTab = reactRedux.useSelector(function (state) {
43903
- return state.searchResults;
43904
- }).activeTab;
43905
- var dispatch = reactRedux.useDispatch();
43906
- React.useEffect(
43907
- function () {
43908
- if (activeTab === 'compact') {
43909
- dispatch(setActiveTab('list'));
43910
- }
43911
- },
43912
- [activeTab]
43913
- );
43914
- return React__default['default'].createElement(
43915
- 'div',
43916
- { className: 'search__results__cards search__results__cards--'.concat(activeTab) },
43917
- React__default['default'].createElement(
43918
- 'div',
43919
- { className: 'search__result-card' },
43920
- React__default['default'].createElement(
44008
+ { className: 'flight__flight' },
44009
+ React__default['default'].createElement(
44010
+ 'div',
44011
+ { className: 'flight__flight__header' },
44012
+ React__default['default'].createElement('div', { className: 'flight__status__container' }),
44013
+ React__default['default'].createElement(
44014
+ 'div',
44015
+ { className: 'flight__price' },
44016
+ price != null &&
44017
+ price > 0 &&
44018
+ (isOutward
44019
+ ? React__default['default'].createElement(
44020
+ 'span',
44021
+ { className: 'price' },
44022
+ translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
44023
+ '\u00A0',
44024
+ formatPrice$2(
44025
+ price,
44026
+ 'EUR',
44027
+ (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
44028
+ )
44029
+ )
44030
+ : priceDifference != null &&
44031
+ Math.abs(priceDifference) > 0 &&
44032
+ React__default['default'].createElement(
44033
+ 'span',
44034
+ { className: 'price' },
44035
+ priceDifference > 0 ? '+' : '-',
44036
+ '\u00A0',
44037
+ formatPrice$2(
44038
+ Math.abs(priceDifference),
44039
+ 'EUR',
44040
+ (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
44041
+ )
44042
+ )),
44043
+ React__default['default'].createElement(
44044
+ 'button',
44045
+ {
44046
+ type: 'button',
44047
+ className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
44048
+ onClick: function () {
44049
+ return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
44050
+ }
44051
+ },
44052
+ selectedGuid === guid ? 'Selected' : 'Select'
44053
+ )
44054
+ )
44055
+ )
44056
+ ),
44057
+ React__default['default'].createElement(
44058
+ 'div',
44059
+ { className: 'flight__flight' },
44060
+ React__default['default'].createElement(
44061
+ 'div',
44062
+ { className: 'flight__flight__container' },
44063
+ React__default['default'].createElement(
44064
+ 'div',
44065
+ { className: 'flight__flight__wrapper' },
44066
+ React__default['default'].createElement(
44067
+ 'div',
44068
+ { className: 'flight__logo__wrapper' },
44069
+ React__default['default'].createElement('img', {
44070
+ src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44071
+ (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
44072
+ '.png?height=256'
44073
+ ),
44074
+ alt: '',
44075
+ className: 'flight__logo'
44076
+ }),
44077
+ React__default['default'].createElement(
44078
+ 'span',
44079
+ null,
44080
+ (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName
44081
+ )
44082
+ ),
44083
+ React__default['default'].createElement(
44084
+ 'div',
44085
+ { className: 'flight__info' },
44086
+ React__default['default'].createElement(
44087
+ 'div',
44088
+ { className: 'flight__info__times' },
44089
+ React__default['default'].createElement(
44090
+ 'strong',
44091
+ null,
44092
+ timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
44093
+ ' ',
44094
+ (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
44095
+ ),
44096
+ React__default['default'].createElement(
44097
+ 'p',
44098
+ null,
44099
+ longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
44100
+ )
44101
+ ),
44102
+ React__default['default'].createElement(
44103
+ 'div',
44104
+ { className: 'flight__info__duration' },
44105
+ React__default['default'].createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
44106
+ React__default['default'].createElement(
44107
+ 'div',
44108
+ { className: 'flight__info__duration__stops' },
44109
+ React__default['default'].createElement('div', { className: 'flight__info__duration__stop' })
44110
+ ),
44111
+ React__default['default'].createElement(
44112
+ 'span',
44113
+ null,
44114
+ getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44115
+ )
44116
+ ),
44117
+ React__default['default'].createElement(
44118
+ 'div',
44119
+ { className: 'flight__info__times flight__info__times--arrival' },
44120
+ React__default['default'].createElement(
44121
+ 'strong',
44122
+ null,
44123
+ timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
44124
+ ' ',
44125
+ (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
44126
+ ),
44127
+ React__default['default'].createElement(
44128
+ 'p',
44129
+ null,
44130
+ longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
44131
+ )
44132
+ )
44133
+ )
44134
+ ),
44135
+ React__default['default'].createElement(
44136
+ 'div',
44137
+ { className: 'flight__detail__btn__wrapper' },
44138
+ React__default['default'].createElement(
44139
+ 'div',
44140
+ {
44141
+ className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
44142
+ onClick: function () {
44143
+ return setDetailsOpen(function (prev) {
44144
+ return !prev;
44145
+ });
44146
+ }
44147
+ },
44148
+ React__default['default'].createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44149
+ )
44150
+ )
44151
+ ),
44152
+ React__default['default'].createElement(
44153
+ 'div',
44154
+ { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
44155
+ (_o = getFlightSegments(item)) === null || _o === void 0
44156
+ ? void 0
44157
+ : _o.map(function (segment, index) {
44158
+ return React__default['default'].createElement(
44159
+ React__default['default'].Fragment,
44160
+ { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44161
+ React__default['default'].createElement(
44162
+ 'div',
44163
+ { className: 'flight__info' },
44164
+ React__default['default'].createElement(
44165
+ 'div',
44166
+ { className: 'flight__info__times__wrapper' },
44167
+ React__default['default'].createElement(
44168
+ 'div',
44169
+ { className: 'flight__info__times' },
44170
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44171
+ React__default['default'].createElement('strong', null, segment.departureAirportCode),
44172
+ React__default['default'].createElement('p', null, longFormatDate(segment.departureDateTime, language))
44173
+ ),
44174
+ React__default['default'].createElement(
44175
+ 'div',
44176
+ null,
44177
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
44178
+ )
44179
+ ),
44180
+ React__default['default'].createElement(
44181
+ 'div',
44182
+ { className: 'flight__info__duration' },
44183
+ React__default['default'].createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44184
+ React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
44185
+ React__default['default'].createElement('span', null, segment.marketingAirlineName),
44186
+ React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
44187
+ ),
44188
+ React__default['default'].createElement(
44189
+ 'div',
44190
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44191
+ React__default['default'].createElement(
44192
+ 'div',
44193
+ null,
44194
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
44195
+ ),
44196
+ React__default['default'].createElement(
44197
+ 'div',
44198
+ { className: 'flight__info__times flight__info__times--arrival' },
44199
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44200
+ React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
44201
+ React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44202
+ )
44203
+ )
44204
+ ),
44205
+ segment.transferTimeInTicks &&
44206
+ React__default['default'].createElement(
44207
+ 'div',
44208
+ { className: 'flight__info' },
44209
+ React__default['default'].createElement('div', { className: 'flight__info__times' }),
44210
+ React__default['default'].createElement(
44211
+ 'div',
44212
+ { className: 'flight__info__duration flight__info__duration--waittime' },
44213
+ React__default['default'].createElement(
44214
+ 'div',
44215
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44216
+ React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44217
+ ),
44218
+ React__default['default'].createElement(
44219
+ 'div',
44220
+ { className: 'flight__info__duration__stoptime' },
44221
+ React__default['default'].createElement('span', null, 'Stop time'),
44222
+ React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44223
+ )
44224
+ ),
44225
+ React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44226
+ )
44227
+ );
44228
+ })
44229
+ )
44230
+ )
44231
+ )
44232
+ )
44233
+ )
44234
+ )
44235
+ );
44236
+ };
44237
+
44238
+ var MultiRangeFilter = function (_a) {
44239
+ var min = _a.min,
44240
+ max = _a.max,
44241
+ selectedMin = _a.selectedMin,
44242
+ selectedMax = _a.selectedMax,
44243
+ valueFormatter = _a.valueFormatter,
44244
+ onChange = _a.onChange;
44245
+ var _b = React.useState(false),
44246
+ isDragging = _b[0],
44247
+ setIsDragging = _b[1];
44248
+ var _c = React.useState(0),
44249
+ leftPercentage = _c[0],
44250
+ setLeftPercentage = _c[1];
44251
+ var _d = React.useState(0),
44252
+ rightPercentage = _d[0],
44253
+ setRightPercentage = _d[1];
44254
+ var _e = React.useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
44255
+ minVal = _e[0],
44256
+ setMinVal = _e[1];
44257
+ var _f = React.useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
44258
+ maxVal = _f[0],
44259
+ setMaxVal = _f[1];
44260
+ var minGap = 5;
44261
+ // Sync internal state with external selectedMin/selectedMax changes
44262
+ React.useEffect(
44263
+ function () {
44264
+ setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
44265
+ setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
44266
+ },
44267
+ [min, max, selectedMin, selectedMax]
44268
+ );
44269
+ // Recalculate slider track whenever values change
44270
+ React.useEffect(
44271
+ function () {
44272
+ var range = max - min || 1;
44273
+ var minPercent = ((minVal - min) / range) * 100;
44274
+ var maxPercent = ((maxVal - min) / range) * 100;
44275
+ setLeftPercentage(minPercent);
44276
+ setRightPercentage(100 - maxPercent);
44277
+ },
44278
+ [minVal, maxVal, min, max]
44279
+ );
44280
+ var slideMin = function (e) {
44281
+ var value = parseInt(e.target.value, 10);
44282
+ // Ensure the thumbs don’t cross and enforce minGap
44283
+ if (value <= maxVal - minGap) {
44284
+ setMinVal(value);
44285
+ }
44286
+ };
44287
+ var slideMax = function (e) {
44288
+ var value = parseInt(e.target.value, 10);
44289
+ // Ensure the thumbs don’t cross and enforce minGap
44290
+ if (value >= minVal + minGap) {
44291
+ setMaxVal(value);
44292
+ }
44293
+ };
44294
+ var startDrag = function () {
44295
+ setIsDragging(true);
44296
+ };
44297
+ var stopDrag = function () {
44298
+ setIsDragging(false);
44299
+ // Notify parent with the final values
44300
+ onChange(minVal, maxVal);
44301
+ };
44302
+ return React__default['default'].createElement(
44303
+ 'div',
44304
+ { className: 'double-slider-box' },
44305
+ React__default['default'].createElement(
44306
+ 'div',
44307
+ { className: 'input-box' },
44308
+ React__default['default'].createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
44309
+ React__default['default'].createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
44310
+ ),
44311
+ React__default['default'].createElement(
44312
+ 'div',
44313
+ { className: 'range-slider' },
44314
+ React__default['default'].createElement('div', {
44315
+ className: 'slider-track',
44316
+ style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
44317
+ }),
44318
+ React__default['default'].createElement('input', {
44319
+ type: 'range',
44320
+ min: min,
44321
+ max: max,
44322
+ value: minVal,
44323
+ onChange: slideMin,
44324
+ onMouseDown: startDrag,
44325
+ onMouseUp: stopDrag,
44326
+ onTouchStart: startDrag,
44327
+ onTouchEnd: stopDrag,
44328
+ className: 'min-val'
44329
+ }),
44330
+ React__default['default'].createElement('input', {
44331
+ type: 'range',
44332
+ min: min,
44333
+ max: max,
44334
+ value: maxVal,
44335
+ onChange: slideMax,
44336
+ onMouseDown: startDrag,
44337
+ onMouseUp: stopDrag,
44338
+ onTouchStart: startDrag,
44339
+ onTouchEnd: stopDrag,
44340
+ className: 'max-val'
44341
+ }),
44342
+ isDragging && React__default['default'].createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
44343
+ isDragging && React__default['default'].createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
44344
+ )
44345
+ );
44346
+ };
44347
+
44348
+ var Filters = function (_a) {
44349
+ var _b;
44350
+ var initialFilters = _a.initialFilters,
44351
+ filters = _a.filters,
44352
+ isOpen = _a.isOpen,
44353
+ handleSetIsOpen = _a.handleSetIsOpen,
44354
+ isLoading = _a.isLoading,
44355
+ setFilters = _a.setFilters,
44356
+ resetFilters = _a.resetFilters;
44357
+ var context = React.useContext(SearchResultsConfigurationContext);
44358
+ if (!context || !context.showFilters) {
44359
+ return null;
44360
+ }
44361
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44362
+ var _c = React.useState({}),
44363
+ visibleFilters = _c[0],
44364
+ setVisibleFilters = _c[1];
44365
+ var toggleFilterVisibility = function (filterId) {
44366
+ setVisibleFilters(function (prev) {
44367
+ var _a;
44368
+ return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
44369
+ });
44370
+ };
44371
+ var handleCheckBoxFilter = function (filter, option) {
44372
+ var updated = filters.map(function (f) {
44373
+ var _a;
44374
+ if (f.property !== filter.property) return f;
44375
+ return __assign(__assign({}, f), {
44376
+ options:
44377
+ (_a = f.options) === null || _a === void 0
44378
+ ? void 0
44379
+ : _a.map(function (opt) {
44380
+ return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
44381
+ })
44382
+ });
44383
+ });
44384
+ setFilters(updated);
44385
+ };
44386
+ var handleSliderChange = function (filter, newMin, newMax) {
44387
+ var updated = filters.map(function (f) {
44388
+ if (f.property !== filter.property) return f;
44389
+ return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
44390
+ });
44391
+ setFilters(updated);
44392
+ };
44393
+ var handleFullReset = function () {
44394
+ if (!isLoading) {
44395
+ resetFilters(initialFilters);
44396
+ }
44397
+ };
44398
+ return React__default['default'].createElement(
44399
+ 'div',
44400
+ { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
44401
+ React__default['default'].createElement('div', {
44402
+ className: 'search__filters--background',
44403
+ onClick: function () {
44404
+ return handleSetIsOpen();
44405
+ }
44406
+ }),
44407
+ React__default['default'].createElement(
44408
+ 'button',
44409
+ {
44410
+ className: 'search__filters--close',
44411
+ onClick: function () {
44412
+ return handleSetIsOpen();
44413
+ }
44414
+ },
44415
+ React__default['default'].createElement(Icon$1, { name: 'ui-close', height: 24 })
44416
+ ),
44417
+ React__default['default'].createElement(
44418
+ 'div',
44419
+ { className: 'search__filters' },
44420
+ React__default['default'].createElement(
44421
+ 'div',
44422
+ { className: 'search__filter-row search__filter__header' },
44423
+ React__default['default'].createElement(
44424
+ 'div',
44425
+ { className: 'search__filter-row-flex-title' },
44426
+ React__default['default'].createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
44427
+ ),
44428
+ !isLoading &&
44429
+ React__default['default'].createElement(
44430
+ 'a',
44431
+ {
44432
+ className: 'search__filter-reset',
44433
+ onClick: function () {
44434
+ return handleFullReset();
44435
+ }
44436
+ },
44437
+ translations.SRP.RESET
44438
+ )
44439
+ ),
44440
+ isLoading
44441
+ ? React__default['default'].createElement(Spinner, null)
44442
+ : React__default['default'].createElement(
44443
+ React__default['default'].Fragment,
44444
+ null,
44445
+ React__default['default'].createElement(
44446
+ 'div',
44447
+ { className: 'search__filters__group-container' },
44448
+ filters.map(function (filter, index) {
44449
+ var _a, _b;
44450
+ var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
44451
+ return React__default['default'].createElement(
44452
+ 'div',
44453
+ { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
44454
+ React__default['default'].createElement(
44455
+ 'div',
44456
+ {
44457
+ className: 'search__filter-row search__filter-row--underline',
44458
+ onClick: function () {
44459
+ return toggleFilterVisibility(filter.property);
44460
+ },
44461
+ role: 'button',
44462
+ tabIndex: 0
44463
+ },
44464
+ React__default['default'].createElement('h6', { className: 'search__filter-large-title' }, filter.label),
44465
+ React__default['default'].createElement(
44466
+ 'svg',
44467
+ {
44468
+ id: 'search-chevron-up-icon',
44469
+ className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
44470
+ viewBox: '0 0 10 6.063',
44471
+ width: 10,
44472
+ height: 6.063
44473
+ },
44474
+ React__default['default'].createElement('path', {
44475
+ id: 'Path_62',
44476
+ 'data-name': 'Path 62',
44477
+ d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
44478
+ transform: 'translate(-240 624)',
44479
+ fill: '#707070'
44480
+ })
44481
+ )
44482
+ ),
44483
+ isVisible &&
44484
+ filter.type === 'checkbox' &&
44485
+ React__default['default'].createElement(
44486
+ 'div',
44487
+ { className: 'search__filter-rows' },
44488
+ filter.options &&
44489
+ filter.options.map(function (option, optionIndex) {
44490
+ return React__default['default'].createElement(
44491
+ 'div',
44492
+ { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
44493
+ React__default['default'].createElement(
44494
+ 'div',
44495
+ { className: 'checkbox' },
44496
+ React__default['default'].createElement(
44497
+ 'label',
44498
+ { className: 'checkbox__label' },
44499
+ React__default['default'].createElement('input', {
44500
+ type: 'checkbox',
44501
+ className: 'checkbox__input checkbox__input--parent',
44502
+ checked: option.isChecked,
44503
+ onChange: function (e) {
44504
+ return handleCheckBoxFilter(filter, option);
44505
+ }
44506
+ }),
44507
+ React__default['default'].createElement('span', { className: 'radiobutton__label-text' }, option.label)
44508
+ )
44509
+ )
44510
+ );
44511
+ })
44512
+ ),
44513
+ isVisible &&
44514
+ filter.type === 'toggle' &&
44515
+ React__default['default'].createElement(
44516
+ 'div',
44517
+ { className: 'search__filter-rows' },
44518
+ (_b = filter.options) === null || _b === void 0
44519
+ ? void 0
44520
+ : _b.map(function (option, optionIndex) {
44521
+ return React__default['default'].createElement(
44522
+ 'div',
44523
+ { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
44524
+ React__default['default'].createElement('span', { className: 'search__filter-toggle-label' }, option.label),
44525
+ React__default['default'].createElement('div', { className: 'checkbox' }),
44526
+ React__default['default'].createElement(
44527
+ 'label',
44528
+ { className: 'checkbox__label' },
44529
+ React__default['default'].createElement('input', {
44530
+ type: 'checkbox',
44531
+ className: 'checkbox__input',
44532
+ checked: option.isChecked,
44533
+ onChange: function () {
44534
+ return handleCheckBoxFilter(filter, option);
44535
+ }
44536
+ })
44537
+ )
44538
+ );
44539
+ })
44540
+ ),
44541
+ isVisible &&
44542
+ filter &&
44543
+ filter.type === 'slider' &&
44544
+ (function () {
44545
+ var _a, _b, _c, _d;
44546
+ var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
44547
+ var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
44548
+ var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
44549
+ var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
44550
+ return React__default['default'].createElement(MultiRangeFilter, {
44551
+ min: min,
44552
+ max: max,
44553
+ selectedMin: selectedMin,
44554
+ selectedMax: selectedMax,
44555
+ valueFormatter: function (value) {
44556
+ return ''.concat(value);
44557
+ },
44558
+ onChange: function (newMin, newMax) {
44559
+ handleSliderChange(filter, newMin, newMax);
44560
+ }
44561
+ });
44562
+ })()
44563
+ );
44564
+ })
44565
+ )
44566
+ )
44567
+ )
44568
+ );
44569
+ };
44570
+
44571
+ var PackageingFlightsFlyIn = function (_a) {
44572
+ var _b;
44573
+ _a.isOpen;
44574
+ _a.setIsOpen;
44575
+ var context = React.useContext(SearchResultsConfigurationContext);
44576
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44577
+ var translations = getTranslations(language);
44578
+ var dispatch = reactRedux.useDispatch();
44579
+ var _c = reactRedux.useSelector(function (state) {
44580
+ return state.searchResults;
44581
+ }),
44582
+ flightsLoading = _c.flightsLoading,
44583
+ initialFlightFilters = _c.initialFlightFilters,
44584
+ flightFilters = _c.flightFilters,
44585
+ flyInType = _c.flyInType,
44586
+ selectedFlightSortType = _c.selectedFlightSortType;
44587
+ var uniqueOutwardFlights = reactRedux.useSelector(selectUniqueOutwardFlights);
44588
+ var uniqueReturnFlights = reactRedux.useSelector(selectUniqueReturnFlights);
44589
+ var selectedOutward = reactRedux.useSelector(selectSelectedOutward);
44590
+ var selectedReturn = reactRedux.useSelector(selectSelectedReturn);
44591
+ var _d = React.useState(false),
44592
+ outwardStepComplete = _d[0],
44593
+ setOutwardStepComplete = _d[1];
44594
+ var handleConfirm = function () {
44595
+ if (!outwardStepComplete) {
44596
+ setOutwardStepComplete(true);
44597
+ dispatch(setFlyInType('flight-return-results'));
44598
+ return;
44599
+ } else {
44600
+ dispatch(setFlyInType(null));
44601
+ setOutwardStepComplete(false);
44602
+ dispatch(setFlyInIsOpen(false));
44603
+ }
44604
+ };
44605
+ var sortByTypes = [
44606
+ { direction: 'asc', label: 'default' },
44607
+ { direction: 'asc', label: 'price' },
44608
+ { direction: 'desc', label: 'price' },
44609
+ { direction: 'asc', label: 'departureTime' },
44610
+ { direction: 'desc', label: 'departureTime' },
44611
+ { direction: 'asc', label: 'durationInTicks' },
44612
+ { direction: 'desc', label: 'durationInTicks' }
44613
+ ];
44614
+ var handleSortChange = function (newSortKey, direction) {
44615
+ if (sortByTypes === undefined) return;
44616
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
44617
+ if (newSortByType) {
44618
+ dispatch(setFlightSortType(newSortByType));
44619
+ }
44620
+ };
44621
+ return React__default['default'].createElement(
44622
+ React__default['default'].Fragment,
44623
+ null,
44624
+ React__default['default'].createElement(
44625
+ 'div',
44626
+ { className: 'flyin__content flyin__content--columns' },
44627
+ flightsLoading
44628
+ ? React__default['default'].createElement(Spinner, null)
44629
+ : React__default['default'].createElement(
44630
+ React__default['default'].Fragment,
44631
+ null,
44632
+ React__default['default'].createElement(Filters, {
44633
+ initialFilters: initialFlightFilters,
44634
+ filters: flightFilters,
44635
+ isOpen: false,
44636
+ handleSetIsOpen: function () {},
44637
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
44638
+ isLoading: flightsLoading,
44639
+ setFilters: function (filters) {
44640
+ return dispatch(setFlightFilters(filters));
44641
+ },
44642
+ resetFilters: function (filters) {
44643
+ return dispatch(resetFlightFilters(filters));
44644
+ }
44645
+ }),
44646
+ React__default['default'].createElement(
44647
+ 'div',
44648
+ { className: 'search__results__wrapper' },
44649
+ React__default['default'].createElement(
44650
+ 'div',
44651
+ { className: 'search__result-row' },
44652
+ React__default['default'].createElement(
44653
+ 'span',
44654
+ { className: 'search__result-row-text' },
44655
+ (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
44656
+ '\u00A0',
44657
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
44658
+ '\u00A0',
44659
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
44660
+ ),
44661
+ sortByTypes &&
44662
+ sortByTypes.length > 0 &&
44663
+ React__default['default'].createElement(
44664
+ 'div',
44665
+ { className: 'search__result-row-filter' },
44666
+ React__default['default'].createElement(ItemPicker, {
44667
+ items: sortByTypes,
44668
+ selection: (selectedFlightSortType === null || selectedFlightSortType === void 0 ? void 0 : selectedFlightSortType.label) || undefined,
44669
+ selectedSortByType: selectedFlightSortType || undefined,
44670
+ label: translations.SRP.SORTBY,
44671
+ placeholder: translations.SRP.SORTBY,
44672
+ classModifier: '',
44673
+ valueFormatter: function (value, direction) {
44674
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
44675
+ },
44676
+ // onPick={handleSortChange}
44677
+ onPick: function (newSortKey, direction) {
44678
+ return handleSortChange(newSortKey, direction);
44679
+ }
44680
+ })
44681
+ )
44682
+ ),
44683
+ React__default['default'].createElement(
44684
+ 'div',
44685
+ { className: 'search__results__cards search__results__cards--extended' },
44686
+ flyInType == 'flight-outward-results' &&
44687
+ uniqueOutwardFlights.map(function (result) {
44688
+ return React__default['default'].createElement(IndependentFlightOption, {
44689
+ key: 'flight-'.concat(result.outwardGuid),
44690
+ item: result.outward,
44691
+ onSelect: function () {
44692
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
44693
+ },
44694
+ guid: result.outwardGuid,
44695
+ isOutward: true,
44696
+ price: result.price,
44697
+ currentSelectedPrice: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.price,
44698
+ selectedGuid: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.outwardGuid,
44699
+ showSelectedState: true
44700
+ });
44701
+ }),
44702
+ flyInType == 'flight-return-results' &&
44703
+ uniqueReturnFlights.map(function (result) {
44704
+ return React__default['default'].createElement(IndependentFlightOption, {
44705
+ key: 'flight-'.concat(result.outwardGuid),
44706
+ item: result.return,
44707
+ onSelect: function () {
44708
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
44709
+ },
44710
+ guid: result.outwardGuid,
44711
+ isOutward: false,
44712
+ price: result.price,
44713
+ currentSelectedPrice: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.price,
44714
+ selectedGuid: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.outwardGuid,
44715
+ showSelectedState: true
44716
+ });
44717
+ })
44718
+ )
44719
+ )
44720
+ )
44721
+ ),
44722
+ React__default['default'].createElement(
44723
+ 'div',
44724
+ { className: 'flyin__footer' },
44725
+ React__default['default'].createElement('div', { className: 'flyin__footer__price' }),
44726
+ React__default['default'].createElement(
44727
+ 'div',
44728
+ { className: 'flyin__button-wrapper' },
44729
+ React__default['default'].createElement(
44730
+ 'button',
44731
+ {
44732
+ className: 'cta cta--select',
44733
+ onClick: function () {
44734
+ return handleConfirm();
44735
+ }
44736
+ },
44737
+ translations.QSM.CONFIRM
44738
+ )
44739
+ )
44740
+ )
44741
+ );
44742
+ };
44743
+
44744
+ var FlyIn = function (_a) {
44745
+ var _b;
44746
+ var srpType = _a.srpType,
44747
+ isOpen = _a.isOpen,
44748
+ setIsOpen = _a.setIsOpen,
44749
+ _c = _a.className,
44750
+ className = _c === void 0 ? '' : _c,
44751
+ onPanelRef = _a.onPanelRef,
44752
+ detailsLoading = _a.detailsLoading,
44753
+ flyInType = _a.flyInType,
44754
+ isPackageEditFlow = _a.isPackageEditFlow,
44755
+ handleConfirm = _a.handleConfirm,
44756
+ sortByTypes = _a.sortByTypes;
44757
+ var dispatch = reactRedux.useDispatch();
44758
+ var context = React.useContext(SearchResultsConfigurationContext);
44759
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44760
+ var translations = getTranslations(language);
44761
+ var _d = reactRedux.useSelector(function (state) {
44762
+ return state.searchResults;
44763
+ }),
44764
+ isLoading = _d.isLoading,
44765
+ initialFilters = _d.initialFilters,
44766
+ filters = _d.filters,
44767
+ filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
44768
+ selectedSortType = _d.selectedSortType;
44769
+ var onCancelSearch = useFlightSearch().onCancelSearch;
44770
+ var panelRef = React.useRef(null);
44771
+ // expose DOM node if needed
44772
+ React.useEffect(
44773
+ function () {
44774
+ onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
44775
+ return function () {
44776
+ return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
44777
+ };
44778
+ },
44779
+ [onPanelRef]
44780
+ );
44781
+ React.useEffect(
44782
+ function () {
44783
+ // click outside detection
44784
+ var handleClickOutside = function (event) {
44785
+ if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
44786
+ handleClose();
44787
+ }
44788
+ };
44789
+ document.addEventListener('mousedown', handleClickOutside);
44790
+ return function () {
44791
+ return document.removeEventListener('mousedown', handleClickOutside);
44792
+ };
44793
+ },
44794
+ [isOpen, setIsOpen]
44795
+ );
44796
+ // body scroll lock
44797
+ React.useEffect(
44798
+ function () {
44799
+ document.body.style.overflow = isOpen ? 'hidden' : '';
44800
+ return function () {
44801
+ document.body.style.overflow = '';
44802
+ };
44803
+ },
44804
+ [isOpen]
44805
+ );
44806
+ var handleClose = function () {
44807
+ if (isOpen && panelRef.current) {
44808
+ if (srpType === build.PortalQsmType.Flight) {
44809
+ dispatch(setSelectedFlight(null));
44810
+ dispatch(setSelectedFlightDetails(null));
44811
+ onCancelSearch();
44812
+ } else {
44813
+ dispatch(setSelectedSearchResult(null));
44814
+ dispatch(setSelectedPackagingAccoResult(null));
44815
+ }
44816
+ dispatch(setFlyInType('acco-details'));
44817
+ setIsOpen(false);
44818
+ }
44819
+ };
44820
+ var handleGoBack = function () {
44821
+ dispatch(setFlyInType('acco-results'));
44822
+ };
44823
+ var handleSortChange = function (newSortKey, direction) {
44824
+ if (sortByTypes === undefined) return;
44825
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
44826
+ if (newSortByType) {
44827
+ dispatch(setSortType(newSortByType));
44828
+ }
44829
+ };
44830
+ return React__default['default'].createElement(
44831
+ 'div',
44832
+ {
44833
+ className: 'flyin '
44834
+ .concat(isOpen ? 'flyin--active' : '', ' ')
44835
+ .concat(className, ' ')
44836
+ .concat(
44837
+ isPackageEditFlow || flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'acco-results'
44838
+ ? 'flyin--large'
44839
+ : ''
44840
+ )
44841
+ },
44842
+ React__default['default'].createElement(
44843
+ 'div',
44844
+ { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
44845
+ React__default['default'].createElement(
44846
+ 'div',
44847
+ { className: 'flyin__content' },
44848
+ React__default['default'].createElement(
44849
+ 'div',
44850
+ { className: 'flyin__content-title-row' },
44851
+ React__default['default'].createElement(
44852
+ 'h3',
44853
+ { className: 'flyin__content-title' },
44854
+ srpType === build.PortalQsmType.Flight && 'Select your fare',
44855
+ srpType === build.PortalQsmType.Accommodation ||
44856
+ (srpType === build.PortalQsmType.AccommodationAndFlight &&
44857
+ (flyInType === 'acco-results' || flyInType === 'acco-details') &&
44858
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION)),
44859
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
44860
+ flyInType === 'flight-outward-results' &&
44861
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.OUTWARD_FLIGHT),
44862
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
44863
+ flyInType === 'flight-return-results' &&
44864
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.RETURN_FLIGHT),
44865
+ srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'flight-details' && 'Select your fare'
44866
+ ),
44867
+ React__default['default'].createElement(
44868
+ 'span',
44869
+ {
44870
+ className: 'flyin__close',
44871
+ onClick: function () {
44872
+ return handleClose();
44873
+ }
44874
+ },
44875
+ React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
44876
+ )
44877
+ ),
44878
+ isPackageEditFlow &&
44879
+ flyInType === 'acco-details' &&
44880
+ React__default['default'].createElement(
44881
+ 'div',
44882
+ { className: 'flyin__content-title-row' },
44883
+ React__default['default'].createElement(
44884
+ 'div',
44885
+ { onClick: handleGoBack, className: 'flyin__content-title__back' },
44886
+ React__default['default'].createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
44887
+ 'Go Back'
44888
+ )
44889
+ )
44890
+ ),
44891
+ srpType === build.PortalQsmType.Flight && React__default['default'].createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
44892
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
44893
+ flyInType === 'acco-results' &&
44894
+ React__default['default'].createElement(
44895
+ 'div',
44896
+ { className: 'flyin__content flyin__content--columns' },
44897
+ React__default['default'].createElement(Filters, {
44898
+ initialFilters: initialFilters,
44899
+ filters: filters,
44900
+ isOpen: false,
44901
+ handleSetIsOpen: function () {},
44902
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
44903
+ isLoading: isLoading,
44904
+ setFilters: function (filters) {
44905
+ return dispatch(setFilters(filters));
44906
+ },
44907
+ resetFilters: function (filters) {
44908
+ return dispatch(resetFilters(filters));
44909
+ }
44910
+ }),
44911
+ React__default['default'].createElement(
44912
+ 'div',
44913
+ { className: 'search__results__wrapper' },
44914
+ React__default['default'].createElement(
44915
+ 'div',
44916
+ { className: 'search__result-row' },
44917
+ React__default['default'].createElement(
44918
+ 'span',
44919
+ { className: 'search__result-row-text' },
44920
+ !isLoading &&
44921
+ React__default['default'].createElement(
44922
+ React__default['default'].Fragment,
44923
+ null,
44924
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
44925
+ filteredPackagingAccoResults.length,
44926
+ '\u00A0',
44927
+ translations.SRP.TOTAL_RESULTS_LABEL
44928
+ )
44929
+ ),
44930
+ sortByTypes &&
44931
+ sortByTypes.length > 0 &&
44932
+ React__default['default'].createElement(
44933
+ 'div',
44934
+ { className: 'search__result-row-filter' },
44935
+ React__default['default'].createElement(ItemPicker, {
44936
+ items: sortByTypes,
44937
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
44938
+ selectedSortByType: selectedSortType,
44939
+ label: translations.SRP.SORTBY,
44940
+ placeholder: translations.SRP.SORTBY,
44941
+ classModifier: 'travel-class-picker__items',
44942
+ valueFormatter: function (value, direction) {
44943
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
44944
+ },
44945
+ onPick: function (newSortKey, direction) {
44946
+ return handleSortChange(newSortKey, direction);
44947
+ }
44948
+ })
44949
+ )
44950
+ ),
44951
+ React__default['default'].createElement(HotelAccommodationResults, { isLoading: detailsLoading, isFlyIn: true })
44952
+ )
44953
+ ),
44954
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
44955
+ flyInType === 'acco-details' &&
44956
+ React__default['default'].createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
44957
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
44958
+ (flyInType === 'flight-outward-results' || flyInType === 'flight-return-results') &&
44959
+ React__default['default'].createElement(PackageingFlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
44960
+ srpType === build.PortalQsmType.GroupTour &&
44961
+ React__default['default'].createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
44962
+ )
44963
+ );
44964
+ };
44965
+
44966
+ var RoundTripResults = function () {
44967
+ var activeTab = reactRedux.useSelector(function (state) {
44968
+ return state.searchResults;
44969
+ }).activeTab;
44970
+ var dispatch = reactRedux.useDispatch();
44971
+ React.useEffect(
44972
+ function () {
44973
+ if (activeTab === 'compact') {
44974
+ dispatch(setActiveTab('list'));
44975
+ }
44976
+ },
44977
+ [activeTab]
44978
+ );
44979
+ return React__default['default'].createElement(
44980
+ 'div',
44981
+ { className: 'search__results__cards search__results__cards--'.concat(activeTab) },
44982
+ React__default['default'].createElement(
44983
+ 'div',
44984
+ { className: 'search__result-card' },
44985
+ React__default['default'].createElement(
43921
44986
  'div',
43922
44987
  { className: 'search__result-card__allotment' },
43923
44988
  React__default['default'].createElement(
@@ -44214,238 +45279,65 @@ var PairedFlightOption = function (_a) {
44214
45279
  var _v = React.useState(false),
44215
45280
  isOutwardOpen = _v[0],
44216
45281
  setIsOutwardOpen = _v[1];
44217
- var _w = React.useState(false),
44218
- isReturnOpen = _w[0],
44219
- setIsReturnOpen = _w[1];
44220
- var handleSelect = function (flight) {
44221
- dispatch(setSelectedFlight(flight));
44222
- onFlightSearch(flight); // Trigger search to update accommodation options based on selected flight
44223
- dispatch(setFlyInIsOpen(true));
44224
- };
44225
- return React__default['default'].createElement(
44226
- 'div',
44227
- { className: 'search__result-card', key: 'flight-'.concat(item.guid) },
44228
- React__default['default'].createElement(
44229
- 'div',
44230
- { className: 'flight' },
44231
- React__default['default'].createElement(
44232
- 'div',
44233
- { className: 'flight__option' },
44234
- React__default['default'].createElement(
44235
- 'div',
44236
- { className: 'flight__content' },
44237
- React__default['default'].createElement(
44238
- 'div',
44239
- { className: 'flight__flights' },
44240
- React__default['default'].createElement(
44241
- 'div',
44242
- { className: 'flight__flight' },
44243
- React__default['default'].createElement(
44244
- 'div',
44245
- { className: 'flight__flight__header' },
44246
- React__default['default'].createElement('div', { className: 'flight__status__container' }),
44247
- React__default['default'].createElement(
44248
- 'div',
44249
- { className: 'flight__price' },
44250
- React__default['default'].createElement(
44251
- 'span',
44252
- { className: 'price' },
44253
- formatPrice$2(
44254
- item.price,
44255
- 'EUR',
44256
- (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
44257
- )
44258
- ),
44259
- React__default['default'].createElement(
44260
- 'button',
44261
- {
44262
- type: 'button',
44263
- className: 'cta '.concat(
44264
- (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'cta--selected' : 'cta--select'
44265
- ),
44266
- onClick: function () {
44267
- return handleSelect(item);
44268
- }
44269
- },
44270
- (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'Selected' : 'Select'
44271
- )
44272
- )
44273
- )
44274
- ),
44275
- item.outward &&
44276
- React__default['default'].createElement(
44277
- 'div',
44278
- { className: 'flight__flight' },
44279
- React__default['default'].createElement(
44280
- 'div',
44281
- { className: 'flight__flight__container' },
44282
- React__default['default'].createElement(
44283
- 'div',
44284
- { className: 'flight__flight__wrapper' },
44285
- React__default['default'].createElement(
44286
- 'div',
44287
- { className: 'flight__logo__wrapper' },
44288
- React__default['default'].createElement('img', {
44289
- src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44290
- (_d = getDepartureSegment(item.outward)) === null || _d === void 0 ? void 0 : _d.marketingAirlineCode,
44291
- '.png?height=256'
44292
- ),
44293
- alt: '',
44294
- className: 'flight__logo'
44295
- }),
44296
- React__default['default'].createElement(
44297
- 'span',
44298
- null,
44299
- (_e = getDepartureSegment(item.outward)) === null || _e === void 0 ? void 0 : _e.marketingAirlineName
44300
- )
44301
- ),
44302
- React__default['default'].createElement(
44303
- 'div',
44304
- { className: 'flight__info' },
44305
- React__default['default'].createElement(
44306
- 'div',
44307
- { className: 'flight__info__times' },
44308
- React__default['default'].createElement(
44309
- 'strong',
44310
- null,
44311
- timeFromDateTime((_f = getDepartureSegment(item.outward)) === null || _f === void 0 ? void 0 : _f.departureDateTime),
44312
- ' ',
44313
- (_g = getDepartureSegment(item.outward)) === null || _g === void 0 ? void 0 : _g.departureAirportCode
44314
- ),
44315
- React__default['default'].createElement(
44316
- 'p',
44317
- null,
44318
- longFormatDate((_h = getDepartureSegment(item.outward)) === null || _h === void 0 ? void 0 : _h.departureDateTime, language)
44319
- )
44320
- ),
44321
- React__default['default'].createElement(
44322
- 'div',
44323
- { className: 'flight__info__duration' },
44324
- React__default['default'].createElement('p', null, durationTicksInHoursString(item.outward.durationInTicks)),
44325
- React__default['default'].createElement(
44326
- 'div',
44327
- { className: 'flight__info__duration__stops' },
44328
- React__default['default'].createElement('div', { className: 'flight__info__duration__stop' })
44329
- ),
44330
- React__default['default'].createElement(
44331
- 'span',
44332
- null,
44333
- getNumberOfStopsLabel(item.outward, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44334
- )
44335
- ),
44336
- React__default['default'].createElement(
44337
- 'div',
44338
- { className: 'flight__info__times flight__info__times--arrival' },
44339
- React__default['default'].createElement(
44340
- 'strong',
44341
- null,
44342
- timeFromDateTime((_j = getArrivalSegment(item.outward)) === null || _j === void 0 ? void 0 : _j.arrivalDateTime),
44343
- ' ',
44344
- (_k = getArrivalSegment(item.outward)) === null || _k === void 0 ? void 0 : _k.arrivalAirportCode
44345
- ),
44346
- React__default['default'].createElement(
44347
- 'p',
44348
- null,
44349
- longFormatDate((_l = getArrivalSegment(item.outward)) === null || _l === void 0 ? void 0 : _l.arrivalDateTime, language)
44350
- )
44351
- )
44352
- )
44353
- ),
44354
- React__default['default'].createElement(
44355
- 'div',
44356
- { className: 'flight__detail__btn__wrapper' },
44357
- React__default['default'].createElement(
44358
- 'div',
44359
- {
44360
- className: 'flight__detail__btn '.concat(isOutwardOpen ? 'flight__detail__btn--active' : ''),
44361
- onClick: function () {
44362
- return setIsOutwardOpen(function (prev) {
44363
- return !prev;
44364
- });
44365
- }
44366
- },
44367
- React__default['default'].createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44368
- )
44369
- )
44370
- ),
44371
- React__default['default'].createElement(
44372
- 'div',
44373
- { className: 'flight__detail '.concat(isOutwardOpen ? 'flight__detail--active' : '') },
44374
- getFlightSegments(item.outward).map(function (segment, index) {
44375
- return React__default['default'].createElement(
44376
- React__default['default'].Fragment,
44377
- { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44378
- React__default['default'].createElement(
44379
- 'div',
44380
- { className: 'flight__info' },
44381
- React__default['default'].createElement(
44382
- 'div',
44383
- { className: 'flight__info__times__wrapper' },
44384
- React__default['default'].createElement(
44385
- 'div',
44386
- { className: 'flight__info__times' },
44387
- React__default['default'].createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44388
- React__default['default'].createElement('strong', null, segment.departureAirportCode),
44389
- React__default['default'].createElement('p', null, longFormatDate(segment.departureDateTime, language))
44390
- ),
44391
- React__default['default'].createElement(
44392
- 'div',
44393
- null,
44394
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
44395
- )
44396
- ),
44397
- React__default['default'].createElement(
44398
- 'div',
44399
- { className: 'flight__info__duration' },
44400
- React__default['default'].createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44401
- React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
44402
- React__default['default'].createElement('span', null, segment.marketingAirlineName),
44403
- React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
44404
- ),
44405
- React__default['default'].createElement(
44406
- 'div',
44407
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44408
- React__default['default'].createElement(
44409
- 'div',
44410
- null,
44411
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
44412
- ),
44413
- React__default['default'].createElement(
44414
- 'div',
44415
- { className: 'flight__info__times flight__info__times--arrival' },
44416
- React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44417
- React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
44418
- React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44419
- )
44420
- )
45282
+ var _w = React.useState(false),
45283
+ isReturnOpen = _w[0],
45284
+ setIsReturnOpen = _w[1];
45285
+ var handleSelect = function (flight) {
45286
+ dispatch(setSelectedFlight(flight));
45287
+ onFlightSearch(flight); // Trigger search to update accommodation options based on selected flight
45288
+ dispatch(setFlyInIsOpen(true));
45289
+ };
45290
+ return React__default['default'].createElement(
45291
+ 'div',
45292
+ { className: 'search__result-card', key: 'flight-'.concat(item.guid) },
45293
+ React__default['default'].createElement(
45294
+ 'div',
45295
+ { className: 'flight' },
45296
+ React__default['default'].createElement(
45297
+ 'div',
45298
+ { className: 'flight__option' },
45299
+ React__default['default'].createElement(
45300
+ 'div',
45301
+ { className: 'flight__content' },
45302
+ React__default['default'].createElement(
45303
+ 'div',
45304
+ { className: 'flight__flights' },
45305
+ React__default['default'].createElement(
45306
+ 'div',
45307
+ { className: 'flight__flight' },
45308
+ React__default['default'].createElement(
45309
+ 'div',
45310
+ { className: 'flight__flight__header' },
45311
+ React__default['default'].createElement('div', { className: 'flight__status__container' }),
45312
+ React__default['default'].createElement(
45313
+ 'div',
45314
+ { className: 'flight__price' },
45315
+ React__default['default'].createElement(
45316
+ 'span',
45317
+ { className: 'price' },
45318
+ formatPrice$2(
45319
+ item.price,
45320
+ 'EUR',
45321
+ (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
45322
+ )
45323
+ ),
45324
+ React__default['default'].createElement(
45325
+ 'button',
45326
+ {
45327
+ type: 'button',
45328
+ className: 'cta '.concat(
45329
+ (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'cta--selected' : 'cta--select'
44421
45330
  ),
44422
- segment.transferTimeInTicks &&
44423
- React__default['default'].createElement(
44424
- 'div',
44425
- { className: 'flight__info' },
44426
- React__default['default'].createElement('div', { className: 'flight__info__times' }),
44427
- React__default['default'].createElement(
44428
- 'div',
44429
- { className: 'flight__info__duration flight__info__duration--waittime' },
44430
- React__default['default'].createElement(
44431
- 'div',
44432
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44433
- React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44434
- ),
44435
- React__default['default'].createElement(
44436
- 'div',
44437
- { className: 'flight__info__duration__stoptime' },
44438
- React__default['default'].createElement('span', null, 'Stop time'),
44439
- React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44440
- )
44441
- ),
44442
- React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44443
- )
44444
- );
44445
- })
45331
+ onClick: function () {
45332
+ return handleSelect(item);
45333
+ }
45334
+ },
45335
+ (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'Selected' : 'Select'
45336
+ )
44446
45337
  )
44447
- ),
44448
- item.return &&
45338
+ )
45339
+ ),
45340
+ item.outward &&
44449
45341
  React__default['default'].createElement(
44450
45342
  'div',
44451
45343
  { className: 'flight__flight' },
@@ -44460,7 +45352,7 @@ var PairedFlightOption = function (_a) {
44460
45352
  { className: 'flight__logo__wrapper' },
44461
45353
  React__default['default'].createElement('img', {
44462
45354
  src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44463
- (_m = getDepartureSegment(item.return)) === null || _m === void 0 ? void 0 : _m.marketingAirlineCode,
45355
+ (_d = getDepartureSegment(item.outward)) === null || _d === void 0 ? void 0 : _d.marketingAirlineCode,
44464
45356
  '.png?height=256'
44465
45357
  ),
44466
45358
  alt: '',
@@ -44469,7 +45361,7 @@ var PairedFlightOption = function (_a) {
44469
45361
  React__default['default'].createElement(
44470
45362
  'span',
44471
45363
  null,
44472
- (_o = getDepartureSegment(item.return)) === null || _o === void 0 ? void 0 : _o.marketingAirlineName
45364
+ (_e = getDepartureSegment(item.outward)) === null || _e === void 0 ? void 0 : _e.marketingAirlineName
44473
45365
  )
44474
45366
  ),
44475
45367
  React__default['default'].createElement(
@@ -44481,20 +45373,20 @@ var PairedFlightOption = function (_a) {
44481
45373
  React__default['default'].createElement(
44482
45374
  'strong',
44483
45375
  null,
44484
- timeFromDateTime((_p = getDepartureSegment(item.return)) === null || _p === void 0 ? void 0 : _p.departureDateTime),
45376
+ timeFromDateTime((_f = getDepartureSegment(item.outward)) === null || _f === void 0 ? void 0 : _f.departureDateTime),
44485
45377
  ' ',
44486
- (_q = getDepartureSegment(item.return)) === null || _q === void 0 ? void 0 : _q.departureAirportCode
45378
+ (_g = getDepartureSegment(item.outward)) === null || _g === void 0 ? void 0 : _g.departureAirportCode
44487
45379
  ),
44488
45380
  React__default['default'].createElement(
44489
45381
  'p',
44490
45382
  null,
44491
- longFormatDate((_r = getDepartureSegment(item.return)) === null || _r === void 0 ? void 0 : _r.departureDateTime, language)
45383
+ longFormatDate((_h = getDepartureSegment(item.outward)) === null || _h === void 0 ? void 0 : _h.departureDateTime, language)
44492
45384
  )
44493
45385
  ),
44494
45386
  React__default['default'].createElement(
44495
45387
  'div',
44496
45388
  { className: 'flight__info__duration' },
44497
- React__default['default'].createElement('p', null, durationTicksInHoursString(item.return.durationInTicks)),
45389
+ React__default['default'].createElement('p', null, durationTicksInHoursString(item.outward.durationInTicks)),
44498
45390
  React__default['default'].createElement(
44499
45391
  'div',
44500
45392
  { className: 'flight__info__duration__stops' },
@@ -44503,7 +45395,7 @@ var PairedFlightOption = function (_a) {
44503
45395
  React__default['default'].createElement(
44504
45396
  'span',
44505
45397
  null,
44506
- getNumberOfStopsLabel(item.return, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
45398
+ getNumberOfStopsLabel(item.outward, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44507
45399
  )
44508
45400
  ),
44509
45401
  React__default['default'].createElement(
@@ -44512,14 +45404,14 @@ var PairedFlightOption = function (_a) {
44512
45404
  React__default['default'].createElement(
44513
45405
  'strong',
44514
45406
  null,
44515
- timeFromDateTime((_s = getArrivalSegment(item.return)) === null || _s === void 0 ? void 0 : _s.arrivalDateTime),
45407
+ timeFromDateTime((_j = getArrivalSegment(item.outward)) === null || _j === void 0 ? void 0 : _j.arrivalDateTime),
44516
45408
  ' ',
44517
- (_t = getArrivalSegment(item.return)) === null || _t === void 0 ? void 0 : _t.arrivalAirportCode
45409
+ (_k = getArrivalSegment(item.outward)) === null || _k === void 0 ? void 0 : _k.arrivalAirportCode
44518
45410
  ),
44519
45411
  React__default['default'].createElement(
44520
45412
  'p',
44521
45413
  null,
44522
- longFormatDate((_u = getArrivalSegment(item.return)) === null || _u === void 0 ? void 0 : _u.arrivalDateTime, language)
45414
+ longFormatDate((_l = getArrivalSegment(item.outward)) === null || _l === void 0 ? void 0 : _l.arrivalDateTime, language)
44523
45415
  )
44524
45416
  )
44525
45417
  )
@@ -44530,9 +45422,9 @@ var PairedFlightOption = function (_a) {
44530
45422
  React__default['default'].createElement(
44531
45423
  'div',
44532
45424
  {
44533
- className: 'flight__detail__btn '.concat(isReturnOpen ? 'flight__detail__btn--active' : ''),
45425
+ className: 'flight__detail__btn '.concat(isOutwardOpen ? 'flight__detail__btn--active' : ''),
44534
45426
  onClick: function () {
44535
- return setIsReturnOpen(function (prev) {
45427
+ return setIsOutwardOpen(function (prev) {
44536
45428
  return !prev;
44537
45429
  });
44538
45430
  }
@@ -44543,11 +45435,11 @@ var PairedFlightOption = function (_a) {
44543
45435
  ),
44544
45436
  React__default['default'].createElement(
44545
45437
  'div',
44546
- { className: 'flight__detail '.concat(isReturnOpen ? 'flight__detail--active' : '') },
44547
- getFlightSegments(item.return).map(function (segment, index) {
45438
+ { className: 'flight__detail '.concat(isOutwardOpen ? 'flight__detail--active' : '') },
45439
+ getFlightSegments(item.outward).map(function (segment, index) {
44548
45440
  return React__default['default'].createElement(
44549
45441
  React__default['default'].Fragment,
44550
- { key: 'return-segment-'.concat(index, '-').concat(segment.flightNumber) },
45442
+ { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44551
45443
  React__default['default'].createElement(
44552
45444
  'div',
44553
45445
  { className: 'flight__info' },
@@ -44574,352 +45466,223 @@ var PairedFlightOption = function (_a) {
44574
45466
  React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
44575
45467
  React__default['default'].createElement('span', null, segment.marketingAirlineName),
44576
45468
  React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
44577
- ),
44578
- React__default['default'].createElement(
44579
- 'div',
44580
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44581
- React__default['default'].createElement(
44582
- 'div',
44583
- null,
44584
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
44585
- ),
44586
- React__default['default'].createElement(
44587
- 'div',
44588
- { className: 'flight__info__times flight__info__times--arrival' },
44589
- React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44590
- React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
44591
- React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44592
- )
44593
- )
44594
- ),
44595
- segment.transferTimeInTicks &&
44596
- React__default['default'].createElement(
44597
- 'div',
44598
- { className: 'flight__info' },
44599
- React__default['default'].createElement('div', { className: 'flight__info__times' }),
44600
- React__default['default'].createElement(
44601
- 'div',
44602
- { className: 'flight__info__duration flight__info__duration--waittime' },
44603
- React__default['default'].createElement(
44604
- 'div',
44605
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44606
- React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44607
- ),
44608
- React__default['default'].createElement(
44609
- 'div',
44610
- { className: 'flight__info__duration__stoptime' },
44611
- React__default['default'].createElement('span', null, 'Stop time'),
44612
- React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44613
- )
44614
- ),
44615
- React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44616
- )
44617
- );
44618
- })
44619
- )
44620
- )
44621
- )
44622
- )
44623
- )
44624
- )
44625
- );
44626
- };
44627
-
44628
- var PairedFlightSelection = function (_a) {
44629
- var _b;
44630
- var searchResults = _a.searchResults;
44631
- var context = React.useContext(SearchResultsConfigurationContext);
44632
- var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44633
- return React__default['default'].createElement(
44634
- React__default['default'].Fragment,
44635
- null,
44636
- React__default['default'].createElement(
44637
- 'div',
44638
- { className: 'search__results__label search__results__label--secondary' },
44639
- React__default['default'].createElement(
44640
- 'div',
44641
- { className: 'search__results__label__date' },
44642
- React__default['default'].createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
44643
- ),
44644
- React__default['default'].createElement(
44645
- 'div',
44646
- { className: 'search__results__label__text' },
44647
- React__default['default'].createElement(
44648
- 'h3',
44649
- null,
44650
- translations.SRP.SELECT,
44651
- ' ',
44652
- React__default['default'].createElement('strong', null, ' ', translations.SIDEBAR.FLIGHT)
44653
- )
44654
- )
44655
- ),
44656
- React__default['default'].createElement(
44657
- 'div',
44658
- { className: 'search__results__cards search__results__cards--extended' },
44659
- searchResults.map(function (result) {
44660
- return React__default['default'].createElement(PairedFlightOption, { key: 'flight-'.concat(result.guid), item: result });
44661
- })
44662
- )
44663
- );
44664
- };
44665
-
44666
- var IndependentFlightOption = function (_a) {
44667
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
44668
- var item = _a.item,
44669
- onSelect = _a.onSelect,
44670
- guid = _a.guid,
44671
- selectedGuid = _a.selectedGuid,
44672
- isOutward = _a.isOutward,
44673
- showSelectedState = _a.showSelectedState,
44674
- currentSelectedPrice = _a.currentSelectedPrice,
44675
- price = _a.price;
44676
- var context = React.useContext(SearchResultsConfigurationContext);
44677
- var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44678
- var translations = getTranslations(language);
44679
- var _p = React.useState(false),
44680
- detailsOpen = _p[0],
44681
- setDetailsOpen = _p[1];
44682
- var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
44683
- return React__default['default'].createElement(
44684
- 'div',
44685
- { className: 'search__result-card', key: 'flight-'.concat(item.code) },
44686
- React__default['default'].createElement(
44687
- 'div',
44688
- { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
44689
- React__default['default'].createElement(
44690
- 'div',
44691
- { className: 'flight__option' },
44692
- React__default['default'].createElement(
44693
- 'div',
44694
- { className: 'flight__content' },
44695
- React__default['default'].createElement(
44696
- 'div',
44697
- { className: 'flight__flights' },
44698
- React__default['default'].createElement(
44699
- 'div',
44700
- { className: 'flight__flight' },
44701
- React__default['default'].createElement(
44702
- 'div',
44703
- { className: 'flight__flight__header' },
44704
- React__default['default'].createElement('div', { className: 'flight__status__container' }),
44705
- React__default['default'].createElement(
44706
- 'div',
44707
- { className: 'flight__price' },
44708
- price != null &&
44709
- price > 0 &&
44710
- (isOutward
44711
- ? React__default['default'].createElement(
44712
- 'span',
44713
- { className: 'price' },
44714
- translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
44715
- '\u00A0',
44716
- formatPrice$2(
44717
- price,
44718
- 'EUR',
44719
- (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
45469
+ ),
45470
+ React__default['default'].createElement(
45471
+ 'div',
45472
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
45473
+ React__default['default'].createElement(
45474
+ 'div',
45475
+ null,
45476
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
45477
+ ),
45478
+ React__default['default'].createElement(
45479
+ 'div',
45480
+ { className: 'flight__info__times flight__info__times--arrival' },
45481
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
45482
+ React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
45483
+ React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44720
45484
  )
44721
45485
  )
44722
- : priceDifference != null &&
44723
- Math.abs(priceDifference) > 0 &&
45486
+ ),
45487
+ segment.transferTimeInTicks &&
44724
45488
  React__default['default'].createElement(
44725
- 'span',
44726
- { className: 'price' },
44727
- priceDifference > 0 ? '+' : '-',
44728
- '\u00A0',
44729
- formatPrice$2(
44730
- Math.abs(priceDifference),
44731
- 'EUR',
44732
- (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
44733
- )
44734
- )),
44735
- React__default['default'].createElement(
44736
- 'button',
44737
- {
44738
- type: 'button',
44739
- className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
44740
- onClick: function () {
44741
- return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
44742
- }
44743
- },
44744
- selectedGuid === guid ? 'Selected' : 'Select'
44745
- )
45489
+ 'div',
45490
+ { className: 'flight__info' },
45491
+ React__default['default'].createElement('div', { className: 'flight__info__times' }),
45492
+ React__default['default'].createElement(
45493
+ 'div',
45494
+ { className: 'flight__info__duration flight__info__duration--waittime' },
45495
+ React__default['default'].createElement(
45496
+ 'div',
45497
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
45498
+ React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
45499
+ ),
45500
+ React__default['default'].createElement(
45501
+ 'div',
45502
+ { className: 'flight__info__duration__stoptime' },
45503
+ React__default['default'].createElement('span', null, 'Stop time'),
45504
+ React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
45505
+ )
45506
+ ),
45507
+ React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
45508
+ )
45509
+ );
45510
+ })
44746
45511
  )
44747
- )
44748
- ),
44749
- React__default['default'].createElement(
44750
- 'div',
44751
- { className: 'flight__flight' },
45512
+ ),
45513
+ item.return &&
44752
45514
  React__default['default'].createElement(
44753
45515
  'div',
44754
- { className: 'flight__flight__container' },
45516
+ { className: 'flight__flight' },
44755
45517
  React__default['default'].createElement(
44756
45518
  'div',
44757
- { className: 'flight__flight__wrapper' },
44758
- React__default['default'].createElement(
44759
- 'div',
44760
- { className: 'flight__logo__wrapper' },
44761
- React__default['default'].createElement('img', {
44762
- src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44763
- (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
44764
- '.png?height=256'
44765
- ),
44766
- alt: '',
44767
- className: 'flight__logo'
44768
- }),
44769
- React__default['default'].createElement(
44770
- 'span',
44771
- null,
44772
- (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName
44773
- )
44774
- ),
45519
+ { className: 'flight__flight__container' },
44775
45520
  React__default['default'].createElement(
44776
45521
  'div',
44777
- { className: 'flight__info' },
45522
+ { className: 'flight__flight__wrapper' },
44778
45523
  React__default['default'].createElement(
44779
45524
  'div',
44780
- { className: 'flight__info__times' },
44781
- React__default['default'].createElement(
44782
- 'strong',
44783
- null,
44784
- timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
44785
- ' ',
44786
- (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
44787
- ),
45525
+ { className: 'flight__logo__wrapper' },
45526
+ React__default['default'].createElement('img', {
45527
+ src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
45528
+ (_m = getDepartureSegment(item.return)) === null || _m === void 0 ? void 0 : _m.marketingAirlineCode,
45529
+ '.png?height=256'
45530
+ ),
45531
+ alt: '',
45532
+ className: 'flight__logo'
45533
+ }),
44788
45534
  React__default['default'].createElement(
44789
- 'p',
45535
+ 'span',
44790
45536
  null,
44791
- longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
45537
+ (_o = getDepartureSegment(item.return)) === null || _o === void 0 ? void 0 : _o.marketingAirlineName
44792
45538
  )
44793
45539
  ),
44794
45540
  React__default['default'].createElement(
44795
45541
  'div',
44796
- { className: 'flight__info__duration' },
44797
- React__default['default'].createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
45542
+ { className: 'flight__info' },
44798
45543
  React__default['default'].createElement(
44799
45544
  'div',
44800
- { className: 'flight__info__duration__stops' },
44801
- React__default['default'].createElement('div', { className: 'flight__info__duration__stop' })
45545
+ { className: 'flight__info__times' },
45546
+ React__default['default'].createElement(
45547
+ 'strong',
45548
+ null,
45549
+ timeFromDateTime((_p = getDepartureSegment(item.return)) === null || _p === void 0 ? void 0 : _p.departureDateTime),
45550
+ ' ',
45551
+ (_q = getDepartureSegment(item.return)) === null || _q === void 0 ? void 0 : _q.departureAirportCode
45552
+ ),
45553
+ React__default['default'].createElement(
45554
+ 'p',
45555
+ null,
45556
+ longFormatDate((_r = getDepartureSegment(item.return)) === null || _r === void 0 ? void 0 : _r.departureDateTime, language)
45557
+ )
44802
45558
  ),
44803
45559
  React__default['default'].createElement(
44804
- 'span',
44805
- null,
44806
- getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44807
- )
44808
- ),
44809
- React__default['default'].createElement(
44810
- 'div',
44811
- { className: 'flight__info__times flight__info__times--arrival' },
44812
- React__default['default'].createElement(
44813
- 'strong',
44814
- null,
44815
- timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
44816
- ' ',
44817
- (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
45560
+ 'div',
45561
+ { className: 'flight__info__duration' },
45562
+ React__default['default'].createElement('p', null, durationTicksInHoursString(item.return.durationInTicks)),
45563
+ React__default['default'].createElement(
45564
+ 'div',
45565
+ { className: 'flight__info__duration__stops' },
45566
+ React__default['default'].createElement('div', { className: 'flight__info__duration__stop' })
45567
+ ),
45568
+ React__default['default'].createElement(
45569
+ 'span',
45570
+ null,
45571
+ getNumberOfStopsLabel(item.return, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
45572
+ )
44818
45573
  ),
44819
45574
  React__default['default'].createElement(
44820
- 'p',
44821
- null,
44822
- longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
45575
+ 'div',
45576
+ { className: 'flight__info__times flight__info__times--arrival' },
45577
+ React__default['default'].createElement(
45578
+ 'strong',
45579
+ null,
45580
+ timeFromDateTime((_s = getArrivalSegment(item.return)) === null || _s === void 0 ? void 0 : _s.arrivalDateTime),
45581
+ ' ',
45582
+ (_t = getArrivalSegment(item.return)) === null || _t === void 0 ? void 0 : _t.arrivalAirportCode
45583
+ ),
45584
+ React__default['default'].createElement(
45585
+ 'p',
45586
+ null,
45587
+ longFormatDate((_u = getArrivalSegment(item.return)) === null || _u === void 0 ? void 0 : _u.arrivalDateTime, language)
45588
+ )
44823
45589
  )
44824
45590
  )
45591
+ ),
45592
+ React__default['default'].createElement(
45593
+ 'div',
45594
+ { className: 'flight__detail__btn__wrapper' },
45595
+ React__default['default'].createElement(
45596
+ 'div',
45597
+ {
45598
+ className: 'flight__detail__btn '.concat(isReturnOpen ? 'flight__detail__btn--active' : ''),
45599
+ onClick: function () {
45600
+ return setIsReturnOpen(function (prev) {
45601
+ return !prev;
45602
+ });
45603
+ }
45604
+ },
45605
+ React__default['default'].createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
45606
+ )
44825
45607
  )
44826
45608
  ),
44827
45609
  React__default['default'].createElement(
44828
45610
  'div',
44829
- { className: 'flight__detail__btn__wrapper' },
44830
- React__default['default'].createElement(
44831
- 'div',
44832
- {
44833
- className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
44834
- onClick: function () {
44835
- return setDetailsOpen(function (prev) {
44836
- return !prev;
44837
- });
44838
- }
44839
- },
44840
- React__default['default'].createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44841
- )
44842
- )
44843
- ),
44844
- React__default['default'].createElement(
44845
- 'div',
44846
- { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
44847
- (_o = getFlightSegments(item)) === null || _o === void 0
44848
- ? void 0
44849
- : _o.map(function (segment, index) {
44850
- return React__default['default'].createElement(
44851
- React__default['default'].Fragment,
44852
- { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
45611
+ { className: 'flight__detail '.concat(isReturnOpen ? 'flight__detail--active' : '') },
45612
+ getFlightSegments(item.return).map(function (segment, index) {
45613
+ return React__default['default'].createElement(
45614
+ React__default['default'].Fragment,
45615
+ { key: 'return-segment-'.concat(index, '-').concat(segment.flightNumber) },
45616
+ React__default['default'].createElement(
45617
+ 'div',
45618
+ { className: 'flight__info' },
45619
+ React__default['default'].createElement(
45620
+ 'div',
45621
+ { className: 'flight__info__times__wrapper' },
45622
+ React__default['default'].createElement(
45623
+ 'div',
45624
+ { className: 'flight__info__times' },
45625
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.departureDateTime)),
45626
+ React__default['default'].createElement('strong', null, segment.departureAirportCode),
45627
+ React__default['default'].createElement('p', null, longFormatDate(segment.departureDateTime, language))
45628
+ ),
45629
+ React__default['default'].createElement(
45630
+ 'div',
45631
+ null,
45632
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
45633
+ )
45634
+ ),
45635
+ React__default['default'].createElement(
45636
+ 'div',
45637
+ { className: 'flight__info__duration' },
45638
+ React__default['default'].createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
45639
+ React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
45640
+ React__default['default'].createElement('span', null, segment.marketingAirlineName),
45641
+ React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
45642
+ ),
45643
+ React__default['default'].createElement(
45644
+ 'div',
45645
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
45646
+ React__default['default'].createElement(
45647
+ 'div',
45648
+ null,
45649
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
45650
+ ),
45651
+ React__default['default'].createElement(
45652
+ 'div',
45653
+ { className: 'flight__info__times flight__info__times--arrival' },
45654
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
45655
+ React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
45656
+ React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
45657
+ )
45658
+ )
45659
+ ),
45660
+ segment.transferTimeInTicks &&
44853
45661
  React__default['default'].createElement(
44854
45662
  'div',
44855
45663
  { className: 'flight__info' },
45664
+ React__default['default'].createElement('div', { className: 'flight__info__times' }),
44856
45665
  React__default['default'].createElement(
44857
45666
  'div',
44858
- { className: 'flight__info__times__wrapper' },
45667
+ { className: 'flight__info__duration flight__info__duration--waittime' },
44859
45668
  React__default['default'].createElement(
44860
45669
  'div',
44861
- { className: 'flight__info__times' },
44862
- React__default['default'].createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44863
- React__default['default'].createElement('strong', null, segment.departureAirportCode),
44864
- React__default['default'].createElement('p', null, longFormatDate(segment.departureDateTime, language))
45670
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
45671
+ React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44865
45672
  ),
44866
45673
  React__default['default'].createElement(
44867
45674
  'div',
44868
- null,
44869
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
45675
+ { className: 'flight__info__duration__stoptime' },
45676
+ React__default['default'].createElement('span', null, 'Stop time'),
45677
+ React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44870
45678
  )
44871
45679
  ),
44872
- React__default['default'].createElement(
44873
- 'div',
44874
- { className: 'flight__info__duration' },
44875
- React__default['default'].createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44876
- React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
44877
- React__default['default'].createElement('span', null, segment.marketingAirlineName),
44878
- React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
44879
- ),
44880
- React__default['default'].createElement(
44881
- 'div',
44882
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44883
- React__default['default'].createElement(
44884
- 'div',
44885
- null,
44886
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
44887
- ),
44888
- React__default['default'].createElement(
44889
- 'div',
44890
- { className: 'flight__info__times flight__info__times--arrival' },
44891
- React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44892
- React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
44893
- React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44894
- )
44895
- )
44896
- ),
44897
- segment.transferTimeInTicks &&
44898
- React__default['default'].createElement(
44899
- 'div',
44900
- { className: 'flight__info' },
44901
- React__default['default'].createElement('div', { className: 'flight__info__times' }),
44902
- React__default['default'].createElement(
44903
- 'div',
44904
- { className: 'flight__info__duration flight__info__duration--waittime' },
44905
- React__default['default'].createElement(
44906
- 'div',
44907
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44908
- React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44909
- ),
44910
- React__default['default'].createElement(
44911
- 'div',
44912
- { className: 'flight__info__duration__stoptime' },
44913
- React__default['default'].createElement('span', null, 'Stop time'),
44914
- React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44915
- )
44916
- ),
44917
- React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44918
- )
44919
- );
44920
- })
45680
+ React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
45681
+ )
45682
+ );
45683
+ })
45684
+ )
44921
45685
  )
44922
- )
44923
45686
  )
44924
45687
  )
44925
45688
  )
@@ -44927,6 +45690,44 @@ var IndependentFlightOption = function (_a) {
44927
45690
  );
44928
45691
  };
44929
45692
 
45693
+ var PairedFlightSelection = function (_a) {
45694
+ var _b;
45695
+ var searchResults = _a.searchResults;
45696
+ var context = React.useContext(SearchResultsConfigurationContext);
45697
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
45698
+ return React__default['default'].createElement(
45699
+ React__default['default'].Fragment,
45700
+ null,
45701
+ React__default['default'].createElement(
45702
+ 'div',
45703
+ { className: 'search__results__label search__results__label--secondary' },
45704
+ React__default['default'].createElement(
45705
+ 'div',
45706
+ { className: 'search__results__label__date' },
45707
+ React__default['default'].createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
45708
+ ),
45709
+ React__default['default'].createElement(
45710
+ 'div',
45711
+ { className: 'search__results__label__text' },
45712
+ React__default['default'].createElement(
45713
+ 'h3',
45714
+ null,
45715
+ translations.SRP.SELECT,
45716
+ ' ',
45717
+ React__default['default'].createElement('strong', null, ' ', translations.SIDEBAR.FLIGHT)
45718
+ )
45719
+ )
45720
+ ),
45721
+ React__default['default'].createElement(
45722
+ 'div',
45723
+ { className: 'search__results__cards search__results__cards--extended' },
45724
+ searchResults.map(function (result) {
45725
+ return React__default['default'].createElement(PairedFlightOption, { key: 'flight-'.concat(result.guid), item: result });
45726
+ })
45727
+ )
45728
+ );
45729
+ };
45730
+
44930
45731
  var IndependentFlightSelection = function (_a) {
44931
45732
  var _b;
44932
45733
  var searchResults = _a.searchResults;
@@ -45049,189 +45850,79 @@ var IndependentFlightSelection = function (_a) {
45049
45850
  ? React__default['default'].createElement(IndependentFlightOption, {
45050
45851
  key: 'flight-'.concat(selectedOutwardKey),
45051
45852
  item: selectedOutward.outward,
45052
- guid: selectedOutward.guid,
45053
- onSelect: function () {
45054
- return setSelectedOutwardKey(null);
45055
- },
45056
- selectedGuid: selectedOutward.guid,
45057
- isOutward: true
45058
- })
45059
- : uniqueOutwardFlights.map(function (result) {
45060
- return React__default['default'].createElement(IndependentFlightOption, {
45061
- key: 'flight-'.concat(result.guid),
45062
- item: result.outward,
45063
- onSelect: function () {
45064
- return setSelectedOutwardKey(getFlightKey(result.outward.segments));
45065
- },
45066
- guid: result.guid,
45067
- isOutward: true
45068
- });
45069
- })
45070
- ),
45071
- React__default['default'].createElement(
45072
- 'div',
45073
- { className: 'search__results__label search__results__label--secondary' },
45074
- React__default['default'].createElement(
45075
- 'div',
45076
- { className: 'search__results__label__date' },
45077
- React__default['default'].createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
45078
- ),
45079
- React__default['default'].createElement(
45080
- 'div',
45081
- { className: 'search__results__label__text' },
45082
- React__default['default'].createElement(
45083
- 'h3',
45084
- null,
45085
- translations.SRP.SELECT,
45086
- ' ',
45087
- React__default['default'].createElement('strong', null, ' ', translations.SRP.RETURN)
45088
- )
45089
- )
45090
- ),
45091
- React__default['default'].createElement(
45092
- 'div',
45093
- { className: 'search__results__cards search__results__cards--extended' },
45094
- selectedReturnKey && selectedReturn
45095
- ? React__default['default'].createElement(IndependentFlightOption, {
45096
- key: 'flight-'.concat(selectedReturnKey),
45097
- item: selectedReturn.return,
45098
- guid: selectedReturn.guid,
45099
- selectedGuid: selectedReturn.guid,
45100
- isOutward: false
45101
- })
45102
- : uniqueReturnFlights.map(function (result) {
45103
- return React__default['default'].createElement(IndependentFlightOption, {
45104
- key: 'flight-'.concat(result.guid),
45105
- item: result.return,
45106
- onSelect: function () {
45107
- return setSelectedReturnKey(getFlightKey(result.return.segments));
45108
- },
45109
- guid: result.guid,
45110
- isOutward: false
45111
- });
45112
- })
45113
- )
45114
- );
45115
- };
45116
-
45117
- var FlightSelection = function (_a) {
45118
- var searchResults = _a.searchResults,
45119
- flightSelectionType = _a.flightSelectionType;
45120
- return flightSelectionType === 'paired'
45121
- ? React__default['default'].createElement(PairedFlightSelection, { searchResults: searchResults })
45122
- : React__default['default'].createElement(IndependentFlightSelection, { searchResults: searchResults });
45123
- };
45124
-
45125
- var MultiRangeFilter = function (_a) {
45126
- var min = _a.min,
45127
- max = _a.max,
45128
- selectedMin = _a.selectedMin,
45129
- selectedMax = _a.selectedMax,
45130
- valueFormatter = _a.valueFormatter,
45131
- onChange = _a.onChange;
45132
- var _b = React.useState(false),
45133
- isDragging = _b[0],
45134
- setIsDragging = _b[1];
45135
- var _c = React.useState(0),
45136
- leftPercentage = _c[0],
45137
- setLeftPercentage = _c[1];
45138
- var _d = React.useState(0),
45139
- rightPercentage = _d[0],
45140
- setRightPercentage = _d[1];
45141
- var _e = React.useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
45142
- minVal = _e[0],
45143
- setMinVal = _e[1];
45144
- var _f = React.useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
45145
- maxVal = _f[0],
45146
- setMaxVal = _f[1];
45147
- var minGap = 5;
45148
- // Sync internal state with external selectedMin/selectedMax changes
45149
- React.useEffect(
45150
- function () {
45151
- setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
45152
- setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
45153
- },
45154
- [min, max, selectedMin, selectedMax]
45155
- );
45156
- // Recalculate slider track whenever values change
45157
- React.useEffect(
45158
- function () {
45159
- var range = max - min || 1;
45160
- var minPercent = ((minVal - min) / range) * 100;
45161
- var maxPercent = ((maxVal - min) / range) * 100;
45162
- setLeftPercentage(minPercent);
45163
- setRightPercentage(100 - maxPercent);
45164
- },
45165
- [minVal, maxVal, min, max]
45166
- );
45167
- var slideMin = function (e) {
45168
- var value = parseInt(e.target.value, 10);
45169
- // Ensure the thumbs don’t cross and enforce minGap
45170
- if (value <= maxVal - minGap) {
45171
- setMinVal(value);
45172
- }
45173
- };
45174
- var slideMax = function (e) {
45175
- var value = parseInt(e.target.value, 10);
45176
- // Ensure the thumbs don’t cross and enforce minGap
45177
- if (value >= minVal + minGap) {
45178
- setMaxVal(value);
45179
- }
45180
- };
45181
- var startDrag = function () {
45182
- setIsDragging(true);
45183
- };
45184
- var stopDrag = function () {
45185
- setIsDragging(false);
45186
- // Notify parent with the final values
45187
- onChange(minVal, maxVal);
45188
- };
45189
- return React__default['default'].createElement(
45190
- 'div',
45191
- { className: 'double-slider-box' },
45853
+ guid: selectedOutward.guid,
45854
+ onSelect: function () {
45855
+ return setSelectedOutwardKey(null);
45856
+ },
45857
+ selectedGuid: selectedOutward.guid,
45858
+ isOutward: true
45859
+ })
45860
+ : uniqueOutwardFlights.map(function (result) {
45861
+ return React__default['default'].createElement(IndependentFlightOption, {
45862
+ key: 'flight-'.concat(result.guid),
45863
+ item: result.outward,
45864
+ onSelect: function () {
45865
+ return setSelectedOutwardKey(getFlightKey(result.outward.segments));
45866
+ },
45867
+ guid: result.guid,
45868
+ isOutward: true
45869
+ });
45870
+ })
45871
+ ),
45192
45872
  React__default['default'].createElement(
45193
45873
  'div',
45194
- { className: 'input-box' },
45195
- React__default['default'].createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
45196
- React__default['default'].createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
45874
+ { className: 'search__results__label search__results__label--secondary' },
45875
+ React__default['default'].createElement(
45876
+ 'div',
45877
+ { className: 'search__results__label__date' },
45878
+ React__default['default'].createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
45879
+ ),
45880
+ React__default['default'].createElement(
45881
+ 'div',
45882
+ { className: 'search__results__label__text' },
45883
+ React__default['default'].createElement(
45884
+ 'h3',
45885
+ null,
45886
+ translations.SRP.SELECT,
45887
+ ' ',
45888
+ React__default['default'].createElement('strong', null, ' ', translations.SRP.RETURN)
45889
+ )
45890
+ )
45197
45891
  ),
45198
45892
  React__default['default'].createElement(
45199
45893
  'div',
45200
- { className: 'range-slider' },
45201
- React__default['default'].createElement('div', {
45202
- className: 'slider-track',
45203
- style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
45204
- }),
45205
- React__default['default'].createElement('input', {
45206
- type: 'range',
45207
- min: min,
45208
- max: max,
45209
- value: minVal,
45210
- onChange: slideMin,
45211
- onMouseDown: startDrag,
45212
- onMouseUp: stopDrag,
45213
- onTouchStart: startDrag,
45214
- onTouchEnd: stopDrag,
45215
- className: 'min-val'
45216
- }),
45217
- React__default['default'].createElement('input', {
45218
- type: 'range',
45219
- min: min,
45220
- max: max,
45221
- value: maxVal,
45222
- onChange: slideMax,
45223
- onMouseDown: startDrag,
45224
- onMouseUp: stopDrag,
45225
- onTouchStart: startDrag,
45226
- onTouchEnd: stopDrag,
45227
- className: 'max-val'
45228
- }),
45229
- isDragging && React__default['default'].createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
45230
- isDragging && React__default['default'].createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
45894
+ { className: 'search__results__cards search__results__cards--extended' },
45895
+ selectedReturnKey && selectedReturn
45896
+ ? React__default['default'].createElement(IndependentFlightOption, {
45897
+ key: 'flight-'.concat(selectedReturnKey),
45898
+ item: selectedReturn.return,
45899
+ guid: selectedReturn.guid,
45900
+ selectedGuid: selectedReturn.guid,
45901
+ isOutward: false
45902
+ })
45903
+ : uniqueReturnFlights.map(function (result) {
45904
+ return React__default['default'].createElement(IndependentFlightOption, {
45905
+ key: 'flight-'.concat(result.guid),
45906
+ item: result.return,
45907
+ onSelect: function () {
45908
+ return setSelectedReturnKey(getFlightKey(result.return.segments));
45909
+ },
45910
+ guid: result.guid,
45911
+ isOutward: false
45912
+ });
45913
+ })
45231
45914
  )
45232
45915
  );
45233
45916
  };
45234
45917
 
45918
+ var FlightSelection = function (_a) {
45919
+ var searchResults = _a.searchResults,
45920
+ flightSelectionType = _a.flightSelectionType;
45921
+ return flightSelectionType === 'paired'
45922
+ ? React__default['default'].createElement(PairedFlightSelection, { searchResults: searchResults })
45923
+ : React__default['default'].createElement(IndependentFlightSelection, { searchResults: searchResults });
45924
+ };
45925
+
45235
45926
  var FlightFilters = function (_a) {
45236
45927
  var _b;
45237
45928
  var isOpen = _a.isOpen,
@@ -46233,311 +46924,89 @@ var FlightResultsContainer = function (_a) {
46233
46924
  placeholder: translations.SRP.SORTBY,
46234
46925
  classModifier: 'travel-class-picker__items',
46235
46926
  valueFormatter: function (value, direction) {
46236
- return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46237
- },
46238
- onPick: handleSortChange
46239
- })
46240
- ),
46241
- React__default['default'].createElement(
46242
- 'div',
46243
- { className: 'search__result-row' },
46244
- React__default['default'].createElement(
46245
- 'span',
46246
- { className: 'search__result-row-text' },
46247
- !flightsLoading &&
46248
- React__default['default'].createElement(
46249
- React__default['default'].Fragment,
46250
- null,
46251
- (results === null || results === void 0 ? void 0 : results.length) &&
46252
- React__default['default'].createElement(React__default['default'].Fragment, null, results.length, ' ', translations.SRP.TOTAL_RESULTS_LABEL)
46253
- )
46254
- ),
46255
- !isMobile &&
46256
- React__default['default'].createElement(
46257
- React__default['default'].Fragment,
46258
- null,
46259
- React__default['default'].createElement(
46260
- 'div',
46261
- { className: 'search__result-row-filter' },
46262
- React__default['default'].createElement(ItemPicker, {
46263
- items: selectionTypes,
46264
- selection:
46265
- ((_c = selectionTypes.find(function (type) {
46266
- return type.id === flightSelectionType;
46267
- })) === null || _c === void 0
46268
- ? void 0
46269
- : _c.label) || undefined,
46270
- label: 'Selection Type',
46271
- placeholder: 'Selection Type',
46272
- classModifier: 'travel-class-picker__items',
46273
- valueFormatter: function (value) {
46274
- return value;
46275
- },
46276
- onPick: function (value) {
46277
- var _a;
46278
- return setFlightSelectionType(
46279
- ((_a = selectionTypes.find(function (type) {
46280
- return type.label === value;
46281
- })) === null || _a === void 0
46282
- ? void 0
46283
- : _a.id) || 'independent'
46284
- );
46285
- }
46286
- })
46287
- ),
46288
- sortByTypes &&
46289
- sortByTypes.length > 0 &&
46290
- React__default['default'].createElement(
46291
- 'div',
46292
- { className: 'search__result-row-filter' },
46293
- React__default['default'].createElement(ItemPicker, {
46294
- items: sortByTypes,
46295
- selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
46296
- selectedSortByType: selectedSortByType || undefined,
46297
- label: translations.SRP.SORTBY,
46298
- placeholder: translations.SRP.SORTBY,
46299
- classModifier: 'travel-class-picker__items',
46300
- valueFormatter: function (value, direction) {
46301
- return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46302
- },
46303
- onPick: handleSortChange
46304
- })
46305
- )
46306
- )
46307
- ),
46308
- React__default['default'].createElement(
46309
- 'div',
46310
- { className: 'search__results__wrapper' },
46311
- flightsLoading && React__default['default'].createElement(Spinner, null),
46312
- (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) == build.PortalQsmType.Flight &&
46313
- (context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
46314
- results &&
46315
- results.length > 0 &&
46316
- React__default['default'].createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
46317
- )
46318
- )
46319
- )
46320
- );
46321
- };
46322
-
46323
- var Filters = function (_a) {
46324
- var _b;
46325
- var initialFilters = _a.initialFilters,
46326
- filters = _a.filters,
46327
- isOpen = _a.isOpen,
46328
- handleSetIsOpen = _a.handleSetIsOpen,
46329
- isLoading = _a.isLoading;
46330
- var context = React.useContext(SearchResultsConfigurationContext);
46331
- if (!context || !context.showFilters) {
46332
- return null;
46333
- }
46334
- var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
46335
- var _c = React.useState({}),
46336
- visibleFilters = _c[0],
46337
- setVisibleFilters = _c[1];
46338
- var dispatch = reactRedux.useDispatch();
46339
- var toggleFilterVisibility = function (filterId) {
46340
- setVisibleFilters(function (prev) {
46341
- var _a;
46342
- return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
46343
- });
46344
- };
46345
- var handleCheckBoxFilter = function (filter, option) {
46346
- var updated = filters.map(function (f) {
46347
- var _a;
46348
- if (f.property !== filter.property) return f;
46349
- return __assign(__assign({}, f), {
46350
- options:
46351
- (_a = f.options) === null || _a === void 0
46352
- ? void 0
46353
- : _a.map(function (opt) {
46354
- return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
46355
- })
46356
- });
46357
- });
46358
- dispatch(setFilters(updated));
46359
- };
46360
- var handleSliderChange = function (filter, newMin, newMax) {
46361
- var updated = filters.map(function (f) {
46362
- if (f.property !== filter.property) return f;
46363
- return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
46364
- });
46365
- dispatch(setFilters(updated));
46366
- };
46367
- var handleFullReset = function () {
46368
- if (!isLoading) {
46369
- dispatch(resetFilters(initialFilters));
46370
- }
46371
- };
46372
- return React__default['default'].createElement(
46373
- 'div',
46374
- { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
46375
- React__default['default'].createElement('div', {
46376
- className: 'search__filters--background',
46377
- onClick: function () {
46378
- return handleSetIsOpen();
46379
- }
46380
- }),
46381
- React__default['default'].createElement(
46382
- 'button',
46383
- {
46384
- className: 'search__filters--close',
46385
- onClick: function () {
46386
- return handleSetIsOpen();
46387
- }
46388
- },
46389
- React__default['default'].createElement(Icon$1, { name: 'ui-close', height: 24 })
46390
- ),
46391
- React__default['default'].createElement(
46392
- 'div',
46393
- { className: 'search__filters' },
46394
- React__default['default'].createElement(
46395
- 'div',
46396
- { className: 'search__filter-row search__filter__header' },
46927
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46928
+ },
46929
+ onPick: handleSortChange
46930
+ })
46931
+ ),
46397
46932
  React__default['default'].createElement(
46398
46933
  'div',
46399
- { className: 'search__filter-row-flex-title' },
46400
- React__default['default'].createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
46401
- ),
46402
- !isLoading &&
46934
+ { className: 'search__result-row' },
46403
46935
  React__default['default'].createElement(
46404
- 'a',
46405
- {
46406
- className: 'search__filter-reset',
46407
- onClick: function () {
46408
- return handleFullReset();
46409
- }
46410
- },
46411
- translations.SRP.RESET
46412
- )
46413
- ),
46414
- isLoading
46415
- ? React__default['default'].createElement(Spinner, null)
46416
- : React__default['default'].createElement(
46417
- React__default['default'].Fragment,
46418
- null,
46936
+ 'span',
46937
+ { className: 'search__result-row-text' },
46938
+ !flightsLoading &&
46939
+ React__default['default'].createElement(
46940
+ React__default['default'].Fragment,
46941
+ null,
46942
+ (results === null || results === void 0 ? void 0 : results.length) &&
46943
+ React__default['default'].createElement(React__default['default'].Fragment, null, results.length, ' ', translations.SRP.TOTAL_RESULTS_LABEL)
46944
+ )
46945
+ ),
46946
+ !isMobile &&
46419
46947
  React__default['default'].createElement(
46420
- 'div',
46421
- { className: 'search__filters__group-container' },
46422
- filters.map(function (filter, index) {
46423
- var _a, _b;
46424
- var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
46425
- return React__default['default'].createElement(
46948
+ React__default['default'].Fragment,
46949
+ null,
46950
+ React__default['default'].createElement(
46951
+ 'div',
46952
+ { className: 'search__result-row-filter' },
46953
+ React__default['default'].createElement(ItemPicker, {
46954
+ items: selectionTypes,
46955
+ selection:
46956
+ ((_c = selectionTypes.find(function (type) {
46957
+ return type.id === flightSelectionType;
46958
+ })) === null || _c === void 0
46959
+ ? void 0
46960
+ : _c.label) || undefined,
46961
+ label: 'Selection Type',
46962
+ placeholder: 'Selection Type',
46963
+ classModifier: 'travel-class-picker__items',
46964
+ valueFormatter: function (value) {
46965
+ return value;
46966
+ },
46967
+ onPick: function (value) {
46968
+ var _a;
46969
+ return setFlightSelectionType(
46970
+ ((_a = selectionTypes.find(function (type) {
46971
+ return type.label === value;
46972
+ })) === null || _a === void 0
46973
+ ? void 0
46974
+ : _a.id) || 'independent'
46975
+ );
46976
+ }
46977
+ })
46978
+ ),
46979
+ sortByTypes &&
46980
+ sortByTypes.length > 0 &&
46981
+ React__default['default'].createElement(
46426
46982
  'div',
46427
- { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
46428
- React__default['default'].createElement(
46429
- 'div',
46430
- {
46431
- className: 'search__filter-row search__filter-row--underline',
46432
- onClick: function () {
46433
- return toggleFilterVisibility(filter.property);
46434
- },
46435
- role: 'button',
46436
- tabIndex: 0
46983
+ { className: 'search__result-row-filter' },
46984
+ React__default['default'].createElement(ItemPicker, {
46985
+ items: sortByTypes,
46986
+ selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
46987
+ selectedSortByType: selectedSortByType || undefined,
46988
+ label: translations.SRP.SORTBY,
46989
+ placeholder: translations.SRP.SORTBY,
46990
+ classModifier: 'travel-class-picker__items',
46991
+ valueFormatter: function (value, direction) {
46992
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46437
46993
  },
46438
- React__default['default'].createElement('h6', { className: 'search__filter-large-title' }, filter.label),
46439
- React__default['default'].createElement(
46440
- 'svg',
46441
- {
46442
- id: 'search-chevron-up-icon',
46443
- className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
46444
- viewBox: '0 0 10 6.063',
46445
- width: 10,
46446
- height: 6.063
46447
- },
46448
- React__default['default'].createElement('path', {
46449
- id: 'Path_62',
46450
- 'data-name': 'Path 62',
46451
- d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
46452
- transform: 'translate(-240 624)',
46453
- fill: '#707070'
46454
- })
46455
- )
46456
- ),
46457
- isVisible &&
46458
- filter.type === 'checkbox' &&
46459
- React__default['default'].createElement(
46460
- 'div',
46461
- { className: 'search__filter-rows' },
46462
- filter.options &&
46463
- filter.options.map(function (option, optionIndex) {
46464
- return React__default['default'].createElement(
46465
- 'div',
46466
- { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
46467
- React__default['default'].createElement(
46468
- 'div',
46469
- { className: 'checkbox' },
46470
- React__default['default'].createElement(
46471
- 'label',
46472
- { className: 'checkbox__label' },
46473
- React__default['default'].createElement('input', {
46474
- type: 'checkbox',
46475
- className: 'checkbox__input checkbox__input--parent',
46476
- checked: option.isChecked,
46477
- onChange: function (e) {
46478
- return handleCheckBoxFilter(filter, option);
46479
- }
46480
- }),
46481
- React__default['default'].createElement('span', { className: 'radiobutton__label-text' }, option.label)
46482
- )
46483
- )
46484
- );
46485
- })
46486
- ),
46487
- isVisible &&
46488
- filter.type === 'toggle' &&
46489
- React__default['default'].createElement(
46490
- 'div',
46491
- { className: 'search__filter-rows' },
46492
- (_b = filter.options) === null || _b === void 0
46493
- ? void 0
46494
- : _b.map(function (option, optionIndex) {
46495
- return React__default['default'].createElement(
46496
- 'div',
46497
- { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
46498
- React__default['default'].createElement('span', { className: 'search__filter-toggle-label' }, option.label),
46499
- React__default['default'].createElement('div', { className: 'checkbox' }),
46500
- React__default['default'].createElement(
46501
- 'label',
46502
- { className: 'checkbox__label' },
46503
- React__default['default'].createElement('input', {
46504
- type: 'checkbox',
46505
- className: 'checkbox__input',
46506
- checked: option.isChecked,
46507
- onChange: function () {
46508
- return handleCheckBoxFilter(filter, option);
46509
- }
46510
- })
46511
- )
46512
- );
46513
- })
46514
- ),
46515
- isVisible &&
46516
- filter &&
46517
- filter.type === 'slider' &&
46518
- (function () {
46519
- var _a, _b, _c, _d;
46520
- var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
46521
- var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
46522
- var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
46523
- var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
46524
- return React__default['default'].createElement(MultiRangeFilter, {
46525
- min: min,
46526
- max: max,
46527
- selectedMin: selectedMin,
46528
- selectedMax: selectedMax,
46529
- valueFormatter: function (value) {
46530
- return ''.concat(value);
46531
- },
46532
- onChange: function (newMin, newMax) {
46533
- handleSliderChange(filter, newMin, newMax);
46534
- }
46535
- });
46536
- })()
46537
- );
46538
- })
46994
+ onPick: handleSortChange
46995
+ })
46996
+ )
46539
46997
  )
46540
- )
46998
+ ),
46999
+ React__default['default'].createElement(
47000
+ 'div',
47001
+ { className: 'search__results__wrapper' },
47002
+ flightsLoading && React__default['default'].createElement(Spinner, null),
47003
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) == build.PortalQsmType.Flight &&
47004
+ (context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
47005
+ results &&
47006
+ results.length > 0 &&
47007
+ React__default['default'].createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
47008
+ )
47009
+ )
46541
47010
  )
46542
47011
  );
46543
47012
  };
@@ -46859,80 +47328,245 @@ var enrichFiltersWithResults = function (results, filters, tags) {
46859
47328
  return updatedFilter;
46860
47329
  });
46861
47330
  };
46862
- var enrichFiltersWithPackageAccoResults = function (results, filters, tags) {
46863
- if (!results || results.length === 0 || !filters) {
46864
- return filters !== null && filters !== void 0 ? filters : [];
46865
- }
46866
- return filters.map(function (filter) {
46867
- var updatedFilter = __assign({}, filter);
46868
- if (filter.property === 'price' && (filter.min == null || filter.max == null)) {
46869
- var prices = results
46870
- .map(function (r) {
46871
- var _a;
46872
- return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
46873
- })
46874
- .filter(function (p) {
46875
- return p > 0;
46876
- });
46877
- if (prices.length > 0) {
46878
- updatedFilter.min = Math.floor(Math.min.apply(Math, prices));
46879
- updatedFilter.max = Math.ceil(Math.max.apply(Math, prices));
46880
- }
46881
- }
46882
- if (filter.property === 'accommodation') {
46883
- var map_4 = new Map();
46884
- results.forEach(function (r) {
46885
- var rooms = lodash.flatMap(r.rooms);
46886
- if (rooms) {
46887
- rooms.map(function (room) {
46888
- room.options.map(function (option) {
46889
- if (option.accommodationCode) {
46890
- map_4.set(option.accommodationCode, {
46891
- name: option.accommodationName,
46892
- code: option.accommodationCode
46893
- });
46894
- }
47331
+ var enrichFiltersWithPackageAccoResults = function (results, tags) {
47332
+ var filters = [];
47333
+ if (!results || results.length === 0) {
47334
+ return filters;
47335
+ }
47336
+ var regimeFilter = {
47337
+ property: 'regime',
47338
+ label: 'Regime',
47339
+ type: 'checkbox',
47340
+ options: [],
47341
+ isFrontendFilter: true
47342
+ };
47343
+ var map = new Map();
47344
+ results.forEach(function (r) {
47345
+ var rooms = lodash.flatMap(r.rooms);
47346
+ if (rooms) {
47347
+ rooms.map(function (room) {
47348
+ room.options.map(function (option) {
47349
+ if (option.regimeCode) {
47350
+ map.set(option.regimeCode, {
47351
+ name: option.regimeName,
47352
+ code: option.regimeCode
46895
47353
  });
46896
- });
46897
- }
47354
+ }
47355
+ });
46898
47356
  });
46899
- updatedFilter.options = Array.from(map_4.values()).map(function (accommodation) {
46900
- var _a;
46901
- return {
46902
- label: (_a = accommodation.name) !== null && _a !== void 0 ? _a : accommodation.code,
46903
- value: accommodation.code,
46904
- isChecked: false
46905
- };
47357
+ }
47358
+ });
47359
+ regimeFilter.options = Array.from(map.values()).map(function (regime) {
47360
+ var _a;
47361
+ return {
47362
+ label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
47363
+ value: regime.code,
47364
+ isChecked: false
47365
+ };
47366
+ });
47367
+ filters.push(regimeFilter);
47368
+ var priceFilter = {
47369
+ property: 'price',
47370
+ label: 'Prijs',
47371
+ type: 'slider',
47372
+ isFrontendFilter: true
47373
+ };
47374
+ var prices = results
47375
+ .map(function (r) {
47376
+ var _a;
47377
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
47378
+ })
47379
+ .filter(function (p) {
47380
+ return p > 0;
47381
+ });
47382
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
47383
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
47384
+ filters.push(priceFilter);
47385
+ return filters;
47386
+ };
47387
+ var enrichFiltersWithPackageFlightResults = function (results, tags, translations) {
47388
+ var filters = [];
47389
+ if (!results || results.length === 0) {
47390
+ return filters;
47391
+ }
47392
+ // Airlines
47393
+ var airlinesFilter = {
47394
+ label: 'Airlines',
47395
+ property: 'airline',
47396
+ type: 'checkbox',
47397
+ isFrontendFilter: true,
47398
+ options: []
47399
+ };
47400
+ var airlinesFilterMap = new Map();
47401
+ results.map(function (r) {
47402
+ var airlineCode = r.airlineCode;
47403
+ var airlineName = r.airlineName;
47404
+ if (airlineCode && airlineName) {
47405
+ airlinesFilterMap.set(airlineCode, {
47406
+ name: airlineName,
47407
+ code: airlineCode
46906
47408
  });
46907
47409
  }
46908
- if (filter.property === 'regime') {
46909
- var map_5 = new Map();
46910
- results.forEach(function (r) {
46911
- var rooms = lodash.flatMap(r.rooms);
46912
- if (rooms) {
46913
- rooms.map(function (room) {
46914
- room.options.map(function (option) {
46915
- if (option.regimeCode) {
46916
- map_5.set(option.regimeCode, {
46917
- name: option.regimeName,
46918
- code: option.regimeCode
46919
- });
46920
- }
46921
- });
46922
- });
46923
- }
47410
+ });
47411
+ airlinesFilter.options = Array.from(airlinesFilterMap.values()).map(function (airline) {
47412
+ var _a;
47413
+ return {
47414
+ label: (_a = airline.name) !== null && _a !== void 0 ? _a : airline.code,
47415
+ value: airline.code,
47416
+ isChecked: false
47417
+ };
47418
+ });
47419
+ filters.push(airlinesFilter);
47420
+ // Number of stops
47421
+ var stopsFilter = {
47422
+ label: 'Number of Stops',
47423
+ property: 'numberOfStops',
47424
+ type: 'checkbox',
47425
+ isFrontendFilter: true,
47426
+ options: []
47427
+ };
47428
+ var stopsMap = new Map();
47429
+ results.map(function (result) {
47430
+ var numberOfStops = getNumberOfStops(result.outward);
47431
+ if (!stopsMap.has(numberOfStops)) {
47432
+ stopsMap.set(numberOfStops, { numberOfStops: numberOfStops });
47433
+ }
47434
+ });
47435
+ stopsFilter.options = Array.from(stopsMap.values()).map(function (stop) {
47436
+ return {
47437
+ label: ''.concat(stop.numberOfStops == 0 ? 'direct' : stop.numberOfStops + ' Stop'.concat(stop.numberOfStops !== 1 ? 's' : '')),
47438
+ value: stop.numberOfStops,
47439
+ isChecked: false
47440
+ };
47441
+ });
47442
+ filters.push(stopsFilter);
47443
+ // Departure range
47444
+ var departureRangeFilter = {
47445
+ label: 'Departure Range',
47446
+ property: 'departureRange',
47447
+ type: 'checkbox',
47448
+ isFrontendFilter: true,
47449
+ options: []
47450
+ };
47451
+ var departureRangeMap = new Map();
47452
+ results.map(function (result) {
47453
+ var _a;
47454
+ var departureRange = rangeFromDateTimeInMinutes((_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime);
47455
+ if (!departureRangeMap.has(departureRange)) {
47456
+ departureRangeMap.set(departureRange, departureRange);
47457
+ }
47458
+ });
47459
+ departureRangeFilter.options = lodash.orderBy(Array.from(departureRangeMap.values()), ['id'], ['asc']).map(function (range) {
47460
+ return {
47461
+ label: getDepartureRangeName(translations, range),
47462
+ value: range,
47463
+ isChecked: false
47464
+ };
47465
+ });
47466
+ filters.push(departureRangeFilter);
47467
+ // Departure Airport
47468
+ var departureAirportFilter = {
47469
+ label: 'Departure Airport',
47470
+ property: 'departureAirport',
47471
+ type: 'checkbox',
47472
+ isFrontendFilter: true,
47473
+ options: []
47474
+ };
47475
+ var departureAirportsMap = new Map();
47476
+ results.map(function (result) {
47477
+ var departureSegment = getDepartureSegment(result.outward);
47478
+ var departureAirport = departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportCode;
47479
+ if (departureAirport && !departureAirportsMap.has(departureAirport)) {
47480
+ departureAirportsMap.set(departureAirport, {
47481
+ name: (departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportName) + ' (' + departureAirport + ')',
47482
+ code: departureAirport
46924
47483
  });
46925
- updatedFilter.options = Array.from(map_5.values()).map(function (regime) {
46926
- var _a;
46927
- return {
46928
- label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
46929
- value: regime.code,
46930
- isChecked: false
46931
- };
47484
+ }
47485
+ });
47486
+ departureAirportFilter.options = Array.from(departureAirportsMap.values()).map(function (airport) {
47487
+ var _a;
47488
+ return {
47489
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
47490
+ value: airport.code,
47491
+ isChecked: false
47492
+ };
47493
+ });
47494
+ filters.push(departureAirportFilter);
47495
+ // Arrival Airport
47496
+ var arrivalAirportFilter = {
47497
+ label: 'Arrival Airport',
47498
+ property: 'arrivalAirport',
47499
+ type: 'checkbox',
47500
+ isFrontendFilter: true,
47501
+ options: []
47502
+ };
47503
+ var arrivalAirportsMap = new Map();
47504
+ results.map(function (result) {
47505
+ var arrivalSegment = getArrivalSegment(result.outward);
47506
+ var arrivalAirport = arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportCode;
47507
+ if (arrivalAirport && !arrivalAirportsMap.has(arrivalAirport)) {
47508
+ arrivalAirportsMap.set(arrivalAirport, {
47509
+ name: (arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportName) + ' (' + arrivalAirport + ')',
47510
+ code: arrivalAirport
46932
47511
  });
46933
47512
  }
46934
- return updatedFilter;
46935
47513
  });
47514
+ arrivalAirportFilter.options = Array.from(arrivalAirportsMap.values()).map(function (airport) {
47515
+ var _a;
47516
+ return {
47517
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
47518
+ value: airport.code,
47519
+ isChecked: false
47520
+ };
47521
+ });
47522
+ filters.push(arrivalAirportFilter);
47523
+ // Price
47524
+ var priceFilter = {
47525
+ label: 'Price',
47526
+ property: 'price',
47527
+ type: 'slider',
47528
+ isFrontendFilter: true
47529
+ };
47530
+ var prices = results
47531
+ .map(function (r) {
47532
+ var _a;
47533
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
47534
+ })
47535
+ .filter(function (p) {
47536
+ return p > 0;
47537
+ });
47538
+ if (prices.length > 0) {
47539
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
47540
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
47541
+ }
47542
+ filters.push(priceFilter);
47543
+ // Travel duration
47544
+ var travelDurationFilter = {
47545
+ label: 'Travel Duration',
47546
+ property: 'travelDuration',
47547
+ type: 'slider',
47548
+ isFrontendFilter: true
47549
+ };
47550
+ var minTravelTimeDuration = Math.min.apply(
47551
+ Math,
47552
+ results.map(function (result) {
47553
+ return result.outward.durationInTicks;
47554
+ })
47555
+ );
47556
+ var maxTravelTimeDuration = Math.max.apply(
47557
+ Math,
47558
+ results.map(function (result) {
47559
+ return result.outward.durationInTicks;
47560
+ })
47561
+ );
47562
+ var minTravelTimeValue = durationInTicksInMinutes(minTravelTimeDuration);
47563
+ var maxTravelTimeValue = durationInTicksInMinutes(maxTravelTimeDuration);
47564
+ if (minTravelTimeValue != null && maxTravelTimeValue != null) {
47565
+ travelDurationFilter.min = minTravelTimeValue;
47566
+ travelDurationFilter.max = maxTravelTimeValue;
47567
+ }
47568
+ filters.push(travelDurationFilter);
47569
+ return filters;
46936
47570
  };
46937
47571
  var applyFilters = function (results, filters, sortBy) {
46938
47572
  var filtered = results.filter(function (r) {
@@ -47074,6 +47708,147 @@ var applyFiltersToPackageAccoResults = function (results, filters, sortBy) {
47074
47708
  return 0;
47075
47709
  });
47076
47710
  };
47711
+ var applyFiltersToPackageFlightResults = function (results, filters, sortBy) {
47712
+ var filtered = results.filter(function (result) {
47713
+ return filters.every(function (filter) {
47714
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
47715
+ if (!filter.isFrontendFilter) return true;
47716
+ // Airline
47717
+ if (filter.property === 'airline') {
47718
+ var selected =
47719
+ (_a = filter.options) === null || _a === void 0
47720
+ ? void 0
47721
+ : _a
47722
+ .filter(function (o) {
47723
+ return o.isChecked;
47724
+ })
47725
+ .map(function (o) {
47726
+ return o.value;
47727
+ });
47728
+ if (!selected || selected.length === 0) return true;
47729
+ return selected.includes(result.airlineCode);
47730
+ }
47731
+ // Stops
47732
+ if (filter.property === 'numberOfStops') {
47733
+ var selected =
47734
+ (_b = filter.options) === null || _b === void 0
47735
+ ? void 0
47736
+ : _b
47737
+ .filter(function (o) {
47738
+ return o.isChecked;
47739
+ })
47740
+ .map(function (o) {
47741
+ return o.value;
47742
+ });
47743
+ if (!selected || selected.length === 0) return true;
47744
+ return selected.includes(getNumberOfStops(result.outward)) && selected.includes(getNumberOfStops(result.return));
47745
+ }
47746
+ // Departure range
47747
+ if (filter.property === 'departureRange') {
47748
+ var selected =
47749
+ (_c = filter.options) === null || _c === void 0
47750
+ ? void 0
47751
+ : _c
47752
+ .filter(function (o) {
47753
+ return o.isChecked;
47754
+ })
47755
+ .map(function (o) {
47756
+ return o.value;
47757
+ });
47758
+ if (!selected || selected.length === 0) return true;
47759
+ return selected.includes(
47760
+ rangeFromDateTimeInMinutes((_d = getDepartureSegment(result.outward)) === null || _d === void 0 ? void 0 : _d.departureDateTime)
47761
+ );
47762
+ }
47763
+ // Departure airport
47764
+ if (filter.property === 'departureAirport') {
47765
+ var selected =
47766
+ (_e = filter.options) === null || _e === void 0
47767
+ ? void 0
47768
+ : _e
47769
+ .filter(function (o) {
47770
+ return o.isChecked;
47771
+ })
47772
+ .map(function (o) {
47773
+ return o.value;
47774
+ });
47775
+ if (!selected || selected.length === 0) return true;
47776
+ var departureAirportCode = (_f = getDepartureSegment(result.outward)) === null || _f === void 0 ? void 0 : _f.departureAirportCode;
47777
+ if (!departureAirportCode) return false;
47778
+ return selected.includes(departureAirportCode);
47779
+ }
47780
+ // Arrival airport
47781
+ if (filter.property === 'arrivalAirport') {
47782
+ var selected =
47783
+ (_g = filter.options) === null || _g === void 0
47784
+ ? void 0
47785
+ : _g
47786
+ .filter(function (o) {
47787
+ return o.isChecked;
47788
+ })
47789
+ .map(function (o) {
47790
+ return o.value;
47791
+ });
47792
+ if (!selected || selected.length === 0) return true;
47793
+ var arrivalAirportCode = (_h = getArrivalSegment(result.outward)) === null || _h === void 0 ? void 0 : _h.arrivalAirportCode;
47794
+ if (!arrivalAirportCode) return false;
47795
+ return selected.includes(arrivalAirportCode);
47796
+ }
47797
+ // PRICE
47798
+ if (filter.property === 'price') {
47799
+ if (filter.selectedMin != null && result.price < filter.selectedMin) return false;
47800
+ if (filter.selectedMax != null && result.price > filter.selectedMax) return false;
47801
+ return true;
47802
+ }
47803
+ // Travel times
47804
+ if (filter.property === 'travelDuration') {
47805
+ if (
47806
+ filter.selectedMin != null &&
47807
+ durationInTicksInMinutes((_j = result.outward) === null || _j === void 0 ? void 0 : _j.durationInTicks) < filter.selectedMin
47808
+ )
47809
+ return false;
47810
+ if (
47811
+ filter.selectedMax != null &&
47812
+ durationInTicksInMinutes((_k = result.outward) === null || _k === void 0 ? void 0 : _k.durationInTicks) > filter.selectedMax
47813
+ )
47814
+ return false;
47815
+ return true;
47816
+ }
47817
+ return true;
47818
+ });
47819
+ });
47820
+ // SORTING
47821
+ if (!sortBy || sortBy.label === 'default') {
47822
+ return filtered;
47823
+ }
47824
+ if (sortBy.label === 'departureTime') {
47825
+ return lodash.orderBy(
47826
+ results,
47827
+ [
47828
+ function (result) {
47829
+ var _a;
47830
+ return (_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime;
47831
+ }
47832
+ ],
47833
+ [sortBy.direction] // or "desc"
47834
+ );
47835
+ } else if (sortBy.label === 'durationInTicks') {
47836
+ return lodash.orderBy(
47837
+ results,
47838
+ [
47839
+ function (result) {
47840
+ var _a, _b;
47841
+ return durationInTicksInMinutes(
47842
+ (_b = (_a = result.outward) === null || _a === void 0 ? void 0 : _a.durationInTicks) !== null && _b !== void 0 ? _b : 0
47843
+ );
47844
+ }
47845
+ ],
47846
+ [sortBy.direction] // or "desc"
47847
+ );
47848
+ } else {
47849
+ return lodash.orderBy(results, [sortBy.label], [sortBy.direction]);
47850
+ }
47851
+ };
47077
47852
 
47078
47853
  var getSelectedOptionsPerRoom = function (details) {
47079
47854
  var _a;
@@ -47282,28 +48057,30 @@ var SearchResultsContainer = function () {
47282
48057
  results = _c.results,
47283
48058
  filteredResults = _c.filteredResults,
47284
48059
  packagingAccoResults = _c.packagingAccoResults,
47285
- filteredPackagingAccoResults = _c.filteredPackagingAccoResults;
47286
- _c.bookingPackageDetails;
47287
- var isLoading = _c.isLoading,
48060
+ filteredPackagingAccoResults = _c.filteredPackagingAccoResults,
48061
+ isLoading = _c.isLoading,
47288
48062
  flightsLoading = _c.flightsLoading,
48063
+ initialFilters = _c.initialFilters,
47289
48064
  filters = _c.filters,
48065
+ flightFilters = _c.flightFilters,
47290
48066
  selectedSortType = _c.selectedSortType,
48067
+ selectedFlightSortType = _c.selectedFlightSortType,
47291
48068
  selectedSearchResult = _c.selectedSearchResult,
47292
48069
  selectedPackagingAccoResultCode = _c.selectedPackagingAccoResultCode,
47293
48070
  flyInIsOpen = _c.flyInIsOpen,
47294
48071
  packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
47295
48072
  editablePackagingEntry = _c.editablePackagingEntry,
47296
48073
  transactionId = _c.transactionId,
47297
- accommodationFlyInStep = _c.accommodationFlyInStep,
48074
+ flyInType = _c.flyInType,
47298
48075
  itinerary = _c.itinerary,
47299
48076
  packagingFlightResults = _c.packagingFlightResults;
47300
48077
  var isMobile = useMediaQuery('(max-width: 1200px)');
47301
48078
  var _d = React.useState(false),
47302
48079
  initialFiltersSet = _d[0],
47303
48080
  setInitialFiltersSet = _d[1];
47304
- var _e = React.useState([]),
47305
- initialFilters = _e[0],
47306
- setInitialFilters = _e[1];
48081
+ var _e = React.useState(false),
48082
+ initialFlightFiltersSet = _e[0],
48083
+ setInitialFlightFiltersSet = _e[1];
47307
48084
  var _f = React.useState(false),
47308
48085
  filtersOpen = _f[0],
47309
48086
  setFiltersOpen = _f[1];
@@ -47323,9 +48100,6 @@ var SearchResultsContainer = function () {
47323
48100
  selectedAccommodationSeed = _l[0],
47324
48101
  setSelectedAccommodationSeed = _l[1];
47325
48102
  var skipInitialPackagingAccoDetailsRef = React.useRef(false);
47326
- var _m = React.useState(false),
47327
- showAllOutwardFlights = _m[0],
47328
- setShowAllOutwardFlights = _m[1];
47329
48103
  var panelRef = React.useRef(null);
47330
48104
  var sortByTypes = [
47331
48105
  { direction: 'asc', label: 'default' },
@@ -47643,7 +48417,7 @@ var SearchResultsContainer = function () {
47643
48417
  if (!seed) return [2 /*return*/];
47644
48418
  setDetailsIsLoading(true);
47645
48419
  setSelectedAccommodationSeed(seed);
47646
- dispatch(setAccommodationFlyInStep('results'));
48420
+ dispatch(setFlyInType('acco-results'));
47647
48421
  handleFlyInToggle(true);
47648
48422
  return [4 /*yield*/, getOrCreateTransactionId()];
47649
48423
  case 1:
@@ -47801,7 +48575,7 @@ var SearchResultsContainer = function () {
47801
48575
  enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47802
48576
  if (!initialFiltersSet) {
47803
48577
  dispatch(resetFilters(enrichedFilters));
47804
- setInitialFilters(enrichedFilters);
48578
+ dispatch(setInitialFilters(enrichedFilters));
47805
48579
  setInitialFiltersSet(true);
47806
48580
  }
47807
48581
  dispatch(setResults(packageSearchResults));
@@ -47876,11 +48650,7 @@ var SearchResultsContainer = function () {
47876
48650
  return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47877
48651
  case 1:
47878
48652
  packageAccoSearchResults = _d.sent();
47879
- enrichedFilters = enrichFiltersWithPackageAccoResults(
47880
- packageAccoSearchResults,
47881
- context.filters,
47882
- (_a = context.tags) !== null && _a !== void 0 ? _a : []
47883
- );
48653
+ enrichedFilters = enrichFiltersWithPackageAccoResults(packageAccoSearchResults, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47884
48654
  if (!initialFiltersSet) {
47885
48655
  dispatch(resetFilters(enrichedFilters));
47886
48656
  setInitialFilters(enrichedFilters);
@@ -47926,11 +48696,12 @@ var SearchResultsContainer = function () {
47926
48696
  };
47927
48697
  var runFlightSearch = function (currentTransactionId, seed) {
47928
48698
  return __awaiter(void 0, void 0, void 0, function () {
47929
- var config, searchRequest, packageFlightSearchResults, firstResult, err_4;
47930
- return __generator(this, function (_a) {
47931
- switch (_a.label) {
48699
+ var config, searchRequest, packageFlightSearchResults, enrichedFilters, initialFilteredResults, firstResult, err_4;
48700
+ var _a;
48701
+ return __generator(this, function (_b) {
48702
+ switch (_b.label) {
47932
48703
  case 0:
47933
- _a.trys.push([0, 2, , 3]);
48704
+ _b.trys.push([0, 2, , 3]);
47934
48705
  if (!context) return [2 /*return*/];
47935
48706
  dispatch(setFlightsLoading(true));
47936
48707
  config = {
@@ -47941,17 +48712,31 @@ var SearchResultsContainer = function () {
47941
48712
  searchRequest.agentId = context.agentId;
47942
48713
  return [4 /*yield*/, build.searchPackagingFlights(config, searchRequest)];
47943
48714
  case 1:
47944
- packageFlightSearchResults = _a.sent();
48715
+ packageFlightSearchResults = _b.sent();
48716
+ enrichedFilters = enrichFiltersWithPackageFlightResults(
48717
+ packageFlightSearchResults,
48718
+ (_a = context.tags) !== null && _a !== void 0 ? _a : [],
48719
+ translations
48720
+ );
48721
+ if (!initialFlightFiltersSet) {
48722
+ dispatch(resetFlightFilters(enrichedFilters));
48723
+ dispatch(setInitialFlightFilters(enrichedFilters));
48724
+ setInitialFlightFiltersSet(true);
48725
+ }
47945
48726
  dispatch(setPackagingFlightResults(packageFlightSearchResults));
47946
- firstResult = lodash.first(packageFlightSearchResults);
47947
- if (firstResult) {
47948
- setSelectedOutwardKey(getFlightKey(firstResult.outward.segments));
47949
- setSelectedReturnKey(getFlightKey(firstResult.return.segments));
48727
+ initialFilteredResults = applyFiltersToPackageFlightResults(packageFlightSearchResults, filters, null);
48728
+ dispatch(setFilteredPackagingFlightResults(initialFilteredResults));
48729
+ if (initialFilteredResults.length > 0) {
48730
+ firstResult = lodash.first(packageFlightSearchResults);
48731
+ if (firstResult) {
48732
+ dispatch(setSelectedOutwardKey(getFlightKey(firstResult.outward.segments)));
48733
+ dispatch(setSelectedReturnKey(getFlightKey(firstResult.return.segments)));
48734
+ }
47950
48735
  }
47951
48736
  dispatch(setFlightsLoading(false));
47952
48737
  return [3 /*break*/, 3];
47953
48738
  case 2:
47954
- err_4 = _a.sent();
48739
+ err_4 = _b.sent();
47955
48740
  console.error('FlightSearch failed', err_4);
47956
48741
  dispatch(setFlightsLoading(false));
47957
48742
  return [3 /*break*/, 3];
@@ -48173,6 +48958,7 @@ var SearchResultsContainer = function () {
48173
48958
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour
48174
48959
  ) {
48175
48960
  handleFlyInToggle(true);
48961
+ dispatch(setFlyInType('acco-details'));
48176
48962
  }
48177
48963
  _f.label = 1;
48178
48964
  case 1:
@@ -48264,13 +49050,15 @@ var SearchResultsContainer = function () {
48264
49050
  if (selectedPackagingAccoResultCode) {
48265
49051
  fetchPackagingAccoSearchDetails();
48266
49052
  }
48267
- dispatch(setAccommodationFlyInStep('details'));
48268
49053
  },
48269
49054
  [selectedSearchResult, selectedPackagingAccoResultCode]
48270
49055
  );
48271
49056
  React.useEffect(
48272
49057
  function () {
48273
- if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
49058
+ if (
49059
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
49060
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight
49061
+ ) {
48274
49062
  var filteredPackageAccoResults = applyFiltersToPackageAccoResults(packagingAccoResults, filters, selectedSortType);
48275
49063
  dispatch(setFilteredPackagingAccoResults(filteredPackageAccoResults));
48276
49064
  } else {
@@ -48280,6 +49068,15 @@ var SearchResultsContainer = function () {
48280
49068
  },
48281
49069
  [filters, results, packagingAccoResults, selectedSortType]
48282
49070
  );
49071
+ React.useEffect(
49072
+ function () {
49073
+ if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight) {
49074
+ var filteredPackageFlightResults = applyFiltersToPackageFlightResults(packagingFlightResults, flightFilters, selectedFlightSortType);
49075
+ dispatch(setFilteredPackagingFlightResults(filteredPackageFlightResults));
49076
+ }
49077
+ },
49078
+ [flightFilters, packagingFlightResults, selectedFlightSortType]
49079
+ );
48283
49080
  React.useEffect(
48284
49081
  function () {
48285
49082
  setInitialFiltersSet(false);
@@ -48354,7 +49151,6 @@ var SearchResultsContainer = function () {
48354
49151
  return [4 /*yield*/, build.getItinerary(config, request)];
48355
49152
  case 2:
48356
49153
  itinerary_1 = _c.sent();
48357
- console.log('Fetched itinerary', itinerary_1);
48358
49154
  dispatch(setItinerary(itinerary_1));
48359
49155
  setItineraryIsLoading(false);
48360
49156
  return [3 /*break*/, 4];
@@ -48375,37 +49171,22 @@ var SearchResultsContainer = function () {
48375
49171
  [editablePackagingEntry]
48376
49172
  );
48377
49173
  // Flight selection
48378
- var _o = React.useState(null),
48379
- selectedOutwardKey = _o[0],
48380
- setSelectedOutwardKey = _o[1];
48381
- var _p = React.useState(null),
48382
- selectedReturnKey = _p[0],
48383
- setSelectedReturnKey = _p[1];
48384
- var uniqueOutwardFlights = React__default['default'].useMemo(
48385
- function () {
48386
- var map = new Map();
48387
- packagingFlightResults.forEach(function (flight) {
48388
- var key = getFlightKey(flight.outward.segments);
48389
- if (!map.has(key)) {
48390
- map.set(key, flight);
48391
- }
48392
- });
48393
- return Array.from(map.values());
48394
- },
48395
- [packagingFlightResults]
48396
- );
48397
- var _q = React.useState([]),
48398
- uniqueReturnFlights = _q[0],
48399
- setUniqueReturnFlights = _q[1];
49174
+ // const [selectedOutwardKey, setSelectedOutwardKey] = useState<string | null>(null);
49175
+ // const [selectedReturnKey, setSelectedReturnKey] = useState<string | null>(null);
49176
+ var selectedOutwardKey = reactRedux.useSelector(selectSelectedOutwardKey);
49177
+ var selectedReturnKey = reactRedux.useSelector(selectSelectedReturnKey);
49178
+ var uniqueOutwardFlights = reactRedux.useSelector(selectUniqueOutwardFlights);
49179
+ var uniqueReturnFlights = reactRedux.useSelector(selectUniqueReturnFlights);
49180
+ var selectedOutward = reactRedux.useSelector(selectSelectedOutward);
49181
+ var selectedReturn = reactRedux.useSelector(selectSelectedReturn);
49182
+ var selectedCombinationFlight = reactRedux.useSelector(selectSelectedCombinationFlight);
48400
49183
  React.useEffect(
48401
49184
  function () {
48402
49185
  var _a;
48403
49186
  if (!selectedOutwardKey) {
48404
- setUniqueReturnFlights([]);
48405
- setSelectedReturnKey(null);
49187
+ dispatch(setSelectedReturnKey(null));
48406
49188
  return;
48407
49189
  }
48408
- // Filter combinations that match selected outward fare
48409
49190
  var matchingCombinations = packagingFlightResults.filter(function (flight) {
48410
49191
  return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48411
49192
  });
@@ -48417,44 +49198,26 @@ var SearchResultsContainer = function () {
48417
49198
  }
48418
49199
  });
48419
49200
  var returns = Array.from(returnMap.values());
48420
- setUniqueReturnFlights(returns);
48421
- var firstReturnKey = returns.length > 0 ? getFlightKey((_a = lodash.first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments) : null;
48422
- if (firstReturnKey) {
48423
- setSelectedReturnKey(firstReturnKey);
49201
+ var segments = (_a = lodash.first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments;
49202
+ var firstReturnKey = returns.length > 0 && segments ? getFlightKey(segments) : null;
49203
+ if (
49204
+ !returns.some(function (x) {
49205
+ return getFlightKey(x.return.segments) === selectedReturnKey;
49206
+ })
49207
+ ) {
49208
+ dispatch(setSelectedReturnKey(firstReturnKey));
48424
49209
  }
48425
49210
  },
48426
- [selectedOutwardKey, packagingFlightResults]
48427
- );
48428
- var selectedOutward = React__default['default'].useMemo(
48429
- function () {
48430
- if (!selectedOutwardKey) return null;
48431
- return (
48432
- packagingFlightResults.find(function (flight) {
48433
- return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48434
- }) || null
48435
- );
48436
- },
48437
- [packagingFlightResults, selectedOutwardKey]
48438
- );
48439
- var selectedReturn = React__default['default'].useMemo(
48440
- function () {
48441
- if (!selectedReturnKey) return null;
48442
- return (
48443
- packagingFlightResults.find(function (flight) {
48444
- return getFlightKey(flight.return.segments) === selectedReturnKey;
48445
- }) || null
48446
- );
48447
- },
48448
- [packagingFlightResults, selectedReturnKey]
49211
+ [selectedOutwardKey, packagingFlightResults, selectedReturnKey, dispatch]
48449
49212
  );
48450
- var selectedCombinationFlight = React__default['default'].useMemo(
49213
+ var visibleOutwardFlights = React__default['default'].useMemo(
48451
49214
  function () {
48452
- if (!selectedOutwardKey || !selectedReturnKey) return undefined;
48453
- return packagingFlightResults.find(function (flight) {
48454
- return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
49215
+ var withoutSelected = uniqueOutwardFlights.filter(function (x) {
49216
+ return getFlightKey(x.outward.segments) !== selectedOutwardKey;
48455
49217
  });
49218
+ return withoutSelected.slice(0, 3);
48456
49219
  },
48457
- [packagingFlightResults, selectedOutwardKey, selectedReturnKey]
49220
+ [uniqueOutwardFlights, selectedOutwardKey]
48458
49221
  );
48459
49222
  // TODO: get details for selected combination flight and show in fly-in
48460
49223
  // useEffect(() => {
@@ -48463,6 +49226,7 @@ var SearchResultsContainer = function () {
48463
49226
  // // onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
48464
49227
  // dispatch(setFlyInIsOpen(true));
48465
49228
  // }, [selectedCombinationFlight, dispatch]);
49229
+ // Build packagingEntry
48466
49230
  React.useEffect(
48467
49231
  function () {
48468
49232
  var _a, _b, _c, _d;
@@ -48761,12 +49525,10 @@ var SearchResultsContainer = function () {
48761
49525
  lines: []
48762
49526
  };
48763
49527
  };
48764
- var visibleOutwardFlights = React__default['default'].useMemo(
48765
- function () {
48766
- return showAllOutwardFlights ? uniqueOutwardFlights : uniqueOutwardFlights.slice(0, 3);
48767
- },
48768
- [showAllOutwardFlights, uniqueOutwardFlights]
48769
- );
49528
+ var handleShowMoreFlights = function (flyInType) {
49529
+ dispatch(setFlyInType(flyInType));
49530
+ dispatch(setFlyInIsOpen(true));
49531
+ };
48770
49532
  return React__default['default'].createElement(
48771
49533
  'div',
48772
49534
  { id: 'tide-booking', className: 'search__bg' },
@@ -48783,7 +49545,6 @@ var SearchResultsContainer = function () {
48783
49545
  { tideConnection: context.tideConnection },
48784
49546
  React__default['default'].createElement(FlightResultsContainer, { isMobile: isMobile }),
48785
49547
  React__default['default'].createElement(FlyIn, {
48786
- title: 'Select your fare',
48787
49548
  srpType: context.searchConfiguration.qsmType,
48788
49549
  isOpen: flyInIsOpen,
48789
49550
  setIsOpen: handleFlyInToggle,
@@ -48810,7 +49571,13 @@ var SearchResultsContainer = function () {
48810
49571
  return setFiltersOpen(!filtersOpen);
48811
49572
  },
48812
49573
  // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
48813
- isLoading: isLoading
49574
+ isLoading: isLoading,
49575
+ setFilters: function (filters) {
49576
+ return dispatch(setFilters(filters));
49577
+ },
49578
+ resetFilters: function (filters) {
49579
+ return dispatch(resetFilters(filters));
49580
+ }
48814
49581
  }),
48815
49582
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48816
49583
  React__default['default'].createElement(Itinerary, {
@@ -48877,53 +49644,53 @@ var SearchResultsContainer = function () {
48877
49644
  }
48878
49645
  })
48879
49646
  ),
48880
- React__default['default'].createElement(
48881
- 'div',
48882
- { className: 'search__result-row' },
49647
+ context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
48883
49648
  React__default['default'].createElement(
48884
- 'span',
48885
- { className: 'search__result-row-text' },
48886
- !isLoading &&
48887
- context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
49649
+ 'div',
49650
+ { className: 'search__result-row' },
49651
+ React__default['default'].createElement(
49652
+ 'span',
49653
+ { className: 'search__result-row-text' },
49654
+ !isLoading &&
49655
+ React__default['default'].createElement(
49656
+ React__default['default'].Fragment,
49657
+ null,
49658
+ context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
49659
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
49660
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
49661
+ context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
49662
+ (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
49663
+ filteredResults.length,
49664
+ '\u00A0',
49665
+ translations.SRP.TOTAL_RESULTS_LABEL
49666
+ )
49667
+ ),
49668
+ !context.packagingEntry &&
49669
+ !isMobile &&
49670
+ sortByTypes &&
49671
+ sortByTypes.length > 0 &&
48888
49672
  React__default['default'].createElement(
48889
- React__default['default'].Fragment,
48890
- null,
48891
- context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
48892
- (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
48893
- (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
48894
- context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
48895
- (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
48896
- filteredResults.length,
48897
- '\u00A0',
48898
- translations.SRP.TOTAL_RESULTS_LABEL
49673
+ 'div',
49674
+ { className: 'search__result-row-filter' },
49675
+ React__default['default'].createElement(ItemPicker, {
49676
+ items: sortByTypes,
49677
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
49678
+ selectedSortByType: selectedSortType,
49679
+ label: translations.SRP.SORTBY,
49680
+ placeholder: translations.SRP.SORTBY,
49681
+ classModifier: 'travel-class-picker__items',
49682
+ valueFormatter: function (value, direction) {
49683
+ return getSortingName(
49684
+ translations,
49685
+ findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
49686
+ );
49687
+ },
49688
+ onPick: function (newSortKey, direction) {
49689
+ return handleSortChange(newSortKey, direction);
49690
+ }
49691
+ })
48899
49692
  )
48900
49693
  ),
48901
- !context.packagingEntry &&
48902
- !isMobile &&
48903
- sortByTypes &&
48904
- sortByTypes.length > 0 &&
48905
- React__default['default'].createElement(
48906
- 'div',
48907
- { className: 'search__result-row-filter' },
48908
- React__default['default'].createElement(ItemPicker, {
48909
- items: sortByTypes,
48910
- selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
48911
- selectedSortByType: selectedSortType,
48912
- label: translations.SRP.SORTBY,
48913
- placeholder: translations.SRP.SORTBY,
48914
- classModifier: 'travel-class-picker__items',
48915
- valueFormatter: function (value, direction) {
48916
- return getSortingName(
48917
- translations,
48918
- findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
48919
- );
48920
- },
48921
- onPick: function (newSortKey, direction) {
48922
- return handleSortChange(newSortKey, direction);
48923
- }
48924
- })
48925
- )
48926
- ),
48927
49694
  React__default['default'].createElement(
48928
49695
  'div',
48929
49696
  { className: 'search__results__wrapper' },
@@ -48977,7 +49744,7 @@ var SearchResultsContainer = function () {
48977
49744
  item: selectedOutward.outward,
48978
49745
  guid: selectedOutward.outwardGuid,
48979
49746
  onSelect: function () {
48980
- return setSelectedOutwardKey(null);
49747
+ return dispatch(setSelectedOutwardKey(null));
48981
49748
  },
48982
49749
  selectedGuid: selectedOutward.outwardGuid,
48983
49750
  isOutward: true,
@@ -48989,7 +49756,7 @@ var SearchResultsContainer = function () {
48989
49756
  key: 'flight-'.concat(result.outwardGuid),
48990
49757
  item: result.outward,
48991
49758
  onSelect: function () {
48992
- return setSelectedOutwardKey(getFlightKey(result.outward.segments));
49759
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
48993
49760
  },
48994
49761
  guid: result.outwardGuid,
48995
49762
  isOutward: true,
@@ -49008,10 +49775,10 @@ var SearchResultsContainer = function () {
49008
49775
  {
49009
49776
  className: 'cta cta--secondary',
49010
49777
  onClick: function () {
49011
- return setShowAllOutwardFlights(!showAllOutwardFlights);
49778
+ return handleShowMoreFlights('flight-outward-results');
49012
49779
  }
49013
49780
  },
49014
- showAllOutwardFlights ? translations.SRP.SHOW_LESS : translations.SRP.SHOW_MORE
49781
+ translations.SRP.SHOW_MORE
49015
49782
  )
49016
49783
  )
49017
49784
  )
@@ -49066,7 +49833,7 @@ var SearchResultsContainer = function () {
49066
49833
  key: 'flight-'.concat(result.outwardGuid),
49067
49834
  item: result.return,
49068
49835
  onSelect: function () {
49069
- return setSelectedReturnKey(getFlightKey(result.return.segments));
49836
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
49070
49837
  },
49071
49838
  guid: result.outwardGuid,
49072
49839
  isOutward: false,
@@ -49083,7 +49850,6 @@ var SearchResultsContainer = function () {
49083
49850
  )
49084
49851
  ),
49085
49852
  React__default['default'].createElement(FlyIn, {
49086
- title: ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION),
49087
49853
  srpType: context.searchConfiguration.qsmType,
49088
49854
  isOpen: flyInIsOpen,
49089
49855
  setIsOpen: handleFlyInToggle,
@@ -49094,8 +49860,9 @@ var SearchResultsContainer = function () {
49094
49860
  return (panelRef.current = el);
49095
49861
  },
49096
49862
  detailsLoading: detailsIsLoading,
49097
- accommodationStep: accommodationFlyInStep,
49098
- isPackageEditFlow: !!context.packagingEntry
49863
+ flyInType: flyInType,
49864
+ isPackageEditFlow: !!context.packagingEntry,
49865
+ sortByTypes: sortByTypes
49099
49866
  })
49100
49867
  )
49101
49868
  )