@qite/tide-booking-component 1.4.69 → 1.4.70

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 (61) hide show
  1. package/build/build-cjs/index.js +585 -445
  2. package/build/build-cjs/src/qsm/store/qsm-slice.d.ts +4 -4
  3. package/build/build-cjs/src/qsm/types.d.ts +2 -14
  4. package/build/build-cjs/src/search-results/components/filters/filters.d.ts +1 -1
  5. package/build/build-cjs/src/search-results/components/filters/utility.d.ts +2 -2
  6. package/build/build-cjs/src/search-results/components/group-tour/group-tour-card.d.ts +8 -0
  7. package/build/build-cjs/src/search-results/components/group-tour/group-tour-results.d.ts +6 -0
  8. package/build/build-cjs/src/search-results/components/hotel/hotel-accommodation-results.d.ts +0 -2
  9. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +3 -6
  10. package/build/build-cjs/src/search-results/types.d.ts +7 -2
  11. package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +3 -0
  12. package/build/build-cjs/src/shared/components/flyin.d.ts +1 -1
  13. package/build/build-cjs/src/shared/types.d.ts +12 -0
  14. package/build/build-cjs/src/shared/utils/localization-util.d.ts +4 -0
  15. package/build/build-esm/index.js +585 -444
  16. package/build/build-esm/src/qsm/store/qsm-slice.d.ts +4 -4
  17. package/build/build-esm/src/qsm/types.d.ts +2 -14
  18. package/build/build-esm/src/search-results/components/filters/filters.d.ts +1 -1
  19. package/build/build-esm/src/search-results/components/filters/utility.d.ts +2 -2
  20. package/build/build-esm/src/search-results/components/group-tour/group-tour-card.d.ts +8 -0
  21. package/build/build-esm/src/search-results/components/group-tour/group-tour-results.d.ts +6 -0
  22. package/build/build-esm/src/search-results/components/hotel/hotel-accommodation-results.d.ts +0 -2
  23. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +3 -6
  24. package/build/build-esm/src/search-results/types.d.ts +7 -2
  25. package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +3 -0
  26. package/build/build-esm/src/shared/components/flyin.d.ts +1 -1
  27. package/build/build-esm/src/shared/types.d.ts +12 -0
  28. package/build/build-esm/src/shared/utils/localization-util.d.ts +4 -0
  29. package/package.json +1 -1
  30. package/src/qsm/components/QSMContainer/qsm-container.tsx +3 -2
  31. package/src/qsm/store/qsm-slice.ts +4 -4
  32. package/src/qsm/types.ts +2 -15
  33. package/src/search-results/components/filters/filters.tsx +136 -293
  34. package/src/search-results/components/filters/utility.tsx +61 -2
  35. package/src/search-results/components/group-tour/group-tour-card.tsx +86 -0
  36. package/src/search-results/components/group-tour/group-tour-results.tsx +40 -0
  37. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +13 -16
  38. package/src/search-results/components/icon.tsx +18 -0
  39. package/src/search-results/components/search-results-container/search-results-container.tsx +31 -19
  40. package/src/search-results/store/search-results-slice.ts +8 -2
  41. package/src/search-results/types.ts +9 -2
  42. package/src/search-results/utils/search-results-utils.ts +42 -0
  43. package/src/shared/components/flyin.tsx +2 -1
  44. package/src/shared/translations/ar-SA.json +2 -1
  45. package/src/shared/translations/da-DK.json +2 -1
  46. package/src/shared/translations/de-DE.json +2 -1
  47. package/src/shared/translations/en-GB.json +2 -1
  48. package/src/shared/translations/es-ES.json +2 -1
  49. package/src/shared/translations/fr-BE.json +2 -1
  50. package/src/shared/translations/fr-FR.json +2 -1
  51. package/src/shared/translations/is-IS.json +2 -1
  52. package/src/shared/translations/it-IT.json +2 -1
  53. package/src/shared/translations/ja-JP.json +2 -1
  54. package/src/shared/translations/nl-BE.json +2 -1
  55. package/src/shared/translations/nl-NL.json +2 -1
  56. package/src/shared/translations/no-NO.json +2 -1
  57. package/src/shared/translations/pl-PL.json +2 -1
  58. package/src/shared/translations/pt-PT.json +2 -1
  59. package/src/shared/translations/sv-SE.json +2 -1
  60. package/src/shared/types.ts +13 -0
  61. package/src/shared/utils/localization-util.ts +16 -0
@@ -651,7 +651,8 @@ var SRP$f = {
651
651
  DEPARTURE_TIME_ASC: 'وقت المغادرة تصاعدياً',
652
652
  DEPARTURE_TIME_DESC: 'وقت المغادرة تنازلياً',
653
653
  DURATION_ASC: 'المدة تصاعدياً',
654
- DURATION_DESC: 'المدة تنازلياً'
654
+ DURATION_DESC: 'المدة تنازلياً',
655
+ TRAVEL_GROUP: 'مجموعة المسافرين'
655
656
  };
