@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
@@ -21721,7 +21721,11 @@ var FlightOptionsForm = function () {
21721
21721
  setFlightGroups = _f[1];
21722
21722
  var handleSubmit = function (e) {
21723
21723
  if (settings.skipRouter) {
21724
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21724
+ if (settings.roomOptions.isHidden) {
21725
+ dispatch(setCurrentStep(OPTIONS_FORM_STEP));
21726
+ } else {
21727
+ dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21728
+ }
21725
21729
  } else {
21726
21730
  if (settings.roomOptions.isHidden) {
21727
21731
  navigate(
@@ -33716,21 +33720,28 @@ var initialState$1 = {
33716
33720
  packagingAccoSearchDetails: [],
33717
33721
  selectedPackagingAccoResultCode: null,
33718
33722
  packagingFlightResults: [],
33723
+ filteredPackagingFlightResults: [],
33719
33724
  selectedPackagingFlight: null,
33725
+ selectedOutwardKey: null,
33726
+ selectedReturnKey: null,
33720
33727
  selectedFlight: null,
33721
33728
  selectedFlightDetails: null,
33722
33729
  bookingPackageDetails: null,
33730
+ priceDetails: null,
33723
33731
  isLoading: false,
33724
33732
  flightsLoading: false,
33725
- filters: [],
33726
33733
  selectedSortType: null,
33734
+ selectedFlightSortType: null,
33735
+ initialFilters: [],
33736
+ filters: [],
33737
+ initialFlightFilters: [],
33738
+ flightFilters: [],
33727
33739
  activeTab: 'compact',
33728
33740
  currentPage: 1,
33741
+ transactionId: null,
33729
33742
  flyInIsOpen: false,
33743
+ flyInType: null,
33730
33744
  editablePackagingEntry: null,
33731
- transactionId: null,
33732
- accommodationFlyInStep: 'details',
33733
- priceDetails: null,
33734
33745
  itinerary: null
33735
33746
  };
33736
33747
  var searchResultsSlice = createSlice({
@@ -33761,6 +33772,9 @@ var searchResultsSlice = createSlice({
33761
33772
  setPackagingFlightResults: function (state, action) {
33762
33773
  state.packagingFlightResults = action.payload;
33763
33774
  },
33775
+ setFilteredPackagingFlightResults: function (state, action) {
33776
+ state.filteredPackagingFlightResults = action.payload;
33777
+ },
33764
33778
  setSelectedPackagingFlight: function (state, action) {
33765
33779
  state.selectedPackagingFlight = action.payload;
33766
33780
  },
@@ -33789,6 +33803,9 @@ var searchResultsSlice = createSlice({
33789
33803
  setFlightsLoading: function (state, action) {
33790
33804
  state.flightsLoading = action.payload;
33791
33805
  },
33806
+ setInitialFilters: function (state, action) {
33807
+ state.initialFilters = action.payload;
33808
+ },
33792
33809
  setFilters: function (state, action) {
33793
33810
  var updatedFilters = action.payload;
33794
33811
  updatedFilters.forEach(function (updatedFilter) {
@@ -33805,9 +33822,31 @@ var searchResultsSlice = createSlice({
33805
33822
  resetFilters: function (state, action) {
33806
33823
  state.filters = action.payload;
33807
33824
  },
33825
+ setInitialFlightFilters: function (state, action) {
33826
+ state.initialFlightFilters = action.payload;
33827
+ },
33828
+ setFlightFilters: function (state, action) {
33829
+ var updatedFilters = action.payload;
33830
+ updatedFilters.forEach(function (updatedFilter) {
33831
+ var existingIndex = state.flightFilters.findIndex(function (f) {
33832
+ return f.property === updatedFilter.property;
33833
+ });
33834
+ if (existingIndex !== -1) {
33835
+ state.flightFilters[existingIndex] = updatedFilter;
33836
+ } else {
33837
+ state.flightFilters.push(updatedFilter); // Optional: Add new filters if not present
33838
+ }
33839
+ });
33840
+ },
33841
+ resetFlightFilters: function (state, action) {
33842
+ state.flightFilters = action.payload;
33843
+ },
33808
33844
  setSortType: function (state, action) {
33809
33845
  state.selectedSortType = action.payload;
33810
33846
  },
33847
+ setFlightSortType: function (state, action) {
33848
+ state.selectedFlightSortType = action.payload;
33849
+ },
33811
33850
  setActiveTab: function (state, action) {
33812
33851
  state.activeTab = action.payload;
33813
33852
  },
@@ -33831,14 +33870,24 @@ var searchResultsSlice = createSlice({
33831
33870
  setTransactionId: function (state, action) {
33832
33871
  state.transactionId = action.payload;
33833
33872
  },
33834
- setAccommodationFlyInStep: function (state, action) {
33835
- state.accommodationFlyInStep = action.payload;
33873
+ setFlyInType: function (state, action) {
33874
+ state.flyInType = action.payload;
33836
33875
  },
33837
33876
  setPriceDetails: function (state, action) {
33838
33877
  state.priceDetails = action.payload;
33839
33878
  },
33840
33879
  setItinerary: function (state, action) {
33841
33880
  state.itinerary = action.payload;
33881
+ },
33882
+ setSelectedOutwardKey: function (state, action) {
33883
+ state.selectedOutwardKey = action.payload;
33884
+ },
33885
+ setSelectedReturnKey: function (state, action) {
33886
+ state.selectedReturnKey = action.payload;
33887
+ },
33888
+ resetFlightSelection: function (state) {
33889
+ state.selectedOutwardKey = null;
33890
+ state.selectedReturnKey = null;
33842
33891
  }
33843
33892
  }
33844
33893
  });
@@ -33847,6 +33896,7 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33847
33896
  setSelectedSearchResult = _a.setSelectedSearchResult,
33848
33897
  setPackagingAccoResults = _a.setPackagingAccoResults,
33849
33898
  setFilteredPackagingAccoResults = _a.setFilteredPackagingAccoResults,
33899
+ setFilteredPackagingFlightResults = _a.setFilteredPackagingFlightResults,
33850
33900
  setPackagingAccoSearchDetails = _a.setPackagingAccoSearchDetails,
33851
33901
  setSelectedPackagingAccoResult = _a.setSelectedPackagingAccoResult,
33852
33902
  setPackagingFlightResults = _a.setPackagingFlightResults,
@@ -33857,18 +33907,26 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33857
33907
  _a.selectFlight;
33858
33908
  var setIsLoading = _a.setIsLoading,
33859
33909
  setFlightsLoading = _a.setFlightsLoading,
33910
+ setInitialFilters = _a.setInitialFilters,
33860
33911
  setFilters = _a.setFilters,
33861
33912
  resetFilters = _a.resetFilters,
33913
+ setInitialFlightFilters = _a.setInitialFlightFilters,
33914
+ setFlightFilters = _a.setFlightFilters,
33915
+ resetFlightFilters = _a.resetFlightFilters,
33862
33916
  setSortType = _a.setSortType,
33917
+ setFlightSortType = _a.setFlightSortType,
33863
33918
  setActiveTab = _a.setActiveTab;
33864
33919
  _a.setCurrentPage;
33865
33920
  _a.resetSearchState;
33866
33921
  var setFlyInIsOpen = _a.setFlyInIsOpen,
33867
33922
  setEditablePackagingEntry = _a.setEditablePackagingEntry,
33868
33923
  setTransactionId = _a.setTransactionId,
33869
- setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
33924
+ setFlyInType = _a.setFlyInType,
33870
33925
  setPriceDetails = _a.setPriceDetails,
33871
- setItinerary = _a.setItinerary;
33926
+ setItinerary = _a.setItinerary,
33927
+ setSelectedOutwardKey = _a.setSelectedOutwardKey,
33928
+ setSelectedReturnKey = _a.setSelectedReturnKey;
33929
+ _a.resetFlightSelection;
33872
33930
  var searchResultsReducer = searchResultsSlice.reducer;
33873
33931
 
33874
33932
  var ItemPicker = function (_a) {
@@ -43462,7 +43520,7 @@ var mapPackagingAccoResult = function (searchResult, cmsItem, languageCode, tran
43462
43520
  contents: searchResult.contents
43463
43521
  });
43464
43522
  };
43465
- var renderHotelResults = function (results, context, activeTab, translations) {
43523
+ var renderHotelResults = function (results, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn) {
43466
43524
  var renderedResults = results.map(function (result, index) {
43467
43525
  var _a;
43468
43526
  var key = ''.concat((_a = result.id) !== null && _a !== void 0 ? _a : result.code, '-').concat(index);
@@ -43477,13 +43535,18 @@ var renderHotelResults = function (results, context, activeTab, translations) {
43477
43535
  return React__default.createElement(
43478
43536
  'div',
43479
43537
  { className: 'search__results__cards '.concat(activeTab ? 'search__results__cards--'.concat(activeTab) : '') },
43538
+ selectedPackagingAccoResult &&
43539
+ !isFlyIn &&
43540
+ React__default.createElement(HotelCard, { key: selectedPackagingAccoResult.code, result: selectedPackagingAccoResult, translations: translations }),
43480
43541
  renderedResults
43481
43542
  );
43482
43543
  };
43483
43544
  var HotelAccommodationResults = function (_a) {
43484
43545
  var _b, _c;
43485
- var isLoading = _a.isLoading;
43546
+ var isLoading = _a.isLoading,
43547
+ isFlyIn = _a.isFlyIn;
43486
43548
  var context = useContext(SearchResultsConfigurationContext);
43549
+ var dispatch = useDispatch();
43487
43550
  if (!context) {
43488
43551
  return null;
43489
43552
  }
@@ -43493,7 +43556,10 @@ var HotelAccommodationResults = function (_a) {
43493
43556
  }),
43494
43557
  filteredResults = _d.filteredResults,
43495
43558
  filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
43559
+ packagingAccoResults = _d.packagingAccoResults,
43496
43560
  activeTab = _d.activeTab;
43561
+ _d.flyInIsOpen;
43562
+ var selectedPackagingAccoResultCode = _d.selectedPackagingAccoResultCode;
43497
43563
  var cmsMap = React__default.useMemo(
43498
43564
  function () {
43499
43565
  var _a;
@@ -43556,203 +43622,1180 @@ var HotelAccommodationResults = function (_a) {
43556
43622
  : firstPackagingResult.fromDate;
43557
43623
  var firstResultDay = firstResultDate ? format$1(parseISO(firstResultDate), 'd') : null;
43558
43624
  var firstResultMonth = firstResultDate ? format$1(parseISO(firstResultDate), 'MMM') : null;
43625
+ var selectedPackagingAccoResult = React__default.useMemo(
43626
+ function () {
43627
+ var selectedResult = packagingAccoResults.find(function (result) {
43628
+ return result.code === selectedPackagingAccoResultCode;
43629
+ });
43630
+ if (selectedResult) {
43631
+ return mapPackagingAccoResult(selectedResult, cmsMap.get(selectedResult.code), context.languageCode, translations);
43632
+ }
43633
+ },
43634
+ [packagingAccoResults, selectedPackagingAccoResultCode, cmsMap, context.languageCode, translations]
43635
+ );
43636
+ var visibleResults = React__default.useMemo(
43637
+ function () {
43638
+ var shouldShowAll =
43639
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) !== build.PortalQsmType.AccommodationAndFlight || isFlyIn;
43640
+ if (shouldShowAll) {
43641
+ return mappedResults;
43642
+ }
43643
+ if (selectedPackagingAccoResult) {
43644
+ return mappedResults
43645
+ .filter(function (result) {
43646
+ return result.code !== selectedPackagingAccoResult.code;
43647
+ })
43648
+ .slice(0, 2);
43649
+ }
43650
+ return mappedResults.slice(0, 3);
43651
+ },
43652
+ [context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType, mappedResults, isFlyIn, selectedPackagingAccoResult]
43653
+ );
43654
+ var handleShowMoreHotels = function (flyInType) {
43655
+ dispatch(setFlyInType(flyInType));
43656
+ dispatch(setFlyInIsOpen(true));
43657
+ };
43559
43658
  return React__default.createElement(
43560
43659
  React__default.Fragment,
43561
43660
  null,
43562
- React__default.createElement(
43563
- 'div',
43564
- { className: 'search__results__label search__results__label--secondary' },
43661
+ !isFlyIn &&
43565
43662
  React__default.createElement(
43566
43663
  'div',
43567
- { className: 'search__results__label__date' },
43568
- firstResultDay && firstResultMonth
43569
- ? React__default.createElement(
43570
- React__default.Fragment,
43571
- null,
43572
- React__default.createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43573
- React__default.createElement('p', null, firstResultMonth)
43574
- )
43575
- : React__default.createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43664
+ { className: 'search__results__label search__results__label--secondary' },
43665
+ React__default.createElement(
43666
+ 'div',
43667
+ { className: 'search__results__label__date' },
43668
+ firstResultDay && firstResultMonth
43669
+ ? React__default.createElement(
43670
+ React__default.Fragment,
43671
+ null,
43672
+ React__default.createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43673
+ React__default.createElement('p', null, firstResultMonth)
43674
+ )
43675
+ : React__default.createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43676
+ ),
43677
+ React__default.createElement(
43678
+ 'div',
43679
+ { className: 'search__results__label__text' },
43680
+ React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, translations.SRP.ACCOMMODATION))
43681
+ )
43576
43682
  ),
43577
- React__default.createElement(
43578
- 'div',
43579
- { className: 'search__results__label__text' },
43580
- React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, translations.SRP.ACCOMMODATION))
43581
- )
43582
- ),
43583
43683
  isLoading
43584
43684
  ? React__default.createElement(
43585
43685
  React__default.Fragment,
43586
43686
  null,
43587
43687
  (_c = context.customSpinner) !== null && _c !== void 0 ? _c : React__default.createElement(Spinner, null)
43588
43688
  )
43589
- : renderHotelResults(mappedResults, context, activeTab, translations),
43590
- mappedResults.length === 0 && !isLoading && React__default.createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS)
43591
- );
43592
- };
43593
-
43594
- var FlyIn = function (_a) {
43595
- var title = _a.title,
43596
- srpType = _a.srpType,
43597
- isOpen = _a.isOpen,
43598
- setIsOpen = _a.setIsOpen,
43599
- _b = _a.className,
43600
- className = _b === void 0 ? '' : _b,
43601
- onPanelRef = _a.onPanelRef,
43602
- detailsLoading = _a.detailsLoading,
43603
- accommodationStep = _a.accommodationStep,
43604
- isPackageEditFlow = _a.isPackageEditFlow,
43605
- handleConfirm = _a.handleConfirm;
43606
- var dispatch = useDispatch();
43607
- var onCancelSearch = useFlightSearch().onCancelSearch;
43608
- var panelRef = useRef(null);
43609
- // expose DOM node if needed
43610
- useEffect(
43611
- function () {
43612
- onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
43613
- return function () {
43614
- return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
43615
- };
43616
- },
43617
- [onPanelRef]
43618
- );
43619
- useEffect(
43620
- function () {
43621
- // click outside detection
43622
- var handleClickOutside = function (event) {
43623
- if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
43624
- handleClose();
43625
- }
43626
- };
43627
- document.addEventListener('mousedown', handleClickOutside);
43628
- return function () {
43629
- return document.removeEventListener('mousedown', handleClickOutside);
43630
- };
43631
- },
43632
- [isOpen, setIsOpen]
43633
- );
43634
- // body scroll lock
43635
- useEffect(
43636
- function () {
43637
- document.body.style.overflow = isOpen ? 'hidden' : '';
43638
- return function () {
43639
- document.body.style.overflow = '';
43640
- };
43641
- },
43642
- [isOpen]
43643
- );
43644
- var handleClose = function () {
43645
- if (isOpen && panelRef.current) {
43646
- if (srpType === build.PortalQsmType.Flight) {
43647
- dispatch(setSelectedFlight(null));
43648
- dispatch(setSelectedFlightDetails(null));
43649
- onCancelSearch();
43650
- } else {
43651
- dispatch(setSelectedSearchResult(null));
43652
- dispatch(setSelectedPackagingAccoResult(null));
43653
- }
43654
- dispatch(setAccommodationFlyInStep('details'));
43655
- setIsOpen(false);
43656
- }
43657
- };
43658
- var handleGoBack = function () {
43659
- dispatch(setAccommodationFlyInStep('results'));
43660
- };
43661
- return React__default.createElement(
43662
- 'div',
43663
- {
43664
- className: 'flyin '
43665
- .concat(isOpen ? 'flyin--active' : '', ' ')
43666
- .concat(className, ' ')
43667
- .concat(isPackageEditFlow ? 'flyin--large' : '')
43668
- },
43669
- React__default.createElement(
43670
- 'div',
43671
- { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
43689
+ : renderHotelResults(visibleResults, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn),
43690
+ packagingAccoResults.length > 3 &&
43691
+ !isFlyIn &&
43672
43692
  React__default.createElement(
43673
43693
  'div',
43674
- { className: 'flyin__content' },
43694
+ { className: 'search__results__cards__actions' },
43675
43695
  React__default.createElement(
43676
- 'div',
43677
- { className: 'flyin__content-title-row' },
43678
- React__default.createElement('h3', { className: 'flyin__content-title' }, title),
43679
- React__default.createElement(
43680
- 'span',
43681
- {
43682
- className: 'flyin__close',
43683
- onClick: function () {
43684
- return handleClose();
43685
- }
43686
- },
43687
- React__default.createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
43688
- )
43689
- ),
43690
- isPackageEditFlow &&
43691
- accommodationStep === 'details' &&
43692
- React__default.createElement(
43693
- 'div',
43694
- { className: 'flyin__content-title-row' },
43695
- React__default.createElement(
43696
- 'div',
43697
- { onClick: handleGoBack, className: 'flyin__content-title__back' },
43698
- React__default.createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
43699
- 'Go Back'
43700
- )
43701
- )
43696
+ 'button',
43697
+ {
43698
+ className: 'cta cta--secondary',
43699
+ onClick: function () {
43700
+ return handleShowMoreHotels('acco-results');
43701
+ }
43702
+ },
43703
+ translations.SRP.SHOW_MORE
43704
+ )
43702
43705
  ),
43703
- srpType === build.PortalQsmType.Flight && React__default.createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
43704
- (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43705
- accommodationStep === 'results' &&
43706
- React__default.createElement(
43707
- 'div',
43708
- { className: 'flyin__content' },
43709
- React__default.createElement(HotelAccommodationResults, { isLoading: detailsLoading })
43710
- ),
43711
- (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43712
- accommodationStep === 'details' &&
43713
- React__default.createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
43714
- srpType === build.PortalQsmType.GroupTour &&
43715
- React__default.createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
43716
- )
43706
+ mappedResults.length === 0 && !isLoading && React__default.createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS)
43717
43707
  );
43718
43708
  };
43719
43709
 
43720
- var RoundTripResults = function () {
43721
- var activeTab = useSelector(function (state) {
43722
- return state.searchResults;
43723
- }).activeTab;
43724
- var dispatch = useDispatch();
43725
- useEffect(
43726
- function () {
43727
- if (activeTab === 'compact') {
43728
- dispatch(setActiveTab('list'));
43710
+ var selectSearchResultsState = function (state) {
43711
+ return state.searchResults;
43712
+ };
43713
+ var selectPackagingFlightResults = createSelector([selectSearchResultsState], function (state) {
43714
+ return state.packagingFlightResults;
43715
+ });
43716
+ var selectFilteredPackagingFlightResults = createSelector([selectSearchResultsState], function (state) {
43717
+ return state.filteredPackagingFlightResults;
43718
+ });
43719
+ var selectSelectedOutwardKey = createSelector([selectSearchResultsState], function (state) {
43720
+ return state.selectedOutwardKey;
43721
+ });
43722
+ var selectSelectedReturnKey = createSelector([selectSearchResultsState], function (state) {
43723
+ return state.selectedReturnKey;
43724
+ });
43725
+ var selectUniqueOutwardFlights = createSelector([selectFilteredPackagingFlightResults], function (packagingFlightResults) {
43726
+ var map = new Map();
43727
+ packagingFlightResults.forEach(function (flight) {
43728
+ var key = getFlightKey(flight.outward.segments);
43729
+ if (!map.has(key)) {
43730
+ map.set(key, flight);
43731
+ }
43732
+ });
43733
+ return Array.from(map.values());
43734
+ });
43735
+ var selectUniqueReturnFlights = createSelector(
43736
+ [selectFilteredPackagingFlightResults, selectSelectedOutwardKey],
43737
+ function (packagingFlightResults, selectedOutwardKey) {
43738
+ if (!selectedOutwardKey) return [];
43739
+ var matchingCombinations = packagingFlightResults.filter(function (flight) {
43740
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
43741
+ });
43742
+ var map = new Map();
43743
+ matchingCombinations.forEach(function (flight) {
43744
+ var key = getFlightKey(flight.return.segments);
43745
+ if (!map.has(key)) {
43746
+ map.set(key, flight);
43729
43747
  }
43730
- },
43731
- [activeTab]
43732
- );
43748
+ });
43749
+ return Array.from(map.values());
43750
+ }
43751
+ );
43752
+ var selectSelectedOutward = createSelector([selectPackagingFlightResults, selectSelectedOutwardKey], function (packagingFlightResults, selectedOutwardKey) {
43753
+ var _a;
43754
+ if (!selectedOutwardKey) return null;
43755
+ return (_a = packagingFlightResults.find(function (flight) {
43756
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
43757
+ })) !== null && _a !== void 0
43758
+ ? _a
43759
+ : null;
43760
+ });
43761
+ var selectSelectedReturn = createSelector([selectPackagingFlightResults, selectSelectedReturnKey], function (packagingFlightResults, selectedReturnKey) {
43762
+ var _a;
43763
+ if (!selectedReturnKey) return null;
43764
+ return (_a = packagingFlightResults.find(function (flight) {
43765
+ return getFlightKey(flight.return.segments) === selectedReturnKey;
43766
+ })) !== null && _a !== void 0
43767
+ ? _a
43768
+ : null;
43769
+ });
43770
+ var selectSelectedCombinationFlight = createSelector(
43771
+ [selectPackagingFlightResults, selectSelectedOutwardKey, selectSelectedReturnKey],
43772
+ function (packagingFlightResults, selectedOutwardKey, selectedReturnKey) {
43773
+ var _a;
43774
+ if (!selectedOutwardKey || !selectedReturnKey) return null;
43775
+ return (_a = packagingFlightResults.find(function (flight) {
43776
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
43777
+ })) !== null && _a !== void 0
43778
+ ? _a
43779
+ : null;
43780
+ }
43781
+ );
43782
+
43783
+ var IndependentFlightOption = function (_a) {
43784
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
43785
+ var item = _a.item,
43786
+ onSelect = _a.onSelect,
43787
+ guid = _a.guid,
43788
+ selectedGuid = _a.selectedGuid,
43789
+ isOutward = _a.isOutward,
43790
+ showSelectedState = _a.showSelectedState,
43791
+ currentSelectedPrice = _a.currentSelectedPrice,
43792
+ price = _a.price;
43793
+ var context = useContext(SearchResultsConfigurationContext);
43794
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
43795
+ var translations = getTranslations(language);
43796
+ var _p = useState(false),
43797
+ detailsOpen = _p[0],
43798
+ setDetailsOpen = _p[1];
43799
+ var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
43733
43800
  return React__default.createElement(
43734
43801
  'div',
43735
- { className: 'search__results__cards search__results__cards--'.concat(activeTab) },
43802
+ { className: 'search__result-card', key: 'flight-'.concat(item.code) },
43736
43803
  React__default.createElement(
43737
43804
  'div',
43738
- { className: 'search__result-card' },
43805
+ { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
43739
43806
  React__default.createElement(
43740
43807
  'div',
43741
- { className: 'search__result-card__allotment' },
43742
- React__default.createElement(
43743
- 'div',
43744
- { className: 'search__result-card__allotment__img-wrapper' },
43745
- React__default.createElement('img', {
43746
- src: 'https://cdn.pixabay.com/photo/2024/05/15/12/31/lake-8763490_1280.jpg',
43747
- alt: 'river',
43748
- className: 'search__result-card__allotment__img'
43749
- })
43750
- ),
43808
+ { className: 'flight__option' },
43751
43809
  React__default.createElement(
43752
43810
  'div',
43753
- { className: 'search__result-card__allotment__title__wrapper' },
43811
+ { className: 'flight__content' },
43754
43812
  React__default.createElement(
43755
- 'h3',
43813
+ 'div',
43814
+ { className: 'flight__flights' },
43815
+ React__default.createElement(
43816
+ 'div',
43817
+ { className: 'flight__flight' },
43818
+ React__default.createElement(
43819
+ 'div',
43820
+ { className: 'flight__flight__header' },
43821
+ React__default.createElement('div', { className: 'flight__status__container' }),
43822
+ React__default.createElement(
43823
+ 'div',
43824
+ { className: 'flight__price' },
43825
+ price != null &&
43826
+ price > 0 &&
43827
+ (isOutward
43828
+ ? React__default.createElement(
43829
+ 'span',
43830
+ { className: 'price' },
43831
+ translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
43832
+ '\u00A0',
43833
+ formatPrice$2(
43834
+ price,
43835
+ 'EUR',
43836
+ (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
43837
+ )
43838
+ )
43839
+ : priceDifference != null &&
43840
+ Math.abs(priceDifference) > 0 &&
43841
+ React__default.createElement(
43842
+ 'span',
43843
+ { className: 'price' },
43844
+ priceDifference > 0 ? '+' : '-',
43845
+ '\u00A0',
43846
+ formatPrice$2(
43847
+ Math.abs(priceDifference),
43848
+ 'EUR',
43849
+ (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
43850
+ )
43851
+ )),
43852
+ React__default.createElement(
43853
+ 'button',
43854
+ {
43855
+ type: 'button',
43856
+ className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
43857
+ onClick: function () {
43858
+ return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
43859
+ }
43860
+ },
43861
+ selectedGuid === guid ? 'Selected' : 'Select'
43862
+ )
43863
+ )
43864
+ )
43865
+ ),
43866
+ React__default.createElement(
43867
+ 'div',
43868
+ { className: 'flight__flight' },
43869
+ React__default.createElement(
43870
+ 'div',
43871
+ { className: 'flight__flight__container' },
43872
+ React__default.createElement(
43873
+ 'div',
43874
+ { className: 'flight__flight__wrapper' },
43875
+ React__default.createElement(
43876
+ 'div',
43877
+ { className: 'flight__logo__wrapper' },
43878
+ React__default.createElement('img', {
43879
+ src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
43880
+ (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
43881
+ '.png?height=256'
43882
+ ),
43883
+ alt: '',
43884
+ className: 'flight__logo'
43885
+ }),
43886
+ React__default.createElement('span', null, (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName)
43887
+ ),
43888
+ React__default.createElement(
43889
+ 'div',
43890
+ { className: 'flight__info' },
43891
+ React__default.createElement(
43892
+ 'div',
43893
+ { className: 'flight__info__times' },
43894
+ React__default.createElement(
43895
+ 'strong',
43896
+ null,
43897
+ timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
43898
+ ' ',
43899
+ (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
43900
+ ),
43901
+ React__default.createElement(
43902
+ 'p',
43903
+ null,
43904
+ longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
43905
+ )
43906
+ ),
43907
+ React__default.createElement(
43908
+ 'div',
43909
+ { className: 'flight__info__duration' },
43910
+ React__default.createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
43911
+ React__default.createElement(
43912
+ 'div',
43913
+ { className: 'flight__info__duration__stops' },
43914
+ React__default.createElement('div', { className: 'flight__info__duration__stop' })
43915
+ ),
43916
+ React__default.createElement(
43917
+ 'span',
43918
+ null,
43919
+ getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
43920
+ )
43921
+ ),
43922
+ React__default.createElement(
43923
+ 'div',
43924
+ { className: 'flight__info__times flight__info__times--arrival' },
43925
+ React__default.createElement(
43926
+ 'strong',
43927
+ null,
43928
+ timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
43929
+ ' ',
43930
+ (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
43931
+ ),
43932
+ React__default.createElement(
43933
+ 'p',
43934
+ null,
43935
+ longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
43936
+ )
43937
+ )
43938
+ )
43939
+ ),
43940
+ React__default.createElement(
43941
+ 'div',
43942
+ { className: 'flight__detail__btn__wrapper' },
43943
+ React__default.createElement(
43944
+ 'div',
43945
+ {
43946
+ className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
43947
+ onClick: function () {
43948
+ return setDetailsOpen(function (prev) {
43949
+ return !prev;
43950
+ });
43951
+ }
43952
+ },
43953
+ React__default.createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
43954
+ )
43955
+ )
43956
+ ),
43957
+ React__default.createElement(
43958
+ 'div',
43959
+ { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
43960
+ (_o = getFlightSegments(item)) === null || _o === void 0
43961
+ ? void 0
43962
+ : _o.map(function (segment, index) {
43963
+ return React__default.createElement(
43964
+ React__default.Fragment,
43965
+ { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
43966
+ React__default.createElement(
43967
+ 'div',
43968
+ { className: 'flight__info' },
43969
+ React__default.createElement(
43970
+ 'div',
43971
+ { className: 'flight__info__times__wrapper' },
43972
+ React__default.createElement(
43973
+ 'div',
43974
+ { className: 'flight__info__times' },
43975
+ React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
43976
+ React__default.createElement('strong', null, segment.departureAirportCode),
43977
+ React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
43978
+ ),
43979
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
43980
+ ),
43981
+ React__default.createElement(
43982
+ 'div',
43983
+ { className: 'flight__info__duration' },
43984
+ React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
43985
+ React__default.createElement('div', { className: 'flight__info__duration__stops' }),
43986
+ React__default.createElement('span', null, segment.marketingAirlineName),
43987
+ React__default.createElement('strong', null, segment.operatingFlightNumber)
43988
+ ),
43989
+ React__default.createElement(
43990
+ 'div',
43991
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
43992
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
43993
+ React__default.createElement(
43994
+ 'div',
43995
+ { className: 'flight__info__times flight__info__times--arrival' },
43996
+ React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
43997
+ React__default.createElement('strong', null, segment.arrivalAirportCode),
43998
+ React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
43999
+ )
44000
+ )
44001
+ ),
44002
+ segment.transferTimeInTicks &&
44003
+ React__default.createElement(
44004
+ 'div',
44005
+ { className: 'flight__info' },
44006
+ React__default.createElement('div', { className: 'flight__info__times' }),
44007
+ React__default.createElement(
44008
+ 'div',
44009
+ { className: 'flight__info__duration flight__info__duration--waittime' },
44010
+ React__default.createElement(
44011
+ 'div',
44012
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44013
+ React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44014
+ ),
44015
+ React__default.createElement(
44016
+ 'div',
44017
+ { className: 'flight__info__duration__stoptime' },
44018
+ React__default.createElement('span', null, 'Stop time'),
44019
+ React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44020
+ )
44021
+ ),
44022
+ React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44023
+ )
44024
+ );
44025
+ })
44026
+ )
44027
+ )
44028
+ )
44029
+ )
44030
+ )
44031
+ )
44032
+ );
44033
+ };
44034
+
44035
+ var MultiRangeFilter = function (_a) {
44036
+ var min = _a.min,
44037
+ max = _a.max,
44038
+ selectedMin = _a.selectedMin,
44039
+ selectedMax = _a.selectedMax,
44040
+ valueFormatter = _a.valueFormatter,
44041
+ onChange = _a.onChange;
44042
+ var _b = useState(false),
44043
+ isDragging = _b[0],
44044
+ setIsDragging = _b[1];
44045
+ var _c = useState(0),
44046
+ leftPercentage = _c[0],
44047
+ setLeftPercentage = _c[1];
44048
+ var _d = useState(0),
44049
+ rightPercentage = _d[0],
44050
+ setRightPercentage = _d[1];
44051
+ var _e = useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
44052
+ minVal = _e[0],
44053
+ setMinVal = _e[1];
44054
+ var _f = useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
44055
+ maxVal = _f[0],
44056
+ setMaxVal = _f[1];
44057
+ var minGap = 5;
44058
+ // Sync internal state with external selectedMin/selectedMax changes
44059
+ useEffect(
44060
+ function () {
44061
+ setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
44062
+ setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
44063
+ },
44064
+ [min, max, selectedMin, selectedMax]
44065
+ );
44066
+ // Recalculate slider track whenever values change
44067
+ useEffect(
44068
+ function () {
44069
+ var range = max - min || 1;
44070
+ var minPercent = ((minVal - min) / range) * 100;
44071
+ var maxPercent = ((maxVal - min) / range) * 100;
44072
+ setLeftPercentage(minPercent);
44073
+ setRightPercentage(100 - maxPercent);
44074
+ },
44075
+ [minVal, maxVal, min, max]
44076
+ );
44077
+ var slideMin = function (e) {
44078
+ var value = parseInt(e.target.value, 10);
44079
+ // Ensure the thumbs don’t cross and enforce minGap
44080
+ if (value <= maxVal - minGap) {
44081
+ setMinVal(value);
44082
+ }
44083
+ };
44084
+ var slideMax = function (e) {
44085
+ var value = parseInt(e.target.value, 10);
44086
+ // Ensure the thumbs don’t cross and enforce minGap
44087
+ if (value >= minVal + minGap) {
44088
+ setMaxVal(value);
44089
+ }
44090
+ };
44091
+ var startDrag = function () {
44092
+ setIsDragging(true);
44093
+ };
44094
+ var stopDrag = function () {
44095
+ setIsDragging(false);
44096
+ // Notify parent with the final values
44097
+ onChange(minVal, maxVal);
44098
+ };
44099
+ return React__default.createElement(
44100
+ 'div',
44101
+ { className: 'double-slider-box' },
44102
+ React__default.createElement(
44103
+ 'div',
44104
+ { className: 'input-box' },
44105
+ React__default.createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
44106
+ React__default.createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
44107
+ ),
44108
+ React__default.createElement(
44109
+ 'div',
44110
+ { className: 'range-slider' },
44111
+ React__default.createElement('div', {
44112
+ className: 'slider-track',
44113
+ style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
44114
+ }),
44115
+ React__default.createElement('input', {
44116
+ type: 'range',
44117
+ min: min,
44118
+ max: max,
44119
+ value: minVal,
44120
+ onChange: slideMin,
44121
+ onMouseDown: startDrag,
44122
+ onMouseUp: stopDrag,
44123
+ onTouchStart: startDrag,
44124
+ onTouchEnd: stopDrag,
44125
+ className: 'min-val'
44126
+ }),
44127
+ React__default.createElement('input', {
44128
+ type: 'range',
44129
+ min: min,
44130
+ max: max,
44131
+ value: maxVal,
44132
+ onChange: slideMax,
44133
+ onMouseDown: startDrag,
44134
+ onMouseUp: stopDrag,
44135
+ onTouchStart: startDrag,
44136
+ onTouchEnd: stopDrag,
44137
+ className: 'max-val'
44138
+ }),
44139
+ isDragging && React__default.createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
44140
+ isDragging && React__default.createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
44141
+ )
44142
+ );
44143
+ };
44144
+
44145
+ var Filters = function (_a) {
44146
+ var _b;
44147
+ var initialFilters = _a.initialFilters,
44148
+ filters = _a.filters,
44149
+ isOpen = _a.isOpen,
44150
+ handleSetIsOpen = _a.handleSetIsOpen,
44151
+ isLoading = _a.isLoading,
44152
+ setFilters = _a.setFilters,
44153
+ resetFilters = _a.resetFilters;
44154
+ var context = useContext(SearchResultsConfigurationContext);
44155
+ if (!context || !context.showFilters) {
44156
+ return null;
44157
+ }
44158
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44159
+ var _c = useState({}),
44160
+ visibleFilters = _c[0],
44161
+ setVisibleFilters = _c[1];
44162
+ var toggleFilterVisibility = function (filterId) {
44163
+ setVisibleFilters(function (prev) {
44164
+ var _a;
44165
+ return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
44166
+ });
44167
+ };
44168
+ var handleCheckBoxFilter = function (filter, option) {
44169
+ var updated = filters.map(function (f) {
44170
+ var _a;
44171
+ if (f.property !== filter.property) return f;
44172
+ return __assign(__assign({}, f), {
44173
+ options:
44174
+ (_a = f.options) === null || _a === void 0
44175
+ ? void 0
44176
+ : _a.map(function (opt) {
44177
+ return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
44178
+ })
44179
+ });
44180
+ });
44181
+ setFilters(updated);
44182
+ };
44183
+ var handleSliderChange = function (filter, newMin, newMax) {
44184
+ var updated = filters.map(function (f) {
44185
+ if (f.property !== filter.property) return f;
44186
+ return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
44187
+ });
44188
+ setFilters(updated);
44189
+ };
44190
+ var handleFullReset = function () {
44191
+ if (!isLoading) {
44192
+ resetFilters(initialFilters);
44193
+ }
44194
+ };
44195
+ return React__default.createElement(
44196
+ 'div',
44197
+ { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
44198
+ React__default.createElement('div', {
44199
+ className: 'search__filters--background',
44200
+ onClick: function () {
44201
+ return handleSetIsOpen();
44202
+ }
44203
+ }),
44204
+ React__default.createElement(
44205
+ 'button',
44206
+ {
44207
+ className: 'search__filters--close',
44208
+ onClick: function () {
44209
+ return handleSetIsOpen();
44210
+ }
44211
+ },
44212
+ React__default.createElement(Icon$1, { name: 'ui-close', height: 24 })
44213
+ ),
44214
+ React__default.createElement(
44215
+ 'div',
44216
+ { className: 'search__filters' },
44217
+ React__default.createElement(
44218
+ 'div',
44219
+ { className: 'search__filter-row search__filter__header' },
44220
+ React__default.createElement(
44221
+ 'div',
44222
+ { className: 'search__filter-row-flex-title' },
44223
+ React__default.createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
44224
+ ),
44225
+ !isLoading &&
44226
+ React__default.createElement(
44227
+ 'a',
44228
+ {
44229
+ className: 'search__filter-reset',
44230
+ onClick: function () {
44231
+ return handleFullReset();
44232
+ }
44233
+ },
44234
+ translations.SRP.RESET
44235
+ )
44236
+ ),
44237
+ isLoading
44238
+ ? React__default.createElement(Spinner, null)
44239
+ : React__default.createElement(
44240
+ React__default.Fragment,
44241
+ null,
44242
+ React__default.createElement(
44243
+ 'div',
44244
+ { className: 'search__filters__group-container' },
44245
+ filters.map(function (filter, index) {
44246
+ var _a, _b;
44247
+ var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
44248
+ return React__default.createElement(
44249
+ 'div',
44250
+ { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
44251
+ React__default.createElement(
44252
+ 'div',
44253
+ {
44254
+ className: 'search__filter-row search__filter-row--underline',
44255
+ onClick: function () {
44256
+ return toggleFilterVisibility(filter.property);
44257
+ },
44258
+ role: 'button',
44259
+ tabIndex: 0
44260
+ },
44261
+ React__default.createElement('h6', { className: 'search__filter-large-title' }, filter.label),
44262
+ React__default.createElement(
44263
+ 'svg',
44264
+ {
44265
+ id: 'search-chevron-up-icon',
44266
+ className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
44267
+ viewBox: '0 0 10 6.063',
44268
+ width: 10,
44269
+ height: 6.063
44270
+ },
44271
+ React__default.createElement('path', {
44272
+ id: 'Path_62',
44273
+ 'data-name': 'Path 62',
44274
+ d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
44275
+ transform: 'translate(-240 624)',
44276
+ fill: '#707070'
44277
+ })
44278
+ )
44279
+ ),
44280
+ isVisible &&
44281
+ filter.type === 'checkbox' &&
44282
+ React__default.createElement(
44283
+ 'div',
44284
+ { className: 'search__filter-rows' },
44285
+ filter.options &&
44286
+ filter.options.map(function (option, optionIndex) {
44287
+ return React__default.createElement(
44288
+ 'div',
44289
+ { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
44290
+ React__default.createElement(
44291
+ 'div',
44292
+ { className: 'checkbox' },
44293
+ React__default.createElement(
44294
+ 'label',
44295
+ { className: 'checkbox__label' },
44296
+ React__default.createElement('input', {
44297
+ type: 'checkbox',
44298
+ className: 'checkbox__input checkbox__input--parent',
44299
+ checked: option.isChecked,
44300
+ onChange: function (e) {
44301
+ return handleCheckBoxFilter(filter, option);
44302
+ }
44303
+ }),
44304
+ React__default.createElement('span', { className: 'radiobutton__label-text' }, option.label)
44305
+ )
44306
+ )
44307
+ );
44308
+ })
44309
+ ),
44310
+ isVisible &&
44311
+ filter.type === 'toggle' &&
44312
+ React__default.createElement(
44313
+ 'div',
44314
+ { className: 'search__filter-rows' },
44315
+ (_b = filter.options) === null || _b === void 0
44316
+ ? void 0
44317
+ : _b.map(function (option, optionIndex) {
44318
+ return React__default.createElement(
44319
+ 'div',
44320
+ { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
44321
+ React__default.createElement('span', { className: 'search__filter-toggle-label' }, option.label),
44322
+ React__default.createElement('div', { className: 'checkbox' }),
44323
+ React__default.createElement(
44324
+ 'label',
44325
+ { className: 'checkbox__label' },
44326
+ React__default.createElement('input', {
44327
+ type: 'checkbox',
44328
+ className: 'checkbox__input',
44329
+ checked: option.isChecked,
44330
+ onChange: function () {
44331
+ return handleCheckBoxFilter(filter, option);
44332
+ }
44333
+ })
44334
+ )
44335
+ );
44336
+ })
44337
+ ),
44338
+ isVisible &&
44339
+ filter &&
44340
+ filter.type === 'slider' &&
44341
+ (function () {
44342
+ var _a, _b, _c, _d;
44343
+ var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
44344
+ var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
44345
+ var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
44346
+ var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
44347
+ return React__default.createElement(MultiRangeFilter, {
44348
+ min: min,
44349
+ max: max,
44350
+ selectedMin: selectedMin,
44351
+ selectedMax: selectedMax,
44352
+ valueFormatter: function (value) {
44353
+ return ''.concat(value);
44354
+ },
44355
+ onChange: function (newMin, newMax) {
44356
+ handleSliderChange(filter, newMin, newMax);
44357
+ }
44358
+ });
44359
+ })()
44360
+ );
44361
+ })
44362
+ )
44363
+ )
44364
+ )
44365
+ );
44366
+ };
44367
+
44368
+ var PackageingFlightsFlyIn = function (_a) {
44369
+ var _b;
44370
+ _a.isOpen;
44371
+ _a.setIsOpen;
44372
+ var context = useContext(SearchResultsConfigurationContext);
44373
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44374
+ var translations = getTranslations(language);
44375
+ var dispatch = useDispatch();
44376
+ var _c = useSelector(function (state) {
44377
+ return state.searchResults;
44378
+ }),
44379
+ flightsLoading = _c.flightsLoading,
44380
+ initialFlightFilters = _c.initialFlightFilters,
44381
+ flightFilters = _c.flightFilters,
44382
+ flyInType = _c.flyInType,
44383
+ selectedFlightSortType = _c.selectedFlightSortType;
44384
+ var uniqueOutwardFlights = useSelector(selectUniqueOutwardFlights);
44385
+ var uniqueReturnFlights = useSelector(selectUniqueReturnFlights);
44386
+ var selectedOutward = useSelector(selectSelectedOutward);
44387
+ var selectedReturn = useSelector(selectSelectedReturn);
44388
+ var _d = useState(false),
44389
+ outwardStepComplete = _d[0],
44390
+ setOutwardStepComplete = _d[1];
44391
+ var handleConfirm = function () {
44392
+ if (!outwardStepComplete) {
44393
+ setOutwardStepComplete(true);
44394
+ dispatch(setFlyInType('flight-return-results'));
44395
+ return;
44396
+ } else {
44397
+ dispatch(setFlyInType(null));
44398
+ setOutwardStepComplete(false);
44399
+ dispatch(setFlyInIsOpen(false));
44400
+ }
44401
+ };
44402
+ var sortByTypes = [
44403
+ { direction: 'asc', label: 'default' },
44404
+ { direction: 'asc', label: 'price' },
44405
+ { direction: 'desc', label: 'price' },
44406
+ { direction: 'asc', label: 'departureTime' },
44407
+ { direction: 'desc', label: 'departureTime' },
44408
+ { direction: 'asc', label: 'durationInTicks' },
44409
+ { direction: 'desc', label: 'durationInTicks' }
44410
+ ];
44411
+ var handleSortChange = function (newSortKey, direction) {
44412
+ if (sortByTypes === undefined) return;
44413
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
44414
+ if (newSortByType) {
44415
+ dispatch(setFlightSortType(newSortByType));
44416
+ }
44417
+ };
44418
+ return React__default.createElement(
44419
+ React__default.Fragment,
44420
+ null,
44421
+ React__default.createElement(
44422
+ 'div',
44423
+ { className: 'flyin__content flyin__content--columns' },
44424
+ flightsLoading
44425
+ ? React__default.createElement(Spinner, null)
44426
+ : React__default.createElement(
44427
+ React__default.Fragment,
44428
+ null,
44429
+ React__default.createElement(Filters, {
44430
+ initialFilters: initialFlightFilters,
44431
+ filters: flightFilters,
44432
+ isOpen: false,
44433
+ handleSetIsOpen: function () {},
44434
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
44435
+ isLoading: flightsLoading,
44436
+ setFilters: function (filters) {
44437
+ return dispatch(setFlightFilters(filters));
44438
+ },
44439
+ resetFilters: function (filters) {
44440
+ return dispatch(resetFlightFilters(filters));
44441
+ }
44442
+ }),
44443
+ React__default.createElement(
44444
+ 'div',
44445
+ { className: 'search__results__wrapper' },
44446
+ React__default.createElement(
44447
+ 'div',
44448
+ { className: 'search__result-row' },
44449
+ React__default.createElement(
44450
+ 'span',
44451
+ { className: 'search__result-row-text' },
44452
+ (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
44453
+ '\u00A0',
44454
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
44455
+ '\u00A0',
44456
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
44457
+ ),
44458
+ sortByTypes &&
44459
+ sortByTypes.length > 0 &&
44460
+ React__default.createElement(
44461
+ 'div',
44462
+ { className: 'search__result-row-filter' },
44463
+ React__default.createElement(ItemPicker, {
44464
+ items: sortByTypes,
44465
+ selection: (selectedFlightSortType === null || selectedFlightSortType === void 0 ? void 0 : selectedFlightSortType.label) || undefined,
44466
+ selectedSortByType: selectedFlightSortType || undefined,
44467
+ label: translations.SRP.SORTBY,
44468
+ placeholder: translations.SRP.SORTBY,
44469
+ classModifier: '',
44470
+ valueFormatter: function (value, direction) {
44471
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
44472
+ },
44473
+ // onPick={handleSortChange}
44474
+ onPick: function (newSortKey, direction) {
44475
+ return handleSortChange(newSortKey, direction);
44476
+ }
44477
+ })
44478
+ )
44479
+ ),
44480
+ React__default.createElement(
44481
+ 'div',
44482
+ { className: 'search__results__cards search__results__cards--extended' },
44483
+ flyInType == 'flight-outward-results' &&
44484
+ uniqueOutwardFlights.map(function (result) {
44485
+ return React__default.createElement(IndependentFlightOption, {
44486
+ key: 'flight-'.concat(result.outwardGuid),
44487
+ item: result.outward,
44488
+ onSelect: function () {
44489
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
44490
+ },
44491
+ guid: result.outwardGuid,
44492
+ isOutward: true,
44493
+ price: result.price,
44494
+ currentSelectedPrice: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.price,
44495
+ selectedGuid: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.outwardGuid,
44496
+ showSelectedState: true
44497
+ });
44498
+ }),
44499
+ flyInType == 'flight-return-results' &&
44500
+ uniqueReturnFlights.map(function (result) {
44501
+ return React__default.createElement(IndependentFlightOption, {
44502
+ key: 'flight-'.concat(result.outwardGuid),
44503
+ item: result.return,
44504
+ onSelect: function () {
44505
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
44506
+ },
44507
+ guid: result.outwardGuid,
44508
+ isOutward: false,
44509
+ price: result.price,
44510
+ currentSelectedPrice: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.price,
44511
+ selectedGuid: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.outwardGuid,
44512
+ showSelectedState: true
44513
+ });
44514
+ })
44515
+ )
44516
+ )
44517
+ )
44518
+ ),
44519
+ React__default.createElement(
44520
+ 'div',
44521
+ { className: 'flyin__footer' },
44522
+ React__default.createElement('div', { className: 'flyin__footer__price' }),
44523
+ React__default.createElement(
44524
+ 'div',
44525
+ { className: 'flyin__button-wrapper' },
44526
+ React__default.createElement(
44527
+ 'button',
44528
+ {
44529
+ className: 'cta cta--select',
44530
+ onClick: function () {
44531
+ return handleConfirm();
44532
+ }
44533
+ },
44534
+ translations.QSM.CONFIRM
44535
+ )
44536
+ )
44537
+ )
44538
+ );
44539
+ };
44540
+
44541
+ var FlyIn = function (_a) {
44542
+ var _b;
44543
+ var srpType = _a.srpType,
44544
+ isOpen = _a.isOpen,
44545
+ setIsOpen = _a.setIsOpen,
44546
+ _c = _a.className,
44547
+ className = _c === void 0 ? '' : _c,
44548
+ onPanelRef = _a.onPanelRef,
44549
+ detailsLoading = _a.detailsLoading,
44550
+ flyInType = _a.flyInType,
44551
+ isPackageEditFlow = _a.isPackageEditFlow,
44552
+ handleConfirm = _a.handleConfirm,
44553
+ sortByTypes = _a.sortByTypes;
44554
+ var dispatch = useDispatch();
44555
+ var context = useContext(SearchResultsConfigurationContext);
44556
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44557
+ var translations = getTranslations(language);
44558
+ var _d = useSelector(function (state) {
44559
+ return state.searchResults;
44560
+ }),
44561
+ isLoading = _d.isLoading,
44562
+ initialFilters = _d.initialFilters,
44563
+ filters = _d.filters,
44564
+ filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
44565
+ selectedSortType = _d.selectedSortType;
44566
+ var onCancelSearch = useFlightSearch().onCancelSearch;
44567
+ var panelRef = useRef(null);
44568
+ // expose DOM node if needed
44569
+ useEffect(
44570
+ function () {
44571
+ onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
44572
+ return function () {
44573
+ return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
44574
+ };
44575
+ },
44576
+ [onPanelRef]
44577
+ );
44578
+ useEffect(
44579
+ function () {
44580
+ // click outside detection
44581
+ var handleClickOutside = function (event) {
44582
+ if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
44583
+ handleClose();
44584
+ }
44585
+ };
44586
+ document.addEventListener('mousedown', handleClickOutside);
44587
+ return function () {
44588
+ return document.removeEventListener('mousedown', handleClickOutside);
44589
+ };
44590
+ },
44591
+ [isOpen, setIsOpen]
44592
+ );
44593
+ // body scroll lock
44594
+ useEffect(
44595
+ function () {
44596
+ document.body.style.overflow = isOpen ? 'hidden' : '';
44597
+ return function () {
44598
+ document.body.style.overflow = '';
44599
+ };
44600
+ },
44601
+ [isOpen]
44602
+ );
44603
+ var handleClose = function () {
44604
+ if (isOpen && panelRef.current) {
44605
+ if (srpType === build.PortalQsmType.Flight) {
44606
+ dispatch(setSelectedFlight(null));
44607
+ dispatch(setSelectedFlightDetails(null));
44608
+ onCancelSearch();
44609
+ } else {
44610
+ dispatch(setSelectedSearchResult(null));
44611
+ dispatch(setSelectedPackagingAccoResult(null));
44612
+ }
44613
+ dispatch(setFlyInType('acco-details'));
44614
+ setIsOpen(false);
44615
+ }
44616
+ };
44617
+ var handleGoBack = function () {
44618
+ dispatch(setFlyInType('acco-results'));
44619
+ };
44620
+ var handleSortChange = function (newSortKey, direction) {
44621
+ if (sortByTypes === undefined) return;
44622
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
44623
+ if (newSortByType) {
44624
+ dispatch(setSortType(newSortByType));
44625
+ }
44626
+ };
44627
+ return React__default.createElement(
44628
+ 'div',
44629
+ {
44630
+ className: 'flyin '
44631
+ .concat(isOpen ? 'flyin--active' : '', ' ')
44632
+ .concat(className, ' ')
44633
+ .concat(
44634
+ isPackageEditFlow || flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'acco-results'
44635
+ ? 'flyin--large'
44636
+ : ''
44637
+ )
44638
+ },
44639
+ React__default.createElement(
44640
+ 'div',
44641
+ { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
44642
+ React__default.createElement(
44643
+ 'div',
44644
+ { className: 'flyin__content' },
44645
+ React__default.createElement(
44646
+ 'div',
44647
+ { className: 'flyin__content-title-row' },
44648
+ React__default.createElement(
44649
+ 'h3',
44650
+ { className: 'flyin__content-title' },
44651
+ srpType === build.PortalQsmType.Flight && 'Select your fare',
44652
+ srpType === build.PortalQsmType.Accommodation ||
44653
+ (srpType === build.PortalQsmType.AccommodationAndFlight &&
44654
+ (flyInType === 'acco-results' || flyInType === 'acco-details') &&
44655
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION)),
44656
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
44657
+ flyInType === 'flight-outward-results' &&
44658
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.OUTWARD_FLIGHT),
44659
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
44660
+ flyInType === 'flight-return-results' &&
44661
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.RETURN_FLIGHT),
44662
+ srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'flight-details' && 'Select your fare'
44663
+ ),
44664
+ React__default.createElement(
44665
+ 'span',
44666
+ {
44667
+ className: 'flyin__close',
44668
+ onClick: function () {
44669
+ return handleClose();
44670
+ }
44671
+ },
44672
+ React__default.createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
44673
+ )
44674
+ ),
44675
+ isPackageEditFlow &&
44676
+ flyInType === 'acco-details' &&
44677
+ React__default.createElement(
44678
+ 'div',
44679
+ { className: 'flyin__content-title-row' },
44680
+ React__default.createElement(
44681
+ 'div',
44682
+ { onClick: handleGoBack, className: 'flyin__content-title__back' },
44683
+ React__default.createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
44684
+ 'Go Back'
44685
+ )
44686
+ )
44687
+ ),
44688
+ srpType === build.PortalQsmType.Flight && React__default.createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
44689
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
44690
+ flyInType === 'acco-results' &&
44691
+ React__default.createElement(
44692
+ 'div',
44693
+ { className: 'flyin__content flyin__content--columns' },
44694
+ React__default.createElement(Filters, {
44695
+ initialFilters: initialFilters,
44696
+ filters: filters,
44697
+ isOpen: false,
44698
+ handleSetIsOpen: function () {},
44699
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
44700
+ isLoading: isLoading,
44701
+ setFilters: function (filters) {
44702
+ return dispatch(setFilters(filters));
44703
+ },
44704
+ resetFilters: function (filters) {
44705
+ return dispatch(resetFilters(filters));
44706
+ }
44707
+ }),
44708
+ React__default.createElement(
44709
+ 'div',
44710
+ { className: 'search__results__wrapper' },
44711
+ React__default.createElement(
44712
+ 'div',
44713
+ { className: 'search__result-row' },
44714
+ React__default.createElement(
44715
+ 'span',
44716
+ { className: 'search__result-row-text' },
44717
+ !isLoading &&
44718
+ React__default.createElement(
44719
+ React__default.Fragment,
44720
+ null,
44721
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
44722
+ filteredPackagingAccoResults.length,
44723
+ '\u00A0',
44724
+ translations.SRP.TOTAL_RESULTS_LABEL
44725
+ )
44726
+ ),
44727
+ sortByTypes &&
44728
+ sortByTypes.length > 0 &&
44729
+ React__default.createElement(
44730
+ 'div',
44731
+ { className: 'search__result-row-filter' },
44732
+ React__default.createElement(ItemPicker, {
44733
+ items: sortByTypes,
44734
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
44735
+ selectedSortByType: selectedSortType,
44736
+ label: translations.SRP.SORTBY,
44737
+ placeholder: translations.SRP.SORTBY,
44738
+ classModifier: 'travel-class-picker__items',
44739
+ valueFormatter: function (value, direction) {
44740
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
44741
+ },
44742
+ onPick: function (newSortKey, direction) {
44743
+ return handleSortChange(newSortKey, direction);
44744
+ }
44745
+ })
44746
+ )
44747
+ ),
44748
+ React__default.createElement(HotelAccommodationResults, { isLoading: detailsLoading, isFlyIn: true })
44749
+ )
44750
+ ),
44751
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
44752
+ flyInType === 'acco-details' &&
44753
+ React__default.createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
44754
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
44755
+ (flyInType === 'flight-outward-results' || flyInType === 'flight-return-results') &&
44756
+ React__default.createElement(PackageingFlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
44757
+ srpType === build.PortalQsmType.GroupTour &&
44758
+ React__default.createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
44759
+ )
44760
+ );
44761
+ };
44762
+
44763
+ var RoundTripResults = function () {
44764
+ var activeTab = useSelector(function (state) {
44765
+ return state.searchResults;
44766
+ }).activeTab;
44767
+ var dispatch = useDispatch();
44768
+ useEffect(
44769
+ function () {
44770
+ if (activeTab === 'compact') {
44771
+ dispatch(setActiveTab('list'));
44772
+ }
44773
+ },
44774
+ [activeTab]
44775
+ );
44776
+ return React__default.createElement(
44777
+ 'div',
44778
+ { className: 'search__results__cards search__results__cards--'.concat(activeTab) },
44779
+ React__default.createElement(
44780
+ 'div',
44781
+ { className: 'search__result-card' },
44782
+ React__default.createElement(
44783
+ 'div',
44784
+ { className: 'search__result-card__allotment' },
44785
+ React__default.createElement(
44786
+ 'div',
44787
+ { className: 'search__result-card__allotment__img-wrapper' },
44788
+ React__default.createElement('img', {
44789
+ src: 'https://cdn.pixabay.com/photo/2024/05/15/12/31/lake-8763490_1280.jpg',
44790
+ alt: 'river',
44791
+ className: 'search__result-card__allotment__img'
44792
+ })
44793
+ ),
44794
+ React__default.createElement(
44795
+ 'div',
44796
+ { className: 'search__result-card__allotment__title__wrapper' },
44797
+ React__default.createElement(
44798
+ 'h3',
43756
44799
  { className: 'search__result-card__allotment__title' },
43757
44800
  'Rondreis Noord-India: Rajasthan',
43758
44801
  React__default.createElement(
@@ -44033,218 +45076,53 @@ var PairedFlightOption = function (_a) {
44033
45076
  'div',
44034
45077
  { className: 'search__result-card', key: 'flight-'.concat(item.guid) },
44035
45078
  React__default.createElement(
44036
- 'div',
44037
- { className: 'flight' },
44038
- React__default.createElement(
44039
- 'div',
44040
- { className: 'flight__option' },
44041
- React__default.createElement(
44042
- 'div',
44043
- { className: 'flight__content' },
44044
- React__default.createElement(
44045
- 'div',
44046
- { className: 'flight__flights' },
44047
- React__default.createElement(
44048
- 'div',
44049
- { className: 'flight__flight' },
44050
- React__default.createElement(
44051
- 'div',
44052
- { className: 'flight__flight__header' },
44053
- React__default.createElement('div', { className: 'flight__status__container' }),
44054
- React__default.createElement(
44055
- 'div',
44056
- { className: 'flight__price' },
44057
- React__default.createElement(
44058
- 'span',
44059
- { className: 'price' },
44060
- formatPrice$2(
44061
- item.price,
44062
- 'EUR',
44063
- (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
44064
- )
44065
- ),
44066
- React__default.createElement(
44067
- 'button',
44068
- {
44069
- type: 'button',
44070
- className: 'cta '.concat(
44071
- (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'cta--selected' : 'cta--select'
44072
- ),
44073
- onClick: function () {
44074
- return handleSelect(item);
44075
- }
44076
- },
44077
- (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'Selected' : 'Select'
44078
- )
44079
- )
44080
- )
44081
- ),
44082
- item.outward &&
44083
- React__default.createElement(
44084
- 'div',
44085
- { className: 'flight__flight' },
44086
- React__default.createElement(
44087
- 'div',
44088
- { className: 'flight__flight__container' },
44089
- React__default.createElement(
44090
- 'div',
44091
- { className: 'flight__flight__wrapper' },
44092
- React__default.createElement(
44093
- 'div',
44094
- { className: 'flight__logo__wrapper' },
44095
- React__default.createElement('img', {
44096
- src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44097
- (_d = getDepartureSegment(item.outward)) === null || _d === void 0 ? void 0 : _d.marketingAirlineCode,
44098
- '.png?height=256'
44099
- ),
44100
- alt: '',
44101
- className: 'flight__logo'
44102
- }),
44103
- React__default.createElement(
44104
- 'span',
44105
- null,
44106
- (_e = getDepartureSegment(item.outward)) === null || _e === void 0 ? void 0 : _e.marketingAirlineName
44107
- )
44108
- ),
44109
- React__default.createElement(
44110
- 'div',
44111
- { className: 'flight__info' },
44112
- React__default.createElement(
44113
- 'div',
44114
- { className: 'flight__info__times' },
44115
- React__default.createElement(
44116
- 'strong',
44117
- null,
44118
- timeFromDateTime((_f = getDepartureSegment(item.outward)) === null || _f === void 0 ? void 0 : _f.departureDateTime),
44119
- ' ',
44120
- (_g = getDepartureSegment(item.outward)) === null || _g === void 0 ? void 0 : _g.departureAirportCode
44121
- ),
44122
- React__default.createElement(
44123
- 'p',
44124
- null,
44125
- longFormatDate((_h = getDepartureSegment(item.outward)) === null || _h === void 0 ? void 0 : _h.departureDateTime, language)
44126
- )
44127
- ),
44128
- React__default.createElement(
44129
- 'div',
44130
- { className: 'flight__info__duration' },
44131
- React__default.createElement('p', null, durationTicksInHoursString(item.outward.durationInTicks)),
44132
- React__default.createElement(
44133
- 'div',
44134
- { className: 'flight__info__duration__stops' },
44135
- React__default.createElement('div', { className: 'flight__info__duration__stop' })
44136
- ),
44137
- React__default.createElement(
44138
- 'span',
44139
- null,
44140
- getNumberOfStopsLabel(item.outward, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44141
- )
44142
- ),
44143
- React__default.createElement(
44144
- 'div',
44145
- { className: 'flight__info__times flight__info__times--arrival' },
44146
- React__default.createElement(
44147
- 'strong',
44148
- null,
44149
- timeFromDateTime((_j = getArrivalSegment(item.outward)) === null || _j === void 0 ? void 0 : _j.arrivalDateTime),
44150
- ' ',
44151
- (_k = getArrivalSegment(item.outward)) === null || _k === void 0 ? void 0 : _k.arrivalAirportCode
44152
- ),
44153
- React__default.createElement(
44154
- 'p',
44155
- null,
44156
- longFormatDate((_l = getArrivalSegment(item.outward)) === null || _l === void 0 ? void 0 : _l.arrivalDateTime, language)
44157
- )
44158
- )
44159
- )
44160
- ),
44161
- React__default.createElement(
44162
- 'div',
44163
- { className: 'flight__detail__btn__wrapper' },
44164
- React__default.createElement(
44165
- 'div',
44166
- {
44167
- className: 'flight__detail__btn '.concat(isOutwardOpen ? 'flight__detail__btn--active' : ''),
44168
- onClick: function () {
44169
- return setIsOutwardOpen(function (prev) {
44170
- return !prev;
44171
- });
44172
- }
44173
- },
44174
- React__default.createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44175
- )
44176
- )
44177
- ),
44178
- React__default.createElement(
44179
- 'div',
44180
- { className: 'flight__detail '.concat(isOutwardOpen ? 'flight__detail--active' : '') },
44181
- getFlightSegments(item.outward).map(function (segment, index) {
44182
- return React__default.createElement(
44183
- React__default.Fragment,
44184
- { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44185
- React__default.createElement(
44186
- 'div',
44187
- { className: 'flight__info' },
44188
- React__default.createElement(
44189
- 'div',
44190
- { className: 'flight__info__times__wrapper' },
44191
- React__default.createElement(
44192
- 'div',
44193
- { className: 'flight__info__times' },
44194
- React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44195
- React__default.createElement('strong', null, segment.departureAirportCode),
44196
- React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
44197
- ),
44198
- React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
44199
- ),
44200
- React__default.createElement(
44201
- 'div',
44202
- { className: 'flight__info__duration' },
44203
- React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44204
- React__default.createElement('div', { className: 'flight__info__duration__stops' }),
44205
- React__default.createElement('span', null, segment.marketingAirlineName),
44206
- React__default.createElement('strong', null, segment.operatingFlightNumber)
44207
- ),
44208
- React__default.createElement(
44209
- 'div',
44210
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44211
- React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
44212
- React__default.createElement(
44213
- 'div',
44214
- { className: 'flight__info__times flight__info__times--arrival' },
44215
- React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44216
- React__default.createElement('strong', null, segment.arrivalAirportCode),
44217
- React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44218
- )
44219
- )
45079
+ 'div',
45080
+ { className: 'flight' },
45081
+ React__default.createElement(
45082
+ 'div',
45083
+ { className: 'flight__option' },
45084
+ React__default.createElement(
45085
+ 'div',
45086
+ { className: 'flight__content' },
45087
+ React__default.createElement(
45088
+ 'div',
45089
+ { className: 'flight__flights' },
45090
+ React__default.createElement(
45091
+ 'div',
45092
+ { className: 'flight__flight' },
45093
+ React__default.createElement(
45094
+ 'div',
45095
+ { className: 'flight__flight__header' },
45096
+ React__default.createElement('div', { className: 'flight__status__container' }),
45097
+ React__default.createElement(
45098
+ 'div',
45099
+ { className: 'flight__price' },
45100
+ React__default.createElement(
45101
+ 'span',
45102
+ { className: 'price' },
45103
+ formatPrice$2(
45104
+ item.price,
45105
+ 'EUR',
45106
+ (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
45107
+ )
45108
+ ),
45109
+ React__default.createElement(
45110
+ 'button',
45111
+ {
45112
+ type: 'button',
45113
+ className: 'cta '.concat(
45114
+ (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'cta--selected' : 'cta--select'
44220
45115
  ),
44221
- segment.transferTimeInTicks &&
44222
- React__default.createElement(
44223
- 'div',
44224
- { className: 'flight__info' },
44225
- React__default.createElement('div', { className: 'flight__info__times' }),
44226
- React__default.createElement(
44227
- 'div',
44228
- { className: 'flight__info__duration flight__info__duration--waittime' },
44229
- React__default.createElement(
44230
- 'div',
44231
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44232
- React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44233
- ),
44234
- React__default.createElement(
44235
- 'div',
44236
- { className: 'flight__info__duration__stoptime' },
44237
- React__default.createElement('span', null, 'Stop time'),
44238
- React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44239
- )
44240
- ),
44241
- React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44242
- )
44243
- );
44244
- })
45116
+ onClick: function () {
45117
+ return handleSelect(item);
45118
+ }
45119
+ },
45120
+ (selectedFlight === null || selectedFlight === void 0 ? void 0 : selectedFlight.guid) === item.guid ? 'Selected' : 'Select'
45121
+ )
44245
45122
  )
44246
- ),
44247
- item.return &&
45123
+ )
45124
+ ),
45125
+ item.outward &&
44248
45126
  React__default.createElement(
44249
45127
  'div',
44250
45128
  { className: 'flight__flight' },
@@ -44259,7 +45137,7 @@ var PairedFlightOption = function (_a) {
44259
45137
  { className: 'flight__logo__wrapper' },
44260
45138
  React__default.createElement('img', {
44261
45139
  src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44262
- (_m = getDepartureSegment(item.return)) === null || _m === void 0 ? void 0 : _m.marketingAirlineCode,
45140
+ (_d = getDepartureSegment(item.outward)) === null || _d === void 0 ? void 0 : _d.marketingAirlineCode,
44263
45141
  '.png?height=256'
44264
45142
  ),
44265
45143
  alt: '',
@@ -44268,7 +45146,7 @@ var PairedFlightOption = function (_a) {
44268
45146
  React__default.createElement(
44269
45147
  'span',
44270
45148
  null,
44271
- (_o = getDepartureSegment(item.return)) === null || _o === void 0 ? void 0 : _o.marketingAirlineName
45149
+ (_e = getDepartureSegment(item.outward)) === null || _e === void 0 ? void 0 : _e.marketingAirlineName
44272
45150
  )
44273
45151
  ),
44274
45152
  React__default.createElement(
@@ -44280,20 +45158,20 @@ var PairedFlightOption = function (_a) {
44280
45158
  React__default.createElement(
44281
45159
  'strong',
44282
45160
  null,
44283
- timeFromDateTime((_p = getDepartureSegment(item.return)) === null || _p === void 0 ? void 0 : _p.departureDateTime),
45161
+ timeFromDateTime((_f = getDepartureSegment(item.outward)) === null || _f === void 0 ? void 0 : _f.departureDateTime),
44284
45162
  ' ',
44285
- (_q = getDepartureSegment(item.return)) === null || _q === void 0 ? void 0 : _q.departureAirportCode
45163
+ (_g = getDepartureSegment(item.outward)) === null || _g === void 0 ? void 0 : _g.departureAirportCode
44286
45164
  ),
44287
45165
  React__default.createElement(
44288
45166
  'p',
44289
45167
  null,
44290
- longFormatDate((_r = getDepartureSegment(item.return)) === null || _r === void 0 ? void 0 : _r.departureDateTime, language)
45168
+ longFormatDate((_h = getDepartureSegment(item.outward)) === null || _h === void 0 ? void 0 : _h.departureDateTime, language)
44291
45169
  )
44292
45170
  ),
44293
45171
  React__default.createElement(
44294
45172
  'div',
44295
45173
  { className: 'flight__info__duration' },
44296
- React__default.createElement('p', null, durationTicksInHoursString(item.return.durationInTicks)),
45174
+ React__default.createElement('p', null, durationTicksInHoursString(item.outward.durationInTicks)),
44297
45175
  React__default.createElement(
44298
45176
  'div',
44299
45177
  { className: 'flight__info__duration__stops' },
@@ -44302,7 +45180,7 @@ var PairedFlightOption = function (_a) {
44302
45180
  React__default.createElement(
44303
45181
  'span',
44304
45182
  null,
44305
- getNumberOfStopsLabel(item.return, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
45183
+ getNumberOfStopsLabel(item.outward, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44306
45184
  )
44307
45185
  ),
44308
45186
  React__default.createElement(
@@ -44311,14 +45189,14 @@ var PairedFlightOption = function (_a) {
44311
45189
  React__default.createElement(
44312
45190
  'strong',
44313
45191
  null,
44314
- timeFromDateTime((_s = getArrivalSegment(item.return)) === null || _s === void 0 ? void 0 : _s.arrivalDateTime),
45192
+ timeFromDateTime((_j = getArrivalSegment(item.outward)) === null || _j === void 0 ? void 0 : _j.arrivalDateTime),
44315
45193
  ' ',
44316
- (_t = getArrivalSegment(item.return)) === null || _t === void 0 ? void 0 : _t.arrivalAirportCode
45194
+ (_k = getArrivalSegment(item.outward)) === null || _k === void 0 ? void 0 : _k.arrivalAirportCode
44317
45195
  ),
44318
45196
  React__default.createElement(
44319
45197
  'p',
44320
45198
  null,
44321
- longFormatDate((_u = getArrivalSegment(item.return)) === null || _u === void 0 ? void 0 : _u.arrivalDateTime, language)
45199
+ longFormatDate((_l = getArrivalSegment(item.outward)) === null || _l === void 0 ? void 0 : _l.arrivalDateTime, language)
44322
45200
  )
44323
45201
  )
44324
45202
  )
@@ -44329,9 +45207,9 @@ var PairedFlightOption = function (_a) {
44329
45207
  React__default.createElement(
44330
45208
  'div',
44331
45209
  {
44332
- className: 'flight__detail__btn '.concat(isReturnOpen ? 'flight__detail__btn--active' : ''),
45210
+ className: 'flight__detail__btn '.concat(isOutwardOpen ? 'flight__detail__btn--active' : ''),
44333
45211
  onClick: function () {
44334
- return setIsReturnOpen(function (prev) {
45212
+ return setIsOutwardOpen(function (prev) {
44335
45213
  return !prev;
44336
45214
  });
44337
45215
  }
@@ -44341,358 +45219,239 @@ var PairedFlightOption = function (_a) {
44341
45219
  )
44342
45220
  ),
44343
45221
  React__default.createElement(
44344
- 'div',
44345
- { className: 'flight__detail '.concat(isReturnOpen ? 'flight__detail--active' : '') },
44346
- getFlightSegments(item.return).map(function (segment, index) {
44347
- return React__default.createElement(
44348
- React__default.Fragment,
44349
- { key: 'return-segment-'.concat(index, '-').concat(segment.flightNumber) },
44350
- React__default.createElement(
44351
- 'div',
44352
- { className: 'flight__info' },
44353
- React__default.createElement(
44354
- 'div',
44355
- { className: 'flight__info__times__wrapper' },
44356
- React__default.createElement(
44357
- 'div',
44358
- { className: 'flight__info__times' },
44359
- React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44360
- React__default.createElement('strong', null, segment.departureAirportCode),
44361
- React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
44362
- ),
44363
- React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
44364
- ),
44365
- React__default.createElement(
44366
- 'div',
44367
- { className: 'flight__info__duration' },
44368
- React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44369
- React__default.createElement('div', { className: 'flight__info__duration__stops' }),
44370
- React__default.createElement('span', null, segment.marketingAirlineName),
44371
- React__default.createElement('strong', null, segment.operatingFlightNumber)
44372
- ),
44373
- React__default.createElement(
44374
- 'div',
44375
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44376
- React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
44377
- React__default.createElement(
44378
- 'div',
44379
- { className: 'flight__info__times flight__info__times--arrival' },
44380
- React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44381
- React__default.createElement('strong', null, segment.arrivalAirportCode),
44382
- React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44383
- )
44384
- )
44385
- ),
44386
- segment.transferTimeInTicks &&
44387
- React__default.createElement(
44388
- 'div',
44389
- { className: 'flight__info' },
44390
- React__default.createElement('div', { className: 'flight__info__times' }),
44391
- React__default.createElement(
44392
- 'div',
44393
- { className: 'flight__info__duration flight__info__duration--waittime' },
44394
- React__default.createElement(
44395
- 'div',
44396
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44397
- React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44398
- ),
44399
- React__default.createElement(
44400
- 'div',
44401
- { className: 'flight__info__duration__stoptime' },
44402
- React__default.createElement('span', null, 'Stop time'),
44403
- React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44404
- )
44405
- ),
44406
- React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44407
- )
44408
- );
44409
- })
44410
- )
44411
- )
44412
- )
44413
- )
44414
- )
44415
- )
44416
- );
44417
- };
44418
-
44419
- var PairedFlightSelection = function (_a) {
44420
- var _b;
44421
- var searchResults = _a.searchResults;
44422
- var context = useContext(SearchResultsConfigurationContext);
44423
- var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44424
- return React__default.createElement(
44425
- React__default.Fragment,
44426
- null,
44427
- React__default.createElement(
44428
- 'div',
44429
- { className: 'search__results__label search__results__label--secondary' },
44430
- React__default.createElement(
44431
- 'div',
44432
- { className: 'search__results__label__date' },
44433
- React__default.createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
44434
- ),
44435
- React__default.createElement(
44436
- 'div',
44437
- { className: 'search__results__label__text' },
44438
- React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, ' ', translations.SIDEBAR.FLIGHT))
44439
- )
44440
- ),
44441
- React__default.createElement(
44442
- 'div',
44443
- { className: 'search__results__cards search__results__cards--extended' },
44444
- searchResults.map(function (result) {
44445
- return React__default.createElement(PairedFlightOption, { key: 'flight-'.concat(result.guid), item: result });
44446
- })
44447
- )
44448
- );
44449
- };
44450
-
44451
- var IndependentFlightOption = function (_a) {
44452
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
44453
- var item = _a.item,
44454
- onSelect = _a.onSelect,
44455
- guid = _a.guid,
44456
- selectedGuid = _a.selectedGuid,
44457
- isOutward = _a.isOutward,
44458
- showSelectedState = _a.showSelectedState,
44459
- currentSelectedPrice = _a.currentSelectedPrice,
44460
- price = _a.price;
44461
- var context = useContext(SearchResultsConfigurationContext);
44462
- var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44463
- var translations = getTranslations(language);
44464
- var _p = useState(false),
44465
- detailsOpen = _p[0],
44466
- setDetailsOpen = _p[1];
44467
- var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
44468
- return React__default.createElement(
44469
- 'div',
44470
- { className: 'search__result-card', key: 'flight-'.concat(item.code) },
44471
- React__default.createElement(
44472
- 'div',
44473
- { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
44474
- React__default.createElement(
44475
- 'div',
44476
- { className: 'flight__option' },
44477
- React__default.createElement(
44478
- 'div',
44479
- { className: 'flight__content' },
44480
- React__default.createElement(
44481
- 'div',
44482
- { className: 'flight__flights' },
44483
- React__default.createElement(
44484
- 'div',
44485
- { className: 'flight__flight' },
44486
- React__default.createElement(
44487
- 'div',
44488
- { className: 'flight__flight__header' },
44489
- React__default.createElement('div', { className: 'flight__status__container' }),
44490
- React__default.createElement(
44491
- 'div',
44492
- { className: 'flight__price' },
44493
- price != null &&
44494
- price > 0 &&
44495
- (isOutward
44496
- ? React__default.createElement(
44497
- 'span',
44498
- { className: 'price' },
44499
- translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
44500
- '\u00A0',
44501
- formatPrice$2(
44502
- price,
44503
- 'EUR',
44504
- (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
45222
+ 'div',
45223
+ { className: 'flight__detail '.concat(isOutwardOpen ? 'flight__detail--active' : '') },
45224
+ getFlightSegments(item.outward).map(function (segment, index) {
45225
+ return React__default.createElement(
45226
+ React__default.Fragment,
45227
+ { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
45228
+ React__default.createElement(
45229
+ 'div',
45230
+ { className: 'flight__info' },
45231
+ React__default.createElement(
45232
+ 'div',
45233
+ { className: 'flight__info__times__wrapper' },
45234
+ React__default.createElement(
45235
+ 'div',
45236
+ { className: 'flight__info__times' },
45237
+ React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
45238
+ React__default.createElement('strong', null, segment.departureAirportCode),
45239
+ React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
45240
+ ),
45241
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
45242
+ ),
45243
+ React__default.createElement(
45244
+ 'div',
45245
+ { className: 'flight__info__duration' },
45246
+ React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
45247
+ React__default.createElement('div', { className: 'flight__info__duration__stops' }),
45248
+ React__default.createElement('span', null, segment.marketingAirlineName),
45249
+ React__default.createElement('strong', null, segment.operatingFlightNumber)
45250
+ ),
45251
+ React__default.createElement(
45252
+ 'div',
45253
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
45254
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
45255
+ React__default.createElement(
45256
+ 'div',
45257
+ { className: 'flight__info__times flight__info__times--arrival' },
45258
+ React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
45259
+ React__default.createElement('strong', null, segment.arrivalAirportCode),
45260
+ React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44505
45261
  )
44506
45262
  )
44507
- : priceDifference != null &&
44508
- Math.abs(priceDifference) > 0 &&
45263
+ ),
45264
+ segment.transferTimeInTicks &&
44509
45265
  React__default.createElement(
44510
- 'span',
44511
- { className: 'price' },
44512
- priceDifference > 0 ? '+' : '-',
44513
- '\u00A0',
44514
- formatPrice$2(
44515
- Math.abs(priceDifference),
44516
- 'EUR',
44517
- (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
44518
- )
44519
- )),
44520
- React__default.createElement(
44521
- 'button',
44522
- {
44523
- type: 'button',
44524
- className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
44525
- onClick: function () {
44526
- return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
44527
- }
44528
- },
44529
- selectedGuid === guid ? 'Selected' : 'Select'
44530
- )
45266
+ 'div',
45267
+ { className: 'flight__info' },
45268
+ React__default.createElement('div', { className: 'flight__info__times' }),
45269
+ React__default.createElement(
45270
+ 'div',
45271
+ { className: 'flight__info__duration flight__info__duration--waittime' },
45272
+ React__default.createElement(
45273
+ 'div',
45274
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
45275
+ React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
45276
+ ),
45277
+ React__default.createElement(
45278
+ 'div',
45279
+ { className: 'flight__info__duration__stoptime' },
45280
+ React__default.createElement('span', null, 'Stop time'),
45281
+ React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
45282
+ )
45283
+ ),
45284
+ React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
45285
+ )
45286
+ );
45287
+ })
44531
45288
  )
44532
- )
44533
- ),
44534
- React__default.createElement(
44535
- 'div',
44536
- { className: 'flight__flight' },
45289
+ ),
45290
+ item.return &&
44537
45291
  React__default.createElement(
44538
45292
  'div',
44539
- { className: 'flight__flight__container' },
45293
+ { className: 'flight__flight' },
44540
45294
  React__default.createElement(
44541
45295
  'div',
44542
- { className: 'flight__flight__wrapper' },
44543
- React__default.createElement(
44544
- 'div',
44545
- { className: 'flight__logo__wrapper' },
44546
- React__default.createElement('img', {
44547
- src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44548
- (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
44549
- '.png?height=256'
44550
- ),
44551
- alt: '',
44552
- className: 'flight__logo'
44553
- }),
44554
- React__default.createElement('span', null, (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName)
44555
- ),
45296
+ { className: 'flight__flight__container' },
44556
45297
  React__default.createElement(
44557
45298
  'div',
44558
- { className: 'flight__info' },
45299
+ { className: 'flight__flight__wrapper' },
44559
45300
  React__default.createElement(
44560
45301
  'div',
44561
- { className: 'flight__info__times' },
44562
- React__default.createElement(
44563
- 'strong',
44564
- null,
44565
- timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
44566
- ' ',
44567
- (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
44568
- ),
45302
+ { className: 'flight__logo__wrapper' },
45303
+ React__default.createElement('img', {
45304
+ src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
45305
+ (_m = getDepartureSegment(item.return)) === null || _m === void 0 ? void 0 : _m.marketingAirlineCode,
45306
+ '.png?height=256'
45307
+ ),
45308
+ alt: '',
45309
+ className: 'flight__logo'
45310
+ }),
44569
45311
  React__default.createElement(
44570
- 'p',
45312
+ 'span',
44571
45313
  null,
44572
- longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
45314
+ (_o = getDepartureSegment(item.return)) === null || _o === void 0 ? void 0 : _o.marketingAirlineName
44573
45315
  )
44574
45316
  ),
44575
45317
  React__default.createElement(
44576
45318
  'div',
44577
- { className: 'flight__info__duration' },
44578
- React__default.createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
45319
+ { className: 'flight__info' },
44579
45320
  React__default.createElement(
44580
45321
  'div',
44581
- { className: 'flight__info__duration__stops' },
44582
- React__default.createElement('div', { className: 'flight__info__duration__stop' })
45322
+ { className: 'flight__info__times' },
45323
+ React__default.createElement(
45324
+ 'strong',
45325
+ null,
45326
+ timeFromDateTime((_p = getDepartureSegment(item.return)) === null || _p === void 0 ? void 0 : _p.departureDateTime),
45327
+ ' ',
45328
+ (_q = getDepartureSegment(item.return)) === null || _q === void 0 ? void 0 : _q.departureAirportCode
45329
+ ),
45330
+ React__default.createElement(
45331
+ 'p',
45332
+ null,
45333
+ longFormatDate((_r = getDepartureSegment(item.return)) === null || _r === void 0 ? void 0 : _r.departureDateTime, language)
45334
+ )
44583
45335
  ),
44584
45336
  React__default.createElement(
44585
- 'span',
44586
- null,
44587
- getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44588
- )
44589
- ),
44590
- React__default.createElement(
44591
- 'div',
44592
- { className: 'flight__info__times flight__info__times--arrival' },
44593
- React__default.createElement(
44594
- 'strong',
44595
- null,
44596
- timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
44597
- ' ',
44598
- (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
45337
+ 'div',
45338
+ { className: 'flight__info__duration' },
45339
+ React__default.createElement('p', null, durationTicksInHoursString(item.return.durationInTicks)),
45340
+ React__default.createElement(
45341
+ 'div',
45342
+ { className: 'flight__info__duration__stops' },
45343
+ React__default.createElement('div', { className: 'flight__info__duration__stop' })
45344
+ ),
45345
+ React__default.createElement(
45346
+ 'span',
45347
+ null,
45348
+ getNumberOfStopsLabel(item.return, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
45349
+ )
44599
45350
  ),
44600
45351
  React__default.createElement(
44601
- 'p',
44602
- null,
44603
- longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
45352
+ 'div',
45353
+ { className: 'flight__info__times flight__info__times--arrival' },
45354
+ React__default.createElement(
45355
+ 'strong',
45356
+ null,
45357
+ timeFromDateTime((_s = getArrivalSegment(item.return)) === null || _s === void 0 ? void 0 : _s.arrivalDateTime),
45358
+ ' ',
45359
+ (_t = getArrivalSegment(item.return)) === null || _t === void 0 ? void 0 : _t.arrivalAirportCode
45360
+ ),
45361
+ React__default.createElement(
45362
+ 'p',
45363
+ null,
45364
+ longFormatDate((_u = getArrivalSegment(item.return)) === null || _u === void 0 ? void 0 : _u.arrivalDateTime, language)
45365
+ )
44604
45366
  )
44605
45367
  )
45368
+ ),
45369
+ React__default.createElement(
45370
+ 'div',
45371
+ { className: 'flight__detail__btn__wrapper' },
45372
+ React__default.createElement(
45373
+ 'div',
45374
+ {
45375
+ className: 'flight__detail__btn '.concat(isReturnOpen ? 'flight__detail__btn--active' : ''),
45376
+ onClick: function () {
45377
+ return setIsReturnOpen(function (prev) {
45378
+ return !prev;
45379
+ });
45380
+ }
45381
+ },
45382
+ React__default.createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
45383
+ )
44606
45384
  )
44607
45385
  ),
44608
45386
  React__default.createElement(
44609
45387
  'div',
44610
- { className: 'flight__detail__btn__wrapper' },
44611
- React__default.createElement(
44612
- 'div',
44613
- {
44614
- className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
44615
- onClick: function () {
44616
- return setDetailsOpen(function (prev) {
44617
- return !prev;
44618
- });
44619
- }
44620
- },
44621
- React__default.createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44622
- )
44623
- )
44624
- ),
44625
- React__default.createElement(
44626
- 'div',
44627
- { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
44628
- (_o = getFlightSegments(item)) === null || _o === void 0
44629
- ? void 0
44630
- : _o.map(function (segment, index) {
44631
- return React__default.createElement(
44632
- React__default.Fragment,
44633
- { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44634
- React__default.createElement(
44635
- 'div',
44636
- { className: 'flight__info' },
44637
- React__default.createElement(
44638
- 'div',
44639
- { className: 'flight__info__times__wrapper' },
44640
- React__default.createElement(
44641
- 'div',
44642
- { className: 'flight__info__times' },
44643
- React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44644
- React__default.createElement('strong', null, segment.departureAirportCode),
44645
- React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
44646
- ),
44647
- React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
44648
- ),
45388
+ { className: 'flight__detail '.concat(isReturnOpen ? 'flight__detail--active' : '') },
45389
+ getFlightSegments(item.return).map(function (segment, index) {
45390
+ return React__default.createElement(
45391
+ React__default.Fragment,
45392
+ { key: 'return-segment-'.concat(index, '-').concat(segment.flightNumber) },
45393
+ React__default.createElement(
45394
+ 'div',
45395
+ { className: 'flight__info' },
45396
+ React__default.createElement(
45397
+ 'div',
45398
+ { className: 'flight__info__times__wrapper' },
44649
45399
  React__default.createElement(
44650
45400
  'div',
44651
- { className: 'flight__info__duration' },
44652
- React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44653
- React__default.createElement('div', { className: 'flight__info__duration__stops' }),
44654
- React__default.createElement('span', null, segment.marketingAirlineName),
44655
- React__default.createElement('strong', null, segment.operatingFlightNumber)
45401
+ { className: 'flight__info__times' },
45402
+ React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
45403
+ React__default.createElement('strong', null, segment.departureAirportCode),
45404
+ React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
44656
45405
  ),
45406
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
45407
+ ),
45408
+ React__default.createElement(
45409
+ 'div',
45410
+ { className: 'flight__info__duration' },
45411
+ React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
45412
+ React__default.createElement('div', { className: 'flight__info__duration__stops' }),
45413
+ React__default.createElement('span', null, segment.marketingAirlineName),
45414
+ React__default.createElement('strong', null, segment.operatingFlightNumber)
45415
+ ),
45416
+ React__default.createElement(
45417
+ 'div',
45418
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
45419
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
44657
45420
  React__default.createElement(
44658
45421
  'div',
44659
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44660
- React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
44661
- React__default.createElement(
44662
- 'div',
44663
- { className: 'flight__info__times flight__info__times--arrival' },
44664
- React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44665
- React__default.createElement('strong', null, segment.arrivalAirportCode),
44666
- React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44667
- )
45422
+ { className: 'flight__info__times flight__info__times--arrival' },
45423
+ React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
45424
+ React__default.createElement('strong', null, segment.arrivalAirportCode),
45425
+ React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44668
45426
  )
44669
- ),
44670
- segment.transferTimeInTicks &&
45427
+ )
45428
+ ),
45429
+ segment.transferTimeInTicks &&
45430
+ React__default.createElement(
45431
+ 'div',
45432
+ { className: 'flight__info' },
45433
+ React__default.createElement('div', { className: 'flight__info__times' }),
44671
45434
  React__default.createElement(
44672
45435
  'div',
44673
- { className: 'flight__info' },
44674
- React__default.createElement('div', { className: 'flight__info__times' }),
45436
+ { className: 'flight__info__duration flight__info__duration--waittime' },
44675
45437
  React__default.createElement(
44676
45438
  'div',
44677
- { className: 'flight__info__duration flight__info__duration--waittime' },
44678
- React__default.createElement(
44679
- 'div',
44680
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44681
- React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44682
- ),
44683
- React__default.createElement(
44684
- 'div',
44685
- { className: 'flight__info__duration__stoptime' },
44686
- React__default.createElement('span', null, 'Stop time'),
44687
- React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44688
- )
45439
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
45440
+ React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44689
45441
  ),
44690
- React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44691
- )
44692
- );
44693
- })
45442
+ React__default.createElement(
45443
+ 'div',
45444
+ { className: 'flight__info__duration__stoptime' },
45445
+ React__default.createElement('span', null, 'Stop time'),
45446
+ React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
45447
+ )
45448
+ ),
45449
+ React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
45450
+ )
45451
+ );
45452
+ })
45453
+ )
44694
45454
  )
44695
- )
44696
45455
  )
44697
45456
  )
44698
45457
  )
@@ -44700,6 +45459,38 @@ var IndependentFlightOption = function (_a) {
44700
45459
  );
44701
45460
  };
44702
45461
 
45462
+ var PairedFlightSelection = function (_a) {
45463
+ var _b;
45464
+ var searchResults = _a.searchResults;
45465
+ var context = useContext(SearchResultsConfigurationContext);
45466
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
45467
+ return React__default.createElement(
45468
+ React__default.Fragment,
45469
+ null,
45470
+ React__default.createElement(
45471
+ 'div',
45472
+ { className: 'search__results__label search__results__label--secondary' },
45473
+ React__default.createElement(
45474
+ 'div',
45475
+ { className: 'search__results__label__date' },
45476
+ React__default.createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
45477
+ ),
45478
+ React__default.createElement(
45479
+ 'div',
45480
+ { className: 'search__results__label__text' },
45481
+ React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, ' ', translations.SIDEBAR.FLIGHT))
45482
+ )
45483
+ ),
45484
+ React__default.createElement(
45485
+ 'div',
45486
+ { className: 'search__results__cards search__results__cards--extended' },
45487
+ searchResults.map(function (result) {
45488
+ return React__default.createElement(PairedFlightOption, { key: 'flight-'.concat(result.guid), item: result });
45489
+ })
45490
+ )
45491
+ );
45492
+ };
45493
+
44703
45494
  var IndependentFlightSelection = function (_a) {
44704
45495
  var _b;
44705
45496
  var searchResults = _a.searchResults;
@@ -44810,189 +45601,79 @@ var IndependentFlightSelection = function (_a) {
44810
45601
  )
44811
45602
  ),
44812
45603
  React__default.createElement(
44813
- 'div',
44814
- { className: 'search__results__cards search__results__cards--extended' },
44815
- selectedOutwardKey && selectedOutward
44816
- ? React__default.createElement(IndependentFlightOption, {
44817
- key: 'flight-'.concat(selectedOutwardKey),
44818
- item: selectedOutward.outward,
44819
- guid: selectedOutward.guid,
44820
- onSelect: function () {
44821
- return setSelectedOutwardKey(null);
44822
- },
44823
- selectedGuid: selectedOutward.guid,
44824
- isOutward: true
44825
- })
44826
- : uniqueOutwardFlights.map(function (result) {
44827
- return React__default.createElement(IndependentFlightOption, {
44828
- key: 'flight-'.concat(result.guid),
44829
- item: result.outward,
44830
- onSelect: function () {
44831
- return setSelectedOutwardKey(getFlightKey(result.outward.segments));
44832
- },
44833
- guid: result.guid,
44834
- isOutward: true
44835
- });
44836
- })
44837
- ),
44838
- React__default.createElement(
44839
- 'div',
44840
- { className: 'search__results__label search__results__label--secondary' },
44841
- React__default.createElement(
44842
- 'div',
44843
- { className: 'search__results__label__date' },
44844
- React__default.createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
44845
- ),
44846
- React__default.createElement(
44847
- 'div',
44848
- { className: 'search__results__label__text' },
44849
- React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, ' ', translations.SRP.RETURN))
44850
- )
44851
- ),
44852
- React__default.createElement(
44853
- 'div',
44854
- { className: 'search__results__cards search__results__cards--extended' },
44855
- selectedReturnKey && selectedReturn
44856
- ? React__default.createElement(IndependentFlightOption, {
44857
- key: 'flight-'.concat(selectedReturnKey),
44858
- item: selectedReturn.return,
44859
- guid: selectedReturn.guid,
44860
- selectedGuid: selectedReturn.guid,
44861
- isOutward: false
44862
- })
44863
- : uniqueReturnFlights.map(function (result) {
44864
- return React__default.createElement(IndependentFlightOption, {
44865
- key: 'flight-'.concat(result.guid),
44866
- item: result.return,
44867
- onSelect: function () {
44868
- return setSelectedReturnKey(getFlightKey(result.return.segments));
44869
- },
44870
- guid: result.guid,
44871
- isOutward: false
44872
- });
44873
- })
44874
- )
44875
- );
44876
- };
44877
-
44878
- var FlightSelection = function (_a) {
44879
- var searchResults = _a.searchResults,
44880
- flightSelectionType = _a.flightSelectionType;
44881
- return flightSelectionType === 'paired'
44882
- ? React__default.createElement(PairedFlightSelection, { searchResults: searchResults })
44883
- : React__default.createElement(IndependentFlightSelection, { searchResults: searchResults });
44884
- };
44885
-
44886
- var MultiRangeFilter = function (_a) {
44887
- var min = _a.min,
44888
- max = _a.max,
44889
- selectedMin = _a.selectedMin,
44890
- selectedMax = _a.selectedMax,
44891
- valueFormatter = _a.valueFormatter,
44892
- onChange = _a.onChange;
44893
- var _b = useState(false),
44894
- isDragging = _b[0],
44895
- setIsDragging = _b[1];
44896
- var _c = useState(0),
44897
- leftPercentage = _c[0],
44898
- setLeftPercentage = _c[1];
44899
- var _d = useState(0),
44900
- rightPercentage = _d[0],
44901
- setRightPercentage = _d[1];
44902
- var _e = useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
44903
- minVal = _e[0],
44904
- setMinVal = _e[1];
44905
- var _f = useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
44906
- maxVal = _f[0],
44907
- setMaxVal = _f[1];
44908
- var minGap = 5;
44909
- // Sync internal state with external selectedMin/selectedMax changes
44910
- useEffect(
44911
- function () {
44912
- setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
44913
- setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
44914
- },
44915
- [min, max, selectedMin, selectedMax]
44916
- );
44917
- // Recalculate slider track whenever values change
44918
- useEffect(
44919
- function () {
44920
- var range = max - min || 1;
44921
- var minPercent = ((minVal - min) / range) * 100;
44922
- var maxPercent = ((maxVal - min) / range) * 100;
44923
- setLeftPercentage(minPercent);
44924
- setRightPercentage(100 - maxPercent);
44925
- },
44926
- [minVal, maxVal, min, max]
44927
- );
44928
- var slideMin = function (e) {
44929
- var value = parseInt(e.target.value, 10);
44930
- // Ensure the thumbs don’t cross and enforce minGap
44931
- if (value <= maxVal - minGap) {
44932
- setMinVal(value);
44933
- }
44934
- };
44935
- var slideMax = function (e) {
44936
- var value = parseInt(e.target.value, 10);
44937
- // Ensure the thumbs don’t cross and enforce minGap
44938
- if (value >= minVal + minGap) {
44939
- setMaxVal(value);
44940
- }
44941
- };
44942
- var startDrag = function () {
44943
- setIsDragging(true);
44944
- };
44945
- var stopDrag = function () {
44946
- setIsDragging(false);
44947
- // Notify parent with the final values
44948
- onChange(minVal, maxVal);
44949
- };
44950
- return React__default.createElement(
44951
- 'div',
44952
- { className: 'double-slider-box' },
45604
+ 'div',
45605
+ { className: 'search__results__cards search__results__cards--extended' },
45606
+ selectedOutwardKey && selectedOutward
45607
+ ? React__default.createElement(IndependentFlightOption, {
45608
+ key: 'flight-'.concat(selectedOutwardKey),
45609
+ item: selectedOutward.outward,
45610
+ guid: selectedOutward.guid,
45611
+ onSelect: function () {
45612
+ return setSelectedOutwardKey(null);
45613
+ },
45614
+ selectedGuid: selectedOutward.guid,
45615
+ isOutward: true
45616
+ })
45617
+ : uniqueOutwardFlights.map(function (result) {
45618
+ return React__default.createElement(IndependentFlightOption, {
45619
+ key: 'flight-'.concat(result.guid),
45620
+ item: result.outward,
45621
+ onSelect: function () {
45622
+ return setSelectedOutwardKey(getFlightKey(result.outward.segments));
45623
+ },
45624
+ guid: result.guid,
45625
+ isOutward: true
45626
+ });
45627
+ })
45628
+ ),
44953
45629
  React__default.createElement(
44954
45630
  'div',
44955
- { className: 'input-box' },
44956
- React__default.createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
44957
- React__default.createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
45631
+ { className: 'search__results__label search__results__label--secondary' },
45632
+ React__default.createElement(
45633
+ 'div',
45634
+ { className: 'search__results__label__date' },
45635
+ React__default.createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
45636
+ ),
45637
+ React__default.createElement(
45638
+ 'div',
45639
+ { className: 'search__results__label__text' },
45640
+ React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, ' ', translations.SRP.RETURN))
45641
+ )
44958
45642
  ),
44959
45643
  React__default.createElement(
44960
45644
  'div',
44961
- { className: 'range-slider' },
44962
- React__default.createElement('div', {
44963
- className: 'slider-track',
44964
- style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
44965
- }),
44966
- React__default.createElement('input', {
44967
- type: 'range',
44968
- min: min,
44969
- max: max,
44970
- value: minVal,
44971
- onChange: slideMin,
44972
- onMouseDown: startDrag,
44973
- onMouseUp: stopDrag,
44974
- onTouchStart: startDrag,
44975
- onTouchEnd: stopDrag,
44976
- className: 'min-val'
44977
- }),
44978
- React__default.createElement('input', {
44979
- type: 'range',
44980
- min: min,
44981
- max: max,
44982
- value: maxVal,
44983
- onChange: slideMax,
44984
- onMouseDown: startDrag,
44985
- onMouseUp: stopDrag,
44986
- onTouchStart: startDrag,
44987
- onTouchEnd: stopDrag,
44988
- className: 'max-val'
44989
- }),
44990
- isDragging && React__default.createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
44991
- isDragging && React__default.createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
45645
+ { className: 'search__results__cards search__results__cards--extended' },
45646
+ selectedReturnKey && selectedReturn
45647
+ ? React__default.createElement(IndependentFlightOption, {
45648
+ key: 'flight-'.concat(selectedReturnKey),
45649
+ item: selectedReturn.return,
45650
+ guid: selectedReturn.guid,
45651
+ selectedGuid: selectedReturn.guid,
45652
+ isOutward: false
45653
+ })
45654
+ : uniqueReturnFlights.map(function (result) {
45655
+ return React__default.createElement(IndependentFlightOption, {
45656
+ key: 'flight-'.concat(result.guid),
45657
+ item: result.return,
45658
+ onSelect: function () {
45659
+ return setSelectedReturnKey(getFlightKey(result.return.segments));
45660
+ },
45661
+ guid: result.guid,
45662
+ isOutward: false
45663
+ });
45664
+ })
44992
45665
  )
44993
45666
  );
44994
45667
  };
44995
45668
 
45669
+ var FlightSelection = function (_a) {
45670
+ var searchResults = _a.searchResults,
45671
+ flightSelectionType = _a.flightSelectionType;
45672
+ return flightSelectionType === 'paired'
45673
+ ? React__default.createElement(PairedFlightSelection, { searchResults: searchResults })
45674
+ : React__default.createElement(IndependentFlightSelection, { searchResults: searchResults });
45675
+ };
45676
+
44996
45677
  var FlightFilters = function (_a) {
44997
45678
  var _b;
44998
45679
  var isOpen = _a.isOpen,
@@ -45994,311 +46675,89 @@ var FlightResultsContainer = function (_a) {
45994
46675
  placeholder: translations.SRP.SORTBY,
45995
46676
  classModifier: 'travel-class-picker__items',
45996
46677
  valueFormatter: function (value, direction) {
45997
- return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
45998
- },
45999
- onPick: handleSortChange
46000
- })
46001
- ),
46002
- React__default.createElement(
46003
- 'div',
46004
- { className: 'search__result-row' },
46005
- React__default.createElement(
46006
- 'span',
46007
- { className: 'search__result-row-text' },
46008
- !flightsLoading &&
46009
- React__default.createElement(
46010
- React__default.Fragment,
46011
- null,
46012
- (results === null || results === void 0 ? void 0 : results.length) &&
46013
- React__default.createElement(React__default.Fragment, null, results.length, ' ', translations.SRP.TOTAL_RESULTS_LABEL)
46014
- )
46015
- ),
46016
- !isMobile &&
46017
- React__default.createElement(
46018
- React__default.Fragment,
46019
- null,
46020
- React__default.createElement(
46021
- 'div',
46022
- { className: 'search__result-row-filter' },
46023
- React__default.createElement(ItemPicker, {
46024
- items: selectionTypes,
46025
- selection:
46026
- ((_c = selectionTypes.find(function (type) {
46027
- return type.id === flightSelectionType;
46028
- })) === null || _c === void 0
46029
- ? void 0
46030
- : _c.label) || undefined,
46031
- label: 'Selection Type',
46032
- placeholder: 'Selection Type',
46033
- classModifier: 'travel-class-picker__items',
46034
- valueFormatter: function (value) {
46035
- return value;
46036
- },
46037
- onPick: function (value) {
46038
- var _a;
46039
- return setFlightSelectionType(
46040
- ((_a = selectionTypes.find(function (type) {
46041
- return type.label === value;
46042
- })) === null || _a === void 0
46043
- ? void 0
46044
- : _a.id) || 'independent'
46045
- );
46046
- }
46047
- })
46048
- ),
46049
- sortByTypes &&
46050
- sortByTypes.length > 0 &&
46051
- React__default.createElement(
46052
- 'div',
46053
- { className: 'search__result-row-filter' },
46054
- React__default.createElement(ItemPicker, {
46055
- items: sortByTypes,
46056
- selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
46057
- selectedSortByType: selectedSortByType || undefined,
46058
- label: translations.SRP.SORTBY,
46059
- placeholder: translations.SRP.SORTBY,
46060
- classModifier: 'travel-class-picker__items',
46061
- valueFormatter: function (value, direction) {
46062
- return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46063
- },
46064
- onPick: handleSortChange
46065
- })
46066
- )
46067
- )
46068
- ),
46069
- React__default.createElement(
46070
- 'div',
46071
- { className: 'search__results__wrapper' },
46072
- flightsLoading && React__default.createElement(Spinner, null),
46073
- (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) == build.PortalQsmType.Flight &&
46074
- (context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
46075
- results &&
46076
- results.length > 0 &&
46077
- React__default.createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
46078
- )
46079
- )
46080
- )
46081
- );
46082
- };
46083
-
46084
- var Filters = function (_a) {
46085
- var _b;
46086
- var initialFilters = _a.initialFilters,
46087
- filters = _a.filters,
46088
- isOpen = _a.isOpen,
46089
- handleSetIsOpen = _a.handleSetIsOpen,
46090
- isLoading = _a.isLoading;
46091
- var context = useContext(SearchResultsConfigurationContext);
46092
- if (!context || !context.showFilters) {
46093
- return null;
46094
- }
46095
- var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
46096
- var _c = useState({}),
46097
- visibleFilters = _c[0],
46098
- setVisibleFilters = _c[1];
46099
- var dispatch = useDispatch();
46100
- var toggleFilterVisibility = function (filterId) {
46101
- setVisibleFilters(function (prev) {
46102
- var _a;
46103
- return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
46104
- });
46105
- };
46106
- var handleCheckBoxFilter = function (filter, option) {
46107
- var updated = filters.map(function (f) {
46108
- var _a;
46109
- if (f.property !== filter.property) return f;
46110
- return __assign(__assign({}, f), {
46111
- options:
46112
- (_a = f.options) === null || _a === void 0
46113
- ? void 0
46114
- : _a.map(function (opt) {
46115
- return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
46116
- })
46117
- });
46118
- });
46119
- dispatch(setFilters(updated));
46120
- };
46121
- var handleSliderChange = function (filter, newMin, newMax) {
46122
- var updated = filters.map(function (f) {
46123
- if (f.property !== filter.property) return f;
46124
- return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
46125
- });
46126
- dispatch(setFilters(updated));
46127
- };
46128
- var handleFullReset = function () {
46129
- if (!isLoading) {
46130
- dispatch(resetFilters(initialFilters));
46131
- }
46132
- };
46133
- return React__default.createElement(
46134
- 'div',
46135
- { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
46136
- React__default.createElement('div', {
46137
- className: 'search__filters--background',
46138
- onClick: function () {
46139
- return handleSetIsOpen();
46140
- }
46141
- }),
46142
- React__default.createElement(
46143
- 'button',
46144
- {
46145
- className: 'search__filters--close',
46146
- onClick: function () {
46147
- return handleSetIsOpen();
46148
- }
46149
- },
46150
- React__default.createElement(Icon$1, { name: 'ui-close', height: 24 })
46151
- ),
46152
- React__default.createElement(
46153
- 'div',
46154
- { className: 'search__filters' },
46155
- React__default.createElement(
46156
- 'div',
46157
- { className: 'search__filter-row search__filter__header' },
46678
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46679
+ },
46680
+ onPick: handleSortChange
46681
+ })
46682
+ ),
46158
46683
  React__default.createElement(
46159
46684
  'div',
46160
- { className: 'search__filter-row-flex-title' },
46161
- React__default.createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
46162
- ),
46163
- !isLoading &&
46685
+ { className: 'search__result-row' },
46164
46686
  React__default.createElement(
46165
- 'a',
46166
- {
46167
- className: 'search__filter-reset',
46168
- onClick: function () {
46169
- return handleFullReset();
46170
- }
46171
- },
46172
- translations.SRP.RESET
46173
- )
46174
- ),
46175
- isLoading
46176
- ? React__default.createElement(Spinner, null)
46177
- : React__default.createElement(
46178
- React__default.Fragment,
46179
- null,
46687
+ 'span',
46688
+ { className: 'search__result-row-text' },
46689
+ !flightsLoading &&
46690
+ React__default.createElement(
46691
+ React__default.Fragment,
46692
+ null,
46693
+ (results === null || results === void 0 ? void 0 : results.length) &&
46694
+ React__default.createElement(React__default.Fragment, null, results.length, ' ', translations.SRP.TOTAL_RESULTS_LABEL)
46695
+ )
46696
+ ),
46697
+ !isMobile &&
46180
46698
  React__default.createElement(
46181
- 'div',
46182
- { className: 'search__filters__group-container' },
46183
- filters.map(function (filter, index) {
46184
- var _a, _b;
46185
- var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
46186
- return React__default.createElement(
46699
+ React__default.Fragment,
46700
+ null,
46701
+ React__default.createElement(
46702
+ 'div',
46703
+ { className: 'search__result-row-filter' },
46704
+ React__default.createElement(ItemPicker, {
46705
+ items: selectionTypes,
46706
+ selection:
46707
+ ((_c = selectionTypes.find(function (type) {
46708
+ return type.id === flightSelectionType;
46709
+ })) === null || _c === void 0
46710
+ ? void 0
46711
+ : _c.label) || undefined,
46712
+ label: 'Selection Type',
46713
+ placeholder: 'Selection Type',
46714
+ classModifier: 'travel-class-picker__items',
46715
+ valueFormatter: function (value) {
46716
+ return value;
46717
+ },
46718
+ onPick: function (value) {
46719
+ var _a;
46720
+ return setFlightSelectionType(
46721
+ ((_a = selectionTypes.find(function (type) {
46722
+ return type.label === value;
46723
+ })) === null || _a === void 0
46724
+ ? void 0
46725
+ : _a.id) || 'independent'
46726
+ );
46727
+ }
46728
+ })
46729
+ ),
46730
+ sortByTypes &&
46731
+ sortByTypes.length > 0 &&
46732
+ React__default.createElement(
46187
46733
  'div',
46188
- { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
46189
- React__default.createElement(
46190
- 'div',
46191
- {
46192
- className: 'search__filter-row search__filter-row--underline',
46193
- onClick: function () {
46194
- return toggleFilterVisibility(filter.property);
46195
- },
46196
- role: 'button',
46197
- tabIndex: 0
46734
+ { className: 'search__result-row-filter' },
46735
+ React__default.createElement(ItemPicker, {
46736
+ items: sortByTypes,
46737
+ selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
46738
+ selectedSortByType: selectedSortByType || undefined,
46739
+ label: translations.SRP.SORTBY,
46740
+ placeholder: translations.SRP.SORTBY,
46741
+ classModifier: 'travel-class-picker__items',
46742
+ valueFormatter: function (value, direction) {
46743
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
46198
46744
  },
46199
- React__default.createElement('h6', { className: 'search__filter-large-title' }, filter.label),
46200
- React__default.createElement(
46201
- 'svg',
46202
- {
46203
- id: 'search-chevron-up-icon',
46204
- className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
46205
- viewBox: '0 0 10 6.063',
46206
- width: 10,
46207
- height: 6.063
46208
- },
46209
- React__default.createElement('path', {
46210
- id: 'Path_62',
46211
- 'data-name': 'Path 62',
46212
- d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
46213
- transform: 'translate(-240 624)',
46214
- fill: '#707070'
46215
- })
46216
- )
46217
- ),
46218
- isVisible &&
46219
- filter.type === 'checkbox' &&
46220
- React__default.createElement(
46221
- 'div',
46222
- { className: 'search__filter-rows' },
46223
- filter.options &&
46224
- filter.options.map(function (option, optionIndex) {
46225
- return React__default.createElement(
46226
- 'div',
46227
- { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
46228
- React__default.createElement(
46229
- 'div',
46230
- { className: 'checkbox' },
46231
- React__default.createElement(
46232
- 'label',
46233
- { className: 'checkbox__label' },
46234
- React__default.createElement('input', {
46235
- type: 'checkbox',
46236
- className: 'checkbox__input checkbox__input--parent',
46237
- checked: option.isChecked,
46238
- onChange: function (e) {
46239
- return handleCheckBoxFilter(filter, option);
46240
- }
46241
- }),
46242
- React__default.createElement('span', { className: 'radiobutton__label-text' }, option.label)
46243
- )
46244
- )
46245
- );
46246
- })
46247
- ),
46248
- isVisible &&
46249
- filter.type === 'toggle' &&
46250
- React__default.createElement(
46251
- 'div',
46252
- { className: 'search__filter-rows' },
46253
- (_b = filter.options) === null || _b === void 0
46254
- ? void 0
46255
- : _b.map(function (option, optionIndex) {
46256
- return React__default.createElement(
46257
- 'div',
46258
- { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
46259
- React__default.createElement('span', { className: 'search__filter-toggle-label' }, option.label),
46260
- React__default.createElement('div', { className: 'checkbox' }),
46261
- React__default.createElement(
46262
- 'label',
46263
- { className: 'checkbox__label' },
46264
- React__default.createElement('input', {
46265
- type: 'checkbox',
46266
- className: 'checkbox__input',
46267
- checked: option.isChecked,
46268
- onChange: function () {
46269
- return handleCheckBoxFilter(filter, option);
46270
- }
46271
- })
46272
- )
46273
- );
46274
- })
46275
- ),
46276
- isVisible &&
46277
- filter &&
46278
- filter.type === 'slider' &&
46279
- (function () {
46280
- var _a, _b, _c, _d;
46281
- var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
46282
- var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
46283
- var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
46284
- var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
46285
- return React__default.createElement(MultiRangeFilter, {
46286
- min: min,
46287
- max: max,
46288
- selectedMin: selectedMin,
46289
- selectedMax: selectedMax,
46290
- valueFormatter: function (value) {
46291
- return ''.concat(value);
46292
- },
46293
- onChange: function (newMin, newMax) {
46294
- handleSliderChange(filter, newMin, newMax);
46295
- }
46296
- });
46297
- })()
46298
- );
46299
- })
46745
+ onPick: handleSortChange
46746
+ })
46747
+ )
46300
46748
  )
46301
- )
46749
+ ),
46750
+ React__default.createElement(
46751
+ 'div',
46752
+ { className: 'search__results__wrapper' },
46753
+ flightsLoading && React__default.createElement(Spinner, null),
46754
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) == build.PortalQsmType.Flight &&
46755
+ (context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
46756
+ results &&
46757
+ results.length > 0 &&
46758
+ React__default.createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
46759
+ )
46760
+ )
46302
46761
  )
46303
46762
  );
46304
46763
  };
@@ -46620,80 +47079,245 @@ var enrichFiltersWithResults = function (results, filters, tags) {
46620
47079
  return updatedFilter;
46621
47080
  });
46622
47081
  };
46623
- var enrichFiltersWithPackageAccoResults = function (results, filters, tags) {
46624
- if (!results || results.length === 0 || !filters) {
46625
- return filters !== null && filters !== void 0 ? filters : [];
46626
- }
46627
- return filters.map(function (filter) {
46628
- var updatedFilter = __assign({}, filter);
46629
- if (filter.property === 'price' && (filter.min == null || filter.max == null)) {
46630
- var prices = results
46631
- .map(function (r) {
46632
- var _a;
46633
- return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
46634
- })
46635
- .filter(function (p) {
46636
- return p > 0;
46637
- });
46638
- if (prices.length > 0) {
46639
- updatedFilter.min = Math.floor(Math.min.apply(Math, prices));
46640
- updatedFilter.max = Math.ceil(Math.max.apply(Math, prices));
46641
- }
46642
- }
46643
- if (filter.property === 'accommodation') {
46644
- var map_4 = new Map();
46645
- results.forEach(function (r) {
46646
- var rooms = flatMap(r.rooms);
46647
- if (rooms) {
46648
- rooms.map(function (room) {
46649
- room.options.map(function (option) {
46650
- if (option.accommodationCode) {
46651
- map_4.set(option.accommodationCode, {
46652
- name: option.accommodationName,
46653
- code: option.accommodationCode
46654
- });
46655
- }
47082
+ var enrichFiltersWithPackageAccoResults = function (results, tags) {
47083
+ var filters = [];
47084
+ if (!results || results.length === 0) {
47085
+ return filters;
47086
+ }
47087
+ var regimeFilter = {
47088
+ property: 'regime',
47089
+ label: 'Regime',
47090
+ type: 'checkbox',
47091
+ options: [],
47092
+ isFrontendFilter: true
47093
+ };
47094
+ var map = new Map();
47095
+ results.forEach(function (r) {
47096
+ var rooms = flatMap(r.rooms);
47097
+ if (rooms) {
47098
+ rooms.map(function (room) {
47099
+ room.options.map(function (option) {
47100
+ if (option.regimeCode) {
47101
+ map.set(option.regimeCode, {
47102
+ name: option.regimeName,
47103
+ code: option.regimeCode
46656
47104
  });
46657
- });
46658
- }
47105
+ }
47106
+ });
46659
47107
  });
46660
- updatedFilter.options = Array.from(map_4.values()).map(function (accommodation) {
46661
- var _a;
46662
- return {
46663
- label: (_a = accommodation.name) !== null && _a !== void 0 ? _a : accommodation.code,
46664
- value: accommodation.code,
46665
- isChecked: false
46666
- };
47108
+ }
47109
+ });
47110
+ regimeFilter.options = Array.from(map.values()).map(function (regime) {
47111
+ var _a;
47112
+ return {
47113
+ label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
47114
+ value: regime.code,
47115
+ isChecked: false
47116
+ };
47117
+ });
47118
+ filters.push(regimeFilter);
47119
+ var priceFilter = {
47120
+ property: 'price',
47121
+ label: 'Prijs',
47122
+ type: 'slider',
47123
+ isFrontendFilter: true
47124
+ };
47125
+ var prices = results
47126
+ .map(function (r) {
47127
+ var _a;
47128
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
47129
+ })
47130
+ .filter(function (p) {
47131
+ return p > 0;
47132
+ });
47133
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
47134
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
47135
+ filters.push(priceFilter);
47136
+ return filters;
47137
+ };
47138
+ var enrichFiltersWithPackageFlightResults = function (results, tags, translations) {
47139
+ var filters = [];
47140
+ if (!results || results.length === 0) {
47141
+ return filters;
47142
+ }
47143
+ // Airlines
47144
+ var airlinesFilter = {
47145
+ label: 'Airlines',
47146
+ property: 'airline',
47147
+ type: 'checkbox',
47148
+ isFrontendFilter: true,
47149
+ options: []
47150
+ };
47151
+ var airlinesFilterMap = new Map();
47152
+ results.map(function (r) {
47153
+ var airlineCode = r.airlineCode;
47154
+ var airlineName = r.airlineName;
47155
+ if (airlineCode && airlineName) {
47156
+ airlinesFilterMap.set(airlineCode, {
47157
+ name: airlineName,
47158
+ code: airlineCode
46667
47159
  });
46668
47160
  }
46669
- if (filter.property === 'regime') {
46670
- var map_5 = new Map();
46671
- results.forEach(function (r) {
46672
- var rooms = flatMap(r.rooms);
46673
- if (rooms) {
46674
- rooms.map(function (room) {
46675
- room.options.map(function (option) {
46676
- if (option.regimeCode) {
46677
- map_5.set(option.regimeCode, {
46678
- name: option.regimeName,
46679
- code: option.regimeCode
46680
- });
46681
- }
46682
- });
46683
- });
46684
- }
47161
+ });
47162
+ airlinesFilter.options = Array.from(airlinesFilterMap.values()).map(function (airline) {
47163
+ var _a;
47164
+ return {
47165
+ label: (_a = airline.name) !== null && _a !== void 0 ? _a : airline.code,
47166
+ value: airline.code,
47167
+ isChecked: false
47168
+ };
47169
+ });
47170
+ filters.push(airlinesFilter);
47171
+ // Number of stops
47172
+ var stopsFilter = {
47173
+ label: 'Number of Stops',
47174
+ property: 'numberOfStops',
47175
+ type: 'checkbox',
47176
+ isFrontendFilter: true,
47177
+ options: []
47178
+ };
47179
+ var stopsMap = new Map();
47180
+ results.map(function (result) {
47181
+ var numberOfStops = getNumberOfStops(result.outward);
47182
+ if (!stopsMap.has(numberOfStops)) {
47183
+ stopsMap.set(numberOfStops, { numberOfStops: numberOfStops });
47184
+ }
47185
+ });
47186
+ stopsFilter.options = Array.from(stopsMap.values()).map(function (stop) {
47187
+ return {
47188
+ label: ''.concat(stop.numberOfStops == 0 ? 'direct' : stop.numberOfStops + ' Stop'.concat(stop.numberOfStops !== 1 ? 's' : '')),
47189
+ value: stop.numberOfStops,
47190
+ isChecked: false
47191
+ };
47192
+ });
47193
+ filters.push(stopsFilter);
47194
+ // Departure range
47195
+ var departureRangeFilter = {
47196
+ label: 'Departure Range',
47197
+ property: 'departureRange',
47198
+ type: 'checkbox',
47199
+ isFrontendFilter: true,
47200
+ options: []
47201
+ };
47202
+ var departureRangeMap = new Map();
47203
+ results.map(function (result) {
47204
+ var _a;
47205
+ var departureRange = rangeFromDateTimeInMinutes((_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime);
47206
+ if (!departureRangeMap.has(departureRange)) {
47207
+ departureRangeMap.set(departureRange, departureRange);
47208
+ }
47209
+ });
47210
+ departureRangeFilter.options = orderBy(Array.from(departureRangeMap.values()), ['id'], ['asc']).map(function (range) {
47211
+ return {
47212
+ label: getDepartureRangeName(translations, range),
47213
+ value: range,
47214
+ isChecked: false
47215
+ };
47216
+ });
47217
+ filters.push(departureRangeFilter);
47218
+ // Departure Airport
47219
+ var departureAirportFilter = {
47220
+ label: 'Departure Airport',
47221
+ property: 'departureAirport',
47222
+ type: 'checkbox',
47223
+ isFrontendFilter: true,
47224
+ options: []
47225
+ };
47226
+ var departureAirportsMap = new Map();
47227
+ results.map(function (result) {
47228
+ var departureSegment = getDepartureSegment(result.outward);
47229
+ var departureAirport = departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportCode;
47230
+ if (departureAirport && !departureAirportsMap.has(departureAirport)) {
47231
+ departureAirportsMap.set(departureAirport, {
47232
+ name: (departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportName) + ' (' + departureAirport + ')',
47233
+ code: departureAirport
46685
47234
  });
46686
- updatedFilter.options = Array.from(map_5.values()).map(function (regime) {
46687
- var _a;
46688
- return {
46689
- label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
46690
- value: regime.code,
46691
- isChecked: false
46692
- };
47235
+ }
47236
+ });
47237
+ departureAirportFilter.options = Array.from(departureAirportsMap.values()).map(function (airport) {
47238
+ var _a;
47239
+ return {
47240
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
47241
+ value: airport.code,
47242
+ isChecked: false
47243
+ };
47244
+ });
47245
+ filters.push(departureAirportFilter);
47246
+ // Arrival Airport
47247
+ var arrivalAirportFilter = {
47248
+ label: 'Arrival Airport',
47249
+ property: 'arrivalAirport',
47250
+ type: 'checkbox',
47251
+ isFrontendFilter: true,
47252
+ options: []
47253
+ };
47254
+ var arrivalAirportsMap = new Map();
47255
+ results.map(function (result) {
47256
+ var arrivalSegment = getArrivalSegment(result.outward);
47257
+ var arrivalAirport = arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportCode;
47258
+ if (arrivalAirport && !arrivalAirportsMap.has(arrivalAirport)) {
47259
+ arrivalAirportsMap.set(arrivalAirport, {
47260
+ name: (arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportName) + ' (' + arrivalAirport + ')',
47261
+ code: arrivalAirport
46693
47262
  });
46694
47263
  }
46695
- return updatedFilter;
46696
47264
  });
47265
+ arrivalAirportFilter.options = Array.from(arrivalAirportsMap.values()).map(function (airport) {
47266
+ var _a;
47267
+ return {
47268
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
47269
+ value: airport.code,
47270
+ isChecked: false
47271
+ };
47272
+ });
47273
+ filters.push(arrivalAirportFilter);
47274
+ // Price
47275
+ var priceFilter = {
47276
+ label: 'Price',
47277
+ property: 'price',
47278
+ type: 'slider',
47279
+ isFrontendFilter: true
47280
+ };
47281
+ var prices = results
47282
+ .map(function (r) {
47283
+ var _a;
47284
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
47285
+ })
47286
+ .filter(function (p) {
47287
+ return p > 0;
47288
+ });
47289
+ if (prices.length > 0) {
47290
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
47291
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
47292
+ }
47293
+ filters.push(priceFilter);
47294
+ // Travel duration
47295
+ var travelDurationFilter = {
47296
+ label: 'Travel Duration',
47297
+ property: 'travelDuration',
47298
+ type: 'slider',
47299
+ isFrontendFilter: true
47300
+ };
47301
+ var minTravelTimeDuration = Math.min.apply(
47302
+ Math,
47303
+ results.map(function (result) {
47304
+ return result.outward.durationInTicks;
47305
+ })
47306
+ );
47307
+ var maxTravelTimeDuration = Math.max.apply(
47308
+ Math,
47309
+ results.map(function (result) {
47310
+ return result.outward.durationInTicks;
47311
+ })
47312
+ );
47313
+ var minTravelTimeValue = durationInTicksInMinutes(minTravelTimeDuration);
47314
+ var maxTravelTimeValue = durationInTicksInMinutes(maxTravelTimeDuration);
47315
+ if (minTravelTimeValue != null && maxTravelTimeValue != null) {
47316
+ travelDurationFilter.min = minTravelTimeValue;
47317
+ travelDurationFilter.max = maxTravelTimeValue;
47318
+ }
47319
+ filters.push(travelDurationFilter);
47320
+ return filters;
46697
47321
  };
46698
47322
  var applyFilters = function (results, filters, sortBy) {
46699
47323
  var filtered = results.filter(function (r) {
@@ -46835,6 +47459,147 @@ var applyFiltersToPackageAccoResults = function (results, filters, sortBy) {
46835
47459
  return 0;
46836
47460
  });
46837
47461
  };
47462
+ var applyFiltersToPackageFlightResults = function (results, filters, sortBy) {
47463
+ var filtered = results.filter(function (result) {
47464
+ return filters.every(function (filter) {
47465
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
47466
+ if (!filter.isFrontendFilter) return true;
47467
+ // Airline
47468
+ if (filter.property === 'airline') {
47469
+ var selected =
47470
+ (_a = filter.options) === null || _a === void 0
47471
+ ? void 0
47472
+ : _a
47473
+ .filter(function (o) {
47474
+ return o.isChecked;
47475
+ })
47476
+ .map(function (o) {
47477
+ return o.value;
47478
+ });
47479
+ if (!selected || selected.length === 0) return true;
47480
+ return selected.includes(result.airlineCode);
47481
+ }
47482
+ // Stops
47483
+ if (filter.property === 'numberOfStops') {
47484
+ var selected =
47485
+ (_b = filter.options) === null || _b === void 0
47486
+ ? void 0
47487
+ : _b
47488
+ .filter(function (o) {
47489
+ return o.isChecked;
47490
+ })
47491
+ .map(function (o) {
47492
+ return o.value;
47493
+ });
47494
+ if (!selected || selected.length === 0) return true;
47495
+ return selected.includes(getNumberOfStops(result.outward)) && selected.includes(getNumberOfStops(result.return));
47496
+ }
47497
+ // Departure range
47498
+ if (filter.property === 'departureRange') {
47499
+ var selected =
47500
+ (_c = filter.options) === null || _c === void 0
47501
+ ? void 0
47502
+ : _c
47503
+ .filter(function (o) {
47504
+ return o.isChecked;
47505
+ })
47506
+ .map(function (o) {
47507
+ return o.value;
47508
+ });
47509
+ if (!selected || selected.length === 0) return true;
47510
+ return selected.includes(
47511
+ rangeFromDateTimeInMinutes((_d = getDepartureSegment(result.outward)) === null || _d === void 0 ? void 0 : _d.departureDateTime)
47512
+ );
47513
+ }
47514
+ // Departure airport
47515
+ if (filter.property === 'departureAirport') {
47516
+ var selected =
47517
+ (_e = filter.options) === null || _e === void 0
47518
+ ? void 0
47519
+ : _e
47520
+ .filter(function (o) {
47521
+ return o.isChecked;
47522
+ })
47523
+ .map(function (o) {
47524
+ return o.value;
47525
+ });
47526
+ if (!selected || selected.length === 0) return true;
47527
+ var departureAirportCode = (_f = getDepartureSegment(result.outward)) === null || _f === void 0 ? void 0 : _f.departureAirportCode;
47528
+ if (!departureAirportCode) return false;
47529
+ return selected.includes(departureAirportCode);
47530
+ }
47531
+ // Arrival airport
47532
+ if (filter.property === 'arrivalAirport') {
47533
+ var selected =
47534
+ (_g = filter.options) === null || _g === void 0
47535
+ ? void 0
47536
+ : _g
47537
+ .filter(function (o) {
47538
+ return o.isChecked;
47539
+ })
47540
+ .map(function (o) {
47541
+ return o.value;
47542
+ });
47543
+ if (!selected || selected.length === 0) return true;
47544
+ var arrivalAirportCode = (_h = getArrivalSegment(result.outward)) === null || _h === void 0 ? void 0 : _h.arrivalAirportCode;
47545
+ if (!arrivalAirportCode) return false;
47546
+ return selected.includes(arrivalAirportCode);
47547
+ }
47548
+ // PRICE
47549
+ if (filter.property === 'price') {
47550
+ if (filter.selectedMin != null && result.price < filter.selectedMin) return false;
47551
+ if (filter.selectedMax != null && result.price > filter.selectedMax) return false;
47552
+ return true;
47553
+ }
47554
+ // Travel times
47555
+ if (filter.property === 'travelDuration') {
47556
+ if (
47557
+ filter.selectedMin != null &&
47558
+ durationInTicksInMinutes((_j = result.outward) === null || _j === void 0 ? void 0 : _j.durationInTicks) < filter.selectedMin
47559
+ )
47560
+ return false;
47561
+ if (
47562
+ filter.selectedMax != null &&
47563
+ durationInTicksInMinutes((_k = result.outward) === null || _k === void 0 ? void 0 : _k.durationInTicks) > filter.selectedMax
47564
+ )
47565
+ return false;
47566
+ return true;
47567
+ }
47568
+ return true;
47569
+ });
47570
+ });
47571
+ // SORTING
47572
+ if (!sortBy || sortBy.label === 'default') {
47573
+ return filtered;
47574
+ }
47575
+ if (sortBy.label === 'departureTime') {
47576
+ return orderBy(
47577
+ results,
47578
+ [
47579
+ function (result) {
47580
+ var _a;
47581
+ return (_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime;
47582
+ }
47583
+ ],
47584
+ [sortBy.direction] // or "desc"
47585
+ );
47586
+ } else if (sortBy.label === 'durationInTicks') {
47587
+ return orderBy(
47588
+ results,
47589
+ [
47590
+ function (result) {
47591
+ var _a, _b;
47592
+ return durationInTicksInMinutes(
47593
+ (_b = (_a = result.outward) === null || _a === void 0 ? void 0 : _a.durationInTicks) !== null && _b !== void 0 ? _b : 0
47594
+ );
47595
+ }
47596
+ ],
47597
+ [sortBy.direction] // or "desc"
47598
+ );
47599
+ } else {
47600
+ return orderBy(results, [sortBy.label], [sortBy.direction]);
47601
+ }
47602
+ };
46838
47603
 
46839
47604
  var getSelectedOptionsPerRoom = function (details) {
46840
47605
  var _a;
@@ -47043,28 +47808,30 @@ var SearchResultsContainer = function () {
47043
47808
  results = _c.results,
47044
47809
  filteredResults = _c.filteredResults,
47045
47810
  packagingAccoResults = _c.packagingAccoResults,
47046
- filteredPackagingAccoResults = _c.filteredPackagingAccoResults;
47047
- _c.bookingPackageDetails;
47048
- var isLoading = _c.isLoading,
47811
+ filteredPackagingAccoResults = _c.filteredPackagingAccoResults,
47812
+ isLoading = _c.isLoading,
47049
47813
  flightsLoading = _c.flightsLoading,
47814
+ initialFilters = _c.initialFilters,
47050
47815
  filters = _c.filters,
47816
+ flightFilters = _c.flightFilters,
47051
47817
  selectedSortType = _c.selectedSortType,
47818
+ selectedFlightSortType = _c.selectedFlightSortType,
47052
47819
  selectedSearchResult = _c.selectedSearchResult,
47053
47820
  selectedPackagingAccoResultCode = _c.selectedPackagingAccoResultCode,
47054
47821
  flyInIsOpen = _c.flyInIsOpen,
47055
47822
  packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
47056
47823
  editablePackagingEntry = _c.editablePackagingEntry,
47057
47824
  transactionId = _c.transactionId,
47058
- accommodationFlyInStep = _c.accommodationFlyInStep,
47825
+ flyInType = _c.flyInType,
47059
47826
  itinerary = _c.itinerary,
47060
47827
  packagingFlightResults = _c.packagingFlightResults;
47061
47828
  var isMobile = useMediaQuery('(max-width: 1200px)');
47062
47829
  var _d = useState(false),
47063
47830
  initialFiltersSet = _d[0],
47064
47831
  setInitialFiltersSet = _d[1];
47065
- var _e = useState([]),
47066
- initialFilters = _e[0],
47067
- setInitialFilters = _e[1];
47832
+ var _e = useState(false),
47833
+ initialFlightFiltersSet = _e[0],
47834
+ setInitialFlightFiltersSet = _e[1];
47068
47835
  var _f = useState(false),
47069
47836
  filtersOpen = _f[0],
47070
47837
  setFiltersOpen = _f[1];
@@ -47084,9 +47851,6 @@ var SearchResultsContainer = function () {
47084
47851
  selectedAccommodationSeed = _l[0],
47085
47852
  setSelectedAccommodationSeed = _l[1];
47086
47853
  var skipInitialPackagingAccoDetailsRef = useRef(false);
47087
- var _m = useState(false),
47088
- showAllOutwardFlights = _m[0],
47089
- setShowAllOutwardFlights = _m[1];
47090
47854
  var panelRef = useRef(null);
47091
47855
  var sortByTypes = [
47092
47856
  { direction: 'asc', label: 'default' },
@@ -47403,7 +48167,7 @@ var SearchResultsContainer = function () {
47403
48167
  if (!seed) return [2 /*return*/];
47404
48168
  setDetailsIsLoading(true);
47405
48169
  setSelectedAccommodationSeed(seed);
47406
- dispatch(setAccommodationFlyInStep('results'));
48170
+ dispatch(setFlyInType('acco-results'));
47407
48171
  handleFlyInToggle(true);
47408
48172
  return [4 /*yield*/, getOrCreateTransactionId()];
47409
48173
  case 1:
@@ -47561,7 +48325,7 @@ var SearchResultsContainer = function () {
47561
48325
  enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47562
48326
  if (!initialFiltersSet) {
47563
48327
  dispatch(resetFilters(enrichedFilters));
47564
- setInitialFilters(enrichedFilters);
48328
+ dispatch(setInitialFilters(enrichedFilters));
47565
48329
  setInitialFiltersSet(true);
47566
48330
  }
47567
48331
  dispatch(setResults(packageSearchResults));
@@ -47636,11 +48400,7 @@ var SearchResultsContainer = function () {
47636
48400
  return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47637
48401
  case 1:
47638
48402
  packageAccoSearchResults = _d.sent();
47639
- enrichedFilters = enrichFiltersWithPackageAccoResults(
47640
- packageAccoSearchResults,
47641
- context.filters,
47642
- (_a = context.tags) !== null && _a !== void 0 ? _a : []
47643
- );
48403
+ enrichedFilters = enrichFiltersWithPackageAccoResults(packageAccoSearchResults, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47644
48404
  if (!initialFiltersSet) {
47645
48405
  dispatch(resetFilters(enrichedFilters));
47646
48406
  setInitialFilters(enrichedFilters);
@@ -47686,11 +48446,12 @@ var SearchResultsContainer = function () {
47686
48446
  };
47687
48447
  var runFlightSearch = function (currentTransactionId, seed) {
47688
48448
  return __awaiter(void 0, void 0, void 0, function () {
47689
- var config, searchRequest, packageFlightSearchResults, firstResult, err_4;
47690
- return __generator(this, function (_a) {
47691
- switch (_a.label) {
48449
+ var config, searchRequest, packageFlightSearchResults, enrichedFilters, initialFilteredResults, firstResult, err_4;
48450
+ var _a;
48451
+ return __generator(this, function (_b) {
48452
+ switch (_b.label) {
47692
48453
  case 0:
47693
- _a.trys.push([0, 2, , 3]);
48454
+ _b.trys.push([0, 2, , 3]);
47694
48455
  if (!context) return [2 /*return*/];
47695
48456
  dispatch(setFlightsLoading(true));
47696
48457
  config = {
@@ -47701,17 +48462,31 @@ var SearchResultsContainer = function () {
47701
48462
  searchRequest.agentId = context.agentId;
47702
48463
  return [4 /*yield*/, build.searchPackagingFlights(config, searchRequest)];
47703
48464
  case 1:
47704
- packageFlightSearchResults = _a.sent();
48465
+ packageFlightSearchResults = _b.sent();
48466
+ enrichedFilters = enrichFiltersWithPackageFlightResults(
48467
+ packageFlightSearchResults,
48468
+ (_a = context.tags) !== null && _a !== void 0 ? _a : [],
48469
+ translations
48470
+ );
48471
+ if (!initialFlightFiltersSet) {
48472
+ dispatch(resetFlightFilters(enrichedFilters));
48473
+ dispatch(setInitialFlightFilters(enrichedFilters));
48474
+ setInitialFlightFiltersSet(true);
48475
+ }
47705
48476
  dispatch(setPackagingFlightResults(packageFlightSearchResults));
47706
- firstResult = first(packageFlightSearchResults);
47707
- if (firstResult) {
47708
- setSelectedOutwardKey(getFlightKey(firstResult.outward.segments));
47709
- setSelectedReturnKey(getFlightKey(firstResult.return.segments));
48477
+ initialFilteredResults = applyFiltersToPackageFlightResults(packageFlightSearchResults, filters, null);
48478
+ dispatch(setFilteredPackagingFlightResults(initialFilteredResults));
48479
+ if (initialFilteredResults.length > 0) {
48480
+ firstResult = first(packageFlightSearchResults);
48481
+ if (firstResult) {
48482
+ dispatch(setSelectedOutwardKey(getFlightKey(firstResult.outward.segments)));
48483
+ dispatch(setSelectedReturnKey(getFlightKey(firstResult.return.segments)));
48484
+ }
47710
48485
  }
47711
48486
  dispatch(setFlightsLoading(false));
47712
48487
  return [3 /*break*/, 3];
47713
48488
  case 2:
47714
- err_4 = _a.sent();
48489
+ err_4 = _b.sent();
47715
48490
  console.error('FlightSearch failed', err_4);
47716
48491
  dispatch(setFlightsLoading(false));
47717
48492
  return [3 /*break*/, 3];
@@ -47933,6 +48708,7 @@ var SearchResultsContainer = function () {
47933
48708
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour
47934
48709
  ) {
47935
48710
  handleFlyInToggle(true);
48711
+ dispatch(setFlyInType('acco-details'));
47936
48712
  }
47937
48713
  _f.label = 1;
47938
48714
  case 1:
@@ -48024,13 +48800,15 @@ var SearchResultsContainer = function () {
48024
48800
  if (selectedPackagingAccoResultCode) {
48025
48801
  fetchPackagingAccoSearchDetails();
48026
48802
  }
48027
- dispatch(setAccommodationFlyInStep('details'));
48028
48803
  },
48029
48804
  [selectedSearchResult, selectedPackagingAccoResultCode]
48030
48805
  );
48031
48806
  useEffect(
48032
48807
  function () {
48033
- if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
48808
+ if (
48809
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
48810
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight
48811
+ ) {
48034
48812
  var filteredPackageAccoResults = applyFiltersToPackageAccoResults(packagingAccoResults, filters, selectedSortType);
48035
48813
  dispatch(setFilteredPackagingAccoResults(filteredPackageAccoResults));
48036
48814
  } else {
@@ -48040,6 +48818,15 @@ var SearchResultsContainer = function () {
48040
48818
  },
48041
48819
  [filters, results, packagingAccoResults, selectedSortType]
48042
48820
  );
48821
+ useEffect(
48822
+ function () {
48823
+ if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight) {
48824
+ var filteredPackageFlightResults = applyFiltersToPackageFlightResults(packagingFlightResults, flightFilters, selectedFlightSortType);
48825
+ dispatch(setFilteredPackagingFlightResults(filteredPackageFlightResults));
48826
+ }
48827
+ },
48828
+ [flightFilters, packagingFlightResults, selectedFlightSortType]
48829
+ );
48043
48830
  useEffect(
48044
48831
  function () {
48045
48832
  setInitialFiltersSet(false);
@@ -48114,7 +48901,6 @@ var SearchResultsContainer = function () {
48114
48901
  return [4 /*yield*/, build.getItinerary(config, request)];
48115
48902
  case 2:
48116
48903
  itinerary_1 = _c.sent();
48117
- console.log('Fetched itinerary', itinerary_1);
48118
48904
  dispatch(setItinerary(itinerary_1));
48119
48905
  setItineraryIsLoading(false);
48120
48906
  return [3 /*break*/, 4];
@@ -48135,37 +48921,22 @@ var SearchResultsContainer = function () {
48135
48921
  [editablePackagingEntry]
48136
48922
  );
48137
48923
  // Flight selection
48138
- var _o = useState(null),
48139
- selectedOutwardKey = _o[0],
48140
- setSelectedOutwardKey = _o[1];
48141
- var _p = useState(null),
48142
- selectedReturnKey = _p[0],
48143
- setSelectedReturnKey = _p[1];
48144
- var uniqueOutwardFlights = React__default.useMemo(
48145
- function () {
48146
- var map = new Map();
48147
- packagingFlightResults.forEach(function (flight) {
48148
- var key = getFlightKey(flight.outward.segments);
48149
- if (!map.has(key)) {
48150
- map.set(key, flight);
48151
- }
48152
- });
48153
- return Array.from(map.values());
48154
- },
48155
- [packagingFlightResults]
48156
- );
48157
- var _q = useState([]),
48158
- uniqueReturnFlights = _q[0],
48159
- setUniqueReturnFlights = _q[1];
48924
+ // const [selectedOutwardKey, setSelectedOutwardKey] = useState<string | null>(null);
48925
+ // const [selectedReturnKey, setSelectedReturnKey] = useState<string | null>(null);
48926
+ var selectedOutwardKey = useSelector(selectSelectedOutwardKey);
48927
+ var selectedReturnKey = useSelector(selectSelectedReturnKey);
48928
+ var uniqueOutwardFlights = useSelector(selectUniqueOutwardFlights);
48929
+ var uniqueReturnFlights = useSelector(selectUniqueReturnFlights);
48930
+ var selectedOutward = useSelector(selectSelectedOutward);
48931
+ var selectedReturn = useSelector(selectSelectedReturn);
48932
+ var selectedCombinationFlight = useSelector(selectSelectedCombinationFlight);
48160
48933
  useEffect(
48161
48934
  function () {
48162
48935
  var _a;
48163
48936
  if (!selectedOutwardKey) {
48164
- setUniqueReturnFlights([]);
48165
- setSelectedReturnKey(null);
48937
+ dispatch(setSelectedReturnKey(null));
48166
48938
  return;
48167
48939
  }
48168
- // Filter combinations that match selected outward fare
48169
48940
  var matchingCombinations = packagingFlightResults.filter(function (flight) {
48170
48941
  return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48171
48942
  });
@@ -48177,44 +48948,26 @@ var SearchResultsContainer = function () {
48177
48948
  }
48178
48949
  });
48179
48950
  var returns = Array.from(returnMap.values());
48180
- setUniqueReturnFlights(returns);
48181
- var firstReturnKey = returns.length > 0 ? getFlightKey((_a = first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments) : null;
48182
- if (firstReturnKey) {
48183
- setSelectedReturnKey(firstReturnKey);
48951
+ var segments = (_a = first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments;
48952
+ var firstReturnKey = returns.length > 0 && segments ? getFlightKey(segments) : null;
48953
+ if (
48954
+ !returns.some(function (x) {
48955
+ return getFlightKey(x.return.segments) === selectedReturnKey;
48956
+ })
48957
+ ) {
48958
+ dispatch(setSelectedReturnKey(firstReturnKey));
48184
48959
  }
48185
48960
  },
48186
- [selectedOutwardKey, packagingFlightResults]
48187
- );
48188
- var selectedOutward = React__default.useMemo(
48189
- function () {
48190
- if (!selectedOutwardKey) return null;
48191
- return (
48192
- packagingFlightResults.find(function (flight) {
48193
- return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48194
- }) || null
48195
- );
48196
- },
48197
- [packagingFlightResults, selectedOutwardKey]
48198
- );
48199
- var selectedReturn = React__default.useMemo(
48200
- function () {
48201
- if (!selectedReturnKey) return null;
48202
- return (
48203
- packagingFlightResults.find(function (flight) {
48204
- return getFlightKey(flight.return.segments) === selectedReturnKey;
48205
- }) || null
48206
- );
48207
- },
48208
- [packagingFlightResults, selectedReturnKey]
48961
+ [selectedOutwardKey, packagingFlightResults, selectedReturnKey, dispatch]
48209
48962
  );
48210
- var selectedCombinationFlight = React__default.useMemo(
48963
+ var visibleOutwardFlights = React__default.useMemo(
48211
48964
  function () {
48212
- if (!selectedOutwardKey || !selectedReturnKey) return undefined;
48213
- return packagingFlightResults.find(function (flight) {
48214
- return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
48965
+ var withoutSelected = uniqueOutwardFlights.filter(function (x) {
48966
+ return getFlightKey(x.outward.segments) !== selectedOutwardKey;
48215
48967
  });
48968
+ return withoutSelected.slice(0, 3);
48216
48969
  },
48217
- [packagingFlightResults, selectedOutwardKey, selectedReturnKey]
48970
+ [uniqueOutwardFlights, selectedOutwardKey]
48218
48971
  );
48219
48972
  // TODO: get details for selected combination flight and show in fly-in
48220
48973
  // useEffect(() => {
@@ -48223,6 +48976,7 @@ var SearchResultsContainer = function () {
48223
48976
  // // onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
48224
48977
  // dispatch(setFlyInIsOpen(true));
48225
48978
  // }, [selectedCombinationFlight, dispatch]);
48979
+ // Build packagingEntry
48226
48980
  useEffect(
48227
48981
  function () {
48228
48982
  var _a, _b, _c, _d;
@@ -48521,12 +49275,10 @@ var SearchResultsContainer = function () {
48521
49275
  lines: []
48522
49276
  };
48523
49277
  };
48524
- var visibleOutwardFlights = React__default.useMemo(
48525
- function () {
48526
- return showAllOutwardFlights ? uniqueOutwardFlights : uniqueOutwardFlights.slice(0, 3);
48527
- },
48528
- [showAllOutwardFlights, uniqueOutwardFlights]
48529
- );
49278
+ var handleShowMoreFlights = function (flyInType) {
49279
+ dispatch(setFlyInType(flyInType));
49280
+ dispatch(setFlyInIsOpen(true));
49281
+ };
48530
49282
  return React__default.createElement(
48531
49283
  'div',
48532
49284
  { id: 'tide-booking', className: 'search__bg' },
@@ -48543,7 +49295,6 @@ var SearchResultsContainer = function () {
48543
49295
  { tideConnection: context.tideConnection },
48544
49296
  React__default.createElement(FlightResultsContainer, { isMobile: isMobile }),
48545
49297
  React__default.createElement(FlyIn, {
48546
- title: 'Select your fare',
48547
49298
  srpType: context.searchConfiguration.qsmType,
48548
49299
  isOpen: flyInIsOpen,
48549
49300
  setIsOpen: handleFlyInToggle,
@@ -48570,7 +49321,13 @@ var SearchResultsContainer = function () {
48570
49321
  return setFiltersOpen(!filtersOpen);
48571
49322
  },
48572
49323
  // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
48573
- isLoading: isLoading
49324
+ isLoading: isLoading,
49325
+ setFilters: function (filters) {
49326
+ return dispatch(setFilters(filters));
49327
+ },
49328
+ resetFilters: function (filters) {
49329
+ return dispatch(resetFilters(filters));
49330
+ }
48574
49331
  }),
48575
49332
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48576
49333
  React__default.createElement(Itinerary, {
@@ -48637,53 +49394,53 @@ var SearchResultsContainer = function () {
48637
49394
  }
48638
49395
  })
48639
49396
  ),
48640
- React__default.createElement(
48641
- 'div',
48642
- { className: 'search__result-row' },
49397
+ context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
48643
49398
  React__default.createElement(
48644
- 'span',
48645
- { className: 'search__result-row-text' },
48646
- !isLoading &&
48647
- context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
49399
+ 'div',
49400
+ { className: 'search__result-row' },
49401
+ React__default.createElement(
49402
+ 'span',
49403
+ { className: 'search__result-row-text' },
49404
+ !isLoading &&
49405
+ React__default.createElement(
49406
+ React__default.Fragment,
49407
+ null,
49408
+ context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
49409
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
49410
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
49411
+ context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
49412
+ (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
49413
+ filteredResults.length,
49414
+ '\u00A0',
49415
+ translations.SRP.TOTAL_RESULTS_LABEL
49416
+ )
49417
+ ),
49418
+ !context.packagingEntry &&
49419
+ !isMobile &&
49420
+ sortByTypes &&
49421
+ sortByTypes.length > 0 &&
48648
49422
  React__default.createElement(
48649
- React__default.Fragment,
48650
- null,
48651
- context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
48652
- (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
48653
- (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
48654
- context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
48655
- (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
48656
- filteredResults.length,
48657
- '\u00A0',
48658
- translations.SRP.TOTAL_RESULTS_LABEL
49423
+ 'div',
49424
+ { className: 'search__result-row-filter' },
49425
+ React__default.createElement(ItemPicker, {
49426
+ items: sortByTypes,
49427
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
49428
+ selectedSortByType: selectedSortType,
49429
+ label: translations.SRP.SORTBY,
49430
+ placeholder: translations.SRP.SORTBY,
49431
+ classModifier: 'travel-class-picker__items',
49432
+ valueFormatter: function (value, direction) {
49433
+ return getSortingName(
49434
+ translations,
49435
+ findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
49436
+ );
49437
+ },
49438
+ onPick: function (newSortKey, direction) {
49439
+ return handleSortChange(newSortKey, direction);
49440
+ }
49441
+ })
48659
49442
  )
48660
49443
  ),
48661
- !context.packagingEntry &&
48662
- !isMobile &&
48663
- sortByTypes &&
48664
- sortByTypes.length > 0 &&
48665
- React__default.createElement(
48666
- 'div',
48667
- { className: 'search__result-row-filter' },
48668
- React__default.createElement(ItemPicker, {
48669
- items: sortByTypes,
48670
- selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
48671
- selectedSortByType: selectedSortType,
48672
- label: translations.SRP.SORTBY,
48673
- placeholder: translations.SRP.SORTBY,
48674
- classModifier: 'travel-class-picker__items',
48675
- valueFormatter: function (value, direction) {
48676
- return getSortingName(
48677
- translations,
48678
- findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
48679
- );
48680
- },
48681
- onPick: function (newSortKey, direction) {
48682
- return handleSortChange(newSortKey, direction);
48683
- }
48684
- })
48685
- )
48686
- ),
48687
49444
  React__default.createElement(
48688
49445
  'div',
48689
49446
  { className: 'search__results__wrapper' },
@@ -48737,7 +49494,7 @@ var SearchResultsContainer = function () {
48737
49494
  item: selectedOutward.outward,
48738
49495
  guid: selectedOutward.outwardGuid,
48739
49496
  onSelect: function () {
48740
- return setSelectedOutwardKey(null);
49497
+ return dispatch(setSelectedOutwardKey(null));
48741
49498
  },
48742
49499
  selectedGuid: selectedOutward.outwardGuid,
48743
49500
  isOutward: true,
@@ -48749,7 +49506,7 @@ var SearchResultsContainer = function () {
48749
49506
  key: 'flight-'.concat(result.outwardGuid),
48750
49507
  item: result.outward,
48751
49508
  onSelect: function () {
48752
- return setSelectedOutwardKey(getFlightKey(result.outward.segments));
49509
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
48753
49510
  },
48754
49511
  guid: result.outwardGuid,
48755
49512
  isOutward: true,
@@ -48768,10 +49525,10 @@ var SearchResultsContainer = function () {
48768
49525
  {
48769
49526
  className: 'cta cta--secondary',
48770
49527
  onClick: function () {
48771
- return setShowAllOutwardFlights(!showAllOutwardFlights);
49528
+ return handleShowMoreFlights('flight-outward-results');
48772
49529
  }
48773
49530
  },
48774
- showAllOutwardFlights ? translations.SRP.SHOW_LESS : translations.SRP.SHOW_MORE
49531
+ translations.SRP.SHOW_MORE
48775
49532
  )
48776
49533
  )
48777
49534
  )
@@ -48826,7 +49583,7 @@ var SearchResultsContainer = function () {
48826
49583
  key: 'flight-'.concat(result.outwardGuid),
48827
49584
  item: result.return,
48828
49585
  onSelect: function () {
48829
- return setSelectedReturnKey(getFlightKey(result.return.segments));
49586
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
48830
49587
  },
48831
49588
  guid: result.outwardGuid,
48832
49589
  isOutward: false,
@@ -48843,7 +49600,6 @@ var SearchResultsContainer = function () {
48843
49600
  )
48844
49601
  ),
48845
49602
  React__default.createElement(FlyIn, {
48846
- title: ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION),
48847
49603
  srpType: context.searchConfiguration.qsmType,
48848
49604
  isOpen: flyInIsOpen,
48849
49605
  setIsOpen: handleFlyInToggle,
@@ -48854,8 +49610,9 @@ var SearchResultsContainer = function () {
48854
49610
  return (panelRef.current = el);
48855
49611
  },
48856
49612
  detailsLoading: detailsIsLoading,
48857
- accommodationStep: accommodationFlyInStep,
48858
- isPackageEditFlow: !!context.packagingEntry
49613
+ flyInType: flyInType,
49614
+ isPackageEditFlow: !!context.packagingEntry,
49615
+ sortByTypes: sortByTypes
48859
49616
  })
48860
49617
  )
48861
49618
  )