656
657
  var arJson = {
657
658
  STEPS: STEPS$f,
@@ -1050,7 +1051,8 @@ var SRP$e = {
1050
1051
  DEPARTURE_TIME_ASC: 'Afgangstid stigende',
1051
1052
  DEPARTURE_TIME_DESC: 'Afgangstid faldende',
1052
1053
  DURATION_ASC: 'Varighed stigende',
1053
- DURATION_DESC: 'Varighed faldende'
1054
+ DURATION_DESC: 'Varighed faldende',
1055
+ TRAVEL_GROUP: 'Rejseselskab'
1054
1056
  };
1055
1057
  var daJson = {
1056
1058
  STEPS: STEPS$e,
@@ -1450,7 +1452,8 @@ var SRP$d = {
1450
1452
  DEPARTURE_RANGE: 'Abflugzeitraum',
1451
1453
  DEPARTURE_AIRPORTS: 'Abflughäfen',
1452
1454
  ARRIVAL_AIRPORTS: 'Ankunftsflughäfen',
1453
- PRICE: 'Preis'
1455
+ PRICE: 'Preis',
1456
+ TRAVEL_GROUP: 'Reisegruppe'
1454
1457
  };
1455
1458
  var deJson = {
1456
1459
  STEPS: STEPS$d,
@@ -1853,7 +1856,8 @@ var SRP$c = {
1853
1856
  NIGHT_RANGE: 'Night',
1854
1857
  DEPARTURE_RANGE: 'Departure range',
1855
1858
  DEPARTURE_AIRPORTS: 'Departure airports',
1856
- ARRIVAL_AIRPORTS: 'Arrival airports'
1859
+ ARRIVAL_AIRPORTS: 'Arrival airports',
1860
+ TRAVEL_GROUP: 'Travel group'
1857
1861
  };
1858
1862
  var enJson = {
1859
1863
  STEPS: STEPS$c,
@@ -2253,7 +2257,8 @@ var SRP$b = {
2253
2257
  DEPARTURE_RANGE: 'Franja de salida',
2254
2258
  DEPARTURE_AIRPORTS: 'Aeropuertos de salida',
2255
2259
  ARRIVAL_AIRPORTS: 'Aeropuertos de llegada',
2256
- PRICE: 'Precio'
2260
+ PRICE: 'Precio',
2261
+ TRAVEL_GROUP: 'Grupo de viaje'
2257
2262
  };
2258
2263
  var esJson = {
2259
2264
  STEPS: STEPS$b,
@@ -2657,7 +2662,8 @@ var SRP$a = {
2657
2662
  DEPARTURE_RANGE: 'Plage de départ',
2658
2663
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
2659
2664
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
2660
- PRICE: 'Prix'
2665
+ PRICE: 'Prix',
2666
+ TRAVEL_GROUP: 'Groupe de voyageurs'
2661
2667
  };
2662
2668
  var frBeJson = {
2663
2669
  STEPS: STEPS$a,
@@ -3056,7 +3062,8 @@ var SRP$9 = {
3056
3062
  DEPARTURE_RANGE: 'Plage de départ',
3057
3063
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
3058
3064
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
3059
- PRICE: 'Prix'
3065
+ PRICE: 'Prix',
3066
+ TRAVEL_GROUP: 'Groupe de voyageurs'
3060
3067
  };
3061
3068
  var frFrJson = {
3062
3069
  STEPS: STEPS$9,
@@ -3455,7 +3462,8 @@ var SRP$8 = {
3455
3462
  DEPARTURE_RANGE: 'Brottfarartímabil',
3456
3463
  DEPARTURE_AIRPORTS: 'Brottfararflugvellir',
3457
3464
  ARRIVAL_AIRPORTS: 'Komuflugvellir',
3458
- PRICE: 'Verð'
3465
+ PRICE: 'Verð',
3466
+ TRAVEL_GROUP: 'Ferðahópur'
3459
3467
  };
3460
3468
  var isJson = {
3461
3469
  STEPS: STEPS$8,
@@ -3855,7 +3863,8 @@ var SRP$7 = {
3855
3863
  DEPARTURE_RANGE: 'Fascia di partenza',
3856
3864
  DEPARTURE_AIRPORTS: 'Aeroporti di partenza',
3857
3865
  ARRIVAL_AIRPORTS: 'Aeroporti di arrivo',
3858
- PRICE: 'Prezzo'
3866
+ PRICE: 'Prezzo',
3867
+ TRAVEL_GROUP: 'Gruppo di viaggio'
3859
3868
  };
3860
3869
  var itJson = {
3861
3870
  STEPS: STEPS$7,
@@ -4259,7 +4268,8 @@ var SRP$6 = {
4259
4268
  DEPARTURE_RANGE: 'Vertrektijdstip',
4260
4269
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4261
4270
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4262
- PRICE: 'Prijs'
4271
+ PRICE: 'Prijs',
4272
+ TRAVEL_GROUP: 'Reisgezelschap'
4263
4273
  };
4264
4274
  var nlBeJson = {
4265
4275
  STEPS: STEPS$6,
@@ -4659,7 +4669,8 @@ var SRP$5 = {
4659
4669
  DEPARTURE_RANGE: 'Vertrektijdstip',
4660
4670
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4661
4671
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4662
- PRICE: 'Prijs'
4672
+ PRICE: 'Prijs',
4673
+ TRAVEL_GROUP: 'Reisgezelschap'
4663
4674
  };
4664
4675
  var nlNlJson = {
4665
4676
  STEPS: STEPS$5,
@@ -5059,7 +5070,8 @@ var SRP$4 = {
5059
5070
  DEPARTURE_RANGE: 'Avgangsperiode',
5060
5071
  DEPARTURE_AIRPORTS: 'Avgangsflyplasser',
5061
5072
  ARRIVAL_AIRPORTS: 'Ankomstflyplasser',
5062
- PRICE: 'Pris'
5073
+ PRICE: 'Pris',
5074
+ TRAVEL_GROUP: 'Reisefølge'
5063
5075
  };
5064
5076
  var noJson = {
5065
5077
  STEPS: STEPS$4,
@@ -5459,7 +5471,8 @@ var SRP$3 = {
5459
5471
  DEPARTURE_RANGE: 'Zakres wylotu',
5460
5472
  DEPARTURE_AIRPORTS: 'Lotniska wylotu',
5461
5473
  ARRIVAL_AIRPORTS: 'Lotniska przylotu',
5462
- PRICE: 'Cena'
5474
+ PRICE: 'Cena',
5475
+ TRAVEL_GROUP: 'Grupa podróżnych'
5463
5476
  };
5464
5477
  var plJson = {
5465
5478
  STEPS: STEPS$3,
@@ -5859,7 +5872,8 @@ var SRP$2 = {
5859
5872
  DEPARTURE_RANGE: 'Intervalo de partida',
5860
5873
  DEPARTURE_AIRPORTS: 'Aeroportos de partida',
5861
5874
  ARRIVAL_AIRPORTS: 'Aeroportos de chegada',
5862
- PRICE: 'Preço'
5875
+ PRICE: 'Preço',
5876
+ TRAVEL_GROUP: 'Grupo de viajantes'
5863
5877
  };
5864
5878
  var ptJson = {
5865
5879
  STEPS: STEPS$2,
@@ -6259,7 +6273,8 @@ var SRP$1 = {
6259
6273
  DEPARTURE_RANGE: 'Avgångsintervall',
6260
6274
  DEPARTURE_AIRPORTS: 'Avgångsflygplatser',
6261
6275
  ARRIVAL_AIRPORTS: 'Ankomstflygplatser',
6262
- PRICE: 'Pris'
6276
+ PRICE: 'Pris',
6277
+ TRAVEL_GROUP: 'Resesällskap'
6263
6278
  };
6264
6279
  var svJson = {
6265
6280
  STEPS: STEPS$1,
@@ -6657,7 +6672,8 @@ var SRP = {
6657
6672
  DEPARTURE_RANGE: '出発時間帯',
6658
6673
  DEPARTURE_AIRPORTS: '出発空港',
6659
6674
  ARRIVAL_AIRPORTS: '到着空港',
6660
- PRICE: '価格'
6675
+ PRICE: '価格',
6676
+ TRAVEL_GROUP: '旅行グループ'
6661
6677
  };
6662
6678
  var jaJson = {
6663
6679
  STEPS: STEPS,
@@ -6864,6 +6880,18 @@ var rangeFromDateTimeInMinutes = function (dateTime) {
6864
6880
  return DepartureRange.Night;
6865
6881
  }
6866
6882
  };
6883
+ var calculateNights = function (fromDate, toDate) {
6884
+ var from = new Date(fromDate);
6885
+ var to = new Date(toDate);
6886
+ // Normalize to midnight to avoid time issues
6887
+ from.setHours(0, 0, 0, 0);
6888
+ to.setHours(0, 0, 0, 0);
6889
+ var diffTime = to.getTime() - from.getTime();
6890
+ return diffTime / (1000 * 60 * 60 * 24);
6891
+ };
6892
+ var calculateDays = function (fromDate, toDate) {
6893
+ return calculateNights(fromDate, toDate) + 1;
6894
+ };
6867
6895
 
6868
6896
  var getDateFromParams = function (params, name) {
6869
6897
  var dateString = params.get(name);
@@ -33251,6 +33279,7 @@ var SearchResultsConfigurationContext = React__default.createContext(undefined);
33251
33279
  var _a;
33252
33280
  var initialState$1 = {
33253
33281
  results: [],
33282
+ filteredResults: [],
33254
33283
  selectedHotelId: null,
33255
33284
  selectedFlight: null,
33256
33285
  selectedFlightDetails: null,
@@ -33268,7 +33297,10 @@ var searchResultsSlice = createSlice({
33268
33297
  initialState: initialState$1,
33269
33298
  reducers: {
33270
33299
  setResults: function (state, action) {
33271
- state.results = action.payload.results;
33300
+ state.results = action.payload;
33301
+ },
33302
+ setFilteredResults: function (state, action) {
33303
+ state.filteredResults = action.payload;
33272
33304
  },
33273
33305
  setSelectedHotel: function (state, action) {
33274
33306
  state.selectedHotelId = action.payload;
@@ -33337,6 +33369,7 @@ var searchResultsSlice = createSlice({
33337
33369
  }
33338
33370
  });
33339
33371
  var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33372
+ setFilteredResults = _a.setFilteredResults,
33340
33373
  setSelectedHotel = _a.setSelectedHotel,
33341
33374
  setSelectedFlight = _a.setSelectedFlight,
33342
33375
  setSelectedFlightDetails = _a.setSelectedFlightDetails,
@@ -34351,6 +34384,27 @@ var Icon$1 = function (_a) {
34351
34384
  fill: 'currentColor'
34352
34385
  })
34353
34386
  );
34387
+ case 'ui-other':
34388
+ return React__default.createElement(
34389
+ 'svg',
34390
+ {
34391
+ className: ['icon', 'icon--'.concat(name), className]
34392
+ .filter(function (className) {
34393
+ return !isEmpty(className);
34394
+ })
34395
+ .join(' '),
34396
+ width: width,
34397
+ height: height,
34398
+ viewBox: '0 0 640 512',
34399
+ fill: fill !== null && fill !== void 0 ? fill : 'currentColor'
34400
+ },
34401
+ React__default.createElement(HTMLComment, { text: '!Font Awesome Free 6.7.2 - mars-and-venus' }),
34402
+ title && React__default.createElement('title', null, title),
34403
+ React__default.createElement('path', {
34404
+ d: 'M320 32c0-17.7 14.3-32 32-32l128 0c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-50.7-64.2 64.2c19.5 28.4 31 62.7 31 99.8 0 97.2-78.8 176-176 176S32 401.2 32 304s78.8-176 176-176c37.1 0 71.4 11.5 99.8 31l64.2-64.2L320 96c-17.7 0-32-14.3-32-32zM208 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z',
34405
+ fill: 'currentColor'
34406
+ })
34407
+ );
34354
34408
  default:
34355
34409
  return null;
34356
34410
  }
@@ -37824,7 +37878,9 @@ var mapSearchResult = function (searchResult, cmsItem, languageCode, translation
37824
37878
  : ((_h = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.parentItem) === null || _h === void 0 ? void 0 : _h.name) || '',
37825
37879
  price: formatPrice(searchResult.price, searchResult.currencyCode, languageCode),
37826
37880
  ctaText: translations === null || translations === void 0 ? void 0 : translations.SRP.VIEW_DETAILS,
37827
- days: calculateNights(searchResult.stayFromDate, searchResult.stayToDate, translations),
37881
+ days: ''
37882
+ .concat(calculateNights(searchResult.stayFromDate, searchResult.stayToDate), ' ')
37883
+ .concat(translations === null || translations === void 0 ? void 0 : translations.SRP.NIGHTS),
37828
37884
  accommodation: searchResult.accommodationName,
37829
37885
  regime: searchResult.regimeName,
37830
37886
  stars:
@@ -37833,17 +37889,13 @@ var mapSearchResult = function (searchResult, cmsItem, languageCode, translation
37833
37889
  : _k.stars) || searchResult.hotelStars
37834
37890
  };
37835
37891
  };
37836
- var calculateNights = function (fromDate, toDate, translations) {
37837
- var from = new Date(fromDate).getTime(); // returns a number
37838
- var to = new Date(toDate).getTime(); // returns a number
37839
- var diffTime = Math.abs(to - from);
37840
- var diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
37841
- return ''.concat(diffDays, ' ').concat(translations === null || translations === void 0 ? void 0 : translations.SRP.NIGHTS);
37842
- };
37843
37892
  var HotelAccommodationResults = function (_a) {
37844
37893
  var _b, _c;
37845
- var isLoading = _a.isLoading,
37846
- context = _a.context;
37894
+ var isLoading = _a.isLoading;
37895
+ var context = useContext(SearchResultsConfigurationContext);
37896
+ if (!context) {
37897
+ return;
37898
+ }
37847
37899
  if (context.showMockup) {
37848
37900
  return showMocukups(context);
37849
37901
  }
@@ -37860,9 +37912,9 @@ var HotelAccommodationResults = function (_a) {
37860
37912
  var _d = useSelector(function (state) {
37861
37913
  return state.searchResults;
37862
37914
  }),
37863
- results = _d.results,
37915
+ filteredResults = _d.filteredResults,
37864
37916
  activeTab = _d.activeTab;
37865
- if (!results.length) {
37917
+ if (!filteredResults.length) {
37866
37918
  return React__default.createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS);
37867
37919
  }
37868
37920
  var cmsMap = React__default.useMemo(
@@ -37886,7 +37938,7 @@ var HotelAccommodationResults = function (_a) {
37886
37938
  },
37887
37939
  [context.cmsHotelData]
37888
37940
  );
37889
- var firstResult = results === null || results === void 0 ? void 0 : results[0];
37941
+ var firstResult = filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults[0];
37890
37942
  var firstResultDay = (firstResult === null || firstResult === void 0 ? void 0 : firstResult.fromDate) ? format$1(parseISO(firstResult.fromDate), 'd') : null;
37891
37943
  var firstResultMonth = (firstResult === null || firstResult === void 0 ? void 0 : firstResult.fromDate)
37892
37944
  ? format$1(parseISO(firstResult.fromDate), 'MMM')
@@ -37909,7 +37961,7 @@ var HotelAccommodationResults = function (_a) {
37909
37961
  React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, translations.SRP.ACCOMMODATION))
37910
37962
  )
37911
37963
  ),
37912
- renderResults(results, context, cmsMap, activeTab, translations)
37964
+ renderResults(filteredResults, context, cmsMap, activeTab, translations)
37913
37965
  );
37914
37966
  };
37915
37967
  var showMocukups = function (context) {
@@ -38240,12 +38292,11 @@ var RoundTripResults = function () {
38240
38292
  );
38241
38293
  };
38242
38294
 
38243
- var enrichFiltersWithResults = function (results, filters) {
38295
+ var enrichFiltersWithResults = function (results, filters, tags) {
38244
38296
  if (!results || results.length === 0 || !filters) {
38245
38297
  return filters !== null && filters !== void 0 ? filters : [];
38246
38298
  }
38247
- for (var _i = 0, filters_1 = filters; _i < filters_1.length; _i++) {
38248
- var filter = filters_1[_i];
38299
+ var _loop_1 = function (filter) {
38249
38300
  if (filter.property === 'price' && (filter.min == null || filter.max == null)) {
38250
38301
  var prices = results
38251
38302
  .map(function (r) {
@@ -38260,6 +38311,72 @@ var enrichFiltersWithResults = function (results, filters) {
38260
38311
  filter.max = Math.ceil(Math.max.apply(Math, prices));
38261
38312
  }
38262
38313
  }
38314
+ if (filter.property === 'accommodation') {
38315
+ var map_1 = new Map();
38316
+ results.forEach(function (r) {
38317
+ if (r.accommodationCode) {
38318
+ map_1.set(r.accommodationCode, {
38319
+ name: r.accommodationName,
38320
+ code: r.accommodationCode
38321
+ });
38322
+ }
38323
+ });
38324
+ console.log('map', map_1);
38325
+ filter.options = Array.from(map_1.values()).map(function (accommodation) {
38326
+ var _a;
38327
+ return {
38328
+ label: (_a = accommodation.name) !== null && _a !== void 0 ? _a : accommodation.code,
38329
+ value: accommodation.code,
38330
+ isChecked: false
38331
+ };
38332
+ });
38333
+ }
38334
+ if (filter.property === 'regime') {
38335
+ var map_2 = new Map();
38336
+ results.forEach(function (r) {
38337
+ if (r.regimeCode) {
38338
+ map_2.set(r.regimeCode, {
38339
+ name: r.regimeName,
38340
+ code: r.regimeCode
38341
+ });
38342
+ }
38343
+ });
38344
+ filter.options = Array.from(map_2.values()).map(function (regime) {
38345
+ var _a;
38346
+ return {
38347
+ label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
38348
+ value: regime.code,
38349
+ isChecked: false
38350
+ };
38351
+ });
38352
+ }
38353
+ if (filter.property === 'theme') {
38354
+ var map_3 = new Map();
38355
+ results.forEach(function (r) {
38356
+ var _a;
38357
+ (_a = r.tagIds) === null || _a === void 0
38358
+ ? void 0
38359
+ : _a.forEach(function (tagId) {
38360
+ var tag = tags.find(function (t) {
38361
+ return t.id === tagId;
38362
+ });
38363
+ if (tag && tag.id != null && tag.name != null) {
38364
+ map_3.set(tag.id, { name: tag.name, id: tag.id });
38365
+ }
38366
+ });
38367
+ });
38368
+ filter.options = Array.from(map_3.values()).map(function (theme) {
38369
+ return {
38370
+ label: theme.name,
38371
+ value: theme.id,
38372
+ isChecked: false
38373
+ };
38374
+ });
38375
+ }
38376
+ };
38377
+ for (var _i = 0, filters_1 = filters; _i < filters_1.length; _i++) {
38378
+ var filter = filters_1[_i];
38379
+ _loop_1(filter);
38263
38380
  }
38264
38381
  return filters;
38265
38382
  };
@@ -40578,101 +40695,21 @@ var FlightResultsContainer = function (_a) {
40578
40695
  );
40579
40696
  };
40580
40697
 
40581
- var initialFilters = [
40582
- {
40583
- property: 'regime',
40584
- label: 'Regime',
40585
- type: 'checkbox',
40586
- options: [
40587
- {
40588
- label: 'Room only',
40589
- value: ['RO', 'LO', 'OB'],
40590
- isChecked: false
40591
- },
40592
- {
40593
- label: 'Bed & Beakfast',
40594
- value: ['BB', 'KO'],
40595
- isChecked: false
40596
- },
40597
- {
40598
- label: 'Half board',
40599
- value: ['HB'],
40600
- isChecked: false
40601
- },
40602
- {
40603
- label: 'Full board',
40604
- value: ['FB'],
40605
- isChecked: false
40606
- }
40607
- ],
40608
- isFrontendFilter: false
40609
- },
40610
- {
40611
- property: 'price',
40612
- label: 'Prijs',
40613
- type: 'slider',
40614
- isFrontendFilter: false,
40615
- min: 2244,
40616
- max: 6785
40617
- },
40618
- {
40619
- property: 'rating',
40620
- label: 'Rating',
40621
- type: 'star-rating',
40622
- isFrontendFilter: true
40623
- },
40624
- {
40625
- property: 'theme',
40626
- label: "Thema's",
40627
- type: 'toggle',
40628
- options: [
40629
- {
40630
- label: 'Adults',
40631
- value: 1,
40632
- isChecked: false
40633
- },
40634
- {
40635
- label: 'Luxury',
40636
- value: 2,
40637
- isChecked: false
40638
- },
40639
- {
40640
- label: 'Welness & Spa',
40641
- value: 3,
40642
- isChecked: false
40643
- },
40644
- {
40645
- label: 'familie',
40646
- value: 4,
40647
- isChecked: false
40648
- }
40649
- ],
40650
- isFrontendFilter: false
40651
- }
40652
- ];
40653
40698
  var Filters = function (_a) {
40654
40699
  var _b;
40655
- var filters = _a.filters,
40700
+ var initialFilters = _a.initialFilters,
40701
+ filters = _a.filters,
40656
40702
  isOpen = _a.isOpen,
40657
40703
  handleSetIsOpen = _a.handleSetIsOpen,
40658
- handleApplyFilters = _a.handleApplyFilters,
40659
40704
  isLoading = _a.isLoading;
40660
40705
  var context = useContext(SearchResultsConfigurationContext);
40706
+ if (!context || !context.showFilters) {
40707
+ return null;
40708
+ }
40661
40709
  var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
40662
40710
  var _c = useState({}),
40663
40711
  visibleFilters = _c[0],
40664
40712
  setVisibleFilters = _c[1];
40665
- var _d = useState([]),
40666
- pendingFilters = _d[0],
40667
- setPendingFilters = _d[1];
40668
- useEffect(
40669
- function () {
40670
- if (initialFilters.length > 0) {
40671
- setPendingFilters(initialFilters);
40672
- }
40673
- },
40674
- [initialFilters]
40675
- );
40676
40713
  var dispatch = useDispatch();
40677
40714
  var toggleFilterVisibility = function (filterId) {
40678
40715
  setVisibleFilters(function (prev) {
@@ -40680,331 +40717,429 @@ var Filters = function (_a) {
40680
40717
  return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
40681
40718
  });
40682
40719
  };
40683
- var updatePendingFilter = function (updatedFilter) {
40684
- setPendingFilters(function (prevFilters) {
40685
- var index = prevFilters.findIndex(function (f) {
40686
- return f.property === updatedFilter.property;
40687
- });
40688
- if (index !== -1) {
40689
- var newFilters = __spreadArray([], prevFilters, true);
40690
- newFilters[index] = updatedFilter;
40691
- return newFilters;
40692
- } else {
40693
- return __spreadArray(__spreadArray([], prevFilters, true), [updatedFilter], false);
40694
- }
40695
- });
40696
- };
40697
40720
  var handleCheckBoxFilter = function (filter, option) {
40698
- setPendingFilters(function (prev) {
40721
+ var updated = filters.map(function (f) {
40699
40722
  var _a;
40700
- var updated = prev.map(function (f) {
40701
- var _a;
40702
- if (f.property !== filter.property) {
40703
- return f;
40704
- }
40705
- return __assign(__assign({}, f), {
40706
- options:
40707
- (_a = f.options) === null || _a === void 0
40708
- ? void 0
40709
- : _a.map(function (opt) {
40710
- return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
40711
- })
40712
- });
40723
+ if (f.property !== filter.property) return f;
40724
+ return __assign(__assign({}, f), {
40725
+ options:
40726
+ (_a = f.options) === null || _a === void 0
40727
+ ? void 0
40728
+ : _a.map(function (opt) {
40729
+ return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
40730
+ })
40713
40731
  });
40714
- if (!(context === null || context === void 0 ? void 0 : context.useGlobalApplyFilterButton) && !filter.useApplyFilterButton) {
40715
- dispatch(setFilters(updated));
40716
- (_a = context === null || context === void 0 ? void 0 : context.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(context, updated);
40717
- }
40718
- return updated;
40719
40732
  });
40733
+ dispatch(setFilters(updated));
40720
40734
  };
40721
- var handleSliderMinChange = function (filter, value) {
40722
- var _a, _b;
40723
- if (value < ((_b = (_a = filter.selectedMax) !== null && _a !== void 0 ? _a : filter.max) !== null && _b !== void 0 ? _b : 100)) {
40724
- var updatedFilter = __assign(__assign({}, filter), { selectedMin: value });
40725
- updatePendingFilter(updatedFilter);
40726
- if (!(context === null || context === void 0 ? void 0 : context.useGlobalApplyFilterButton) && !filter.useApplyFilterButton) {
40727
- applyFilters();
40728
- }
40729
- }
40730
- };
40731
- var handleSliderMaxChange = function (filter, value) {
40732
- var _a, _b;
40733
- if (value > ((_b = (_a = filter.selectedMin) !== null && _a !== void 0 ? _a : filter.min) !== null && _b !== void 0 ? _b : 0)) {
40734
- var updatedFilter = __assign(__assign({}, filter), { selectedMax: value });
40735
- updatePendingFilter(updatedFilter);
40736
- if (!(context === null || context === void 0 ? void 0 : context.useGlobalApplyFilterButton) && !filter.useApplyFilterButton) {
40737
- applyFilters();
40738
- }
40739
- }
40740
- };
40741
- var applyFilters = function () {
40742
- var _a;
40743
- dispatch(setFilters(pendingFilters));
40744
- (_a = context === null || context === void 0 ? void 0 : context.onFilterChange) === null || _a === void 0 ? void 0 : _a.call(context, pendingFilters);
40745
- handleApplyFilters();
40746
- if (isOpen) {
40747
- handleSetIsOpen();
40748
- }
40735
+ var handleSliderChange = function (filter, newMin, newMax) {
40736
+ var updated = filters.map(function (f) {
40737
+ if (f.property !== filter.property) return f;
40738
+ return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
40739
+ });
40740
+ dispatch(setFilters(updated));
40749
40741
  };
40750
40742
  var handleFullReset = function () {
40751
40743
  if (!isLoading) {
40752
- setPendingFilters(initialFilters);
40753
40744
  dispatch(resetFilters(initialFilters));
40754
40745
  }
40755
40746
  };
40756
- var handleResetPendingChanges = function () {
40757
- setPendingFilters(filters); // ← back to last applied
40758
- };
40759
- var hasPendingChanges = function () {
40760
- return JSON.stringify(pendingFilters) !== JSON.stringify(filters);
40761
- };
40762
- if (!context || !context.showFilters) {
40763
- return null;
40764
- }
40765
40747
  return React__default.createElement(
40766
- React__default.Fragment,
40767
- null,
40748
+ 'div',
40749
+ { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
40750
+ React__default.createElement('div', {
40751
+ className: 'search__filters--background',
40752
+ onClick: function () {
40753
+ return handleSetIsOpen();
40754
+ }
40755
+ }),
40768
40756
  React__default.createElement(
40769
- 'div',
40770
- { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
40771
- React__default.createElement('div', {
40772
- className: 'search__filters--background',
40757
+ 'button',
40758
+ {
40759
+ className: 'search__filters--close',
40773
40760
  onClick: function () {
40774
40761
  return handleSetIsOpen();
40775
40762
  }
40776
- }),
40777
- React__default.createElement(
40778
- 'button',
40779
- {
40780
- className: 'search__filters--close',
40781
- onClick: function () {
40782
- return handleSetIsOpen();
40783
- }
40784
- },
40785
- React__default.createElement(Icon$1, { name: 'ui-close', height: 24 })
40786
- ),
40763
+ },
40764
+ React__default.createElement(Icon$1, { name: 'ui-close', height: 24 })
40765
+ ),
40766
+ React__default.createElement(
40767
+ 'div',
40768
+ { className: 'search__filters' },
40787
40769
  React__default.createElement(
40788
40770
  'div',
40789
- { className: 'search__filters' },
40771
+ { className: 'search__filter-row search__filter__header' },
40790
40772
  React__default.createElement(
40791
40773
  'div',
40792
- { className: 'search__filter-row search__filter__header' },
40774
+ { className: 'search__filter-row-flex-title' },
40775
+ React__default.createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
40776
+ ),
40777
+ !isLoading &&
40793
40778
  React__default.createElement(
40794
- 'div',
40795
- { className: 'search__filter-row-flex-title' },
40796
- React__default.createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
40797
- ),
40798
- !isLoading &&
40779
+ 'a',
40780
+ {
40781
+ className: 'search__filter-reset',
40782
+ onClick: function () {
40783
+ return handleFullReset();
40784
+ }
40785
+ },
40786
+ translations.SRP.RESET
40787
+ )
40788
+ ),
40789
+ isLoading
40790
+ ? React__default.createElement(Spinner, null)
40791
+ : React__default.createElement(
40792
+ React__default.Fragment,
40793
+ null,
40799
40794
  React__default.createElement(
40800
- 'a',
40801
- {
40802
- className: 'search__filter-reset',
40803
- onClick: function () {
40804
- return handleFullReset();
40805
- }
40806
- },
40807
- translations.SRP.RESET
40808
- )
40809
- ),
40810
- isLoading
40811
- ? React__default.createElement(Spinner, null)
40812
- : React__default.createElement(
40813
- React__default.Fragment,
40814
- null,
40815
- React__default.createElement(
40816
- 'div',
40817
- { className: 'search__filters__group-container' },
40818
- pendingFilters.map(function (filter, index) {
40819
- var _a, _b;
40820
- var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
40821
- return React__default.createElement(
40795
+ 'div',
40796
+ { className: 'search__filters__group-container' },
40797
+ filters.map(function (filter, index) {
40798
+ var _a, _b;
40799
+ var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
40800
+ return React__default.createElement(
40801
+ 'div',
40802
+ { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
40803
+ React__default.createElement(
40822
40804
  'div',
40823
- { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
40805
+ {
40806
+ className: 'search__filter-row search__filter-row--underline',
40807
+ onClick: function () {
40808
+ return toggleFilterVisibility(filter.property);
40809
+ },
40810
+ role: 'button',
40811
+ tabIndex: 0
40812
+ },
40813
+ React__default.createElement('h6', { className: 'search__filter-large-title' }, filter.label),
40824
40814
  React__default.createElement(
40825
- 'div',
40815
+ 'svg',
40826
40816
  {
40827
- className: 'search__filter-row search__filter-row--underline',
40828
- onClick: function () {
40829
- return toggleFilterVisibility(filter.property);
40830
- },
40831
- role: 'button',
40832
- tabIndex: 0
40817
+ id: 'search-chevron-up-icon',
40818
+ className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
40819
+ viewBox: '0 0 10 6.063',
40820
+ width: 10,
40821
+ height: 6.063
40833
40822
  },
40834
- React__default.createElement('h6', { className: 'search__filter-large-title' }, filter.label),
40835
- React__default.createElement(
40836
- 'svg',
40837
- {
40838
- id: 'search-chevron-up-icon',
40839
- className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
40840
- viewBox: '0 0 10 6.063',
40841
- width: 10,
40842
- height: 6.063
40843
- },
40844
- React__default.createElement('path', {
40845
- id: 'Path_62',
40846
- 'data-name': 'Path 62',
40847
- d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
40848
- transform: 'translate(-240 624)',
40849
- fill: '#707070'
40823
+ React__default.createElement('path', {
40824
+ id: 'Path_62',
40825
+ 'data-name': 'Path 62',
40826
+ d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
40827
+ transform: 'translate(-240 624)',
40828
+ fill: '#707070'
40829
+ })
40830
+ )
40831
+ ),
40832
+ isVisible &&
40833
+ filter.type === 'checkbox' &&
40834
+ React__default.createElement(
40835
+ 'div',
40836
+ { className: 'search__filter-rows' },
40837
+ filter.options &&
40838
+ filter.options.map(function (option, optionIndex) {
40839
+ return React__default.createElement(
40840
+ 'div',
40841
+ { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
40842
+ React__default.createElement(
40843
+ 'div',
40844
+ { className: 'checkbox' },
40845
+ React__default.createElement(
40846
+ 'label',
40847
+ { className: 'checkbox__label' },
40848
+ React__default.createElement('input', {
40849
+ type: 'checkbox',
40850
+ className: 'checkbox__input checkbox__input--parent',
40851
+ checked: option.isChecked,
40852
+ onChange: function (e) {
40853
+ return handleCheckBoxFilter(filter, option);
40854
+ }
40855
+ }),
40856
+ React__default.createElement('span', { className: 'radiobutton__label-text' }, option.label)
40857
+ )
40858
+ )
40859
+ );
40850
40860
  })
40851
- )
40852
40861
  ),
40853
- isVisible &&
40854
- filter.type === 'checkbox' &&
40855
- React__default.createElement(
40856
- 'div',
40857
- { className: 'search__filter-rows' },
40858
- filter.options &&
40859
- filter.options.map(function (option, optionIndex) {
40862
+ isVisible &&
40863
+ filter.type === 'toggle' &&
40864
+ React__default.createElement(
40865
+ 'div',
40866
+ { className: 'search__filter-rows' },
40867
+ (_b = filter.options) === null || _b === void 0
40868
+ ? void 0
40869
+ : _b.map(function (option, optionIndex) {
40860
40870
  return React__default.createElement(
40861
40871
  'div',
40862
- { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
40872
+ { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
40873
+ React__default.createElement('span', { className: 'search__filter-toggle-label' }, option.label),
40874
+ React__default.createElement('div', { className: 'checkbox' }),
40863
40875
  React__default.createElement(
40864
- 'div',
40865
- { className: 'checkbox' },
40866
- React__default.createElement(
40867
- 'label',
40868
- { className: 'checkbox__label' },
40869
- React__default.createElement('input', {
40870
- type: 'checkbox',
40871
- className: 'checkbox__input checkbox__input--parent',
40872
- checked: option.isChecked,
40873
- onChange: function (e) {
40874
- return handleCheckBoxFilter(filter, option);
40875
- }
40876
- }),
40877
- React__default.createElement('span', { className: 'radiobutton__label-text' }, option.label)
40878
- )
40876
+ 'label',
40877
+ { className: 'checkbox__label' },
40878
+ React__default.createElement('input', {
40879
+ type: 'checkbox',
40880
+ className: 'checkbox__input',
40881
+ checked: option.isChecked,
40882
+ onChange: function () {
40883
+ return handleCheckBoxFilter(filter, option);
40884
+ }
40885
+ })
40879
40886
  )
40880
40887
  );
40881
40888
  })
40882
- ),
40883
- isVisible &&
40884
- filter.type === 'toggle' &&
40885
- React__default.createElement(
40886
- 'div',
40887
- { className: 'search__filter-rows' },
40888
- (_b = filter.options) === null || _b === void 0
40889
- ? void 0
40890
- : _b.map(function (option, optionIndex) {
40891
- return React__default.createElement(
40892
- 'div',
40893
- { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
40894
- React__default.createElement('span', { className: 'search__filter-toggle-label' }, option.label),
40895
- React__default.createElement('div', { className: 'checkbox' }),
40896
- React__default.createElement(
40897
- 'label',
40898
- { className: 'checkbox__label' },
40899
- React__default.createElement('input', {
40900
- type: 'checkbox',
40901
- className: 'checkbox__input',
40902
- checked: option.isChecked,
40903
- onChange: function () {
40904
- return handleCheckBoxFilter(filter, option);
40905
- }
40906
- })
40907
- )
40908
- );
40909
- })
40910
- ),
40911
- isVisible &&
40912
- filter &&
40913
- filter.type === 'slider' &&
40914
- (function () {
40915
- var _a, _b, _c, _d;
40916
- var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
40917
- var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
40918
- var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
40919
- var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
40920
- return React__default.createElement(MultiRangeFilter, {
40921
- min: min,
40922
- max: max,
40923
- selectedMin: selectedMin,
40924
- selectedMax: selectedMax,
40925
- valueFormatter: function (value) {
40926
- return ''.concat(value);
40927
- },
40928
- onChange: function (newMin, newMax) {
40929
- handleSliderMinChange(filter, newMin);
40930
- handleSliderMaxChange(filter, newMax);
40931
- }
40932
- });
40933
- })(),
40934
- isVisible &&
40935
- filter.property === 'rating' &&
40936
- filter.type === 'star-rating' &&
40937
- (function () {
40938
- var _a;
40939
- var selectedRating = (_a = filter.selectedRating) !== null && _a !== void 0 ? _a : 0;
40940
- var handleRatingChange = function (rating) {
40941
- var updatedFilter = __assign(__assign({}, filter), { selectedRating: rating });
40942
- updatePendingFilter(updatedFilter);
40943
- if (!(context === null || context === void 0 ? void 0 : context.useGlobalApplyFilterButton) && !filter.useApplyFilterButton) {
40944
- applyFilters();
40945
- }
40946
- };
40947
- return React__default.createElement(
40948
- 'div',
40949
- { className: 'search__filter-row star-rating-filter' },
40950
- [5, 4, 3, 2, 1].map(function (star) {
40951
- return React__default.createElement(
40952
- 'span',
40953
- {
40954
- key: star,
40955
- className: 'star '.concat(star <= selectedRating ? 'filled' : ''),
40956
- onClick: function () {
40957
- return handleRatingChange(star);
40958
- },
40959
- role: 'button',
40960
- tabIndex: 0,
40961
- onKeyDown: function (e) {
40962
- if (e.key === 'Enter' || e.key === ' ') handleRatingChange(star);
40963
- }
40964
- },
40965
- '\u2605'
40966
- );
40967
- })
40968
- );
40969
- })()
40970
- );
40971
- }),
40972
- context.useGlobalApplyFilterButton &&
40973
- hasPendingChanges() &&
40974
- React__default.createElement(
40975
- 'div',
40976
- { className: 'search__filters__actions' },
40977
- React__default.createElement(
40978
- 'button',
40979
- {
40980
- className: 'cta--secondary ',
40981
- onClick: function () {
40982
- handleResetPendingChanges();
40983
- handleSetIsOpen();
40984
- },
40985
- disabled: isLoading
40986
- },
40987
- translations.SRP.CANCEL
40988
40889
  ),
40989
- React__default.createElement(
40990
- 'button',
40991
- {
40992
- className: 'cta',
40993
- onClick: function () {
40994
- return applyFilters();
40890
+ isVisible &&
40891
+ filter &&
40892
+ filter.type === 'slider' &&
40893
+ (function () {
40894
+ var _a, _b, _c, _d;
40895
+ var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
40896
+ var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
40897
+ var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
40898
+ var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
40899
+ return React__default.createElement(MultiRangeFilter, {
40900
+ min: min,
40901
+ max: max,
40902
+ selectedMin: selectedMin,
40903
+ selectedMax: selectedMax,
40904
+ valueFormatter: function (value) {
40905
+ return ''.concat(value);
40995
40906
  },
40996
- disabled: isLoading
40997
- },
40998
- translations.SRP.APPLY
40999
- )
41000
- )
40907
+ onChange: function (newMin, newMax) {
40908
+ handleSliderChange(filter, newMin, newMax);
40909
+ }
40910
+ });
40911
+ })()
40912
+ );
40913
+ })
40914
+ )
40915
+ )
40916
+ )
40917
+ );
40918
+ };
40919
+
40920
+ var GroupTourCard = function (_a) {
40921
+ var _b;
40922
+ var result = _a.result,
40923
+ languageCode = _a.languageCode;
40924
+ var translations = getTranslations(languageCode !== null && languageCode !== void 0 ? languageCode : 'en-GB');
40925
+ var genders = ((_b = result.allotment) === null || _b === void 0 ? void 0 : _b.travellerGenders) || [];
40926
+ var maleCount = genders.filter(function (g) {
40927
+ return g === 0;
40928
+ }).length;
40929
+ var femaleCount = genders.filter(function (g) {
40930
+ return g === 1;
40931
+ }).length;
40932
+ var otherCount = genders.filter(function (g) {
40933
+ return g === 2;
40934
+ }).length;
40935
+ return React__default.createElement(
40936
+ 'div',
40937
+ { className: 'search__result-card' },
40938
+ React__default.createElement(
40939
+ 'div',
40940
+ { className: 'search__result-card__allotment' },
40941
+ React__default.createElement(
40942
+ 'div',
40943
+ { className: 'search__result-card__allotment__title__wrapper' },
40944
+ React__default.createElement(
40945
+ 'h3',
40946
+ { className: 'search__result-card__allotment__title' },
40947
+ result.name,
40948
+ React__default.createElement(
40949
+ 'span',
40950
+ { className: 'search__result-card__allotment__badge' },
40951
+ React__default.createElement(Icon$1, { name: 'ui-circle-check', width: 14, height: 14 }),
40952
+ 'GAR'
40953
+ )
40954
+ ),
40955
+ React__default.createElement(
40956
+ 'div',
40957
+ { className: 'search__result-card__allotment__container' },
40958
+ React__default.createElement(
40959
+ 'div',
40960
+ { className: 'search__result-card__allotment__header' },
40961
+ React__default.createElement(
40962
+ 'div',
40963
+ { className: 'search__result-card__allotment__wrapper' },
40964
+ React__default.createElement(
40965
+ 'div',
40966
+ { className: 'search__result-card__allotment__date' },
40967
+ React__default.createElement(Icon$1, { name: 'ui-plane', height: 16 }),
40968
+ React__default.createElement(
40969
+ 'div',
40970
+ { className: 'search__result-card__allotment__date--from' },
40971
+ format$1(new Date(result.fromDate), 'dd/MM/yyyy')
40972
+ )
40973
+ ),
40974
+ React__default.createElement(
40975
+ 'div',
40976
+ { className: 'search__result-card__allotment__info' },
40977
+ React__default.createElement('span', null, React__default.createElement(Icon$1, { name: 'ui-calendar', height: 16 })),
40978
+ ' ',
40979
+ calculateDays(result.stayFromDate, result.stayToDate),
40980
+ ' ',
40981
+ translations.PRODUCT.DAYS,
40982
+ ' -',
40983
+ ' ',
40984
+ React__default.createElement('span', null, React__default.createElement(Icon$1, { name: 'ui-moon', height: 16 })),
40985
+ calculateNights(result.stayFromDate, result.stayToDate),
40986
+ ' ',
40987
+ translations.SRP.NIGHTS
41001
40988
  )
41002
40989
  )
40990
+ ),
40991
+ result.allotment &&
40992
+ React__default.createElement(
40993
+ 'div',
40994
+ { className: 'search__result-card__allotment__info' },
40995
+ React__default.createElement(
40996
+ 'span',
40997
+ { className: 'search__result-card__allotment__info__group' },
40998
+ translations === null || translations === void 0 ? void 0 : translations.SRP.TRAVEL_GROUP
40999
+ ),
41000
+ React__default.createElement(
41001
+ 'div',
41002
+ { className: 'search__result-card__allotment__persons' },
41003
+ React__default.createElement(
41004
+ 'div',
41005
+ { className: 'search__result-card__allotment__person' },
41006
+ React__default.createElement(Icon$1, { name: 'ui-men', width: 16, height: 16 }),
41007
+ React__default.createElement('span', null, maleCount, ' p.')
41008
+ ),
41009
+ React__default.createElement(
41010
+ 'div',
41011
+ { className: 'search__result-card__allotment__person' },
41012
+ React__default.createElement(Icon$1, { name: 'ui-women', width: 16, height: 16 }),
41013
+ React__default.createElement('span', null, femaleCount, ' p.')
41014
+ ),
41015
+ React__default.createElement(
41016
+ 'div',
41017
+ { className: 'search__result-card__allotment__person' },
41018
+ React__default.createElement(Icon$1, { name: 'ui-other', width: 16, height: 16 }),
41019
+ React__default.createElement('span', null, otherCount, ' p.')
41020
+ )
41021
+ )
41022
+ )
41023
+ )
41024
+ ),
41025
+ React__default.createElement(
41026
+ 'div',
41027
+ { className: 'search__result-card__allotment__footer' },
41028
+ React__default.createElement(
41029
+ 'div',
41030
+ { className: 'search__result-card__allotment__price__wrapper' },
41031
+ React__default.createElement(
41032
+ 'div',
41033
+ { className: 'search__result-card__allotment__price' },
41034
+ formatPrice(result.price, result.currencyCode, languageCode),
41035
+ ' ',
41036
+ translations.PRODUCT.PER_PERSON
41037
+ )
41038
+ ),
41039
+ React__default.createElement('button', { className: 'cta cta--select' }, 'Bekijk reis')
41003
41040
  )
41004
41041
  )
41005
41042
  );
41006
41043
  };
41007
41044
 
41045
+ var GroupTourResults = function (_a) {
41046
+ var _b, _c;
41047
+ var isLoading = _a.isLoading;
41048
+ var context = useContext(SearchResultsConfigurationContext);
41049
+ if (!context) {
41050
+ return;
41051
+ }
41052
+ if (isLoading) {
41053
+ return React__default.createElement(
41054
+ React__default.Fragment,
41055
+ null,
41056
+ (_b = context.customSpinner) !== null && _b !== void 0 ? _b : React__default.createElement(Spinner, null)
41057
+ );
41058
+ }
41059
+ var translations = getTranslations((_c = context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB');
41060
+ var _d = useSelector(function (state) {
41061
+ return state.searchResults;
41062
+ }),
41063
+ filteredResults = _d.filteredResults;
41064
+ _d.activeTab;
41065
+ if (isEmpty(filteredResults)) {
41066
+ return React__default.createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS);
41067
+ }
41068
+ return React__default.createElement(
41069
+ 'div',
41070
+ { className: 'search__results__cards search__results__cards--list' },
41071
+ filteredResults.map(function (result, index) {
41072
+ return React__default.createElement(GroupTourCard, { key: index, result: result });
41073
+ })
41074
+ );
41075
+ };
41076
+
41077
+ var applyFilters = function (results, filters) {
41078
+ return results.filter(function (r) {
41079
+ return filters.every(function (filter) {
41080
+ var _a, _b, _c, _d;
41081
+ if (!filter.isFrontendFilter) return true;
41082
+ // ACCOMMODATION
41083
+ if (filter.property === 'accommodation') {
41084
+ var selected =
41085
+ (_a = filter.options) === null || _a === void 0
41086
+ ? void 0
41087
+ : _a
41088
+ .filter(function (o) {
41089
+ return o.isChecked;
41090
+ })
41091
+ .map(function (o) {
41092
+ return o.value;
41093
+ });
41094
+ if (!selected || selected.length === 0) return true;
41095
+ return selected.includes(r.accommodationCode);
41096
+ }
41097
+ // REGIME
41098
+ if (filter.property === 'regime') {
41099
+ var selected =
41100
+ (_b = filter.options) === null || _b === void 0
41101
+ ? void 0
41102
+ : _b
41103
+ .filter(function (o) {
41104
+ return o.isChecked;
41105
+ })
41106
+ .map(function (o) {
41107
+ return o.value;
41108
+ });
41109
+ if (!selected || selected.length === 0) return true;
41110
+ if (!r.regimeCode) return false;
41111
+ return selected.includes(r.regimeCode);
41112
+ }
41113
+ // PRICE
41114
+ if (filter.property === 'price') {
41115
+ if (filter.selectedMin != null && r.price < filter.selectedMin) return false;
41116
+ if (filter.selectedMax != null && r.price > filter.selectedMax) return false;
41117
+ return true;
41118
+ }
41119
+ // THEME
41120
+ if (filter.property === 'theme') {
41121
+ var selected_1 =
41122
+ (_c = filter.options) === null || _c === void 0
41123
+ ? void 0
41124
+ : _c
41125
+ .filter(function (o) {
41126
+ return o.isChecked;
41127
+ })
41128
+ .map(function (o) {
41129
+ return o.value;
41130
+ });
41131
+ if (!selected_1 || selected_1.length === 0) return true;
41132
+ return (_d = r.tagIds) === null || _d === void 0
41133
+ ? void 0
41134
+ : _d.some(function (tagId) {
41135
+ return selected_1.includes(tagId);
41136
+ });
41137
+ }
41138
+ return true;
41139
+ });
41140
+ });
41141
+ };
41142
+
41008
41143
  var SearchResultsContainer = function () {
41009
41144
  var _a;
41010
41145
  var dispatch = useDispatch();
@@ -41014,6 +41149,7 @@ var SearchResultsContainer = function () {
41014
41149
  return state.searchResults;
41015
41150
  }),
41016
41151
  results = _b.results,
41152
+ filteredResults = _b.filteredResults,
41017
41153
  bookingPackageDetails = _b.bookingPackageDetails,
41018
41154
  entry = _b.entry,
41019
41155
  isLoading = _b.isLoading,
@@ -41022,21 +41158,18 @@ var SearchResultsContainer = function () {
41022
41158
  selectedHotelId = _b.selectedHotelId,
41023
41159
  flyInIsOpen = _b.flyInIsOpen;
41024
41160
  var isMobile = useMediaQuery('(max-width: 1200px)');
41025
- var _c = useState(0),
41026
- searchTrigger = _c[0],
41027
- setSearchTrigger = _c[1];
41028
- var _d = useState(false),
41029
- initialFiltersSet = _d[0],
41030
- setInitialFiltersSet = _d[1];
41031
- var _e = useState([]);
41032
- _e[0];
41033
- var setInitialFilters = _e[1];
41161
+ var _c = useState(false),
41162
+ initialFiltersSet = _c[0],
41163
+ setInitialFiltersSet = _c[1];
41164
+ var _d = useState([]),
41165
+ initialFilters = _d[0],
41166
+ setInitialFilters = _d[1];
41167
+ var _e = useState(false),
41168
+ filtersOpen = _e[0],
41169
+ setFiltersOpen = _e[1];
41034
41170
  var _f = useState(false),
41035
- filtersOpen = _f[0],
41036
- setFiltersOpen = _f[1];
41037
- var _g = useState(false),
41038
- itineraryOpen = _g[0],
41039
- setItineraryOpen = _g[1];
41171
+ itineraryOpen = _f[0],
41172
+ setItineraryOpen = _f[1];
41040
41173
  var panelRef = useRef(null);
41041
41174
  var sortByTypes = [
41042
41175
  { direction: 'asc', label: 'price' },
@@ -41140,7 +41273,6 @@ var SearchResultsContainer = function () {
41140
41273
  var city = getNumberFromParams(params, 'location');
41141
41274
  var hotel = getNumberFromParams(params, 'hotel');
41142
41275
  var tagId = getNumberFromParams(params, 'tagId');
41143
- // temp hardcoded params
41144
41276
  if (!from || !to) {
41145
41277
  console.error('Missing fromDate or toDate in query params, using default values');
41146
41278
  return null;
@@ -41170,8 +41302,9 @@ var SearchResultsContainer = function () {
41170
41302
  officeId: 1,
41171
41303
  payload: {
41172
41304
  catalogueIds: (_a = context.tideConnection.catalogueIds) !== null && _a !== void 0 ? _a : [],
41173
- serviceType: context.type === 'hotel' || context.type === 'hotel-flight' ? 3 : context.type === 'flight' ? 7 : context.type === 'roundTrip' ? 1 : 0,
41174
- searchType: 0,
41305
+ serviceType:
41306
+ context.type === 'hotel' || context.type === 'hotel-flight' ? 3 : context.type === 'flight' ? 7 : context.type === 'roundTrip' ? 1 : undefined,
41307
+ searchType: context.type === 'groupTour' ? 1 : 0,
41175
41308
  destination: {
41176
41309
  id: Number(destinationId),
41177
41310
  isCountry: destinationIsCountry,
@@ -41192,7 +41325,7 @@ var SearchResultsContainer = function () {
41192
41325
  // .flatMap((o) => o.value.toString()) || [],
41193
41326
  // minPrice: filters.find((f) => f.property === 'price')?.selectedMin,
41194
41327
  // maxPrice: filters.find((f) => f.property === 'price')?.selectedMax,
41195
- useExactDates: true,
41328
+ useExactDates: (context === null || context === void 0 ? void 0 : context.type) === 'groupTour' ? false : true,
41196
41329
  onlyCachedResults: false,
41197
41330
  includeAllAllotments: true,
41198
41331
  productIds: hotel ? [hotel] : [],
@@ -41268,17 +41401,17 @@ var SearchResultsContainer = function () {
41268
41401
  // seperate Search
41269
41402
  useEffect(
41270
41403
  function () {
41271
- var runHotelSearch = function () {
41404
+ var runSearch = function () {
41272
41405
  return __awaiter(void 0, void 0, void 0, function () {
41273
- var config, params, entryId, entryLight, searchRequest, rq, packageSearchResults, enrichedFilters, matching, err_1;
41274
- var _a;
41275
- return __generator(this, function (_b) {
41276
- switch (_b.label) {
41406
+ var config, params, entryId, entryLight, searchRequest, rq, packageSearchResults, enrichedFilters, initialFilteredResults, matching, err_1;
41407
+ var _a, _b;
41408
+ return __generator(this, function (_c) {
41409
+ switch (_c.label) {
41277
41410
  case 0:
41278
41411
  dispatch(setIsLoading(true));
41279
- _b.label = 1;
41412
+ _c.label = 1;
41280
41413
  case 1:
41281
- _b.trys.push([1, 6, , 7]);
41414
+ _c.trys.push([1, 6, , 7]);
41282
41415
  if (!context) {
41283
41416
  return [2 /*return*/];
41284
41417
  }
@@ -41293,7 +41426,7 @@ var SearchResultsContainer = function () {
41293
41426
  if (!entryId) return [3 /*break*/, 3];
41294
41427
  return [4 /*yield*/, build.getEntryLight(config, entryId)];
41295
41428
  case 2:
41296
- entryLight = _b.sent();
41429
+ entryLight = _c.sent();
41297
41430
  // populate itinerary store
41298
41431
  dispatch(setEntry({ entry: entryLight }));
41299
41432
  searchRequest = buildSearchFromEntry(entryLight);
@@ -41304,19 +41437,21 @@ var SearchResultsContainer = function () {
41304
41437
  throw new Error('Invalid search parameters');
41305
41438
  }
41306
41439
  searchRequest = rq;
41307
- _b.label = 4;
41440
+ _c.label = 4;
41308
41441
  case 4:
41309
41442
  return [4 /*yield*/, build.search(config, searchRequest)];
41310
41443
  case 5:
41311
- packageSearchResults = _b.sent();
41444
+ packageSearchResults = _c.sent();
41312
41445
  console.log('Search results', packageSearchResults);
41313
- enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters);
41446
+ enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
41314
41447
  if (!initialFiltersSet) {
41315
41448
  dispatch(resetFilters(enrichedFilters));
41316
41449
  setInitialFilters(enrichedFilters);
41317
41450
  setInitialFiltersSet(true);
41318
41451
  }
41319
- dispatch(setResults({ results: packageSearchResults }));
41452
+ dispatch(setResults(packageSearchResults));
41453
+ initialFilteredResults = applyFilters(packageSearchResults, filters);
41454
+ dispatch(setFilteredResults(initialFilteredResults));
41320
41455
  if ((packageSearchResults === null || packageSearchResults === void 0 ? void 0 : packageSearchResults.length) > 0) {
41321
41456
  if (entryId) {
41322
41457
  matching = packageSearchResults.find(function (r) {
@@ -41326,13 +41461,13 @@ var SearchResultsContainer = function () {
41326
41461
  dispatch(setSelectedHotel(matching.productId));
41327
41462
  }
41328
41463
  } else {
41329
- dispatch(setSelectedHotel((_a = packageSearchResults[0]) === null || _a === void 0 ? void 0 : _a.productId));
41464
+ dispatch(setSelectedHotel((_b = packageSearchResults[0]) === null || _b === void 0 ? void 0 : _b.productId));
41330
41465
  }
41331
41466
  }
41332
41467
  dispatch(setIsLoading(false));
41333
41468
  return [3 /*break*/, 7];
41334
41469
  case 6:
41335
- err_1 = _b.sent();
41470
+ err_1 = _c.sent();
41336
41471
  console.error('Search failed', err_1);
41337
41472
  dispatch(setIsLoading(false));
41338
41473
  return [3 /*break*/, 7];
@@ -41345,13 +41480,14 @@ var SearchResultsContainer = function () {
41345
41480
  if (!(context === null || context === void 0 ? void 0 : context.showMockup)) {
41346
41481
  if (
41347
41482
  (context === null || context === void 0 ? void 0 : context.type) === 'hotel-flight' ||
41348
- (context === null || context === void 0 ? void 0 : context.type) === 'hotel'
41483
+ (context === null || context === void 0 ? void 0 : context.type) === 'hotel' ||
41484
+ (context === null || context === void 0 ? void 0 : context.type) === 'groupTour'
41349
41485
  ) {
41350
- runHotelSearch();
41486
+ runSearch();
41351
41487
  }
41352
41488
  }
41353
41489
  },
41354
- [location.search, searchTrigger]
41490
+ [location.search]
41355
41491
  );
41356
41492
  // Seperate detailsCall
41357
41493
  useEffect(
@@ -41452,6 +41588,13 @@ var SearchResultsContainer = function () {
41452
41588
  },
41453
41589
  [selectedHotelId]
41454
41590
  );
41591
+ useEffect(
41592
+ function () {
41593
+ var filteredResults = applyFilters(results, filters);
41594
+ dispatch(setFilteredResults(filteredResults));
41595
+ },
41596
+ [filters, results]
41597
+ );
41455
41598
  return React__default.createElement(
41456
41599
  'div',
41457
41600
  { id: 'tide-booking', className: 'search__bg' },
@@ -41476,23 +41619,20 @@ var SearchResultsContainer = function () {
41476
41619
  }
41477
41620
  })
41478
41621
  ),
41479
- (context.type === 'hotel-flight' || context.type === 'hotel' || context.type === 'roundTrip') &&
41622
+ (context.type === 'hotel-flight' || context.type === 'hotel' || context.type === 'groupTour' || context.type === 'roundTrip') &&
41480
41623
  React__default.createElement(
41481
41624
  React__default.Fragment,
41482
41625
  null,
41483
41626
  context.type != 'hotel-flight' &&
41484
41627
  context.showFilters &&
41485
41628
  React__default.createElement(Filters, {
41629
+ initialFilters: initialFilters,
41486
41630
  filters: filters,
41487
41631
  isOpen: filtersOpen,
41488
41632
  handleSetIsOpen: function () {
41489
41633
  return setFiltersOpen(!filtersOpen);
41490
41634
  },
41491
- handleApplyFilters: function () {
41492
- return setSearchTrigger(function (prev) {
41493
- return prev + 1;
41494
- });
41495
- },
41635
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
41496
41636
  isLoading: isLoading
41497
41637
  }),
41498
41638
  context.type === 'hotel-flight' &&
@@ -41560,7 +41700,7 @@ var SearchResultsContainer = function () {
41560
41700
  React__default.createElement(
41561
41701
  React__default.Fragment,
41562
41702
  null,
41563
- (results === null || results === void 0 ? void 0 : results.length) && results.length,
41703
+ (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) && filteredResults.length,
41564
41704
  ' ',
41565
41705
  translations.SRP.TOTAL_RESULTS_LABEL
41566
41706
  )
@@ -41586,6 +41726,7 @@ var SearchResultsContainer = function () {
41586
41726
  { className: 'search__results__wrapper' },
41587
41727
  context.showTabViews && React__default.createElement(TabViews, null),
41588
41728
  context.showRoundTripResults && context.showMockup && React__default.createElement(RoundTripResults, null),
41729
+ context.type === 'groupTour' && React__default.createElement(GroupTourResults, { isLoading: isLoading }),
41589
41730
  context.type === 'hotel-flight' &&
41590
41731
  context.showFlightResults &&
41591
41732
  (bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.outwardFlights) &&
@@ -41593,7 +41734,7 @@ var SearchResultsContainer = function () {
41593
41734
  flights: bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.outwardFlights,
41594
41735
  isDeparture: true
41595
41736
  }),
41596
- context.showHotelAccommodationResults && React__default.createElement(HotelAccommodationResults, { isLoading: isLoading, context: context }),
41737
+ context.showHotelAccommodationResults && React__default.createElement(HotelAccommodationResults, { isLoading: isLoading }),
41597
41738
  context.type === 'hotel-flight' &&
41598
41739
  context.showFlightResults &&
41599
41740
  (bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.returnFlights) &&