@qite/tide-booking-component 1.4.103 → 1.4.105

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 (70) hide show
  1. package/build/build-cjs/index.js +2782 -1052
  2. package/build/build-cjs/src/search-results/components/excursions/day-by-day-excursions.d.ts +4 -0
  3. package/build/build-cjs/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  4. package/build/build-cjs/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  5. package/build/build-cjs/src/search-results/components/filters/filters.d.ts +2 -0
  6. package/build/build-cjs/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -0
  7. package/build/build-cjs/src/search-results/store/search-results-selectors.d.ts +546 -0
  8. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +55 -8
  9. package/build/build-cjs/src/search-results/types.d.ts +40 -2
  10. package/build/build-cjs/src/search-results/utils/query-utils.d.ts +1 -0
  11. package/build/build-cjs/src/search-results/utils/search-results-utils.d.ts +8 -6
  12. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +4 -3
  13. package/build/build-cjs/src/shared/components/flyin/packaging-flights-flyin.d.ts +7 -0
  14. package/build/build-cjs/src/shared/utils/localization-util.d.ts +3 -0
  15. package/build/build-cjs/src/shared/utils/tide-api-utils.d.ts +6 -0
  16. package/build/build-esm/index.js +2735 -1023
  17. package/build/build-esm/src/search-results/components/excursions/day-by-day-excursions.d.ts +4 -0
  18. package/build/build-esm/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  19. package/build/build-esm/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  20. package/build/build-esm/src/search-results/components/filters/filters.d.ts +2 -0
  21. package/build/build-esm/src/search-results/components/hotel/hotel-accommodation-results.d.ts +1 -0
  22. package/build/build-esm/src/search-results/store/search-results-selectors.d.ts +546 -0
  23. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +55 -8
  24. package/build/build-esm/src/search-results/types.d.ts +40 -2
  25. package/build/build-esm/src/search-results/utils/query-utils.d.ts +1 -0
  26. package/build/build-esm/src/search-results/utils/search-results-utils.d.ts +8 -6
  27. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +4 -3
  28. package/build/build-esm/src/shared/components/flyin/packaging-flights-flyin.d.ts +7 -0
  29. package/build/build-esm/src/shared/utils/localization-util.d.ts +3 -0
  30. package/build/build-esm/src/shared/utils/tide-api-utils.d.ts +6 -0
  31. package/package.json +2 -2
  32. package/src/booking-wizard/features/flight-options/index.tsx +6 -2
  33. package/src/search-results/components/excursions/day-by-day-excursions.tsx +169 -0
  34. package/src/search-results/components/excursions/excursion-details.tsx +340 -0
  35. package/src/search-results/components/excursions/excursion-results.tsx +186 -0
  36. package/src/search-results/components/filters/filters.tsx +8 -9
  37. package/src/search-results/components/hotel/hotel-accommodation-results.tsx +81 -24
  38. package/src/search-results/components/hotel/hotel-card.tsx +0 -3
  39. package/src/search-results/components/icon.tsx +1 -4
  40. package/src/search-results/components/search-results-container/search-results-container.tsx +208 -130
  41. package/src/search-results/store/search-results-selectors.ts +84 -0
  42. package/src/search-results/store/search-results-slice.ts +138 -15
  43. package/src/search-results/types.ts +55 -2
  44. package/src/search-results/utils/query-utils.ts +1 -0
  45. package/src/search-results/utils/search-results-utils.ts +310 -58
  46. package/src/shared/components/flyin/accommodation-flyin.tsx +4 -2
  47. package/src/shared/components/flyin/flights-flyin.tsx +3 -1
  48. package/src/shared/components/flyin/flyin.tsx +116 -21
  49. package/src/shared/components/flyin/group-tour-flyin.tsx +3 -1
  50. package/src/shared/components/flyin/packaging-flights-flyin.tsx +164 -0
  51. package/src/shared/translations/ar-SA.json +4 -2
  52. package/src/shared/translations/da-DK.json +4 -2
  53. package/src/shared/translations/de-DE.json +4 -2
  54. package/src/shared/translations/en-GB.json +4 -2
  55. package/src/shared/translations/es-ES.json +4 -2
  56. package/src/shared/translations/fr-BE.json +4 -2
  57. package/src/shared/translations/fr-FR.json +4 -2
  58. package/src/shared/translations/is-IS.json +4 -2
  59. package/src/shared/translations/it-IT.json +4 -2
  60. package/src/shared/translations/ja-JP.json +4 -2
  61. package/src/shared/translations/nl-BE.json +4 -2
  62. package/src/shared/translations/nl-NL.json +4 -2
  63. package/src/shared/translations/no-NO.json +4 -2
  64. package/src/shared/translations/pl-PL.json +4 -2
  65. package/src/shared/translations/pt-PT.json +4 -2
  66. package/src/shared/translations/sv-SE.json +4 -2
  67. package/src/shared/utils/localization-util.ts +14 -0
  68. package/src/shared/utils/tide-api-utils.ts +8 -0
  69. package/styles/components/_flyin.scss +16 -0
  70. package/styles/components/_search.scss +15 -2
@@ -608,7 +608,8 @@ var QSM$g = {
608
608
  RETURN_DATE: 'تاريخ العودة',
609
609
  CONFIRM: 'تأكيد',
610
610
  TRAVELERS: 'المسافرون',
611
- GROUP_TOUR: 'جولة جماعية'
611
+ GROUP_TOUR: 'جولة جماعية',
612
+ ALL_TRAVELERS: 'جميع المسافرين'
612
613
  };
613
614
  var SRP$f = {
614
615
  SHOW_MORE: 'عرض المزيد',
@@ -659,7 +660,8 @@ var SRP$f = {
659
660
  DEPARTURE_TIME_DESC: 'وقت المغادرة تنازلياً',
660
661
  DURATION_ASC: 'المدة تصاعدياً',
661
662
  DURATION_DESC: 'المدة تنازلياً',
662
- TRAVEL_GROUP: 'مجموعة المسافرين'
663
+ TRAVEL_GROUP: 'مجموعة المسافرين',
664
+ EXCURSION: 'رحلة'
663
665
  };
664
666
  var arJson = {
665
667
  STEPS: STEPS$f,
@@ -1014,7 +1016,8 @@ var QSM$f = {
1014
1016
  RETURN_DATE: 'Hjemrejsedato',
1015
1017
  CONFIRM: 'Bekræft',
1016
1018
  TRAVELERS: 'Rejsende',
1017
- GROUP_TOUR: 'Grupperejse'
1019
+ GROUP_TOUR: 'Grupperejse',
1020
+ ALL_TRAVELERS: 'Alle rejsende'
1018
1021
  };
1019
1022
  var SRP$e = {
1020
1023
  SHOW_MORE: 'Vis flere',
@@ -1065,7 +1068,8 @@ var SRP$e = {
1065
1068
  DEPARTURE_TIME_DESC: 'Afgangstid faldende',
1066
1069
  DURATION_ASC: 'Varighed stigende',
1067
1070
  DURATION_DESC: 'Varighed faldende',
1068
- TRAVEL_GROUP: 'Rejseselskab'
1071
+ TRAVEL_GROUP: 'Rejseselskab',
1072
+ EXCURSION: 'Udflugt'
1069
1073
  };
1070
1074
  var daJson = {
1071
1075
  STEPS: STEPS$e,
@@ -1421,7 +1425,8 @@ var QSM$e = {
1421
1425
  RETURN_DATE: 'Rückreisedatum',
1422
1426
  CONFIRM: 'Bestätigen',
1423
1427
  TRAVELERS: 'Reisende',
1424
- GROUP_TOUR: 'Gruppentour'
1428
+ GROUP_TOUR: 'Gruppentour',
1429
+ ALL_TRAVELERS: 'Alle Reisenden'
1425
1430
  };
1426
1431
  var SRP$d = {
1427
1432
  SHOW_MORE: 'Mehr anzeigen',
@@ -1472,7 +1477,8 @@ var SRP$d = {
1472
1477
  DEPARTURE_AIRPORTS: 'Abflughäfen',
1473
1478
  ARRIVAL_AIRPORTS: 'Ankunftsflughäfen',
1474
1479
  PRICE: 'Preis',
1475
- TRAVEL_GROUP: 'Reisegruppe'
1480
+ TRAVEL_GROUP: 'Reisegruppe',
1481
+ EXCURSION: 'Ausflug'
1476
1482
  };
1477
1483
  var deJson = {
1478
1484
  STEPS: STEPS$d,
@@ -1831,7 +1837,8 @@ var QSM$d = {
1831
1837
  RETURN_DATE: 'Return date',
1832
1838
  CONFIRM: 'Confirm',
1833
1839
  TRAVELERS: 'Travelers',
1834
- GROUP_TOUR: 'Group tour'
1840
+ GROUP_TOUR: 'Group tour',
1841
+ ALL_TRAVELERS: 'All travelers'
1835
1842
  };
1836
1843
  var SRP$c = {
1837
1844
  SHOW_MORE: 'Show more',
@@ -1882,7 +1889,8 @@ var SRP$c = {
1882
1889
  DEPARTURE_RANGE: 'Departure range',
1883
1890
  DEPARTURE_AIRPORTS: 'Departure airports',
1884
1891
  ARRIVAL_AIRPORTS: 'Arrival airports',
1885
- TRAVEL_GROUP: 'Travel group'
1892
+ TRAVEL_GROUP: 'Travel group',
1893
+ EXCURSION: 'Excursion'
1886
1894
  };
1887
1895
  var enJson = {
1888
1896
  STEPS: STEPS$c,
@@ -2238,7 +2246,8 @@ var QSM$c = {
2238
2246
  RETURN_DATE: 'Fecha de regreso',
2239
2247
  CONFIRM: 'Confirmar',
2240
2248
  TRAVELERS: 'Viajeros',
2241
- GROUP_TOUR: 'Tour grupal'
2249
+ GROUP_TOUR: 'Tour grupal',
2250
+ ALL_TRAVELERS: 'Todos los viajeros'
2242
2251
  };
2243
2252
  var SRP$b = {
2244
2253
  SHOW_MORE: 'Mostrar más',
@@ -2289,7 +2298,8 @@ var SRP$b = {
2289
2298
  DEPARTURE_AIRPORTS: 'Aeropuertos de salida',
2290
2299
  ARRIVAL_AIRPORTS: 'Aeropuertos de llegada',
2291
2300
  PRICE: 'Precio',
2292
- TRAVEL_GROUP: 'Grupo de viaje'
2301
+ TRAVEL_GROUP: 'Grupo de viaje',
2302
+ EXCURSION: 'Excursión'
2293
2303
  };
2294
2304
  var esJson = {
2295
2305
  STEPS: STEPS$b,
@@ -2649,7 +2659,8 @@ var QSM$b = {
2649
2659
  RETURN_DATE: 'Date de retour',
2650
2660
  CONFIRM: 'Confirmer',
2651
2661
  TRAVELERS: 'Voyageurs',
2652
- GROUP_TOUR: 'Tour en groupe'
2662
+ GROUP_TOUR: 'Tour en groupe',
2663
+ ALL_TRAVELERS: 'Tous les voyageurs'
2653
2664
  };
2654
2665
  var SRP$a = {
2655
2666
  SHOW_MORE: 'Afficher plus',
@@ -2700,7 +2711,8 @@ var SRP$a = {
2700
2711
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
2701
2712
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
2702
2713
  PRICE: 'Prix',
2703
- TRAVEL_GROUP: 'Groupe de voyageurs'
2714
+ TRAVEL_GROUP: 'Groupe de voyageurs',
2715
+ EXCURSION: 'Excursion'
2704
2716
  };
2705
2717
  var frBeJson = {
2706
2718
  STEPS: STEPS$a,
@@ -3055,7 +3067,8 @@ var QSM$a = {
3055
3067
  RETURN_DATE: 'Date de retour',
3056
3068
  CONFIRM: 'Confirmer',
3057
3069
  TRAVELERS: 'Voyageurs',
3058
- GROUP_TOUR: 'Tour en groupe'
3070
+ GROUP_TOUR: 'Tour en groupe',
3071
+ ALL_TRAVELERS: 'Tous les voyageurs'
3059
3072
  };
3060
3073
  var SRP$9 = {
3061
3074
  SHOW_MORE: 'Afficher plus',
@@ -3106,7 +3119,8 @@ var SRP$9 = {
3106
3119
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
3107
3120
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
3108
3121
  PRICE: 'Prix',
3109
- TRAVEL_GROUP: 'Groupe de voyageurs'
3122
+ TRAVEL_GROUP: 'Groupe de voyageurs',
3123
+ EXCURSION: 'Excursion'
3110
3124
  };
3111
3125
  var frFrJson = {
3112
3126
  STEPS: STEPS$9,
@@ -3461,7 +3475,8 @@ var QSM$9 = {
3461
3475
  RETURN_DATE: 'Heimkomudagur',
3462
3476
  CONFIRM: 'Staðfesta',
3463
3477
  TRAVELERS: 'Ferðalangar',
3464
- GROUP_TOUR: 'Ferð í hóp'
3478
+ GROUP_TOUR: 'Ferð í hóp',
3479
+ ALL_TRAVELERS: 'Allir ferðalangar'
3465
3480
  };
3466
3481
  var SRP$8 = {
3467
3482
  SHOW_MORE: 'Sýna meira',
@@ -3512,7 +3527,8 @@ var SRP$8 = {
3512
3527
  DEPARTURE_AIRPORTS: 'Brottfararflugvellir',
3513
3528
  ARRIVAL_AIRPORTS: 'Komuflugvellir',
3514
3529
  PRICE: 'Verð',
3515
- TRAVEL_GROUP: 'Ferðahópur'
3530
+ TRAVEL_GROUP: 'Ferðahópur',
3531
+ EXCURSION: 'Útflutningur'
3516
3532
  };
3517
3533
  var isJson = {
3518
3534
  STEPS: STEPS$8,
@@ -3868,7 +3884,8 @@ var QSM$8 = {
3868
3884
  RETURN_DATE: 'Data di ritorno',
3869
3885
  CONFIRM: 'Conferma',
3870
3886
  TRAVELERS: 'Viaggiatori',
3871
- GROUP_TOUR: 'Tour di gruppo'
3887
+ GROUP_TOUR: 'Tour di gruppo',
3888
+ ALL_TRAVELERS: 'Tutti i viaggiatori'
3872
3889
  };
3873
3890
  var SRP$7 = {
3874
3891
  SHOW_MORE: 'Mostra di più',
@@ -3919,7 +3936,8 @@ var SRP$7 = {
3919
3936
  DEPARTURE_AIRPORTS: 'Aeroporti di partenza',
3920
3937
  ARRIVAL_AIRPORTS: 'Aeroporti di arrivo',
3921
3938
  PRICE: 'Prezzo',
3922
- TRAVEL_GROUP: 'Gruppo di viaggio'
3939
+ TRAVEL_GROUP: 'Gruppo di viaggio',
3940
+ EXCURSION: 'Escursione'
3923
3941
  };
3924
3942
  var itJson = {
3925
3943
  STEPS: STEPS$7,
@@ -4279,7 +4297,8 @@ var QSM$7 = {
4279
4297
  RETURN_DATE: 'Terugkeerdatum',
4280
4298
  CONFIRM: 'Bevestigen',
4281
4299
  TRAVELERS: 'Reizigers',
4282
- GROUP_TOUR: 'Groepsreis'
4300
+ GROUP_TOUR: 'Groepsreis',
4301
+ ALL_TRAVELERS: 'Alle reizigers'
4283
4302
  };
4284
4303
  var SRP$6 = {
4285
4304
  SHOW_MORE: 'Toon meer',
@@ -4330,7 +4349,8 @@ var SRP$6 = {
4330
4349
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4331
4350
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4332
4351
  PRICE: 'Prijs',
4333
- TRAVEL_GROUP: 'Reisgezelschap'
4352
+ TRAVEL_GROUP: 'Reisgezelschap',
4353
+ EXCURSION: 'Excursie'
4334
4354
  };
4335
4355
  var nlBeJson = {
4336
4356
  STEPS: STEPS$6,
@@ -4686,7 +4706,8 @@ var QSM$6 = {
4686
4706
  RETURN_DATE: 'Terugkeerdatum',
4687
4707
  CONFIRM: 'Bevestigen',
4688
4708
  TRAVELERS: 'Reizigers',
4689
- GROUP_TOUR: 'Groepsreis'
4709
+ GROUP_TOUR: 'Groepsreis',
4710
+ ALL_TRAVELERS: 'Alle reizigers'
4690
4711
  };
4691
4712
  var SRP$5 = {
4692
4713
  SHOW_MORE: 'Toon meer',
@@ -4737,7 +4758,8 @@ var SRP$5 = {
4737
4758
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4738
4759
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4739
4760
  PRICE: 'Prijs',
4740
- TRAVEL_GROUP: 'Reisgezelschap'
4761
+ TRAVEL_GROUP: 'Reisgezelschap',
4762
+ EXCURSION: 'Excursie'
4741
4763
  };
4742
4764
  var nlNlJson = {
4743
4765
  STEPS: STEPS$5,
@@ -5093,7 +5115,8 @@ var QSM$5 = {
5093
5115
  RETURN_DATE: 'Returdato',
5094
5116
  CONFIRM: 'Bekreft',
5095
5117
  TRAVELERS: 'Reisende',
5096
- GROUP_TOUR: 'Gruppetur'
5118
+ GROUP_TOUR: 'Gruppetur',
5119
+ ALL_TRAVELERS: 'Alle reisende'
5097
5120
  };
5098
5121
  var SRP$4 = {
5099
5122
  SHOW_MORE: 'Vis mer',
@@ -5144,7 +5167,8 @@ var SRP$4 = {
5144
5167
  DEPARTURE_AIRPORTS: 'Avgangsflyplasser',
5145
5168
  ARRIVAL_AIRPORTS: 'Ankomstflyplasser',
5146
5169
  PRICE: 'Pris',
5147
- TRAVEL_GROUP: 'Reisefølge'
5170
+ TRAVEL_GROUP: 'Reisefølge',
5171
+ EXCURSION: 'Utflukt'
5148
5172
  };
5149
5173
  var noJson = {
5150
5174
  STEPS: STEPS$4,
@@ -5500,7 +5524,8 @@ var QSM$4 = {
5500
5524
  RETURN_DATE: 'Data powrotu',
5501
5525
  CONFIRM: 'Potwierdź',
5502
5526
  TRAVELERS: 'Podróżni',
5503
- GROUP_TOUR: 'Tour w grupie'
5527
+ GROUP_TOUR: 'Tour w grupie',
5528
+ ALL_TRAVELERS: 'Wszyscy podróżni'
5504
5529
  };
5505
5530
  var SRP$3 = {
5506
5531
  SHOW_MORE: 'Pokaż więcej',
@@ -5551,7 +5576,8 @@ var SRP$3 = {
5551
5576
  DEPARTURE_AIRPORTS: 'Lotniska wylotu',
5552
5577
  ARRIVAL_AIRPORTS: 'Lotniska przylotu',
5553
5578
  PRICE: 'Cena',
5554
- TRAVEL_GROUP: 'Grupa podróżnych'
5579
+ TRAVEL_GROUP: 'Grupa podróżnych',
5580
+ EXCURSION: 'Wycieczka'
5555
5581
  };
5556
5582
  var plJson = {
5557
5583
  STEPS: STEPS$3,
@@ -5907,7 +5933,8 @@ var QSM$3 = {
5907
5933
  RETURN_DATE: 'Data de regresso',
5908
5934
  CONFIRM: 'Confirmar',
5909
5935
  TRAVELERS: 'Viajantes',
5910
- GROUP_TOUR: 'Tour em grupo'
5936
+ GROUP_TOUR: 'Tour em grupo',
5937
+ ALL_TRAVELERS: 'All travelers'
5911
5938
  };
5912
5939
  var SRP$2 = {
5913
5940
  SHOW_MORE: 'Mostrar mais',
@@ -5958,7 +5985,8 @@ var SRP$2 = {
5958
5985
  DEPARTURE_AIRPORTS: 'Aeroportos de partida',
5959
5986
  ARRIVAL_AIRPORTS: 'Aeroportos de chegada',
5960
5987
  PRICE: 'Preço',
5961
- TRAVEL_GROUP: 'Grupo de viajantes'
5988
+ TRAVEL_GROUP: 'Grupo de viajantes',
5989
+ EXCURSION: 'Excursão'
5962
5990
  };
5963
5991
  var ptJson = {
5964
5992
  STEPS: STEPS$2,
@@ -6314,7 +6342,8 @@ var QSM$2 = {
6314
6342
  RETURN_DATE: 'Hemresedatum',
6315
6343
  CONFIRM: 'Bekräfta',
6316
6344
  TRAVELERS: 'Resenärer',
6317
- GROUP_TOUR: 'Gruppresa'
6345
+ GROUP_TOUR: 'Gruppresa',
6346
+ ALL_TRAVELERS: 'All travelers'
6318
6347
  };
6319
6348
  var SRP$1 = {
6320
6349
  SHOW_MORE: 'Visa mer',
@@ -6365,7 +6394,8 @@ var SRP$1 = {
6365
6394
  DEPARTURE_AIRPORTS: 'Avgångsflygplatser',
6366
6395
  ARRIVAL_AIRPORTS: 'Ankomstflygplatser',
6367
6396
  PRICE: 'Pris',
6368
- TRAVEL_GROUP: 'Resesällskap'
6397
+ TRAVEL_GROUP: 'Resesällskap',
6398
+ EXCURSION: 'Utflykt'
6369
6399
  };
6370
6400
  var svJson = {
6371
6401
  STEPS: STEPS$1,
@@ -6719,7 +6749,8 @@ var QSM$1 = {
6719
6749
  RETURN_DATE: '帰着日',
6720
6750
  CONFIRM: '確認',
6721
6751
  TRAVELERS: '旅行者',
6722
- GROUP_TOUR: 'グループツアー'
6752
+ GROUP_TOUR: 'グループツアー',
6753
+ ALL_TRAVELERS: 'すべての旅行者'
6723
6754
  };
6724
6755
  var SRP = {
6725
6756
  SHOW_MORE: 'もっと見る',
@@ -6770,7 +6801,8 @@ var SRP = {
6770
6801
  DEPARTURE_AIRPORTS: '出発空港',
6771
6802
  ARRIVAL_AIRPORTS: '到着空港',
6772
6803
  PRICE: '価格',
6773
- TRAVEL_GROUP: '旅行グループ'
6804
+ TRAVEL_GROUP: '旅行グループ',
6805
+ EXCURSION: 'エクスカーション'
6774
6806
  };
6775
6807
  var jaJson = {
6776
6808
  STEPS: STEPS,
@@ -6801,7 +6833,7 @@ var DepartureRange;
6801
6833
  DepartureRange[(DepartureRange['Night'] = 3)] = 'Night';
6802
6834
  })(DepartureRange || (DepartureRange = {}));
6803
6835
 
6804
- var formatPrice$2 = function (price, currencyCode, locale) {
6836
+ var formatPrice$3 = function (price, currencyCode, locale) {
6805
6837
  if (locale === void 0) {
6806
6838
  locale = 'nl-BE';
6807
6839
  }
@@ -6908,7 +6940,7 @@ function getLocale(code) {
6908
6940
  }
6909
6941
  }
6910
6942
  var getPriceDifferenceText = function (price, currencyCode) {
6911
- return price > 0 ? '+ '.concat(formatPrice$2(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$2(Math.abs(price), currencyCode));
6943
+ return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
6912
6944
  };
6913
6945
  function format(text, args) {
6914
6946
  return text.replace(/{([0-9]+)}/g, function (match, index) {
@@ -7008,6 +7040,16 @@ var findSortByType = function (sortByTypes, sortKey, direction) {
7008
7040
  }) || sortByTypes[0]
7009
7041
  );
7010
7042
  };
7043
+ var getDatesBetween = function (fromDate, toDate) {
7044
+ var dates = [];
7045
+ var current = new Date(fromDate);
7046
+ var end = new Date(toDate);
7047
+ while (current < end) {
7048
+ dates.push(new Date(current));
7049
+ current.setUTCDate(current.getUTCDate() + 1);
7050
+ }
7051
+ return dates;
7052
+ };
7011
7053
 
7012
7054
  var getDateFromParams = function (params, name) {
7013
7055
  var dateString = params.get(name);
@@ -13481,6 +13523,7 @@ PERFORMANCE OF THIS SOFTWARE.
13481
13523
  var ENDPOINT = '/api/web/packaging';
13482
13524
  var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
13483
13525
  var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
13526
+ var ENDPOINT_EXCURSIONS = ENDPOINT + '/excursions';
13484
13527
  var ENDPOINT_FLIGHTS = ENDPOINT + '/flights';
13485
13528
  var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
13486
13529
  var ENDPOINT_ITINERARY = ENDPOINT + '/itinerary';
@@ -13504,6 +13547,12 @@ PERFORMANCE OF THIS SOFTWARE.
13504
13547
  var body = JSON.stringify(request);
13505
13548
  return post(url, apiKey, body, config.token, signal, true);
13506
13549
  };
13550
+ var searchPackagingExcursions = function (config, request, signal) {
13551
+ var url = '' + config.host + ENDPOINT_EXCURSIONS;
13552
+ var apiKey = config.apiKey;
13553
+ var body = JSON.stringify(request);
13554
+ return post(url, apiKey, body, config.token, signal, true);
13555
+ };
13507
13556
  var getEntry = function (config, magicLinkCode, signal) {
13508
13557
  var apiKey = config.apiKey;
13509
13558
  var url = '' + config.host + ENDPOINT_ENTRY(magicLinkCode);
@@ -13595,6 +13644,7 @@ PERFORMANCE OF THIS SOFTWARE.
13595
13644
  exports.searchLocations = searchLocations;
13596
13645
  exports.searchOords = searchOords;
13597
13646
  exports.searchPackagingAccommodations = searchPackagingAccommodations;
13647
+ exports.searchPackagingExcursions = searchPackagingExcursions;
13598
13648
  exports.searchPackagingFlights = searchPackagingFlights;
13599
13649
  exports.searchRegions = searchRegions;
13600
13650
  exports.searchWithErrorMapping = searchWithErrorMapping;
@@ -13671,16 +13721,16 @@ var formatPriceByMode = function (price, priceMode, personCount, duration, perPe
13671
13721
  if (!price) return '';
13672
13722
  switch (priceMode) {
13673
13723
  case 0:
13674
- return ''.concat(formatPrice$2(price, currencyCode));
13724
+ return ''.concat(formatPrice$3(price, currencyCode));
13675
13725
  case 1:
13676
13726
  var perPersonPrice = price / personCount;
13677
- return ''.concat(formatPrice$2(perPersonPrice, currencyCode), ' / ').concat(perPersonLabel);
13727
+ return ''.concat(formatPrice$3(perPersonPrice, currencyCode), ' / ').concat(perPersonLabel);
13678
13728
  case 2:
13679
13729
  var perNightPrice = price / duration;
13680
- return ''.concat(formatPrice$2(perNightPrice, currencyCode), ' / ').concat(perNightLabel);
13730
+ return ''.concat(formatPrice$3(perNightPrice, currencyCode), ' / ').concat(perNightLabel);
13681
13731
  case 3:
13682
13732
  var perPersonPerNightPrice = price / duration;
13683
- return ''.concat(formatPrice$2(perPersonPerNightPrice, currencyCode), ' / ').concat(perPersonPerNightLabel);
13733
+ return ''.concat(formatPrice$3(perPersonPerNightPrice, currencyCode), ' / ').concat(perPersonPerNightLabel);
13684
13734
  }
13685
13735
  };
13686
13736
 
@@ -21721,7 +21771,11 @@ var FlightOptionsForm = function () {
21721
21771
  setFlightGroups = _f[1];
21722
21772
  var handleSubmit = function (e) {
21723
21773
  if (settings.skipRouter) {
21724
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21774
+ if (settings.roomOptions.isHidden) {
21775
+ dispatch(setCurrentStep(OPTIONS_FORM_STEP));
21776
+ } else {
21777
+ dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21778
+ }
21725
21779
  } else {
21726
21780
  if (settings.roomOptions.isHidden) {
21727
21781
  navigate(
@@ -22101,7 +22155,7 @@ var NoneOption = function (_a) {
22101
22155
  return x.requirementType === 2;
22102
22156
  });
22103
22157
  var noneSelected = !selectedOption;
22104
- var priceDifferencetext = selectedOption ? '- '.concat(formatPrice$2(Math.abs(selectedOption.line.price), currencyCode)) : '';
22158
+ var priceDifferencetext = selectedOption ? '- '.concat(formatPrice$3(Math.abs(selectedOption.line.price), currencyCode)) : '';
22105
22159
  return React__default.createElement(
22106
22160
  React__default.Fragment,
22107
22161
  null,
@@ -23374,7 +23428,7 @@ var OptionRoom = function (_a) {
23374
23428
  e.preventDefault();
23375
23429
  };
23376
23430
  var getPriceDifferenceText = function (price) {
23377
- return price > 0 ? '+ '.concat(formatPrice$2(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$2(Math.abs(price), currencyCode));
23431
+ return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
23378
23432
  };
23379
23433
  var getAccommodationPriceDifference = function (accommodation) {
23380
23434
  var _a;
@@ -24899,7 +24953,7 @@ var Sidebar = function (_a) {
24899
24953
  { className: 'pricing-summary__property' },
24900
24954
  React__default.createElement('h6', { className: 'pricing-summary__title' }, translations.SIDEBAR.BASE_PRICE)
24901
24955
  ),
24902
- React__default.createElement('div', { className: 'pricing-summary__value' }, formatPrice$2(basePrice, currencyCode))
24956
+ React__default.createElement('div', { className: 'pricing-summary__value' }, formatPrice$3(basePrice, currencyCode))
24903
24957
  ),
24904
24958
  basePricePerPaxType &&
24905
24959
  basePricePerPaxType.map(function (ppt, index) {
@@ -24916,7 +24970,7 @@ var Sidebar = function (_a) {
24916
24970
  ' ',
24917
24971
  getPaxTypeTranslation(translations, ppt.paxType, ppt.numberOfPax)
24918
24972
  ),
24919
- React__default.createElement('div', { className: 'pricing-summary__value' }, formatPrice$2(ppt.pricePerPaxType, currencyCode))
24973
+ React__default.createElement('div', { className: 'pricing-summary__value' }, formatPrice$3(ppt.pricePerPaxType, currencyCode))
24920
24974
  ),
24921
24975
  ppt.details.map(function (detail, dIndex) {
24922
24976
  return React__default.createElement(
@@ -24929,7 +24983,7 @@ var Sidebar = function (_a) {
24929
24983
  React__default.createElement(
24930
24984
  'div',
24931
24985
  { className: 'pricing-summary__value' },
24932
- formatPrice$2(detail.price / detail.numberOfPax, currencyCode)
24986
+ formatPrice$3(detail.price / detail.numberOfPax, currencyCode)
24933
24987
  )
24934
24988
  );
24935
24989
  })
@@ -24956,7 +25010,7 @@ var Sidebar = function (_a) {
24956
25010
  React__default.createElement(
24957
25011
  'div',
24958
25012
  { className: 'pricing-summary__value' },
24959
- formatPrice$2(priceDetail.price * priceDetail.amount, currencyCode)
25013
+ formatPrice$3(priceDetail.price * priceDetail.amount, currencyCode)
24960
25014
  )
24961
25015
  ),
24962
25016
  React__default.createElement(
@@ -24991,7 +25045,7 @@ var Sidebar = function (_a) {
24991
25045
  React__default.createElement(
24992
25046
  'div',
24993
25047
  { className: 'pricing-summary__value' },
24994
- formatPrice$2(priceDetail.price * priceDetail.amount, currencyCode)
25048
+ formatPrice$3(priceDetail.price * priceDetail.amount, currencyCode)
24995
25049
  )
24996
25050
  ),
24997
25051
  React__default.createElement(
@@ -25021,7 +25075,7 @@ var Sidebar = function (_a) {
25021
25075
  React__default.createElement(
25022
25076
  'div',
25023
25077
  { className: 'pricing-summary__value' },
25024
- formatPrice$2(ppt.pricePerPaxType, currencyCode)
25078
+ formatPrice$3(ppt.pricePerPaxType, currencyCode)
25025
25079
  )
25026
25080
  ),
25027
25081
  ppt.details.map(function (detail, dIndex) {
@@ -25041,7 +25095,7 @@ var Sidebar = function (_a) {
25041
25095
  React__default.createElement(
25042
25096
  'div',
25043
25097
  { className: 'pricing-summary__value' },
25044
- formatPrice$2(detail.price / detail.numberOfPax, currencyCode)
25098
+ formatPrice$3(detail.price / detail.numberOfPax, currencyCode)
25045
25099
  )
25046
25100
  );
25047
25101
  })
@@ -25085,7 +25139,7 @@ var Sidebar = function (_a) {
25085
25139
  React__default.createElement(
25086
25140
  'div',
25087
25141
  { className: 'pricing__price' },
25088
- formatPrice$2(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25142
+ formatPrice$3(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25089
25143
  )
25090
25144
  )
25091
25145
  )
@@ -25106,7 +25160,7 @@ var Sidebar = function (_a) {
25106
25160
  React__default.createElement(
25107
25161
  'div',
25108
25162
  { className: 'pricing' },
25109
- React__default.createElement('div', { className: 'pricing__price' }, formatPrice$2(totalPrice, currencyCode))
25163
+ React__default.createElement('div', { className: 'pricing__price' }, formatPrice$3(totalPrice, currencyCode))
25110
25164
  )
25111
25165
  )
25112
25166
  ),
@@ -25124,7 +25178,7 @@ var Sidebar = function (_a) {
25124
25178
  React__default.createElement(
25125
25179
  'div',
25126
25180
  { className: 'pricing' },
25127
- React__default.createElement('div', { className: 'pricing__price' }, formatPrice$2(deposit, currencyCode))
25181
+ React__default.createElement('div', { className: 'pricing__price' }, formatPrice$3(deposit, currencyCode))
25128
25182
  )
25129
25183
  )
25130
25184
  ),
@@ -25140,7 +25194,7 @@ var Sidebar = function (_a) {
25140
25194
  translations.SIDEBAR.DEPOSIT_TEXT1,
25141
25195
  React__default.createElement('strong', null, translations.SIDEBAR.DEPOSIT_TEXT2),
25142
25196
  translations.SIDEBAR.DEPOSIT_TEXT3,
25143
- formatPrice$2(remainingAmount, currencyCode),
25197
+ formatPrice$3(remainingAmount, currencyCode),
25144
25198
  translations.SIDEBAR.DEPOSIT_TEXT4,
25145
25199
  React__default.createElement('strong', null, translations.SIDEBAR.DEPOSIT_TEXT5),
25146
25200
  translations.SIDEBAR.DEPOSIT_TEXT6
@@ -25169,7 +25223,7 @@ var Sidebar = function (_a) {
25169
25223
  React__default.createElement(
25170
25224
  'div',
25171
25225
  { className: 'pricing__price' },
25172
- formatPrice$2(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25226
+ formatPrice$3(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25173
25227
  )
25174
25228
  )
25175
25229
  )
@@ -25190,7 +25244,7 @@ var Sidebar = function (_a) {
25190
25244
  React__default.createElement(
25191
25245
  'div',
25192
25246
  { className: 'pricing' },
25193
- React__default.createElement('div', { className: 'pricing__price' }, formatPrice$2(totalPrice, currencyCode))
25247
+ React__default.createElement('div', { className: 'pricing__price' }, formatPrice$3(totalPrice, currencyCode))
25194
25248
  )
25195
25249
  )
25196
25250
  )
@@ -33716,22 +33770,32 @@ var initialState$1 = {
33716
33770
  packagingAccoSearchDetails: [],
33717
33771
  selectedPackagingAccoResultCode: null,
33718
33772
  packagingFlightResults: [],
33773
+ filteredPackagingFlightResults: [],
33719
33774
  selectedPackagingFlight: null,
33775
+ selectedOutwardKey: null,
33776
+ selectedReturnKey: null,
33720
33777
  selectedFlight: null,
33721
33778
  selectedFlightDetails: null,
33722
33779
  bookingPackageDetails: null,
33780
+ priceDetails: null,
33723
33781
  isLoading: false,
33724
33782
  flightsLoading: false,
33725
- filters: [],
33726
33783
  selectedSortType: null,
33784
+ selectedFlightSortType: null,
33785
+ initialFilters: [],
33786
+ filters: [],
33787
+ initialFlightFilters: [],
33788
+ flightFilters: [],
33727
33789
  activeTab: 'compact',
33728
33790
  currentPage: 1,
33791
+ transactionId: null,
33729
33792
  flyInIsOpen: false,
33793
+ flyInType: null,
33730
33794
  editablePackagingEntry: null,
33731
- transactionId: null,
33732
- accommodationFlyInStep: 'details',
33733
- priceDetails: null,
33734
- itinerary: null
33795
+ itinerary: null,
33796
+ excursionSearchParams: null,
33797
+ selectedExcursionSearchResult: null,
33798
+ confirmedExcursionsByDay: {}
33735
33799
  };
33736
33800
  var searchResultsSlice = createSlice({
33737
33801
  name: 'searchResults',
@@ -33761,6 +33825,9 @@ var searchResultsSlice = createSlice({
33761
33825
  setPackagingFlightResults: function (state, action) {
33762
33826
  state.packagingFlightResults = action.payload;
33763
33827
  },
33828
+ setFilteredPackagingFlightResults: function (state, action) {
33829
+ state.filteredPackagingFlightResults = action.payload;
33830
+ },
33764
33831
  setSelectedPackagingFlight: function (state, action) {
33765
33832
  state.selectedPackagingFlight = action.payload;
33766
33833
  },
@@ -33789,6 +33856,9 @@ var searchResultsSlice = createSlice({
33789
33856
  setFlightsLoading: function (state, action) {
33790
33857
  state.flightsLoading = action.payload;
33791
33858
  },
33859
+ setInitialFilters: function (state, action) {
33860
+ state.initialFilters = action.payload;
33861
+ },
33792
33862
  setFilters: function (state, action) {
33793
33863
  var updatedFilters = action.payload;
33794
33864
  updatedFilters.forEach(function (updatedFilter) {
@@ -33805,9 +33875,31 @@ var searchResultsSlice = createSlice({
33805
33875
  resetFilters: function (state, action) {
33806
33876
  state.filters = action.payload;
33807
33877
  },
33878
+ setInitialFlightFilters: function (state, action) {
33879
+ state.initialFlightFilters = action.payload;
33880
+ },
33881
+ setFlightFilters: function (state, action) {
33882
+ var updatedFilters = action.payload;
33883
+ updatedFilters.forEach(function (updatedFilter) {
33884
+ var existingIndex = state.flightFilters.findIndex(function (f) {
33885
+ return f.property === updatedFilter.property;
33886
+ });
33887
+ if (existingIndex !== -1) {
33888
+ state.flightFilters[existingIndex] = updatedFilter;
33889
+ } else {
33890
+ state.flightFilters.push(updatedFilter); // Optional: Add new filters if not present
33891
+ }
33892
+ });
33893
+ },
33894
+ resetFlightFilters: function (state, action) {
33895
+ state.flightFilters = action.payload;
33896
+ },
33808
33897
  setSortType: function (state, action) {
33809
33898
  state.selectedSortType = action.payload;
33810
33899
  },
33900
+ setFlightSortType: function (state, action) {
33901
+ state.selectedFlightSortType = action.payload;
33902
+ },
33811
33903
  setActiveTab: function (state, action) {
33812
33904
  state.activeTab = action.payload;
33813
33905
  },
@@ -33831,14 +33923,59 @@ var searchResultsSlice = createSlice({
33831
33923
  setTransactionId: function (state, action) {
33832
33924
  state.transactionId = action.payload;
33833
33925
  },
33834
- setAccommodationFlyInStep: function (state, action) {
33835
- state.accommodationFlyInStep = action.payload;
33926
+ setFlyInType: function (state, action) {
33927
+ state.flyInType = action.payload;
33836
33928
  },
33837
33929
  setPriceDetails: function (state, action) {
33838
33930
  state.priceDetails = action.payload;
33839
33931
  },
33840
33932
  setItinerary: function (state, action) {
33841
33933
  state.itinerary = action.payload;
33934
+ },
33935
+ setSelectedOutwardKey: function (state, action) {
33936
+ state.selectedOutwardKey = action.payload;
33937
+ },
33938
+ setSelectedReturnKey: function (state, action) {
33939
+ state.selectedReturnKey = action.payload;
33940
+ },
33941
+ resetFlightSelection: function (state) {
33942
+ state.selectedOutwardKey = null;
33943
+ state.selectedReturnKey = null;
33944
+ },
33945
+ setExcursionSearchParams: function (state, action) {
33946
+ state.excursionSearchParams = action.payload;
33947
+ },
33948
+ setSelectedExcursionSearchResult: function (state, action) {
33949
+ state.selectedExcursionSearchResult = action.payload;
33950
+ },
33951
+ confirmExcursionForDay: function (state, action) {
33952
+ var _a;
33953
+ var _b = action.payload,
33954
+ dayKey = _b.dayKey,
33955
+ excursion = _b.excursion;
33956
+ var existingForDay = (_a = state.confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : [];
33957
+ var existingIndex = existingForDay.findIndex(function (item) {
33958
+ return item.code === excursion.code;
33959
+ });
33960
+ if (existingIndex >= 0) {
33961
+ // replace existing confirmed version of same excursion
33962
+ existingForDay[existingIndex] = excursion;
33963
+ } else {
33964
+ existingForDay.push(excursion);
33965
+ }
33966
+ state.confirmedExcursionsByDay[dayKey] = existingForDay;
33967
+ },
33968
+ removeConfirmedExcursionForDay: function (state, action) {
33969
+ var _a;
33970
+ var _b = action.payload,
33971
+ dayKey = _b.dayKey,
33972
+ excursionCode = _b.excursionCode;
33973
+ state.confirmedExcursionsByDay[dayKey] = ((_a = state.confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : []).filter(function (item) {
33974
+ return item.code !== excursionCode;
33975
+ });
33976
+ },
33977
+ clearConfirmedExcursionsForDay: function (state, action) {
33978
+ delete state.confirmedExcursionsByDay[action.payload.dayKey];
33842
33979
  }
33843
33980
  }
33844
33981
  });
@@ -33847,6 +33984,7 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33847
33984
  setSelectedSearchResult = _a.setSelectedSearchResult,
33848
33985
  setPackagingAccoResults = _a.setPackagingAccoResults,
33849
33986
  setFilteredPackagingAccoResults = _a.setFilteredPackagingAccoResults,
33987
+ setFilteredPackagingFlightResults = _a.setFilteredPackagingFlightResults,
33850
33988
  setPackagingAccoSearchDetails = _a.setPackagingAccoSearchDetails,
33851
33989
  setSelectedPackagingAccoResult = _a.setSelectedPackagingAccoResult,
33852
33990
  setPackagingFlightResults = _a.setPackagingFlightResults,
@@ -33857,18 +33995,31 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33857
33995
  _a.selectFlight;
33858
33996
  var setIsLoading = _a.setIsLoading,
33859
33997
  setFlightsLoading = _a.setFlightsLoading,
33998
+ setInitialFilters = _a.setInitialFilters,
33860
33999
  setFilters = _a.setFilters,
33861
34000
  resetFilters = _a.resetFilters,
34001
+ setInitialFlightFilters = _a.setInitialFlightFilters,
34002
+ setFlightFilters = _a.setFlightFilters,
34003
+ resetFlightFilters = _a.resetFlightFilters,
33862
34004
  setSortType = _a.setSortType,
34005
+ setFlightSortType = _a.setFlightSortType,
33863
34006
  setActiveTab = _a.setActiveTab;
33864
34007
  _a.setCurrentPage;
33865
34008
  _a.resetSearchState;
33866
34009
  var setFlyInIsOpen = _a.setFlyInIsOpen,
33867
34010
  setEditablePackagingEntry = _a.setEditablePackagingEntry,
33868
34011
  setTransactionId = _a.setTransactionId,
33869
- setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
34012
+ setFlyInType = _a.setFlyInType,
33870
34013
  setPriceDetails = _a.setPriceDetails,
33871
- setItinerary = _a.setItinerary;
34014
+ setItinerary = _a.setItinerary,
34015
+ setSelectedOutwardKey = _a.setSelectedOutwardKey,
34016
+ setSelectedReturnKey = _a.setSelectedReturnKey;
34017
+ _a.resetFlightSelection;
34018
+ var setExcursionSearchParams = _a.setExcursionSearchParams,
34019
+ setSelectedExcursionSearchResult = _a.setSelectedExcursionSearchResult,
34020
+ confirmExcursionForDay = _a.confirmExcursionForDay,
34021
+ removeConfirmedExcursionForDay = _a.removeConfirmedExcursionForDay;
34022
+ _a.clearConfirmedExcursionsForDay;
33872
34023
  var searchResultsReducer = searchResultsSlice.reducer;
33873
34024
 
33874
34025
  var ItemPicker = function (_a) {
@@ -34399,8 +34550,7 @@ var Icon$1 = function (_a) {
34399
34550
  }),
34400
34551
  title && React__default.createElement('title', null, title),
34401
34552
  React__default.createElement('path', {
34402
- d: 'M64 64C28.7 64 0 92.7 0 128l0 64C0 200.8 7.4 207.7 15.7 210.6 34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-8.8-7.4-15.7-15.7-18.6-18.8-6.5-32.3-24.4-32.3-45.4s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6l0-64c0-35.3-28.7-64-64-64L64 64zM416 336l0-160-256 0 0 160 256 0zM112 160c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32l0-192z',
34403
- fill: 'currentColor'
34553
+ d: 'M64 64C28.7 64 0 92.7 0 128l0 64C0 200.8 7.4 207.7 15.7 210.6 34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320l0 64c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-64c0-8.8-7.4-15.7-15.7-18.6-18.8-6.5-32.3-24.4-32.3-45.4s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6l0-64c0-35.3-28.7-64-64-64L64 64zM416 336l0-160-256 0 0 160 256 0zM112 160c0-17.7 14.3-32 32-32l288 0c17.7 0 32 14.3 32 32l0 192c0 17.7-14.3 32-32 32l-288 0c-17.7 0-32-14.3-32-32l0-192z'
34404
34554
  })
34405
34555
  );
34406
34556
  case 'ui-backforward':
@@ -34897,6 +35047,7 @@ var Icon$1 = function (_a) {
34897
35047
 
34898
35048
  var GROUP_TOUR_SERVICE_TYPE = 1;
34899
35049
  var ACCOMMODATION_SERVICE_TYPE = 3;
35050
+ var EXCURSION_SERVICE_TYPE = 4;
34900
35051
  var FLIGHT_SERVICE_TYPE = 7;
34901
35052
  var toDateOnlyString = function (value) {
34902
35053
  var date = value instanceof Date ? value : new Date(value);
@@ -35287,12 +35438,12 @@ var Itinerary = function (_a) {
35287
35438
  React__default.createElement(
35288
35439
  'div',
35289
35440
  { className: 'search__filter__prices__wrapper' },
35290
- React__default.createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$2(pricePerPerson, 'EUR')),
35441
+ React__default.createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$3(pricePerPerson, 'EUR')),
35291
35442
  React__default.createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
35292
35443
  React__default.createElement(
35293
35444
  'p',
35294
35445
  null,
35295
- React__default.createElement('strong', null, '(', formatPrice$2(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35446
+ React__default.createElement('strong', null, '(', formatPrice$3(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35296
35447
  )
35297
35448
  ),
35298
35449
  React__default.createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
@@ -38334,7 +38485,8 @@ var FlightsFlyIn = function (_a) {
38334
38485
  React__default.createElement(
38335
38486
  'div',
38336
38487
  { className: 'flyin__footer__price' },
38337
- 'Total price: \u20AC',
38488
+ translations.SHARED.TOTAL_PRICE,
38489
+ ': \u20AC',
38338
38490
  (_o = selectedCombinationFlight === null || selectedCombinationFlight === void 0 ? void 0 : selectedCombinationFlight.price) === null || _o === void 0
38339
38491
  ? void 0
38340
38492
  : _o.toFixed(2)
@@ -38348,7 +38500,7 @@ var FlightsFlyIn = function (_a) {
38348
38500
  );
38349
38501
  };
38350
38502
 
38351
- var formatPrice$1 = function (price, currencyCode) {
38503
+ var formatPrice$2 = function (price, currencyCode) {
38352
38504
  if (typeof price !== 'number') return '';
38353
38505
  var safeCurrency = currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR';
38354
38506
  return new Intl.NumberFormat('nl-BE', {
@@ -38480,7 +38632,7 @@ var AccommodationFlyIn = function (_a) {
38480
38632
  var totalPrice = selectedOptions.reduce(function (total, option) {
38481
38633
  return total + (option.price || 0);
38482
38634
  }, 0);
38483
- return formatPrice$1(totalPrice, selectedPackagingAccoSearchDetails.currencyCode);
38635
+ return formatPrice$2(totalPrice, selectedPackagingAccoSearchDetails.currencyCode);
38484
38636
  };
38485
38637
  var getPriceDifference = function (currentSelectedPrice, roomIndex, accommodationCode, regimeId) {
38486
38638
  var targetPrice = 0;
@@ -38505,7 +38657,7 @@ var AccommodationFlyIn = function (_a) {
38505
38657
  if (difference === 0) {
38506
38658
  return null;
38507
38659
  }
38508
- var formattedAbsoluteValue = formatPrice$1(Math.abs(difference), currencyCode);
38660
+ var formattedAbsoluteValue = formatPrice$2(Math.abs(difference), currencyCode);
38509
38661
  return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
38510
38662
  };
38511
38663
  var getPriceDifferenceClassName = function (difference) {
@@ -38623,7 +38775,7 @@ var AccommodationFlyIn = function (_a) {
38623
38775
  React__default.createElement(
38624
38776
  'div',
38625
38777
  { className: 'flyin__footer' },
38626
- React__default.createElement('div', { className: 'flyin__footer__price' }, 'Total price: ', calculateTotalPrice()),
38778
+ React__default.createElement('div', { className: 'flyin__footer__price' }, translations.SHARED.TOTAL_PRICE, ': ', calculateTotalPrice()),
38627
38779
  React__default.createElement(
38628
38780
  'div',
38629
38781
  { className: 'flyin__button-wrapper' },
@@ -38782,7 +38934,7 @@ var AccommodationFlyIn = function (_a) {
38782
38934
  // )} */}
38783
38935
  // </div>
38784
38936
  // <div className="flyin__footer">
38785
- // <div className="flyin__footer__price">Total price: €</div>
38937
+ // <div className="flyin__footer__price">{translations.SHARED.TOTAL_PRICE}: €</div>
38786
38938
  // <div className="flyin__button-wrapper">
38787
38939
  // <button className="cta cta--select" onClick={handleConfirm}>
38788
38940
  // Toevoegen
@@ -38792,7 +38944,7 @@ var AccommodationFlyIn = function (_a) {
38792
38944
  // </>
38793
38945
  };
38794
38946
 
38795
- var formatPrice = function (price, currencyCode) {
38947
+ var formatPrice$1 = function (price, currencyCode) {
38796
38948
  if (currencyCode === void 0) {
38797
38949
  currencyCode = 'EUR';
38798
38950
  }
@@ -38975,7 +39127,7 @@ var GroupTourFlyIn = function (_a) {
38975
39127
  if (difference === 0) {
38976
39128
  return null;
38977
39129
  }
38978
- var formattedAbsoluteValue = formatPrice(Math.abs(difference), currencyCode);
39130
+ var formattedAbsoluteValue = formatPrice$1(Math.abs(difference), currencyCode);
38979
39131
  return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
38980
39132
  };
38981
39133
  var getPriceDifferenceClassName = function (difference) {
@@ -39104,8 +39256,9 @@ var GroupTourFlyIn = function (_a) {
39104
39256
  React__default.createElement(
39105
39257
  'div',
39106
39258
  { className: 'flyin__footer__price' },
39107
- 'Total price: ',
39108
- formatPrice(adjustedTotalPrice, bookingPackageDetails.currencyCode)
39259
+ translations.SHARED.TOTAL_PRICE,
39260
+ ': ',
39261
+ formatPrice$1(adjustedTotalPrice, bookingPackageDetails.currencyCode)
39109
39262
  ),
39110
39263
  React__default.createElement(
39111
39264
  'div',
@@ -43422,7 +43575,7 @@ var getBaseHotelResult = function (searchResult, cmsItem, languageCode, translat
43422
43575
  searchResult.countryName,
43423
43576
  (_h = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.parentItem) === null || _h === void 0 ? void 0 : _h.name
43424
43577
  ),
43425
- price: formatPrice$2(searchResult.price, searchResult.currencyCode, languageCode),
43578
+ price: formatPrice$3(searchResult.price, searchResult.currencyCode, languageCode),
43426
43579
  ctaText: translations === null || translations === void 0 ? void 0 : translations.SRP.VIEW_DETAILS
43427
43580
  };
43428
43581
  };
@@ -43462,7 +43615,7 @@ var mapPackagingAccoResult = function (searchResult, cmsItem, languageCode, tran
43462
43615
  contents: searchResult.contents
43463
43616
  });
43464
43617
  };
43465
- var renderHotelResults = function (results, context, activeTab, translations) {
43618
+ var renderHotelResults = function (results, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn) {
43466
43619
  var renderedResults = results.map(function (result, index) {
43467
43620
  var _a;
43468
43621
  var key = ''.concat((_a = result.id) !== null && _a !== void 0 ? _a : result.code, '-').concat(index);
@@ -43477,13 +43630,18 @@ var renderHotelResults = function (results, context, activeTab, translations) {
43477
43630
  return React__default.createElement(
43478
43631
  'div',
43479
43632
  { className: 'search__results__cards '.concat(activeTab ? 'search__results__cards--'.concat(activeTab) : '') },
43633
+ selectedPackagingAccoResult &&
43634
+ !isFlyIn &&
43635
+ React__default.createElement(HotelCard, { key: selectedPackagingAccoResult.code, result: selectedPackagingAccoResult, translations: translations }),
43480
43636
  renderedResults
43481
43637
  );
43482
43638
  };
43483
43639
  var HotelAccommodationResults = function (_a) {
43484
43640
  var _b, _c;
43485
- var isLoading = _a.isLoading;
43641
+ var isLoading = _a.isLoading,
43642
+ isFlyIn = _a.isFlyIn;
43486
43643
  var context = useContext(SearchResultsConfigurationContext);
43644
+ var dispatch = useDispatch();
43487
43645
  if (!context) {
43488
43646
  return null;
43489
43647
  }
@@ -43493,7 +43651,10 @@ var HotelAccommodationResults = function (_a) {
43493
43651
  }),
43494
43652
  filteredResults = _d.filteredResults,
43495
43653
  filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
43654
+ packagingAccoResults = _d.packagingAccoResults,
43496
43655
  activeTab = _d.activeTab;
43656
+ _d.flyInIsOpen;
43657
+ var selectedPackagingAccoResultCode = _d.selectedPackagingAccoResultCode;
43497
43658
  var cmsMap = React__default.useMemo(
43498
43659
  function () {
43499
43660
  var _a;
@@ -43556,143 +43717,1645 @@ var HotelAccommodationResults = function (_a) {
43556
43717
  : firstPackagingResult.fromDate;
43557
43718
  var firstResultDay = firstResultDate ? format$1(parseISO(firstResultDate), 'd') : null;
43558
43719
  var firstResultMonth = firstResultDate ? format$1(parseISO(firstResultDate), 'MMM') : null;
43720
+ var selectedPackagingAccoResult = React__default.useMemo(
43721
+ function () {
43722
+ var selectedResult = packagingAccoResults.find(function (result) {
43723
+ return result.code === selectedPackagingAccoResultCode;
43724
+ });
43725
+ if (selectedResult) {
43726
+ return mapPackagingAccoResult(selectedResult, cmsMap.get(selectedResult.code), context.languageCode, translations);
43727
+ }
43728
+ },
43729
+ [packagingAccoResults, selectedPackagingAccoResultCode, cmsMap, context.languageCode, translations]
43730
+ );
43731
+ var visibleResults = React__default.useMemo(
43732
+ function () {
43733
+ var shouldShowAll =
43734
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) !== build.PortalQsmType.AccommodationAndFlight || isFlyIn;
43735
+ if (shouldShowAll) {
43736
+ return mappedResults;
43737
+ }
43738
+ if (selectedPackagingAccoResult) {
43739
+ return mappedResults
43740
+ .filter(function (result) {
43741
+ return result.code !== selectedPackagingAccoResult.code;
43742
+ })
43743
+ .slice(0, 2);
43744
+ }
43745
+ return mappedResults.slice(0, 3);
43746
+ },
43747
+ [context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType, mappedResults, isFlyIn, selectedPackagingAccoResult]
43748
+ );
43749
+ var handleShowMoreHotels = function (flyInType) {
43750
+ dispatch(setFlyInType(flyInType));
43751
+ dispatch(setFlyInIsOpen(true));
43752
+ };
43559
43753
  return React__default.createElement(
43560
43754
  React__default.Fragment,
43561
43755
  null,
43562
- React__default.createElement(
43563
- 'div',
43564
- { className: 'search__results__label search__results__label--secondary' },
43756
+ !isFlyIn &&
43565
43757
  React__default.createElement(
43566
43758
  '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' })
43759
+ { className: 'search__results__label search__results__label--secondary' },
43760
+ React__default.createElement(
43761
+ 'div',
43762
+ { className: 'search__results__label__date' },
43763
+ firstResultDay && firstResultMonth
43764
+ ? React__default.createElement(
43765
+ React__default.Fragment,
43766
+ null,
43767
+ React__default.createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43768
+ React__default.createElement('p', null, firstResultMonth)
43769
+ )
43770
+ : React__default.createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43771
+ ),
43772
+ React__default.createElement(
43773
+ 'div',
43774
+ { className: 'search__results__label__text' },
43775
+ React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, translations.SRP.ACCOMMODATION))
43776
+ )
43576
43777
  ),
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
43778
  isLoading
43584
43779
  ? React__default.createElement(
43585
43780
  React__default.Fragment,
43586
43781
  null,
43587
43782
  (_c = context.customSpinner) !== null && _c !== void 0 ? _c : React__default.createElement(Spinner, null)
43588
43783
  )
43589
- : renderHotelResults(mappedResults, context, activeTab, translations),
43784
+ : renderHotelResults(visibleResults, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn),
43785
+ packagingAccoResults.length > 3 &&
43786
+ !isFlyIn &&
43787
+ React__default.createElement(
43788
+ 'div',
43789
+ { className: 'search__results__cards__actions' },
43790
+ React__default.createElement(
43791
+ 'button',
43792
+ {
43793
+ className: 'cta cta--secondary',
43794
+ onClick: function () {
43795
+ return handleShowMoreHotels('acco-results');
43796
+ }
43797
+ },
43798
+ translations.SRP.SHOW_MORE
43799
+ )
43800
+ ),
43590
43801
  mappedResults.length === 0 && !isLoading && React__default.createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS)
43591
43802
  );
43592
43803
  };
43593
43804
 
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]
43805
+ var selectSearchResultsState = function (state) {
43806
+ return state.searchResults;
43807
+ };
43808
+ var selectPackagingAccoResults = createSelector([selectSearchResultsState], function (state) {
43809
+ return state.packagingAccoResults;
43810
+ });
43811
+ var selectSelectedPackagingAccoResultCode = createSelector([selectSearchResultsState], function (state) {
43812
+ return state.selectedPackagingAccoResultCode;
43813
+ });
43814
+ var selectSelectedPackagingAccoResult = createSelector(
43815
+ [selectPackagingAccoResults, selectSelectedPackagingAccoResultCode],
43816
+ function (packagingAccoResults, selectedPackagingAccoResultCode) {
43817
+ var _a;
43818
+ if (!selectedPackagingAccoResultCode) return null;
43819
+ return (_a = packagingAccoResults.find(function (accoResult) {
43820
+ return accoResult.code === selectedPackagingAccoResultCode;
43821
+ })) !== null && _a !== void 0
43822
+ ? _a
43823
+ : null;
43824
+ }
43825
+ );
43826
+ var selectPackagingFlightResults = createSelector([selectSearchResultsState], function (state) {
43827
+ return state.packagingFlightResults;
43828
+ });
43829
+ var selectFilteredPackagingFlightResults = createSelector([selectSearchResultsState], function (state) {
43830
+ return state.filteredPackagingFlightResults;
43831
+ });
43832
+ var selectSelectedOutwardKey = createSelector([selectSearchResultsState], function (state) {
43833
+ return state.selectedOutwardKey;
43834
+ });
43835
+ var selectSelectedReturnKey = createSelector([selectSearchResultsState], function (state) {
43836
+ return state.selectedReturnKey;
43837
+ });
43838
+ var selectUniqueOutwardFlights = createSelector([selectFilteredPackagingFlightResults], function (packagingFlightResults) {
43839
+ var map = new Map();
43840
+ packagingFlightResults.forEach(function (flight) {
43841
+ var key = getFlightKey(flight.outward.segments);
43842
+ if (!map.has(key)) {
43843
+ map.set(key, flight);
43844
+ }
43845
+ });
43846
+ return Array.from(map.values());
43847
+ });
43848
+ var selectUniqueReturnFlights = createSelector(
43849
+ [selectFilteredPackagingFlightResults, selectSelectedOutwardKey],
43850
+ function (packagingFlightResults, selectedOutwardKey) {
43851
+ if (!selectedOutwardKey) return [];
43852
+ var matchingCombinations = packagingFlightResults.filter(function (flight) {
43853
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
43854
+ });
43855
+ var map = new Map();
43856
+ matchingCombinations.forEach(function (flight) {
43857
+ var key = getFlightKey(flight.return.segments);
43858
+ if (!map.has(key)) {
43859
+ map.set(key, flight);
43860
+ }
43861
+ });
43862
+ return Array.from(map.values());
43863
+ }
43864
+ );
43865
+ var selectSelectedOutward = createSelector([selectPackagingFlightResults, selectSelectedOutwardKey], function (packagingFlightResults, selectedOutwardKey) {
43866
+ var _a;
43867
+ if (!selectedOutwardKey) return null;
43868
+ return (_a = packagingFlightResults.find(function (flight) {
43869
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
43870
+ })) !== null && _a !== void 0
43871
+ ? _a
43872
+ : null;
43873
+ });
43874
+ var selectSelectedReturn = createSelector([selectPackagingFlightResults, selectSelectedReturnKey], function (packagingFlightResults, selectedReturnKey) {
43875
+ var _a;
43876
+ if (!selectedReturnKey) return null;
43877
+ return (_a = packagingFlightResults.find(function (flight) {
43878
+ return getFlightKey(flight.return.segments) === selectedReturnKey;
43879
+ })) !== null && _a !== void 0
43880
+ ? _a
43881
+ : null;
43882
+ });
43883
+ var selectSelectedCombinationFlight = createSelector(
43884
+ [selectPackagingFlightResults, selectSelectedOutwardKey, selectSelectedReturnKey],
43885
+ function (packagingFlightResults, selectedOutwardKey, selectedReturnKey) {
43886
+ var _a;
43887
+ if (!selectedOutwardKey || !selectedReturnKey) return null;
43888
+ return (_a = packagingFlightResults.find(function (flight) {
43889
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
43890
+ })) !== null && _a !== void 0
43891
+ ? _a
43892
+ : null;
43893
+ }
43894
+ );
43895
+
43896
+ var IndependentFlightOption = function (_a) {
43897
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
43898
+ var item = _a.item,
43899
+ onSelect = _a.onSelect,
43900
+ guid = _a.guid,
43901
+ selectedGuid = _a.selectedGuid,
43902
+ isOutward = _a.isOutward,
43903
+ showSelectedState = _a.showSelectedState,
43904
+ currentSelectedPrice = _a.currentSelectedPrice,
43905
+ price = _a.price;
43906
+ var context = useContext(SearchResultsConfigurationContext);
43907
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
43908
+ var translations = getTranslations(language);
43909
+ var _p = useState(false),
43910
+ detailsOpen = _p[0],
43911
+ setDetailsOpen = _p[1];
43912
+ var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
43913
+ return React__default.createElement(
43914
+ 'div',
43915
+ { className: 'search__result-card', key: 'flight-'.concat(item.code) },
43916
+ React__default.createElement(
43917
+ 'div',
43918
+ { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
43919
+ React__default.createElement(
43920
+ 'div',
43921
+ { className: 'flight__option' },
43922
+ React__default.createElement(
43923
+ 'div',
43924
+ { className: 'flight__content' },
43925
+ React__default.createElement(
43926
+ 'div',
43927
+ { className: 'flight__flights' },
43928
+ React__default.createElement(
43929
+ 'div',
43930
+ { className: 'flight__flight' },
43931
+ React__default.createElement(
43932
+ 'div',
43933
+ { className: 'flight__flight__header' },
43934
+ React__default.createElement('div', { className: 'flight__status__container' }),
43935
+ React__default.createElement(
43936
+ 'div',
43937
+ { className: 'flight__price' },
43938
+ price != null &&
43939
+ price > 0 &&
43940
+ (isOutward
43941
+ ? React__default.createElement(
43942
+ 'span',
43943
+ { className: 'price' },
43944
+ translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
43945
+ '\u00A0',
43946
+ formatPrice$3(
43947
+ price,
43948
+ 'EUR',
43949
+ (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
43950
+ )
43951
+ )
43952
+ : priceDifference != null &&
43953
+ Math.abs(priceDifference) > 0 &&
43954
+ React__default.createElement(
43955
+ 'span',
43956
+ { className: 'price' },
43957
+ priceDifference > 0 ? '+' : '-',
43958
+ '\u00A0',
43959
+ formatPrice$3(
43960
+ Math.abs(priceDifference),
43961
+ 'EUR',
43962
+ (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
43963
+ )
43964
+ )),
43965
+ React__default.createElement(
43966
+ 'button',
43967
+ {
43968
+ type: 'button',
43969
+ className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
43970
+ onClick: function () {
43971
+ return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
43972
+ }
43973
+ },
43974
+ selectedGuid === guid ? 'Selected' : 'Select'
43975
+ )
43976
+ )
43977
+ )
43978
+ ),
43979
+ React__default.createElement(
43980
+ 'div',
43981
+ { className: 'flight__flight' },
43982
+ React__default.createElement(
43983
+ 'div',
43984
+ { className: 'flight__flight__container' },
43985
+ React__default.createElement(
43986
+ 'div',
43987
+ { className: 'flight__flight__wrapper' },
43988
+ React__default.createElement(
43989
+ 'div',
43990
+ { className: 'flight__logo__wrapper' },
43991
+ React__default.createElement('img', {
43992
+ src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
43993
+ (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
43994
+ '.png?height=256'
43995
+ ),
43996
+ alt: '',
43997
+ className: 'flight__logo'
43998
+ }),
43999
+ React__default.createElement('span', null, (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName)
44000
+ ),
44001
+ React__default.createElement(
44002
+ 'div',
44003
+ { className: 'flight__info' },
44004
+ React__default.createElement(
44005
+ 'div',
44006
+ { className: 'flight__info__times' },
44007
+ React__default.createElement(
44008
+ 'strong',
44009
+ null,
44010
+ timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
44011
+ ' ',
44012
+ (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
44013
+ ),
44014
+ React__default.createElement(
44015
+ 'p',
44016
+ null,
44017
+ longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
44018
+ )
44019
+ ),
44020
+ React__default.createElement(
44021
+ 'div',
44022
+ { className: 'flight__info__duration' },
44023
+ React__default.createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
44024
+ React__default.createElement(
44025
+ 'div',
44026
+ { className: 'flight__info__duration__stops' },
44027
+ React__default.createElement('div', { className: 'flight__info__duration__stop' })
44028
+ ),
44029
+ React__default.createElement(
44030
+ 'span',
44031
+ null,
44032
+ getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44033
+ )
44034
+ ),
44035
+ React__default.createElement(
44036
+ 'div',
44037
+ { className: 'flight__info__times flight__info__times--arrival' },
44038
+ React__default.createElement(
44039
+ 'strong',
44040
+ null,
44041
+ timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
44042
+ ' ',
44043
+ (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
44044
+ ),
44045
+ React__default.createElement(
44046
+ 'p',
44047
+ null,
44048
+ longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
44049
+ )
44050
+ )
44051
+ )
44052
+ ),
44053
+ React__default.createElement(
44054
+ 'div',
44055
+ { className: 'flight__detail__btn__wrapper' },
44056
+ React__default.createElement(
44057
+ 'div',
44058
+ {
44059
+ className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
44060
+ onClick: function () {
44061
+ return setDetailsOpen(function (prev) {
44062
+ return !prev;
44063
+ });
44064
+ }
44065
+ },
44066
+ React__default.createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44067
+ )
44068
+ )
44069
+ ),
44070
+ React__default.createElement(
44071
+ 'div',
44072
+ { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
44073
+ (_o = getFlightSegments(item)) === null || _o === void 0
44074
+ ? void 0
44075
+ : _o.map(function (segment, index) {
44076
+ return React__default.createElement(
44077
+ React__default.Fragment,
44078
+ { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44079
+ React__default.createElement(
44080
+ 'div',
44081
+ { className: 'flight__info' },
44082
+ React__default.createElement(
44083
+ 'div',
44084
+ { className: 'flight__info__times__wrapper' },
44085
+ React__default.createElement(
44086
+ 'div',
44087
+ { className: 'flight__info__times' },
44088
+ React__default.createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44089
+ React__default.createElement('strong', null, segment.departureAirportCode),
44090
+ React__default.createElement('p', null, longFormatDate(segment.departureDateTime, language))
44091
+ ),
44092
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 }))
44093
+ ),
44094
+ React__default.createElement(
44095
+ 'div',
44096
+ { className: 'flight__info__duration' },
44097
+ React__default.createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44098
+ React__default.createElement('div', { className: 'flight__info__duration__stops' }),
44099
+ React__default.createElement('span', null, segment.marketingAirlineName),
44100
+ React__default.createElement('strong', null, segment.operatingFlightNumber)
44101
+ ),
44102
+ React__default.createElement(
44103
+ 'div',
44104
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44105
+ React__default.createElement('div', null, React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })),
44106
+ React__default.createElement(
44107
+ 'div',
44108
+ { className: 'flight__info__times flight__info__times--arrival' },
44109
+ React__default.createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44110
+ React__default.createElement('strong', null, segment.arrivalAirportCode),
44111
+ React__default.createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44112
+ )
44113
+ )
44114
+ ),
44115
+ segment.transferTimeInTicks &&
44116
+ React__default.createElement(
44117
+ 'div',
44118
+ { className: 'flight__info' },
44119
+ React__default.createElement('div', { className: 'flight__info__times' }),
44120
+ React__default.createElement(
44121
+ 'div',
44122
+ { className: 'flight__info__duration flight__info__duration--waittime' },
44123
+ React__default.createElement(
44124
+ 'div',
44125
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44126
+ React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44127
+ ),
44128
+ React__default.createElement(
44129
+ 'div',
44130
+ { className: 'flight__info__duration__stoptime' },
44131
+ React__default.createElement('span', null, 'Stop time'),
44132
+ React__default.createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44133
+ )
44134
+ ),
44135
+ React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44136
+ )
44137
+ );
44138
+ })
44139
+ )
44140
+ )
44141
+ )
44142
+ )
44143
+ )
44144
+ )
43618
44145
  );
44146
+ };
44147
+
44148
+ var MultiRangeFilter = function (_a) {
44149
+ var min = _a.min,
44150
+ max = _a.max,
44151
+ selectedMin = _a.selectedMin,
44152
+ selectedMax = _a.selectedMax,
44153
+ valueFormatter = _a.valueFormatter,
44154
+ onChange = _a.onChange;
44155
+ var _b = useState(false),
44156
+ isDragging = _b[0],
44157
+ setIsDragging = _b[1];
44158
+ var _c = useState(0),
44159
+ leftPercentage = _c[0],
44160
+ setLeftPercentage = _c[1];
44161
+ var _d = useState(0),
44162
+ rightPercentage = _d[0],
44163
+ setRightPercentage = _d[1];
44164
+ var _e = useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
44165
+ minVal = _e[0],
44166
+ setMinVal = _e[1];
44167
+ var _f = useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
44168
+ maxVal = _f[0],
44169
+ setMaxVal = _f[1];
44170
+ var minGap = 5;
44171
+ // Sync internal state with external selectedMin/selectedMax changes
43619
44172
  useEffect(
43620
44173
  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
- };
44174
+ setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
44175
+ setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
43631
44176
  },
43632
- [isOpen, setIsOpen]
44177
+ [min, max, selectedMin, selectedMax]
43633
44178
  );
43634
- // body scroll lock
44179
+ // Recalculate slider track whenever values change
43635
44180
  useEffect(
43636
44181
  function () {
43637
- document.body.style.overflow = isOpen ? 'hidden' : '';
43638
- return function () {
43639
- document.body.style.overflow = '';
43640
- };
44182
+ var range = max - min || 1;
44183
+ var minPercent = ((minVal - min) / range) * 100;
44184
+ var maxPercent = ((maxVal - min) / range) * 100;
44185
+ setLeftPercentage(minPercent);
44186
+ setRightPercentage(100 - maxPercent);
43641
44187
  },
43642
- [isOpen]
44188
+ [minVal, maxVal, min, max]
43643
44189
  );
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);
44190
+ var slideMin = function (e) {
44191
+ var value = parseInt(e.target.value, 10);
44192
+ // Ensure the thumbs don’t cross and enforce minGap
44193
+ if (value <= maxVal - minGap) {
44194
+ setMinVal(value);
43656
44195
  }
43657
44196
  };
43658
- var handleGoBack = function () {
43659
- dispatch(setAccommodationFlyInStep('results'));
44197
+ var slideMax = function (e) {
44198
+ var value = parseInt(e.target.value, 10);
44199
+ // Ensure the thumbs don’t cross and enforce minGap
44200
+ if (value >= minVal + minGap) {
44201
+ setMaxVal(value);
44202
+ }
44203
+ };
44204
+ var startDrag = function () {
44205
+ setIsDragging(true);
44206
+ };
44207
+ var stopDrag = function () {
44208
+ setIsDragging(false);
44209
+ // Notify parent with the final values
44210
+ onChange(minVal, maxVal);
43660
44211
  };
43661
44212
  return React__default.createElement(
43662
44213
  'div',
43663
- {
43664
- className: 'flyin '
43665
- .concat(isOpen ? 'flyin--active' : '', ' ')
43666
- .concat(className, ' ')
43667
- .concat(isPackageEditFlow ? 'flyin--large' : '')
43668
- },
44214
+ { className: 'double-slider-box' },
43669
44215
  React__default.createElement(
43670
44216
  'div',
43671
- { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
43672
- React__default.createElement(
43673
- 'div',
43674
- { className: 'flyin__content' },
43675
- 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(
44217
+ { className: 'input-box' },
44218
+ React__default.createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
44219
+ React__default.createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
44220
+ ),
44221
+ React__default.createElement(
44222
+ 'div',
44223
+ { className: 'range-slider' },
44224
+ React__default.createElement('div', {
44225
+ className: 'slider-track',
44226
+ style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
44227
+ }),
44228
+ React__default.createElement('input', {
44229
+ type: 'range',
44230
+ min: min,
44231
+ max: max,
44232
+ value: minVal,
44233
+ onChange: slideMin,
44234
+ onMouseDown: startDrag,
44235
+ onMouseUp: stopDrag,
44236
+ onTouchStart: startDrag,
44237
+ onTouchEnd: stopDrag,
44238
+ className: 'min-val'
44239
+ }),
44240
+ React__default.createElement('input', {
44241
+ type: 'range',
44242
+ min: min,
44243
+ max: max,
44244
+ value: maxVal,
44245
+ onChange: slideMax,
44246
+ onMouseDown: startDrag,
44247
+ onMouseUp: stopDrag,
44248
+ onTouchStart: startDrag,
44249
+ onTouchEnd: stopDrag,
44250
+ className: 'max-val'
44251
+ }),
44252
+ isDragging && React__default.createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
44253
+ isDragging && React__default.createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
44254
+ )
44255
+ );
44256
+ };
44257
+
44258
+ var Filters = function (_a) {
44259
+ var _b;
44260
+ var initialFilters = _a.initialFilters,
44261
+ filters = _a.filters,
44262
+ isOpen = _a.isOpen,
44263
+ handleSetIsOpen = _a.handleSetIsOpen,
44264
+ isLoading = _a.isLoading,
44265
+ setFilters = _a.setFilters,
44266
+ resetFilters = _a.resetFilters;
44267
+ var context = useContext(SearchResultsConfigurationContext);
44268
+ if (!context || !context.showFilters) {
44269
+ return null;
44270
+ }
44271
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44272
+ var _c = useState({}),
44273
+ visibleFilters = _c[0],
44274
+ setVisibleFilters = _c[1];
44275
+ var toggleFilterVisibility = function (filterId) {
44276
+ setVisibleFilters(function (prev) {
44277
+ var _a;
44278
+ return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
44279
+ });
44280
+ };
44281
+ var handleCheckBoxFilter = function (filter, option) {
44282
+ var updated = filters.map(function (f) {
44283
+ var _a;
44284
+ if (f.property !== filter.property) return f;
44285
+ return __assign(__assign({}, f), {
44286
+ options:
44287
+ (_a = f.options) === null || _a === void 0
44288
+ ? void 0
44289
+ : _a.map(function (opt) {
44290
+ return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
44291
+ })
44292
+ });
44293
+ });
44294
+ setFilters(updated);
44295
+ };
44296
+ var handleSliderChange = function (filter, newMin, newMax) {
44297
+ var updated = filters.map(function (f) {
44298
+ if (f.property !== filter.property) return f;
44299
+ return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
44300
+ });
44301
+ setFilters(updated);
44302
+ };
44303
+ var handleFullReset = function () {
44304
+ if (!isLoading) {
44305
+ resetFilters(initialFilters);
44306
+ }
44307
+ };
44308
+ return React__default.createElement(
44309
+ 'div',
44310
+ { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
44311
+ React__default.createElement('div', {
44312
+ className: 'search__filters--background',
44313
+ onClick: function () {
44314
+ return handleSetIsOpen();
44315
+ }
44316
+ }),
44317
+ React__default.createElement(
44318
+ 'button',
44319
+ {
44320
+ className: 'search__filters--close',
44321
+ onClick: function () {
44322
+ return handleSetIsOpen();
44323
+ }
44324
+ },
44325
+ React__default.createElement(Icon$1, { name: 'ui-close', height: 24 })
44326
+ ),
44327
+ React__default.createElement(
44328
+ 'div',
44329
+ { className: 'search__filters' },
44330
+ React__default.createElement(
44331
+ 'div',
44332
+ { className: 'search__filter-row search__filter__header' },
44333
+ React__default.createElement(
44334
+ 'div',
44335
+ { className: 'search__filter-row-flex-title' },
44336
+ React__default.createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
44337
+ ),
44338
+ !isLoading &&
44339
+ React__default.createElement(
44340
+ 'a',
44341
+ {
44342
+ className: 'search__filter-reset',
44343
+ onClick: function () {
44344
+ return handleFullReset();
44345
+ }
44346
+ },
44347
+ translations.SRP.RESET
44348
+ )
44349
+ ),
44350
+ isLoading
44351
+ ? React__default.createElement(Spinner, null)
44352
+ : React__default.createElement(
44353
+ React__default.Fragment,
44354
+ null,
44355
+ React__default.createElement(
44356
+ 'div',
44357
+ { className: 'search__filters__group-container' },
44358
+ filters.map(function (filter, index) {
44359
+ var _a, _b;
44360
+ var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
44361
+ return React__default.createElement(
44362
+ 'div',
44363
+ { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
44364
+ React__default.createElement(
44365
+ 'div',
44366
+ {
44367
+ className: 'search__filter-row search__filter-row--underline',
44368
+ onClick: function () {
44369
+ return toggleFilterVisibility(filter.property);
44370
+ },
44371
+ role: 'button',
44372
+ tabIndex: 0
44373
+ },
44374
+ React__default.createElement('h6', { className: 'search__filter-large-title' }, filter.label),
44375
+ React__default.createElement(
44376
+ 'svg',
44377
+ {
44378
+ id: 'search-chevron-up-icon',
44379
+ className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
44380
+ viewBox: '0 0 10 6.063',
44381
+ width: 10,
44382
+ height: 6.063
44383
+ },
44384
+ React__default.createElement('path', {
44385
+ id: 'Path_62',
44386
+ 'data-name': 'Path 62',
44387
+ d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
44388
+ transform: 'translate(-240 624)',
44389
+ fill: '#707070'
44390
+ })
44391
+ )
44392
+ ),
44393
+ isVisible &&
44394
+ filter.type === 'checkbox' &&
44395
+ React__default.createElement(
44396
+ 'div',
44397
+ { className: 'search__filter-rows' },
44398
+ filter.options &&
44399
+ filter.options.map(function (option, optionIndex) {
44400
+ return React__default.createElement(
44401
+ 'div',
44402
+ { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
44403
+ React__default.createElement(
44404
+ 'div',
44405
+ { className: 'checkbox' },
44406
+ React__default.createElement(
44407
+ 'label',
44408
+ { className: 'checkbox__label' },
44409
+ React__default.createElement('input', {
44410
+ type: 'checkbox',
44411
+ className: 'checkbox__input checkbox__input--parent',
44412
+ checked: option.isChecked,
44413
+ onChange: function (e) {
44414
+ return handleCheckBoxFilter(filter, option);
44415
+ }
44416
+ }),
44417
+ React__default.createElement('span', { className: 'radiobutton__label-text' }, option.label)
44418
+ )
44419
+ )
44420
+ );
44421
+ })
44422
+ ),
44423
+ isVisible &&
44424
+ filter.type === 'toggle' &&
44425
+ React__default.createElement(
44426
+ 'div',
44427
+ { className: 'search__filter-rows' },
44428
+ (_b = filter.options) === null || _b === void 0
44429
+ ? void 0
44430
+ : _b.map(function (option, optionIndex) {
44431
+ return React__default.createElement(
44432
+ 'div',
44433
+ { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
44434
+ React__default.createElement('span', { className: 'search__filter-toggle-label' }, option.label),
44435
+ React__default.createElement('div', { className: 'checkbox' }),
44436
+ React__default.createElement(
44437
+ 'label',
44438
+ { className: 'checkbox__label' },
44439
+ React__default.createElement('input', {
44440
+ type: 'checkbox',
44441
+ className: 'checkbox__input',
44442
+ checked: option.isChecked,
44443
+ onChange: function () {
44444
+ return handleCheckBoxFilter(filter, option);
44445
+ }
44446
+ })
44447
+ )
44448
+ );
44449
+ })
44450
+ ),
44451
+ isVisible &&
44452
+ filter &&
44453
+ filter.type === 'slider' &&
44454
+ (function () {
44455
+ var _a, _b, _c, _d;
44456
+ var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
44457
+ var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
44458
+ var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
44459
+ var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
44460
+ return React__default.createElement(MultiRangeFilter, {
44461
+ min: min,
44462
+ max: max,
44463
+ selectedMin: selectedMin,
44464
+ selectedMax: selectedMax,
44465
+ valueFormatter: function (value) {
44466
+ return ''.concat(value);
44467
+ },
44468
+ onChange: function (newMin, newMax) {
44469
+ handleSliderChange(filter, newMin, newMax);
44470
+ }
44471
+ });
44472
+ })()
44473
+ );
44474
+ })
44475
+ )
44476
+ )
44477
+ )
44478
+ );
44479
+ };
44480
+
44481
+ var PackageingFlightsFlyIn = function (_a) {
44482
+ var _b;
44483
+ _a.isOpen;
44484
+ _a.setIsOpen;
44485
+ var context = useContext(SearchResultsConfigurationContext);
44486
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44487
+ var translations = getTranslations(language);
44488
+ var dispatch = useDispatch();
44489
+ var _c = useSelector(function (state) {
44490
+ return state.searchResults;
44491
+ }),
44492
+ flightsLoading = _c.flightsLoading,
44493
+ initialFlightFilters = _c.initialFlightFilters,
44494
+ flightFilters = _c.flightFilters,
44495
+ flyInType = _c.flyInType,
44496
+ selectedFlightSortType = _c.selectedFlightSortType;
44497
+ var uniqueOutwardFlights = useSelector(selectUniqueOutwardFlights);
44498
+ var uniqueReturnFlights = useSelector(selectUniqueReturnFlights);
44499
+ var selectedOutward = useSelector(selectSelectedOutward);
44500
+ var selectedReturn = useSelector(selectSelectedReturn);
44501
+ var _d = useState(false),
44502
+ outwardStepComplete = _d[0],
44503
+ setOutwardStepComplete = _d[1];
44504
+ var handleConfirm = function () {
44505
+ if (!outwardStepComplete) {
44506
+ setOutwardStepComplete(true);
44507
+ dispatch(setFlyInType('flight-return-results'));
44508
+ return;
44509
+ } else {
44510
+ dispatch(setFlyInType(null));
44511
+ setOutwardStepComplete(false);
44512
+ dispatch(setFlyInIsOpen(false));
44513
+ }
44514
+ };
44515
+ var sortByTypes = [
44516
+ { direction: 'asc', label: 'default' },
44517
+ { direction: 'asc', label: 'price' },
44518
+ { direction: 'desc', label: 'price' },
44519
+ { direction: 'asc', label: 'departureTime' },
44520
+ { direction: 'desc', label: 'departureTime' },
44521
+ { direction: 'asc', label: 'durationInTicks' },
44522
+ { direction: 'desc', label: 'durationInTicks' }
44523
+ ];
44524
+ var handleSortChange = function (newSortKey, direction) {
44525
+ if (sortByTypes === undefined) return;
44526
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
44527
+ if (newSortByType) {
44528
+ dispatch(setFlightSortType(newSortByType));
44529
+ }
44530
+ };
44531
+ return React__default.createElement(
44532
+ React__default.Fragment,
44533
+ null,
44534
+ React__default.createElement(
44535
+ 'div',
44536
+ { className: 'flyin__content flyin__content--columns' },
44537
+ flightsLoading
44538
+ ? React__default.createElement(Spinner, null)
44539
+ : React__default.createElement(
44540
+ React__default.Fragment,
44541
+ null,
44542
+ React__default.createElement(Filters, {
44543
+ initialFilters: initialFlightFilters,
44544
+ filters: flightFilters,
44545
+ isOpen: false,
44546
+ handleSetIsOpen: function () {},
44547
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
44548
+ isLoading: flightsLoading,
44549
+ setFilters: function (filters) {
44550
+ return dispatch(setFlightFilters(filters));
44551
+ },
44552
+ resetFilters: function (filters) {
44553
+ return dispatch(resetFlightFilters(filters));
44554
+ }
44555
+ }),
44556
+ React__default.createElement(
44557
+ 'div',
44558
+ { className: 'search__results__wrapper' },
44559
+ React__default.createElement(
44560
+ 'div',
44561
+ { className: 'search__result-row' },
44562
+ React__default.createElement(
44563
+ 'span',
44564
+ { className: 'search__result-row-text' },
44565
+ (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
44566
+ '\u00A0',
44567
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
44568
+ '\u00A0',
44569
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
44570
+ ),
44571
+ sortByTypes &&
44572
+ sortByTypes.length > 0 &&
44573
+ React__default.createElement(
44574
+ 'div',
44575
+ { className: 'search__result-row-filter' },
44576
+ React__default.createElement(ItemPicker, {
44577
+ items: sortByTypes,
44578
+ selection: (selectedFlightSortType === null || selectedFlightSortType === void 0 ? void 0 : selectedFlightSortType.label) || undefined,
44579
+ selectedSortByType: selectedFlightSortType || undefined,
44580
+ label: translations.SRP.SORTBY,
44581
+ placeholder: translations.SRP.SORTBY,
44582
+ classModifier: '',
44583
+ valueFormatter: function (value, direction) {
44584
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
44585
+ },
44586
+ // onPick={handleSortChange}
44587
+ onPick: function (newSortKey, direction) {
44588
+ return handleSortChange(newSortKey, direction);
44589
+ }
44590
+ })
44591
+ )
44592
+ ),
44593
+ React__default.createElement(
44594
+ 'div',
44595
+ { className: 'search__results__cards search__results__cards--extended' },
44596
+ flyInType == 'flight-outward-results' &&
44597
+ uniqueOutwardFlights.map(function (result) {
44598
+ return React__default.createElement(IndependentFlightOption, {
44599
+ key: 'flight-'.concat(result.outwardGuid),
44600
+ item: result.outward,
44601
+ onSelect: function () {
44602
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
44603
+ },
44604
+ guid: result.outwardGuid,
44605
+ isOutward: true,
44606
+ price: result.price,
44607
+ currentSelectedPrice: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.price,
44608
+ selectedGuid: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.outwardGuid,
44609
+ showSelectedState: true
44610
+ });
44611
+ }),
44612
+ flyInType == 'flight-return-results' &&
44613
+ uniqueReturnFlights.map(function (result) {
44614
+ return React__default.createElement(IndependentFlightOption, {
44615
+ key: 'flight-'.concat(result.outwardGuid),
44616
+ item: result.return,
44617
+ onSelect: function () {
44618
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
44619
+ },
44620
+ guid: result.outwardGuid,
44621
+ isOutward: false,
44622
+ price: result.price,
44623
+ currentSelectedPrice: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.price,
44624
+ selectedGuid: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.outwardGuid,
44625
+ showSelectedState: true
44626
+ });
44627
+ })
44628
+ )
44629
+ )
44630
+ )
44631
+ ),
44632
+ React__default.createElement(
44633
+ 'div',
44634
+ { className: 'flyin__footer' },
44635
+ React__default.createElement('div', { className: 'flyin__footer__price' }),
44636
+ React__default.createElement(
44637
+ 'div',
44638
+ { className: 'flyin__button-wrapper' },
44639
+ React__default.createElement(
44640
+ 'button',
44641
+ {
44642
+ className: 'cta cta--select',
44643
+ onClick: function () {
44644
+ return handleConfirm();
44645
+ }
44646
+ },
44647
+ translations.QSM.CONFIRM
44648
+ )
44649
+ )
44650
+ )
44651
+ );
44652
+ };
44653
+
44654
+ var ExcursionResults = function (_a) {
44655
+ var _b;
44656
+ _a.isFlyIn;
44657
+ var activeSearchSeed = _a.activeSearchSeed;
44658
+ var context = useContext(SearchResultsConfigurationContext);
44659
+ var dispatch = useDispatch();
44660
+ var _c = useState(false),
44661
+ isLoading = _c[0],
44662
+ setIsLoading = _c[1];
44663
+ var _d = useState(null),
44664
+ excursions = _d[0],
44665
+ setExcursions = _d[1];
44666
+ var _e = useSelector(function (state) {
44667
+ return state.searchResults;
44668
+ }),
44669
+ flyInIsOpen = _e.flyInIsOpen,
44670
+ flyInType = _e.flyInType,
44671
+ excursionSearchParams = _e.excursionSearchParams,
44672
+ transactionId = _e.transactionId;
44673
+ useEffect(
44674
+ function () {
44675
+ if (!context || !activeSearchSeed || !excursionSearchParams) return;
44676
+ (function () {
44677
+ return __awaiter(void 0, void 0, void 0, function () {
44678
+ var config, destination, allPax, searchRequest, packageExcursionSearchResults, err_1;
44679
+ var _a, _b, _c, _d, _e;
44680
+ return __generator(this, function (_f) {
44681
+ switch (_f.label) {
44682
+ case 0:
44683
+ _f.trys.push([0, 2, 3, 4]);
44684
+ setIsLoading(true);
44685
+ console.log('Excursion search params changed, fetching excursions...', excursionSearchParams);
44686
+ config = {
44687
+ host: context.tideConnection.host,
44688
+ apiKey: context.tideConnection.apiKey
44689
+ };
44690
+ destination = excursionSearchParams.locationId
44691
+ ? { id: Number(excursionSearchParams.locationId), type: 'location' }
44692
+ : excursionSearchParams.oordId
44693
+ ? { id: Number(excursionSearchParams.oordId), type: 'oord' }
44694
+ : excursionSearchParams.regionId
44695
+ ? { id: Number(excursionSearchParams.regionId), type: 'region' }
44696
+ : excursionSearchParams.countryId
44697
+ ? { id: Number(excursionSearchParams.countryId), type: 'country' }
44698
+ : { id: 0, type: null };
44699
+ allPax = activeSearchSeed.rooms.flatMap(function (room) {
44700
+ return room.pax;
44701
+ });
44702
+ searchRequest = {
44703
+ transactionId: transactionId !== null && transactionId !== void 0 ? transactionId : '',
44704
+ officeId: (_a = context.tideConnection.officeId) !== null && _a !== void 0 ? _a : 1,
44705
+ agentId: (_b = context.agentId) !== null && _b !== void 0 ? _b : null,
44706
+ portalId: (_c = context.portalId) !== null && _c !== void 0 ? _c : null,
44707
+ catalogueId: (_d = context.searchConfiguration.defaultCatalogueId) !== null && _d !== void 0 ? _d : 0,
44708
+ searchConfigurationId: context.searchConfiguration.id,
44709
+ language: (_e = context.languageCode) !== null && _e !== void 0 ? _e : 'en-GB',
44710
+ serviceType: EXCURSION_SERVICE_TYPE,
44711
+ fromDate: excursionSearchParams.fromDate,
44712
+ toDate: excursionSearchParams.toDate,
44713
+ destination: {
44714
+ id: destination.id,
44715
+ isCountry: destination.type === 'country',
44716
+ isRegion: destination.type === 'region',
44717
+ isOord: destination.type === 'oord',
44718
+ isLocation: destination.type === 'location',
44719
+ isAirport: false,
44720
+ code: ''
44721
+ },
44722
+ productCode: '',
44723
+ // rooms: activeSearchSeed.rooms.map((room) => ({
44724
+ // travellers: room.pax.map((pax) => ({
44725
+ // id: pax.id,
44726
+ // age: pax.age,
44727
+ // dateOfBirth: pax.dateOfBirth
44728
+ // }))
44729
+ // })),
44730
+ rooms: [
44731
+ {
44732
+ travellers: allPax.map(function (pax) {
44733
+ return {
44734
+ id: pax.id,
44735
+ age: pax.age,
44736
+ dateOfBirth: pax.dateOfBirth
44737
+ };
44738
+ })
44739
+ }
44740
+ ],
44741
+ tagIds: []
44742
+ };
44743
+ return [4 /*yield*/, build.searchPackagingExcursions(config, searchRequest)];
44744
+ case 1:
44745
+ packageExcursionSearchResults = _f.sent();
44746
+ console.log('Excursion search results', packageExcursionSearchResults);
44747
+ setExcursions(packageExcursionSearchResults);
44748
+ return [3 /*break*/, 4];
44749
+ case 2:
44750
+ err_1 = _f.sent();
44751
+ console.error('Excursion search failed', err_1);
44752
+ return [3 /*break*/, 4];
44753
+ case 3:
44754
+ setIsLoading(false);
44755
+ return [7 /*endfinally*/];
44756
+ case 4:
44757
+ return [2 /*return*/];
44758
+ }
44759
+ });
44760
+ });
44761
+ })();
44762
+ },
44763
+ [context, activeSearchSeed, excursionSearchParams, transactionId]
44764
+ );
44765
+ if (!context || !activeSearchSeed) {
44766
+ return null;
44767
+ }
44768
+ if (!flyInIsOpen || flyInType !== 'excursion-results') {
44769
+ return null;
44770
+ }
44771
+ var translations = getTranslations((_b = context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44772
+ var handleChange = function (excursion) {
44773
+ console.log('Selected excursion', excursion);
44774
+ dispatch(setFlyInType('excursion-details'));
44775
+ dispatch(setSelectedExcursionSearchResult(excursion));
44776
+ };
44777
+ return isLoading
44778
+ ? React__default.createElement(Spinner, null)
44779
+ : React__default.createElement(
44780
+ 'div',
44781
+ { className: 'flyin__content flyin__content--columns' },
44782
+ React__default.createElement(
44783
+ 'div',
44784
+ { className: 'search__results__wrapper' },
44785
+ React__default.createElement(
44786
+ 'div',
44787
+ { className: 'search__result-row' },
44788
+ React__default.createElement(
44789
+ 'span',
44790
+ { className: 'search__result-row-text' },
44791
+ !isLoading &&
44792
+ React__default.createElement(
44793
+ React__default.Fragment,
44794
+ null,
44795
+ (excursions === null || excursions === void 0 ? void 0 : excursions.length) && excursions.length,
44796
+ '\u00A0',
44797
+ translations.SRP.TOTAL_RESULTS_LABEL
44798
+ )
44799
+ )
44800
+ ),
44801
+ React__default.createElement(
44802
+ 'div',
44803
+ { className: 'search__results__cards search__results__cards--compact' },
44804
+ excursions &&
44805
+ excursions.length > 0 &&
44806
+ excursions.map(function (excursion) {
44807
+ return React__default.createElement(
44808
+ 'div',
44809
+ {
44810
+ key: excursion.code,
44811
+ className: 'search__result-card__wrapper search__result-card__wrapper--custom',
44812
+ onMouseEnter: function (e) {
44813
+ return (e.currentTarget.style.transform = 'scale(1.02)');
44814
+ },
44815
+ onMouseLeave: function (e) {
44816
+ return (e.currentTarget.style.transform = 'scale(1)');
44817
+ }
44818
+ },
44819
+ excursion.contents
44820
+ ? React__default.createElement('div', { dangerouslySetInnerHTML: { __html: he.decode(excursion.contents) } })
44821
+ : 'no contents',
44822
+ React__default.createElement(
44823
+ 'div',
44824
+ { className: 'search__result-card__footer' },
44825
+ React__default.createElement(
44826
+ 'button',
44827
+ {
44828
+ type: 'button',
44829
+ className: 'cta cta--select',
44830
+ onClick: function () {
44831
+ return handleChange(excursion);
44832
+ }
44833
+ },
44834
+ translations === null || translations === void 0 ? void 0 : translations.SHARED.SELECT
44835
+ )
44836
+ )
44837
+ );
44838
+ })
44839
+ )
44840
+ )
44841
+ );
44842
+ };
44843
+
44844
+ var formatPrice = function (price, currencyCode) {
44845
+ if (typeof price !== 'number') return '';
44846
+ return new Intl.NumberFormat('nl-BE', {
44847
+ style: 'currency',
44848
+ currency: currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR'
44849
+ }).format(price);
44850
+ };
44851
+ var getExcursionDayKey = function (date) {
44852
+ var parsed = typeof date === 'string' ? parseISO(date) : date;
44853
+ return format$1(parsed, 'yyyy-MM-dd');
44854
+ };
44855
+ var getOptionPaxIds = function (option) {
44856
+ return Array.isArray(option.paxIds)
44857
+ ? Array.from(new Set(option.paxIds)).sort(function (a, b) {
44858
+ return a - b;
44859
+ })
44860
+ : [];
44861
+ };
44862
+ var optionAppliesToPax = function (option, paxId) {
44863
+ return getOptionPaxIds(option).includes(paxId);
44864
+ };
44865
+ var optionAppliesToAllTravellers = function (option, travellerCount) {
44866
+ var paxIds = getOptionPaxIds(option);
44867
+ var expected = Array.from({ length: travellerCount }, function (_, i) {
44868
+ return i;
44869
+ });
44870
+ return (
44871
+ paxIds.length === expected.length &&
44872
+ paxIds.every(function (id, index) {
44873
+ return id === expected[index];
44874
+ })
44875
+ );
44876
+ };
44877
+ var groupOptionsByExcursion = function (options) {
44878
+ var groupedMap = new Map();
44879
+ options.forEach(function (option) {
44880
+ var key = option.accommodationCode;
44881
+ if (!groupedMap.has(key)) {
44882
+ groupedMap.set(key, {
44883
+ accommodationCode: option.accommodationCode,
44884
+ accommodationName: option.accommodationName,
44885
+ options: []
44886
+ });
44887
+ }
44888
+ groupedMap.get(key).options.push(option);
44889
+ });
44890
+ return Array.from(groupedMap.values());
44891
+ };
44892
+ var ExcursionDetails = function () {
44893
+ var _a;
44894
+ var context = useContext(SearchResultsConfigurationContext);
44895
+ var dispatch = useDispatch();
44896
+ var _b = useSelector(function (state) {
44897
+ return state.searchResults;
44898
+ }),
44899
+ selectedExcursionSearchResult = _b.selectedExcursionSearchResult,
44900
+ editablePackagingEntry = _b.editablePackagingEntry,
44901
+ excursionSearchParams = _b.excursionSearchParams;
44902
+ if (
44903
+ !context ||
44904
+ !selectedExcursionSearchResult ||
44905
+ !editablePackagingEntry ||
44906
+ !(excursionSearchParams === null || excursionSearchParams === void 0 ? void 0 : excursionSearchParams.date)
44907
+ ) {
44908
+ return null;
44909
+ }
44910
+ var translations = getTranslations((_a = context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
44911
+ var travellerCount = editablePackagingEntry.pax.length;
44912
+ var allOptions = useMemo(
44913
+ function () {
44914
+ return selectedExcursionSearchResult.rooms.flatMap(function (room) {
44915
+ var _a;
44916
+ return (_a = room.options) !== null && _a !== void 0 ? _a : [];
44917
+ });
44918
+ },
44919
+ [selectedExcursionSearchResult]
44920
+ );
44921
+ var sharedOptions = useMemo(
44922
+ function () {
44923
+ return allOptions.filter(function (option) {
44924
+ return optionAppliesToAllTravellers(option, travellerCount);
44925
+ });
44926
+ },
44927
+ [allOptions, travellerCount]
44928
+ );
44929
+ var sharedExcursions = useMemo(
44930
+ function () {
44931
+ return groupOptionsByExcursion(sharedOptions);
44932
+ },
44933
+ [sharedOptions]
44934
+ );
44935
+ var paxGroups = useMemo(
44936
+ function () {
44937
+ return editablePackagingEntry.pax.map(function (pax) {
44938
+ var paxOptions = allOptions.filter(function (option) {
44939
+ return optionAppliesToPax(option, pax.id) && !optionAppliesToAllTravellers(option, travellerCount);
44940
+ });
44941
+ return {
44942
+ pax: pax,
44943
+ paxId: pax.id,
44944
+ excursions: groupOptionsByExcursion(paxOptions)
44945
+ };
44946
+ });
44947
+ },
44948
+ [editablePackagingEntry.pax, allOptions, travellerCount]
44949
+ );
44950
+ var getSelectedSharedOption = function () {
44951
+ return sharedOptions.find(function (option) {
44952
+ return option.isSelected;
44953
+ });
44954
+ };
44955
+ var getSelectedSharedOptionForExcursion = function (accommodationCode) {
44956
+ return sharedOptions.find(function (option) {
44957
+ return option.accommodationCode === accommodationCode && option.isSelected;
44958
+ });
44959
+ };
44960
+ var getSelectedOptionForPax = function (paxId) {
44961
+ return allOptions.find(function (option) {
44962
+ return optionAppliesToPax(option, paxId) && !optionAppliesToAllTravellers(option, travellerCount) && option.isSelected;
44963
+ });
44964
+ };
44965
+ var getSelectedOptionForExcursion = function (paxId, accommodationCode) {
44966
+ return allOptions.find(function (option) {
44967
+ return (
44968
+ optionAppliesToPax(option, paxId) &&
44969
+ !optionAppliesToAllTravellers(option, travellerCount) &&
44970
+ option.accommodationCode === accommodationCode &&
44971
+ option.isSelected
44972
+ );
44973
+ });
44974
+ };
44975
+ var handlePick = function (selectedGuid, paxId) {
44976
+ var updatedExcursionSearchResult = __assign(__assign({}, selectedExcursionSearchResult), {
44977
+ rooms: selectedExcursionSearchResult.rooms.map(function (room) {
44978
+ return __assign(__assign({}, room), {
44979
+ options: room.options.map(function (option) {
44980
+ var isSharedOption = optionAppliesToAllTravellers(option, travellerCount);
44981
+ if (paxId === undefined) {
44982
+ if (!isSharedOption) {
44983
+ return option;
44984
+ }
44985
+ return __assign(__assign({}, option), { isSelected: option.guid === selectedGuid });
44986
+ }
44987
+ if (isSharedOption || !optionAppliesToPax(option, paxId)) {
44988
+ return option;
44989
+ }
44990
+ return __assign(__assign({}, option), { isSelected: option.guid === selectedGuid });
44991
+ })
44992
+ });
44993
+ })
44994
+ });
44995
+ dispatch(setSelectedExcursionSearchResult(updatedExcursionSearchResult));
44996
+ };
44997
+ var calculateTotalPrice = function () {
44998
+ var selectedOptions = allOptions.filter(function (option) {
44999
+ return option.isSelected;
45000
+ });
45001
+ var totalPrice = selectedOptions.reduce(function (total, option) {
45002
+ return total + (option.price || 0);
45003
+ }, 0);
45004
+ return formatPrice(totalPrice, selectedExcursionSearchResult.currencyCode);
45005
+ };
45006
+ var getSharedPriceDifference = function (accommodationCode) {
45007
+ var currentSelectedShared = getSelectedSharedOption();
45008
+ var targetPrice = 0;
45009
+ var selectedOption = getSelectedSharedOptionForExcursion(accommodationCode);
45010
+ if (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.price) {
45011
+ targetPrice = selectedOption.price;
45012
+ } else {
45013
+ var firstOption = sharedOptions.find(function (option) {
45014
+ return option.accommodationCode === accommodationCode;
45015
+ });
45016
+ targetPrice = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.price) || 0;
45017
+ }
45018
+ return targetPrice - ((currentSelectedShared === null || currentSelectedShared === void 0 ? void 0 : currentSelectedShared.price) || 0);
45019
+ };
45020
+ var getPriceDifference = function (currentSelectedPrice, paxId, accommodationCode) {
45021
+ var targetPrice = 0;
45022
+ var selectedOption = getSelectedOptionForExcursion(paxId, accommodationCode);
45023
+ if (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.price) {
45024
+ targetPrice = selectedOption.price;
45025
+ } else {
45026
+ var firstOption = allOptions.find(function (option) {
45027
+ return optionAppliesToPax(option, paxId) && !optionAppliesToAllTravellers(option, travellerCount) && option.accommodationCode === accommodationCode;
45028
+ });
45029
+ targetPrice = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.price) || 0;
45030
+ }
45031
+ return targetPrice - (currentSelectedPrice || 0);
45032
+ };
45033
+ var formatPriceDifference = function (difference, currencyCode) {
45034
+ if (difference === 0) {
45035
+ return null;
45036
+ }
45037
+ var formattedAbsoluteValue = formatPrice(Math.abs(difference), currencyCode);
45038
+ return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
45039
+ };
45040
+ var getPriceDifferenceClassName = function (difference) {
45041
+ if (difference < 0) {
45042
+ return 'flyin__acco__price flyin__acco__price--decrease';
45043
+ }
45044
+ if (difference > 0) {
45045
+ return 'flyin__acco__price flyin__acco__price--increase';
45046
+ }
45047
+ return 'flyin__acco__price';
45048
+ };
45049
+ var handleConfirm = function () {
45050
+ var dayKey = getExcursionDayKey(excursionSearchParams.date);
45051
+ dispatch(
45052
+ confirmExcursionForDay({
45053
+ dayKey: dayKey,
45054
+ excursion: selectedExcursionSearchResult
45055
+ })
45056
+ );
45057
+ dispatch(setFlyInIsOpen(false));
45058
+ };
45059
+ return React__default.createElement(
45060
+ React__default.Fragment,
45061
+ null,
45062
+ React__default.createElement(
45063
+ 'div',
45064
+ { className: 'flyin__content' },
45065
+ sharedExcursions.length > 0 &&
45066
+ React__default.createElement(
45067
+ 'div',
45068
+ { className: 'flyin__acco' },
45069
+ React__default.createElement('h3', { className: 'flyin__acco__room-title' }, translations.QSM.ALL_TRAVELERS),
45070
+ React__default.createElement(
45071
+ 'div',
45072
+ { className: 'flyin__acco__cards' },
45073
+ sharedExcursions.map(function (excursion) {
45074
+ var selectedOption = getSelectedSharedOptionForExcursion(excursion.accommodationCode);
45075
+ var priceDifference = getSharedPriceDifference(excursion.accommodationCode);
45076
+ return React__default.createElement(
45077
+ 'div',
45078
+ { className: 'flyin__acco__card', key: 'all-'.concat(excursion.accommodationCode) },
45079
+ React__default.createElement(
45080
+ 'div',
45081
+ { className: 'flyin__acco__content' },
45082
+ React__default.createElement('h4', { className: 'flyin__acco__title' }, excursion.accommodationName)
45083
+ ),
45084
+ React__default.createElement(
45085
+ 'div',
45086
+ { className: 'flyin__acco__footer' },
45087
+ React__default.createElement(
45088
+ 'div',
45089
+ { className: 'flyin__acco__footer__actions' },
45090
+ React__default.createElement(
45091
+ 'button',
45092
+ {
45093
+ className: selectedOption ? 'cta cta--select cta--selected' : 'cta cta--select',
45094
+ onClick: function () {
45095
+ var _a;
45096
+ return handlePick(
45097
+ selectedOption ? selectedOption.guid : (_a = first(excursion.options)) === null || _a === void 0 ? void 0 : _a.guid
45098
+ );
45099
+ }
45100
+ },
45101
+ selectedOption
45102
+ ? translations === null || translations === void 0
45103
+ ? void 0
45104
+ : translations.SHARED.SELECTED
45105
+ : translations === null || translations === void 0
45106
+ ? void 0
45107
+ : translations.SHARED.SELECT
45108
+ ),
45109
+ React__default.createElement(
45110
+ 'div',
45111
+ { className: 'flyin__acco__price__wrapper' },
45112
+ React__default.createElement(
45113
+ 'span',
45114
+ { className: getPriceDifferenceClassName(priceDifference) },
45115
+ formatPriceDifference(priceDifference, selectedExcursionSearchResult.currencyCode)
45116
+ )
45117
+ )
45118
+ )
45119
+ )
45120
+ );
45121
+ })
45122
+ )
45123
+ ),
45124
+ paxGroups.map(function (_a) {
45125
+ var pax = _a.pax,
45126
+ paxId = _a.paxId,
45127
+ excursions = _a.excursions;
45128
+ if (excursions.length === 0) {
45129
+ return null;
45130
+ }
45131
+ var selectedPaxOption = getSelectedOptionForPax(paxId);
45132
+ return React__default.createElement(
45133
+ 'div',
45134
+ { className: 'flyin__acco', key: 'pax-'.concat(pax.id) },
45135
+ React__default.createElement('h3', { className: 'flyin__acco__room-title' }, translations.SUMMARY.TRAVELER, ' ', pax.id + 1),
45136
+ React__default.createElement(
45137
+ 'div',
45138
+ { className: 'flyin__acco__cards' },
45139
+ excursions.map(function (excursion) {
45140
+ var selectedOption = getSelectedOptionForExcursion(paxId, excursion.accommodationCode);
45141
+ var priceDifference = getPriceDifference(
45142
+ selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.price,
45143
+ paxId,
45144
+ excursion.accommodationCode
45145
+ );
45146
+ return React__default.createElement(
45147
+ 'div',
45148
+ { className: 'flyin__acco__card', key: ''.concat(pax.id, '-').concat(excursion.accommodationCode) },
45149
+ React__default.createElement(
45150
+ 'div',
45151
+ { className: 'flyin__acco__content' },
45152
+ React__default.createElement('h4', { className: 'flyin__acco__title' }, excursion.accommodationName)
45153
+ ),
45154
+ React__default.createElement(
45155
+ 'div',
45156
+ { className: 'flyin__acco__footer' },
45157
+ React__default.createElement(
45158
+ 'div',
45159
+ { className: 'flyin__acco__footer__actions' },
45160
+ React__default.createElement(
45161
+ 'button',
45162
+ {
45163
+ className:
45164
+ (selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.accommodationCode) ===
45165
+ excursion.accommodationCode
45166
+ ? 'cta cta--select cta--selected'
45167
+ : 'cta cta--select',
45168
+ onClick: function () {
45169
+ var _a;
45170
+ return handlePick(
45171
+ selectedOption ? selectedOption.guid : (_a = first(excursion.options)) === null || _a === void 0 ? void 0 : _a.guid,
45172
+ paxId
45173
+ );
45174
+ }
45175
+ },
45176
+ (selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.accommodationCode) ===
45177
+ excursion.accommodationCode
45178
+ ? translations === null || translations === void 0
45179
+ ? void 0
45180
+ : translations.SHARED.SELECTED
45181
+ : translations === null || translations === void 0
45182
+ ? void 0
45183
+ : translations.SHARED.SELECT
45184
+ ),
45185
+ React__default.createElement(
45186
+ 'div',
45187
+ { className: 'flyin__acco__price__wrapper' },
45188
+ React__default.createElement(
45189
+ 'span',
45190
+ { className: getPriceDifferenceClassName(priceDifference) },
45191
+ formatPriceDifference(priceDifference, selectedExcursionSearchResult.currencyCode)
45192
+ )
45193
+ )
45194
+ )
45195
+ )
45196
+ );
45197
+ })
45198
+ )
45199
+ );
45200
+ })
45201
+ ),
45202
+ React__default.createElement(
45203
+ 'div',
45204
+ { className: 'flyin__footer' },
45205
+ React__default.createElement('div', { className: 'flyin__footer__price' }, translations.SHARED.TOTAL_PRICE, ': ', calculateTotalPrice()),
45206
+ React__default.createElement(
45207
+ 'button',
45208
+ { type: 'button', className: 'cta cta--primary', onClick: handleConfirm },
45209
+ translations === null || translations === void 0 ? void 0 : translations.QSM.CONFIRM
45210
+ )
45211
+ )
45212
+ );
45213
+ };
45214
+
45215
+ var FlyIn = function (_a) {
45216
+ var _b;
45217
+ var srpType = _a.srpType,
45218
+ isOpen = _a.isOpen,
45219
+ setIsOpen = _a.setIsOpen,
45220
+ _c = _a.className,
45221
+ className = _c === void 0 ? '' : _c,
45222
+ onPanelRef = _a.onPanelRef,
45223
+ detailsLoading = _a.detailsLoading,
45224
+ flyInType = _a.flyInType,
45225
+ isPackageEditFlow = _a.isPackageEditFlow,
45226
+ handleConfirm = _a.handleConfirm,
45227
+ sortByTypes = _a.sortByTypes,
45228
+ activeSearchSeed = _a.activeSearchSeed;
45229
+ var dispatch = useDispatch();
45230
+ var context = useContext(SearchResultsConfigurationContext);
45231
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
45232
+ var translations = getTranslations(language);
45233
+ var _d = useSelector(function (state) {
45234
+ return state.searchResults;
45235
+ }),
45236
+ isLoading = _d.isLoading,
45237
+ initialFilters = _d.initialFilters,
45238
+ filters = _d.filters,
45239
+ filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
45240
+ selectedSortType = _d.selectedSortType;
45241
+ var onCancelSearch = useFlightSearch().onCancelSearch;
45242
+ var panelRef = useRef(null);
45243
+ // expose DOM node if needed
45244
+ useEffect(
45245
+ function () {
45246
+ onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
45247
+ return function () {
45248
+ return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
45249
+ };
45250
+ },
45251
+ [onPanelRef]
45252
+ );
45253
+ useEffect(
45254
+ function () {
45255
+ // click outside detection
45256
+ var handleClickOutside = function (event) {
45257
+ if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
45258
+ handleClose();
45259
+ }
45260
+ };
45261
+ document.addEventListener('mousedown', handleClickOutside);
45262
+ return function () {
45263
+ return document.removeEventListener('mousedown', handleClickOutside);
45264
+ };
45265
+ },
45266
+ [isOpen, setIsOpen]
45267
+ );
45268
+ // body scroll lock
45269
+ useEffect(
45270
+ function () {
45271
+ document.body.style.overflow = isOpen ? 'hidden' : '';
45272
+ return function () {
45273
+ document.body.style.overflow = '';
45274
+ };
45275
+ },
45276
+ [isOpen]
45277
+ );
45278
+ var handleClose = function () {
45279
+ if (isOpen && panelRef.current) {
45280
+ if (srpType === build.PortalQsmType.Flight) {
45281
+ dispatch(setSelectedFlight(null));
45282
+ dispatch(setSelectedFlightDetails(null));
45283
+ onCancelSearch();
45284
+ } else {
45285
+ dispatch(setSelectedSearchResult(null));
45286
+ }
45287
+ dispatch(setFlyInType('acco-details'));
45288
+ setIsOpen(false);
45289
+ }
45290
+ };
45291
+ var handleGoBack = function () {
45292
+ if (flyInType === 'acco-details') {
45293
+ dispatch(setFlyInType('acco-results'));
45294
+ } else if (flyInType === 'excursion-details') {
45295
+ dispatch(setFlyInType('excursion-results'));
45296
+ }
45297
+ };
45298
+ var handleSortChange = function (newSortKey, direction) {
45299
+ if (sortByTypes === undefined) return;
45300
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
45301
+ if (newSortByType) {
45302
+ dispatch(setSortType(newSortByType));
45303
+ }
45304
+ };
45305
+ return React__default.createElement(
45306
+ 'div',
45307
+ {
45308
+ className: 'flyin '
45309
+ .concat(isOpen ? 'flyin--active' : '', ' ')
45310
+ .concat(className, ' ')
45311
+ .concat(
45312
+ isPackageEditFlow || flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'acco-results'
45313
+ ? 'flyin--large'
45314
+ : ''
45315
+ )
45316
+ },
45317
+ React__default.createElement(
45318
+ 'div',
45319
+ { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
45320
+ React__default.createElement(
45321
+ 'div',
45322
+ { className: 'flyin__content' },
45323
+ React__default.createElement(
45324
+ 'div',
45325
+ { className: 'flyin__content-title-row' },
45326
+ React__default.createElement(
45327
+ 'h3',
45328
+ { className: 'flyin__content-title' },
45329
+ srpType === build.PortalQsmType.Flight && 'Select your fare',
45330
+ srpType === build.PortalQsmType.Accommodation ||
45331
+ (srpType === build.PortalQsmType.AccommodationAndFlight &&
45332
+ (flyInType === 'acco-results' || flyInType === 'acco-details') &&
45333
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION)),
45334
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45335
+ flyInType === 'flight-outward-results' &&
45336
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.OUTWARD_FLIGHT),
45337
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45338
+ flyInType === 'flight-return-results' &&
45339
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.RETURN_FLIGHT),
45340
+ srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'flight-details' && 'Select your fare',
45341
+ flyInType === 'excursion-results' || (flyInType === 'excursion-details' && 'Select excursion')
45342
+ ),
45343
+ React__default.createElement(
45344
+ 'span',
45345
+ {
45346
+ className: 'flyin__close',
45347
+ onClick: function () {
45348
+ return handleClose();
45349
+ }
45350
+ },
45351
+ React__default.createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
45352
+ )
45353
+ ),
45354
+ ((isPackageEditFlow && flyInType === 'acco-details') || flyInType === 'excursion-details') &&
45355
+ React__default.createElement(
45356
+ 'div',
45357
+ { className: 'flyin__content-title-row' },
45358
+ React__default.createElement(
43696
45359
  'div',
43697
45360
  { onClick: handleGoBack, className: 'flyin__content-title__back' },
43698
45361
  React__default.createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
@@ -43702,15 +45365,77 @@ var FlyIn = function (_a) {
43702
45365
  ),
43703
45366
  srpType === build.PortalQsmType.Flight && React__default.createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
43704
45367
  (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43705
- accommodationStep === 'results' &&
45368
+ flyInType === 'acco-results' &&
43706
45369
  React__default.createElement(
43707
45370
  'div',
43708
- { className: 'flyin__content' },
43709
- React__default.createElement(HotelAccommodationResults, { isLoading: detailsLoading })
45371
+ { className: 'flyin__content flyin__content--columns' },
45372
+ React__default.createElement(Filters, {
45373
+ initialFilters: initialFilters,
45374
+ filters: filters,
45375
+ isOpen: false,
45376
+ handleSetIsOpen: function () {},
45377
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
45378
+ isLoading: isLoading,
45379
+ setFilters: function (filters) {
45380
+ return dispatch(setFilters(filters));
45381
+ },
45382
+ resetFilters: function (filters) {
45383
+ return dispatch(resetFilters(filters));
45384
+ }
45385
+ }),
45386
+ React__default.createElement(
45387
+ 'div',
45388
+ { className: 'search__results__wrapper' },
45389
+ React__default.createElement(
45390
+ 'div',
45391
+ { className: 'search__result-row' },
45392
+ React__default.createElement(
45393
+ 'span',
45394
+ { className: 'search__result-row-text' },
45395
+ !isLoading &&
45396
+ React__default.createElement(
45397
+ React__default.Fragment,
45398
+ null,
45399
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
45400
+ filteredPackagingAccoResults.length,
45401
+ '\u00A0',
45402
+ translations.SRP.TOTAL_RESULTS_LABEL
45403
+ )
45404
+ ),
45405
+ sortByTypes &&
45406
+ sortByTypes.length > 0 &&
45407
+ React__default.createElement(
45408
+ 'div',
45409
+ { className: 'search__result-row-filter' },
45410
+ React__default.createElement(ItemPicker, {
45411
+ items: sortByTypes,
45412
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
45413
+ selectedSortByType: selectedSortType,
45414
+ label: translations.SRP.SORTBY,
45415
+ placeholder: translations.SRP.SORTBY,
45416
+ classModifier: 'travel-class-picker__items',
45417
+ valueFormatter: function (value, direction) {
45418
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
45419
+ },
45420
+ onPick: function (newSortKey, direction) {
45421
+ return handleSortChange(newSortKey, direction);
45422
+ }
45423
+ })
45424
+ )
45425
+ ),
45426
+ React__default.createElement(HotelAccommodationResults, { isLoading: detailsLoading, isFlyIn: true })
45427
+ )
43710
45428
  ),
43711
45429
  (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43712
- accommodationStep === 'details' &&
45430
+ flyInType === 'acco-details' &&
43713
45431
  React__default.createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
45432
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45433
+ (flyInType === 'flight-outward-results' || flyInType === 'flight-return-results') &&
45434
+ React__default.createElement(PackageingFlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
45435
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45436
+ flyInType === 'excursion-results' &&
45437
+ React__default.createElement(ExcursionResults, { isFlyIn: true, activeSearchSeed: activeSearchSeed }),
45438
+ srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'excursion-details' && React__default.createElement(ExcursionDetails, null),
43714
45439
  srpType === build.PortalQsmType.GroupTour &&
43715
45440
  React__default.createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
43716
45441
  )
@@ -44057,7 +45782,7 @@ var PairedFlightOption = function (_a) {
44057
45782
  React__default.createElement(
44058
45783
  'span',
44059
45784
  { className: 'price' },
44060
- formatPrice$2(
45785
+ formatPrice$3(
44061
45786
  item.price,
44062
45787
  'EUR',
44063
45788
  (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
@@ -44448,258 +46173,6 @@ var PairedFlightSelection = function (_a) {
44448
46173
  );
44449
46174
  };
44450
46175
 
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'
44505
- )
44506
- )
44507
- : priceDifference != null &&
44508
- Math.abs(priceDifference) > 0 &&
44509
- 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
- )
44531
- )
44532
- )
44533
- ),
44534
- React__default.createElement(
44535
- 'div',
44536
- { className: 'flight__flight' },
44537
- React__default.createElement(
44538
- 'div',
44539
- { className: 'flight__flight__container' },
44540
- React__default.createElement(
44541
- '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
- ),
44556
- React__default.createElement(
44557
- 'div',
44558
- { className: 'flight__info' },
44559
- React__default.createElement(
44560
- '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
- ),
44569
- React__default.createElement(
44570
- 'p',
44571
- null,
44572
- longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
44573
- )
44574
- ),
44575
- React__default.createElement(
44576
- 'div',
44577
- { className: 'flight__info__duration' },
44578
- React__default.createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
44579
- React__default.createElement(
44580
- 'div',
44581
- { className: 'flight__info__duration__stops' },
44582
- React__default.createElement('div', { className: 'flight__info__duration__stop' })
44583
- ),
44584
- 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
44599
- ),
44600
- React__default.createElement(
44601
- 'p',
44602
- null,
44603
- longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
44604
- )
44605
- )
44606
- )
44607
- ),
44608
- React__default.createElement(
44609
- '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
- ),
44649
- React__default.createElement(
44650
- '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)
44656
- ),
44657
- React__default.createElement(
44658
- '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
- )
44668
- )
44669
- ),
44670
- segment.transferTimeInTicks &&
44671
- React__default.createElement(
44672
- 'div',
44673
- { className: 'flight__info' },
44674
- React__default.createElement('div', { className: 'flight__info__times' }),
44675
- React__default.createElement(
44676
- '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
- )
44689
- ),
44690
- React__default.createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44691
- )
44692
- );
44693
- })
44694
- )
44695
- )
44696
- )
44697
- )
44698
- )
44699
- )
44700
- );
44701
- };
44702
-
44703
46176
  var IndependentFlightSelection = function (_a) {
44704
46177
  var _b;
44705
46178
  var searchResults = _a.searchResults;
@@ -44883,116 +46356,6 @@ var FlightSelection = function (_a) {
44883
46356
  : React__default.createElement(IndependentFlightSelection, { searchResults: searchResults });
44884
46357
  };
44885
46358
 
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' },
44953
- React__default.createElement(
44954
- '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))
44958
- ),
44959
- React__default.createElement(
44960
- '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))
44992
- )
44993
- );
44994
- };
44995
-
44996
46359
  var FlightFilters = function (_a) {
44997
46360
  var _b;
44998
46361
  var isOpen = _a.isOpen,
@@ -46081,228 +47444,6 @@ var FlightResultsContainer = function (_a) {
46081
47444
  );
46082
47445
  };
46083
47446
 
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' },
46158
- React__default.createElement(
46159
- 'div',
46160
- { className: 'search__filter-row-flex-title' },
46161
- React__default.createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
46162
- ),
46163
- !isLoading &&
46164
- 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,
46180
- 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(
46187
- '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
46198
- },
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
- })
46300
- )
46301
- )
46302
- )
46303
- );
46304
- };
46305
-
46306
47447
  var GroupTourCard = function (_a) {
46307
47448
  var _b, _c, _d, _e, _f, _g;
46308
47449
  var result = _a.result,
@@ -46443,7 +47584,7 @@ var GroupTourCard = function (_a) {
46443
47584
  React__default.createElement(
46444
47585
  'div',
46445
47586
  { className: 'search__result-card__allotment__price' },
46446
- formatPrice$2(result.price, result.currencyCode, languageCode),
47587
+ formatPrice$3(result.price, result.currencyCode, languageCode),
46447
47588
  ' ',
46448
47589
  translations.PRODUCT.PER_PERSON
46449
47590
  )
@@ -46620,80 +47761,245 @@ var enrichFiltersWithResults = function (results, filters, tags) {
46620
47761
  return updatedFilter;
46621
47762
  });
46622
47763
  };
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
- }
47764
+ var enrichFiltersWithPackageAccoResults = function (results, tags) {
47765
+ var filters = [];
47766
+ if (!results || results.length === 0) {
47767
+ return filters;
47768
+ }
47769
+ var regimeFilter = {
47770
+ property: 'regime',
47771
+ label: 'Regime',
47772
+ type: 'checkbox',
47773
+ options: [],
47774
+ isFrontendFilter: true
47775
+ };
47776
+ var map = new Map();
47777
+ results.forEach(function (r) {
47778
+ var rooms = flatMap(r.rooms);
47779
+ if (rooms) {
47780
+ rooms.map(function (room) {
47781
+ room.options.map(function (option) {
47782
+ if (option.regimeCode) {
47783
+ map.set(option.regimeCode, {
47784
+ name: option.regimeName,
47785
+ code: option.regimeCode
46656
47786
  });
46657
- });
46658
- }
47787
+ }
47788
+ });
46659
47789
  });
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
- };
47790
+ }
47791
+ });
47792
+ regimeFilter.options = Array.from(map.values()).map(function (regime) {
47793
+ var _a;
47794
+ return {
47795
+ label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
47796
+ value: regime.code,
47797
+ isChecked: false
47798
+ };
47799
+ });
47800
+ filters.push(regimeFilter);
47801
+ var priceFilter = {
47802
+ property: 'price',
47803
+ label: 'Prijs',
47804
+ type: 'slider',
47805
+ isFrontendFilter: true
47806
+ };
47807
+ var prices = results
47808
+ .map(function (r) {
47809
+ var _a;
47810
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
47811
+ })
47812
+ .filter(function (p) {
47813
+ return p > 0;
47814
+ });
47815
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
47816
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
47817
+ filters.push(priceFilter);
47818
+ return filters;
47819
+ };
47820
+ var enrichFiltersWithPackageFlightResults = function (results, tags, translations) {
47821
+ var filters = [];
47822
+ if (!results || results.length === 0) {
47823
+ return filters;
47824
+ }
47825
+ // Airlines
47826
+ var airlinesFilter = {
47827
+ label: 'Airlines',
47828
+ property: 'airline',
47829
+ type: 'checkbox',
47830
+ isFrontendFilter: true,
47831
+ options: []
47832
+ };
47833
+ var airlinesFilterMap = new Map();
47834
+ results.map(function (r) {
47835
+ var airlineCode = r.airlineCode;
47836
+ var airlineName = r.airlineName;
47837
+ if (airlineCode && airlineName) {
47838
+ airlinesFilterMap.set(airlineCode, {
47839
+ name: airlineName,
47840
+ code: airlineCode
46667
47841
  });
46668
47842
  }
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
- }
47843
+ });
47844
+ airlinesFilter.options = Array.from(airlinesFilterMap.values()).map(function (airline) {
47845
+ var _a;
47846
+ return {
47847
+ label: (_a = airline.name) !== null && _a !== void 0 ? _a : airline.code,
47848
+ value: airline.code,
47849
+ isChecked: false
47850
+ };
47851
+ });
47852
+ filters.push(airlinesFilter);
47853
+ // Number of stops
47854
+ var stopsFilter = {
47855
+ label: 'Number of Stops',
47856
+ property: 'numberOfStops',
47857
+ type: 'checkbox',
47858
+ isFrontendFilter: true,
47859
+ options: []
47860
+ };
47861
+ var stopsMap = new Map();
47862
+ results.map(function (result) {
47863
+ var numberOfStops = getNumberOfStops(result.outward);
47864
+ if (!stopsMap.has(numberOfStops)) {
47865
+ stopsMap.set(numberOfStops, { numberOfStops: numberOfStops });
47866
+ }
47867
+ });
47868
+ stopsFilter.options = Array.from(stopsMap.values()).map(function (stop) {
47869
+ return {
47870
+ label: ''.concat(stop.numberOfStops == 0 ? 'direct' : stop.numberOfStops + ' Stop'.concat(stop.numberOfStops !== 1 ? 's' : '')),
47871
+ value: stop.numberOfStops,
47872
+ isChecked: false
47873
+ };
47874
+ });
47875
+ filters.push(stopsFilter);
47876
+ // Departure range
47877
+ var departureRangeFilter = {
47878
+ label: 'Departure Range',
47879
+ property: 'departureRange',
47880
+ type: 'checkbox',
47881
+ isFrontendFilter: true,
47882
+ options: []
47883
+ };
47884
+ var departureRangeMap = new Map();
47885
+ results.map(function (result) {
47886
+ var _a;
47887
+ var departureRange = rangeFromDateTimeInMinutes((_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime);
47888
+ if (!departureRangeMap.has(departureRange)) {
47889
+ departureRangeMap.set(departureRange, departureRange);
47890
+ }
47891
+ });
47892
+ departureRangeFilter.options = orderBy(Array.from(departureRangeMap.values()), ['id'], ['asc']).map(function (range) {
47893
+ return {
47894
+ label: getDepartureRangeName(translations, range),
47895
+ value: range,
47896
+ isChecked: false
47897
+ };
47898
+ });
47899
+ filters.push(departureRangeFilter);
47900
+ // Departure Airport
47901
+ var departureAirportFilter = {
47902
+ label: 'Departure Airport',
47903
+ property: 'departureAirport',
47904
+ type: 'checkbox',
47905
+ isFrontendFilter: true,
47906
+ options: []
47907
+ };
47908
+ var departureAirportsMap = new Map();
47909
+ results.map(function (result) {
47910
+ var departureSegment = getDepartureSegment(result.outward);
47911
+ var departureAirport = departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportCode;
47912
+ if (departureAirport && !departureAirportsMap.has(departureAirport)) {
47913
+ departureAirportsMap.set(departureAirport, {
47914
+ name: (departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportName) + ' (' + departureAirport + ')',
47915
+ code: departureAirport
46685
47916
  });
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
- };
47917
+ }
47918
+ });
47919
+ departureAirportFilter.options = Array.from(departureAirportsMap.values()).map(function (airport) {
47920
+ var _a;
47921
+ return {
47922
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
47923
+ value: airport.code,
47924
+ isChecked: false
47925
+ };
47926
+ });
47927
+ filters.push(departureAirportFilter);
47928
+ // Arrival Airport
47929
+ var arrivalAirportFilter = {
47930
+ label: 'Arrival Airport',
47931
+ property: 'arrivalAirport',
47932
+ type: 'checkbox',
47933
+ isFrontendFilter: true,
47934
+ options: []
47935
+ };
47936
+ var arrivalAirportsMap = new Map();
47937
+ results.map(function (result) {
47938
+ var arrivalSegment = getArrivalSegment(result.outward);
47939
+ var arrivalAirport = arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportCode;
47940
+ if (arrivalAirport && !arrivalAirportsMap.has(arrivalAirport)) {
47941
+ arrivalAirportsMap.set(arrivalAirport, {
47942
+ name: (arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportName) + ' (' + arrivalAirport + ')',
47943
+ code: arrivalAirport
46693
47944
  });
46694
47945
  }
46695
- return updatedFilter;
46696
47946
  });
47947
+ arrivalAirportFilter.options = Array.from(arrivalAirportsMap.values()).map(function (airport) {
47948
+ var _a;
47949
+ return {
47950
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
47951
+ value: airport.code,
47952
+ isChecked: false
47953
+ };
47954
+ });
47955
+ filters.push(arrivalAirportFilter);
47956
+ // Price
47957
+ var priceFilter = {
47958
+ label: 'Price',
47959
+ property: 'price',
47960
+ type: 'slider',
47961
+ isFrontendFilter: true
47962
+ };
47963
+ var prices = results
47964
+ .map(function (r) {
47965
+ var _a;
47966
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
47967
+ })
47968
+ .filter(function (p) {
47969
+ return p > 0;
47970
+ });
47971
+ if (prices.length > 0) {
47972
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
47973
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
47974
+ }
47975
+ filters.push(priceFilter);
47976
+ // Travel duration
47977
+ var travelDurationFilter = {
47978
+ label: 'Travel Duration',
47979
+ property: 'travelDuration',
47980
+ type: 'slider',
47981
+ isFrontendFilter: true
47982
+ };
47983
+ var minTravelTimeDuration = Math.min.apply(
47984
+ Math,
47985
+ results.map(function (result) {
47986
+ return result.outward.durationInTicks;
47987
+ })
47988
+ );
47989
+ var maxTravelTimeDuration = Math.max.apply(
47990
+ Math,
47991
+ results.map(function (result) {
47992
+ return result.outward.durationInTicks;
47993
+ })
47994
+ );
47995
+ var minTravelTimeValue = durationInTicksInMinutes(minTravelTimeDuration);
47996
+ var maxTravelTimeValue = durationInTicksInMinutes(maxTravelTimeDuration);
47997
+ if (minTravelTimeValue != null && maxTravelTimeValue != null) {
47998
+ travelDurationFilter.min = minTravelTimeValue;
47999
+ travelDurationFilter.max = maxTravelTimeValue;
48000
+ }
48001
+ filters.push(travelDurationFilter);
48002
+ return filters;
46697
48003
  };
46698
48004
  var applyFilters = function (results, filters, sortBy) {
46699
48005
  var filtered = results.filter(function (r) {
@@ -46835,6 +48141,147 @@ var applyFiltersToPackageAccoResults = function (results, filters, sortBy) {
46835
48141
  return 0;
46836
48142
  });
46837
48143
  };
48144
+ var applyFiltersToPackageFlightResults = function (results, filters, sortBy) {
48145
+ var filtered = results.filter(function (result) {
48146
+ return filters.every(function (filter) {
48147
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
48148
+ if (!filter.isFrontendFilter) return true;
48149
+ // Airline
48150
+ if (filter.property === 'airline') {
48151
+ var selected =
48152
+ (_a = filter.options) === null || _a === void 0
48153
+ ? void 0
48154
+ : _a
48155
+ .filter(function (o) {
48156
+ return o.isChecked;
48157
+ })
48158
+ .map(function (o) {
48159
+ return o.value;
48160
+ });
48161
+ if (!selected || selected.length === 0) return true;
48162
+ return selected.includes(result.airlineCode);
48163
+ }
48164
+ // Stops
48165
+ if (filter.property === 'numberOfStops') {
48166
+ var selected =
48167
+ (_b = filter.options) === null || _b === void 0
48168
+ ? void 0
48169
+ : _b
48170
+ .filter(function (o) {
48171
+ return o.isChecked;
48172
+ })
48173
+ .map(function (o) {
48174
+ return o.value;
48175
+ });
48176
+ if (!selected || selected.length === 0) return true;
48177
+ return selected.includes(getNumberOfStops(result.outward)) && selected.includes(getNumberOfStops(result.return));
48178
+ }
48179
+ // Departure range
48180
+ if (filter.property === 'departureRange') {
48181
+ var selected =
48182
+ (_c = filter.options) === null || _c === void 0
48183
+ ? void 0
48184
+ : _c
48185
+ .filter(function (o) {
48186
+ return o.isChecked;
48187
+ })
48188
+ .map(function (o) {
48189
+ return o.value;
48190
+ });
48191
+ if (!selected || selected.length === 0) return true;
48192
+ return selected.includes(
48193
+ rangeFromDateTimeInMinutes((_d = getDepartureSegment(result.outward)) === null || _d === void 0 ? void 0 : _d.departureDateTime)
48194
+ );
48195
+ }
48196
+ // Departure airport
48197
+ if (filter.property === 'departureAirport') {
48198
+ var selected =
48199
+ (_e = filter.options) === null || _e === void 0
48200
+ ? void 0
48201
+ : _e
48202
+ .filter(function (o) {
48203
+ return o.isChecked;
48204
+ })
48205
+ .map(function (o) {
48206
+ return o.value;
48207
+ });
48208
+ if (!selected || selected.length === 0) return true;
48209
+ var departureAirportCode = (_f = getDepartureSegment(result.outward)) === null || _f === void 0 ? void 0 : _f.departureAirportCode;
48210
+ if (!departureAirportCode) return false;
48211
+ return selected.includes(departureAirportCode);
48212
+ }
48213
+ // Arrival airport
48214
+ if (filter.property === 'arrivalAirport') {
48215
+ var selected =
48216
+ (_g = filter.options) === null || _g === void 0
48217
+ ? void 0
48218
+ : _g
48219
+ .filter(function (o) {
48220
+ return o.isChecked;
48221
+ })
48222
+ .map(function (o) {
48223
+ return o.value;
48224
+ });
48225
+ if (!selected || selected.length === 0) return true;
48226
+ var arrivalAirportCode = (_h = getArrivalSegment(result.outward)) === null || _h === void 0 ? void 0 : _h.arrivalAirportCode;
48227
+ if (!arrivalAirportCode) return false;
48228
+ return selected.includes(arrivalAirportCode);
48229
+ }
48230
+ // PRICE
48231
+ if (filter.property === 'price') {
48232
+ if (filter.selectedMin != null && result.price < filter.selectedMin) return false;
48233
+ if (filter.selectedMax != null && result.price > filter.selectedMax) return false;
48234
+ return true;
48235
+ }
48236
+ // Travel times
48237
+ if (filter.property === 'travelDuration') {
48238
+ if (
48239
+ filter.selectedMin != null &&
48240
+ durationInTicksInMinutes((_j = result.outward) === null || _j === void 0 ? void 0 : _j.durationInTicks) < filter.selectedMin
48241
+ )
48242
+ return false;
48243
+ if (
48244
+ filter.selectedMax != null &&
48245
+ durationInTicksInMinutes((_k = result.outward) === null || _k === void 0 ? void 0 : _k.durationInTicks) > filter.selectedMax
48246
+ )
48247
+ return false;
48248
+ return true;
48249
+ }
48250
+ return true;
48251
+ });
48252
+ });
48253
+ // SORTING
48254
+ if (!sortBy || sortBy.label === 'default') {
48255
+ return filtered;
48256
+ }
48257
+ if (sortBy.label === 'departureTime') {
48258
+ return orderBy(
48259
+ results,
48260
+ [
48261
+ function (result) {
48262
+ var _a;
48263
+ return (_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime;
48264
+ }
48265
+ ],
48266
+ [sortBy.direction] // or "desc"
48267
+ );
48268
+ } else if (sortBy.label === 'durationInTicks') {
48269
+ return orderBy(
48270
+ results,
48271
+ [
48272
+ function (result) {
48273
+ var _a, _b;
48274
+ return durationInTicksInMinutes(
48275
+ (_b = (_a = result.outward) === null || _a === void 0 ? void 0 : _a.durationInTicks) !== null && _b !== void 0 ? _b : 0
48276
+ );
48277
+ }
48278
+ ],
48279
+ [sortBy.direction] // or "desc"
48280
+ );
48281
+ } else {
48282
+ return orderBy(results, [sortBy.label], [sortBy.direction]);
48283
+ }
48284
+ };
46838
48285
 
46839
48286
  var getSelectedOptionsPerRoom = function (details) {
46840
48287
  var _a;
@@ -47031,6 +48478,221 @@ var FullItinerary = function (_a) {
47031
48478
  return React__default.createElement('div', { ref: hostRef });
47032
48479
  };
47033
48480
 
48481
+ var getExcursionContentWithUpdatedPrice = function (contents, totalPrice, currencyCode) {
48482
+ if (!contents) return '';
48483
+ var decodedHtml = he.decode(contents);
48484
+ var parser = new DOMParser();
48485
+ var doc = parser.parseFromString(decodedHtml, 'text/html');
48486
+ var priceElement = doc.querySelector('[data-excursion-price]');
48487
+ if (priceElement) {
48488
+ priceElement.textContent = new Intl.NumberFormat('nl-BE', {
48489
+ style: 'currency',
48490
+ currency: currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR'
48491
+ }).format(totalPrice);
48492
+ }
48493
+ return doc.body.innerHTML;
48494
+ };
48495
+ var DayByDayExcursions = function () {
48496
+ var _a;
48497
+ var context = useContext(SearchResultsConfigurationContext);
48498
+ var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
48499
+ var dispatch = useDispatch();
48500
+ var confirmedExcursionsByDay = useSelector(function (state) {
48501
+ return state.searchResults;
48502
+ }).confirmedExcursionsByDay;
48503
+ var selectedPackagingAccoResult = useSelector(selectSelectedPackagingAccoResult);
48504
+ var stayDates = useMemo(
48505
+ function () {
48506
+ if (
48507
+ !(selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.fromDate) ||
48508
+ !(selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.toDate)
48509
+ ) {
48510
+ return [];
48511
+ }
48512
+ return getDatesBetween(selectedPackagingAccoResult.fromDate, selectedPackagingAccoResult.toDate);
48513
+ },
48514
+ [
48515
+ selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.fromDate,
48516
+ selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.toDate
48517
+ ]
48518
+ );
48519
+ var handleSearchExcursions = function (day) {
48520
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
48521
+ if (!selectedPackagingAccoResult) {
48522
+ return;
48523
+ }
48524
+ var searchParams = {
48525
+ date: day.toISOString(),
48526
+ fromDate: day.toISOString(),
48527
+ toDate: day.toISOString(),
48528
+ countryId: selectedPackagingAccoResult.countryId,
48529
+ regionId: selectedPackagingAccoResult.regionId,
48530
+ oordId: selectedPackagingAccoResult.oordId,
48531
+ locationId: selectedPackagingAccoResult.locationId,
48532
+ locationName: selectedPackagingAccoResult.locationName,
48533
+ accommodationCode:
48534
+ (_e =
48535
+ (_d =
48536
+ (_c =
48537
+ (_b = (_a = selectedPackagingAccoResult.rooms) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.options) ===
48538
+ null || _c === void 0
48539
+ ? void 0
48540
+ : _c.find(function (option) {
48541
+ return option.isSelected;
48542
+ })) === null || _d === void 0
48543
+ ? void 0
48544
+ : _d.accommodationCode) !== null && _e !== void 0
48545
+ ? _e
48546
+ : null,
48547
+ accommodationName:
48548
+ (_k =
48549
+ (_j =
48550
+ (_h =
48551
+ (_g = (_f = selectedPackagingAccoResult.rooms) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.options) ===
48552
+ null || _h === void 0
48553
+ ? void 0
48554
+ : _h.find(function (option) {
48555
+ return option.isSelected;
48556
+ })) === null || _j === void 0
48557
+ ? void 0
48558
+ : _j.accommodationName) !== null && _k !== void 0
48559
+ ? _k
48560
+ : null,
48561
+ hotelCode: selectedPackagingAccoResult.code,
48562
+ hotelName: selectedPackagingAccoResult.name,
48563
+ rooms:
48564
+ (_l = selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.rooms) !== null &&
48565
+ _l !== void 0
48566
+ ? _l
48567
+ : []
48568
+ };
48569
+ dispatch(setExcursionSearchParams(searchParams));
48570
+ dispatch(setFlyInIsOpen(true));
48571
+ dispatch(setFlyInType('excursion-results'));
48572
+ };
48573
+ var getSelectedOptionsSummary = function (excursion) {
48574
+ var options = excursion.rooms.flatMap(function (room) {
48575
+ var _a;
48576
+ return (_a = room.options) !== null && _a !== void 0 ? _a : [];
48577
+ });
48578
+ return options.filter(function (option) {
48579
+ return option.isSelected;
48580
+ });
48581
+ };
48582
+ if (!selectedPackagingAccoResult || stayDates.length === 0) {
48583
+ return null;
48584
+ }
48585
+ return React__default.createElement(
48586
+ React__default.Fragment,
48587
+ null,
48588
+ stayDates.map(function (day) {
48589
+ var _a;
48590
+ var dayKey = format$1(day, 'yyyy-MM-dd');
48591
+ var formattedDay = format$1(day, 'd');
48592
+ var formattedMonth = format$1(day, 'MMM');
48593
+ var confirmedExcursions = (_a = confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : [];
48594
+ return React__default.createElement(
48595
+ React__default.Fragment,
48596
+ { key: dayKey },
48597
+ React__default.createElement(
48598
+ 'div',
48599
+ { className: 'search__results__label search__results__label--secondary' },
48600
+ React__default.createElement(
48601
+ 'div',
48602
+ { className: 'search__results__label__date' },
48603
+ React__default.createElement('p', { className: 'search__results__label__date-date' }, formattedDay),
48604
+ React__default.createElement('p', null, formattedMonth)
48605
+ ),
48606
+ React__default.createElement(
48607
+ 'div',
48608
+ { className: 'search__results__label__text' },
48609
+ React__default.createElement('h3', null, translations.SRP.SELECT, ' ', React__default.createElement('strong', null, translations.SRP.EXCURSION))
48610
+ )
48611
+ ),
48612
+ React__default.createElement(
48613
+ 'div',
48614
+ { className: 'search__results__cards__actions' },
48615
+ React__default.createElement('span', null, 'Accommodation for this day: ', selectedPackagingAccoResult.name),
48616
+ React__default.createElement(
48617
+ 'button',
48618
+ {
48619
+ type: 'button',
48620
+ className: 'cta cta--secondary',
48621
+ onClick: function () {
48622
+ return handleSearchExcursions(day);
48623
+ }
48624
+ },
48625
+ confirmedExcursions.length > 0 ? 'Add another excursion' : ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.EXCURSION)
48626
+ )
48627
+ ),
48628
+ React__default.createElement(
48629
+ 'div',
48630
+ { className: 'search__results__cards search__results__cards--compact' },
48631
+ confirmedExcursions &&
48632
+ confirmedExcursions.length > 0 &&
48633
+ confirmedExcursions.map(function (excursion) {
48634
+ var selectedOptions = getSelectedOptionsSummary(excursion);
48635
+ var totalPrice = selectedOptions.reduce(function (sum, option) {
48636
+ return sum + (option.price || 0);
48637
+ }, 0);
48638
+ var updatedContents = getExcursionContentWithUpdatedPrice(excursion.contents, totalPrice, excursion.currencyCode);
48639
+ return React__default.createElement(
48640
+ 'div',
48641
+ {
48642
+ key: excursion.code,
48643
+ className: 'search__result-card__wrapper search__result-card__wrapper--custom',
48644
+ onMouseEnter: function (e) {
48645
+ return (e.currentTarget.style.transform = 'scale(1.02)');
48646
+ },
48647
+ onMouseLeave: function (e) {
48648
+ return (e.currentTarget.style.transform = 'scale(1)');
48649
+ }
48650
+ },
48651
+ React__default.createElement('div', { dangerouslySetInnerHTML: { __html: updatedContents } }),
48652
+ React__default.createElement(
48653
+ 'div',
48654
+ { className: 'search__result-card__content--extra' },
48655
+ React__default.createElement(
48656
+ 'div',
48657
+ { className: 'search__result-card__content__wrapper' },
48658
+ React__default.createElement(
48659
+ 'div',
48660
+ { className: 'search__result-card__options' },
48661
+ selectedOptions.length > 0 &&
48662
+ selectedOptions.map(function (option) {
48663
+ return React__default.createElement(
48664
+ 'div',
48665
+ { className: 'search__result-card__option', key: option.guid },
48666
+ React__default.createElement(Icon$1, { name: 'ui-ticket', width: 14, height: 14, 'aria-hidden': 'true' }),
48667
+ React__default.createElement('span', null, option.accommodationName)
48668
+ );
48669
+ })
48670
+ )
48671
+ )
48672
+ ),
48673
+ React__default.createElement(
48674
+ 'div',
48675
+ { className: 'search__result-card__footer' },
48676
+ React__default.createElement(
48677
+ 'button',
48678
+ {
48679
+ type: 'button',
48680
+ className: 'cta cta--remove',
48681
+ onClick: function () {
48682
+ return dispatch(removeConfirmedExcursionForDay({ dayKey: dayKey, excursionCode: excursion.code }));
48683
+ }
48684
+ },
48685
+ 'Remove'
48686
+ )
48687
+ )
48688
+ );
48689
+ })
48690
+ )
48691
+ );
48692
+ })
48693
+ );
48694
+ };
48695
+
47034
48696
  var SearchResultsContainer = function () {
47035
48697
  var _a, _b;
47036
48698
  var currentSearch = typeof window !== 'undefined' ? window.location.search : '';
@@ -47043,28 +48705,31 @@ var SearchResultsContainer = function () {
47043
48705
  results = _c.results,
47044
48706
  filteredResults = _c.filteredResults,
47045
48707
  packagingAccoResults = _c.packagingAccoResults,
47046
- filteredPackagingAccoResults = _c.filteredPackagingAccoResults;
47047
- _c.bookingPackageDetails;
47048
- var isLoading = _c.isLoading,
48708
+ filteredPackagingAccoResults = _c.filteredPackagingAccoResults,
48709
+ isLoading = _c.isLoading,
47049
48710
  flightsLoading = _c.flightsLoading,
48711
+ initialFilters = _c.initialFilters,
47050
48712
  filters = _c.filters,
48713
+ flightFilters = _c.flightFilters,
47051
48714
  selectedSortType = _c.selectedSortType,
48715
+ selectedFlightSortType = _c.selectedFlightSortType,
47052
48716
  selectedSearchResult = _c.selectedSearchResult,
47053
48717
  selectedPackagingAccoResultCode = _c.selectedPackagingAccoResultCode,
47054
48718
  flyInIsOpen = _c.flyInIsOpen,
47055
48719
  packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
47056
48720
  editablePackagingEntry = _c.editablePackagingEntry,
47057
48721
  transactionId = _c.transactionId,
47058
- accommodationFlyInStep = _c.accommodationFlyInStep,
48722
+ flyInType = _c.flyInType,
47059
48723
  itinerary = _c.itinerary,
47060
- packagingFlightResults = _c.packagingFlightResults;
48724
+ packagingFlightResults = _c.packagingFlightResults,
48725
+ confirmedExcursionsByDay = _c.confirmedExcursionsByDay;
47061
48726
  var isMobile = useMediaQuery('(max-width: 1200px)');
47062
48727
  var _d = useState(false),
47063
48728
  initialFiltersSet = _d[0],
47064
48729
  setInitialFiltersSet = _d[1];
47065
- var _e = useState([]),
47066
- initialFilters = _e[0],
47067
- setInitialFilters = _e[1];
48730
+ var _e = useState(false),
48731
+ initialFlightFiltersSet = _e[0],
48732
+ setInitialFlightFiltersSet = _e[1];
47068
48733
  var _f = useState(false),
47069
48734
  filtersOpen = _f[0],
47070
48735
  setFiltersOpen = _f[1];
@@ -47084,9 +48749,6 @@ var SearchResultsContainer = function () {
47084
48749
  selectedAccommodationSeed = _l[0],
47085
48750
  setSelectedAccommodationSeed = _l[1];
47086
48751
  var skipInitialPackagingAccoDetailsRef = useRef(false);
47087
- var _m = useState(false),
47088
- showAllOutwardFlights = _m[0],
47089
- setShowAllOutwardFlights = _m[1];
47090
48752
  var panelRef = useRef(null);
47091
48753
  var sortByTypes = [
47092
48754
  { direction: 'asc', label: 'default' },
@@ -47403,7 +49065,7 @@ var SearchResultsContainer = function () {
47403
49065
  if (!seed) return [2 /*return*/];
47404
49066
  setDetailsIsLoading(true);
47405
49067
  setSelectedAccommodationSeed(seed);
47406
- dispatch(setAccommodationFlyInStep('results'));
49068
+ dispatch(setFlyInType('acco-results'));
47407
49069
  handleFlyInToggle(true);
47408
49070
  return [4 /*yield*/, getOrCreateTransactionId()];
47409
49071
  case 1:
@@ -47561,7 +49223,7 @@ var SearchResultsContainer = function () {
47561
49223
  enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47562
49224
  if (!initialFiltersSet) {
47563
49225
  dispatch(resetFilters(enrichedFilters));
47564
- setInitialFilters(enrichedFilters);
49226
+ dispatch(setInitialFilters(enrichedFilters));
47565
49227
  setInitialFiltersSet(true);
47566
49228
  }
47567
49229
  dispatch(setResults(packageSearchResults));
@@ -47636,11 +49298,7 @@ var SearchResultsContainer = function () {
47636
49298
  return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47637
49299
  case 1:
47638
49300
  packageAccoSearchResults = _d.sent();
47639
- enrichedFilters = enrichFiltersWithPackageAccoResults(
47640
- packageAccoSearchResults,
47641
- context.filters,
47642
- (_a = context.tags) !== null && _a !== void 0 ? _a : []
47643
- );
49301
+ enrichedFilters = enrichFiltersWithPackageAccoResults(packageAccoSearchResults, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47644
49302
  if (!initialFiltersSet) {
47645
49303
  dispatch(resetFilters(enrichedFilters));
47646
49304
  setInitialFilters(enrichedFilters);
@@ -47686,11 +49344,12 @@ var SearchResultsContainer = function () {
47686
49344
  };
47687
49345
  var runFlightSearch = function (currentTransactionId, seed) {
47688
49346
  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) {
49347
+ var config, searchRequest, packageFlightSearchResults, enrichedFilters, initialFilteredResults, firstResult, err_4;
49348
+ var _a;
49349
+ return __generator(this, function (_b) {
49350
+ switch (_b.label) {
47692
49351
  case 0:
47693
- _a.trys.push([0, 2, , 3]);
49352
+ _b.trys.push([0, 2, , 3]);
47694
49353
  if (!context) return [2 /*return*/];
47695
49354
  dispatch(setFlightsLoading(true));
47696
49355
  config = {
@@ -47701,17 +49360,31 @@ var SearchResultsContainer = function () {
47701
49360
  searchRequest.agentId = context.agentId;
47702
49361
  return [4 /*yield*/, build.searchPackagingFlights(config, searchRequest)];
47703
49362
  case 1:
47704
- packageFlightSearchResults = _a.sent();
49363
+ packageFlightSearchResults = _b.sent();
49364
+ enrichedFilters = enrichFiltersWithPackageFlightResults(
49365
+ packageFlightSearchResults,
49366
+ (_a = context.tags) !== null && _a !== void 0 ? _a : [],
49367
+ translations
49368
+ );
49369
+ if (!initialFlightFiltersSet) {
49370
+ dispatch(resetFlightFilters(enrichedFilters));
49371
+ dispatch(setInitialFlightFilters(enrichedFilters));
49372
+ setInitialFlightFiltersSet(true);
49373
+ }
47705
49374
  dispatch(setPackagingFlightResults(packageFlightSearchResults));
47706
- firstResult = first(packageFlightSearchResults);
47707
- if (firstResult) {
47708
- setSelectedOutwardKey(getFlightKey(firstResult.outward.segments));
47709
- setSelectedReturnKey(getFlightKey(firstResult.return.segments));
49375
+ initialFilteredResults = applyFiltersToPackageFlightResults(packageFlightSearchResults, filters, null);
49376
+ dispatch(setFilteredPackagingFlightResults(initialFilteredResults));
49377
+ if (initialFilteredResults.length > 0) {
49378
+ firstResult = first(packageFlightSearchResults);
49379
+ if (firstResult) {
49380
+ dispatch(setSelectedOutwardKey(getFlightKey(firstResult.outward.segments)));
49381
+ dispatch(setSelectedReturnKey(getFlightKey(firstResult.return.segments)));
49382
+ }
47710
49383
  }
47711
49384
  dispatch(setFlightsLoading(false));
47712
49385
  return [3 /*break*/, 3];
47713
49386
  case 2:
47714
- err_4 = _a.sent();
49387
+ err_4 = _b.sent();
47715
49388
  console.error('FlightSearch failed', err_4);
47716
49389
  dispatch(setFlightsLoading(false));
47717
49390
  return [3 /*break*/, 3];
@@ -47933,6 +49606,7 @@ var SearchResultsContainer = function () {
47933
49606
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour
47934
49607
  ) {
47935
49608
  handleFlyInToggle(true);
49609
+ dispatch(setFlyInType('acco-details'));
47936
49610
  }
47937
49611
  _f.label = 1;
47938
49612
  case 1:
@@ -48024,13 +49698,15 @@ var SearchResultsContainer = function () {
48024
49698
  if (selectedPackagingAccoResultCode) {
48025
49699
  fetchPackagingAccoSearchDetails();
48026
49700
  }
48027
- dispatch(setAccommodationFlyInStep('details'));
48028
49701
  },
48029
49702
  [selectedSearchResult, selectedPackagingAccoResultCode]
48030
49703
  );
48031
49704
  useEffect(
48032
49705
  function () {
48033
- if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
49706
+ if (
49707
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
49708
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight
49709
+ ) {
48034
49710
  var filteredPackageAccoResults = applyFiltersToPackageAccoResults(packagingAccoResults, filters, selectedSortType);
48035
49711
  dispatch(setFilteredPackagingAccoResults(filteredPackageAccoResults));
48036
49712
  } else {
@@ -48040,6 +49716,15 @@ var SearchResultsContainer = function () {
48040
49716
  },
48041
49717
  [filters, results, packagingAccoResults, selectedSortType]
48042
49718
  );
49719
+ useEffect(
49720
+ function () {
49721
+ if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight) {
49722
+ var filteredPackageFlightResults = applyFiltersToPackageFlightResults(packagingFlightResults, flightFilters, selectedFlightSortType);
49723
+ dispatch(setFilteredPackagingFlightResults(filteredPackageFlightResults));
49724
+ }
49725
+ },
49726
+ [flightFilters, packagingFlightResults, selectedFlightSortType]
49727
+ );
48043
49728
  useEffect(
48044
49729
  function () {
48045
49730
  setInitialFiltersSet(false);
@@ -48114,7 +49799,6 @@ var SearchResultsContainer = function () {
48114
49799
  return [4 /*yield*/, build.getItinerary(config, request)];
48115
49800
  case 2:
48116
49801
  itinerary_1 = _c.sent();
48117
- console.log('Fetched itinerary', itinerary_1);
48118
49802
  dispatch(setItinerary(itinerary_1));
48119
49803
  setItineraryIsLoading(false);
48120
49804
  return [3 /*break*/, 4];
@@ -48135,37 +49819,22 @@ var SearchResultsContainer = function () {
48135
49819
  [editablePackagingEntry]
48136
49820
  );
48137
49821
  // 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];
49822
+ // const [selectedOutwardKey, setSelectedOutwardKey] = useState<string | null>(null);
49823
+ // const [selectedReturnKey, setSelectedReturnKey] = useState<string | null>(null);
49824
+ var selectedOutwardKey = useSelector(selectSelectedOutwardKey);
49825
+ var selectedReturnKey = useSelector(selectSelectedReturnKey);
49826
+ var uniqueOutwardFlights = useSelector(selectUniqueOutwardFlights);
49827
+ var uniqueReturnFlights = useSelector(selectUniqueReturnFlights);
49828
+ var selectedOutward = useSelector(selectSelectedOutward);
49829
+ var selectedReturn = useSelector(selectSelectedReturn);
49830
+ var selectedCombinationFlight = useSelector(selectSelectedCombinationFlight);
48160
49831
  useEffect(
48161
49832
  function () {
48162
49833
  var _a;
48163
49834
  if (!selectedOutwardKey) {
48164
- setUniqueReturnFlights([]);
48165
- setSelectedReturnKey(null);
49835
+ dispatch(setSelectedReturnKey(null));
48166
49836
  return;
48167
49837
  }
48168
- // Filter combinations that match selected outward fare
48169
49838
  var matchingCombinations = packagingFlightResults.filter(function (flight) {
48170
49839
  return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48171
49840
  });
@@ -48177,44 +49846,26 @@ var SearchResultsContainer = function () {
48177
49846
  }
48178
49847
  });
48179
49848
  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);
49849
+ var segments = (_a = first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments;
49850
+ var firstReturnKey = returns.length > 0 && segments ? getFlightKey(segments) : null;
49851
+ if (
49852
+ !returns.some(function (x) {
49853
+ return getFlightKey(x.return.segments) === selectedReturnKey;
49854
+ })
49855
+ ) {
49856
+ dispatch(setSelectedReturnKey(firstReturnKey));
48184
49857
  }
48185
49858
  },
48186
- [selectedOutwardKey, packagingFlightResults]
49859
+ [selectedOutwardKey, packagingFlightResults, selectedReturnKey, dispatch]
48187
49860
  );
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]
48209
- );
48210
- var selectedCombinationFlight = React__default.useMemo(
49861
+ var visibleOutwardFlights = React__default.useMemo(
48211
49862
  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;
49863
+ var withoutSelected = uniqueOutwardFlights.filter(function (x) {
49864
+ return getFlightKey(x.outward.segments) !== selectedOutwardKey;
48215
49865
  });
49866
+ return withoutSelected.slice(0, 3);
48216
49867
  },
48217
- [packagingFlightResults, selectedOutwardKey, selectedReturnKey]
49868
+ [uniqueOutwardFlights, selectedOutwardKey]
48218
49869
  );
48219
49870
  // TODO: get details for selected combination flight and show in fly-in
48220
49871
  // useEffect(() => {
@@ -48223,6 +49874,7 @@ var SearchResultsContainer = function () {
48223
49874
  // // onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
48224
49875
  // dispatch(setFlyInIsOpen(true));
48225
49876
  // }, [selectedCombinationFlight, dispatch]);
49877
+ // Build packagingEntry
48226
49878
  useEffect(
48227
49879
  function () {
48228
49880
  var _a, _b, _c, _d;
@@ -48238,6 +49890,7 @@ var SearchResultsContainer = function () {
48238
49890
  selectedHotelCode: selectedPackagingAccoResultCode,
48239
49891
  accommodationResults: packagingAccoResults,
48240
49892
  selectedFlight: selectedCombinationFlight !== null && selectedCombinationFlight !== void 0 ? selectedCombinationFlight : null,
49893
+ confirmedExcursionsByDay: confirmedExcursionsByDay,
48241
49894
  seed: seed,
48242
49895
  transactionId:
48243
49896
  (_c =
@@ -48250,6 +49903,7 @@ var SearchResultsContainer = function () {
48250
49903
  : '',
48251
49904
  language: (_d = context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
48252
49905
  });
49906
+ console.log('Built nextEntry', nextEntry);
48253
49907
  if (!nextEntry) return;
48254
49908
  dispatch(setEditablePackagingEntry(nextEntry));
48255
49909
  if (selectedCombinationFlight) {
@@ -48263,6 +49917,7 @@ var SearchResultsContainer = function () {
48263
49917
  packagingAccoResults,
48264
49918
  packagingAccoSearchDetails,
48265
49919
  selectedCombinationFlight,
49920
+ confirmedExcursionsByDay,
48266
49921
  transactionId,
48267
49922
  dispatch
48268
49923
  ]
@@ -48277,56 +49932,103 @@ var SearchResultsContainer = function () {
48277
49932
  return line.serviceType !== FLIGHT_SERVICE_TYPE;
48278
49933
  });
48279
49934
  };
49935
+ var removeExcursionLines = function (lines) {
49936
+ return lines.filter(function (line) {
49937
+ return line.serviceType !== EXCURSION_SERVICE_TYPE;
49938
+ });
49939
+ };
48280
49940
  var buildAccommodationLinesFromSelection = function (selectedHotel, seed) {
48281
- if (!selectedHotel) return [];
49941
+ return buildPackagingAccommodationLines(selectedHotel, seed, ACCOMMODATION_SERVICE_TYPE);
49942
+ };
49943
+ var buildExcursionLinesFromConfirmedDays = function (confirmedExcursionsByDay) {
49944
+ return Object.values(confirmedExcursionsByDay)
49945
+ .flat()
49946
+ .flatMap(function (excursion) {
49947
+ var selectedOptions = excursion.rooms.flatMap(function (room) {
49948
+ return room.options.filter(function (option) {
49949
+ return option.isSelected;
49950
+ });
49951
+ });
49952
+ var parentGuid = crypto.randomUUID();
49953
+ return selectedOptions.map(function (option, index) {
49954
+ var _a, _b, _c;
49955
+ return {
49956
+ guid: (_a = option.guid) !== null && _a !== void 0 ? _a : crypto.randomUUID(),
49957
+ moment: '',
49958
+ parentGuid: index === 0 ? null : parentGuid,
49959
+ order: index,
49960
+ isChanged: true,
49961
+ from: excursion.fromDate,
49962
+ to: excursion.toDate,
49963
+ serviceType: EXCURSION_SERVICE_TYPE,
49964
+ productName: excursion.name,
49965
+ productCode: excursion.code,
49966
+ accommodationName: option.accommodationName,
49967
+ accommodationCode: option.accommodationCode,
49968
+ regimeName: option.regimeName,
49969
+ regimeCode: option.regimeCode,
49970
+ country: excursion.countryId ? { id: excursion.countryId, name: excursion.countryName, localizations: [] } : null,
49971
+ region: excursion.regionId ? { id: excursion.regionId, name: excursion.regionName, localizations: [] } : null,
49972
+ oord: excursion.oordId ? { id: excursion.oordId, name: excursion.oordName, localizations: [] } : null,
49973
+ location: excursion.locationId ? { id: excursion.locationId, name: excursion.locationName, localizations: [] } : null,
49974
+ longitude: (_b = excursion.longitude) !== null && _b !== void 0 ? _b : null,
49975
+ latitude: (_c = excursion.latitude) !== null && _c !== void 0 ? _c : null,
49976
+ pax: Array.isArray(option.paxIds)
49977
+ ? option.paxIds.map(function (paxId, paxIndex) {
49978
+ return {
49979
+ paxId: paxId,
49980
+ room: 0,
49981
+ order: paxIndex
49982
+ };
49983
+ })
49984
+ : [],
49985
+ flightInformation: null
49986
+ };
49987
+ });
49988
+ });
49989
+ };
49990
+ var buildPackagingAccommodationLines = function (selectedItem, seed, serviceType) {
49991
+ if (!selectedItem) return [];
48282
49992
  var parentGuid = crypto.randomUUID();
48283
- return selectedHotel.rooms
49993
+ return selectedItem.rooms
48284
49994
  .filter(function (room) {
48285
49995
  return room.options.some(function (o) {
48286
49996
  return o.isSelected;
48287
49997
  });
48288
49998
  })
48289
49999
  .map(function (room, index) {
48290
- var _a, _b, _c, _d, _e;
50000
+ var _a, _b, _c;
48291
50001
  var option = room.options.find(function (o) {
48292
50002
  return o.isSelected;
48293
50003
  });
48294
- var pax =
48295
- (_b =
48296
- (_a = seed.rooms) === null || _a === void 0
48297
- ? void 0
48298
- : _a.flatMap(function (room, roomIndex) {
48299
- return room.pax.map(function (p, paxIndex) {
48300
- return {
48301
- paxId: p.id,
48302
- room: roomIndex,
48303
- order: paxIndex
48304
- };
48305
- });
48306
- })) !== null && _b !== void 0
48307
- ? _b
48308
- : [];
50004
+ var pax = option.paxIds.map(function (p, paxIndex) {
50005
+ return {
50006
+ paxId: p,
50007
+ room: index,
50008
+ order: paxIndex
50009
+ };
50010
+ });
48309
50011
  return {
48310
- guid: (_c = option.guid) !== null && _c !== void 0 ? _c : crypto.randomUUID(),
50012
+ guid: (_a = option.guid) !== null && _a !== void 0 ? _a : crypto.randomUUID(),
48311
50013
  moment: '',
48312
50014
  parentGuid: index === 0 ? null : parentGuid,
48313
50015
  order: index,
48314
50016
  isChanged: true,
48315
- from: selectedHotel.fromDate,
48316
- to: selectedHotel.toDate,
48317
- serviceType: ACCOMMODATION_SERVICE_TYPE,
48318
- productName: selectedHotel.name,
48319
- productCode: selectedHotel.code,
50017
+ from: selectedItem.fromDate,
50018
+ to: selectedItem.toDate,
50019
+ serviceType: serviceType,
50020
+ productName: selectedItem.name,
50021
+ productCode: selectedItem.code,
48320
50022
  accommodationName: option.accommodationName,
48321
50023
  accommodationCode: option.accommodationCode,
48322
50024
  regimeName: option.regimeName,
48323
50025
  regimeCode: option.regimeCode,
48324
- country: selectedHotel.countryId ? { id: selectedHotel.countryId, name: selectedHotel.countryName, localizations: [] } : null,
48325
- region: selectedHotel.regionId ? { id: selectedHotel.regionId, name: selectedHotel.regionName, localizations: [] } : null,
48326
- oord: selectedHotel.oordId ? { id: selectedHotel.oordId, name: selectedHotel.oordName, localizations: [] } : null,
48327
- location: selectedHotel.locationId ? { id: selectedHotel.locationId, name: selectedHotel.locationName, localizations: [] } : null,
48328
- longitude: (_d = selectedHotel.longitude) !== null && _d !== void 0 ? _d : null,
48329
- latitude: (_e = selectedHotel.latitude) !== null && _e !== void 0 ? _e : null,
50026
+ country: selectedItem.countryId ? { id: selectedItem.countryId, name: selectedItem.countryName, localizations: [] } : null,
50027
+ region: selectedItem.regionId ? { id: selectedItem.regionId, name: selectedItem.regionName, localizations: [] } : null,
50028
+ oord: selectedItem.oordId ? { id: selectedItem.oordId, name: selectedItem.oordName, localizations: [] } : null,
50029
+ location: selectedItem.locationId ? { id: selectedItem.locationId, name: selectedItem.locationName, localizations: [] } : null,
50030
+ longitude: (_b = selectedItem.longitude) !== null && _b !== void 0 ? _b : null,
50031
+ latitude: (_c = selectedItem.latitude) !== null && _c !== void 0 ? _c : null,
48330
50032
  pax: pax,
48331
50033
  flightInformation: null
48332
50034
  };
@@ -48454,6 +50156,7 @@ var SearchResultsContainer = function () {
48454
50156
  selectedHotelCode = _a.selectedHotelCode,
48455
50157
  accommodationResults = _a.accommodationResults,
48456
50158
  selectedFlight = _a.selectedFlight,
50159
+ confirmedExcursionsByDay = _a.confirmedExcursionsByDay,
48457
50160
  seed = _a.seed,
48458
50161
  transactionId = _a.transactionId,
48459
50162
  language = _a.language;
@@ -48481,6 +50184,12 @@ var SearchResultsContainer = function () {
48481
50184
  nextLines = __spreadArray(__spreadArray([], nextLines, true), flightLines, true);
48482
50185
  }
48483
50186
  }
50187
+ // excursions
50188
+ var excursionLines = buildExcursionLinesFromConfirmedDays(confirmedExcursionsByDay);
50189
+ nextLines = removeExcursionLines(nextLines);
50190
+ if (excursionLines.length) {
50191
+ nextLines = __spreadArray(__spreadArray([], nextLines, true), excursionLines, true);
50192
+ }
48484
50193
  nextLines = nextLines.map(function (line, index) {
48485
50194
  return __assign(__assign({}, line), { order: index });
48486
50195
  });
@@ -48491,7 +50200,7 @@ var SearchResultsContainer = function () {
48491
50200
  if (sourceEntry) {
48492
50201
  return structuredClone(sourceEntry);
48493
50202
  }
48494
- var paxId = 1;
50203
+ var paxId = 0;
48495
50204
  var pax =
48496
50205
  (_b =
48497
50206
  (_a = seed.rooms) === null || _a === void 0
@@ -48521,12 +50230,10 @@ var SearchResultsContainer = function () {
48521
50230
  lines: []
48522
50231
  };
48523
50232
  };
48524
- var visibleOutwardFlights = React__default.useMemo(
48525
- function () {
48526
- return showAllOutwardFlights ? uniqueOutwardFlights : uniqueOutwardFlights.slice(0, 3);
48527
- },
48528
- [showAllOutwardFlights, uniqueOutwardFlights]
48529
- );
50233
+ var handleShowMoreFlights = function (flyInType) {
50234
+ dispatch(setFlyInType(flyInType));
50235
+ dispatch(setFlyInIsOpen(true));
50236
+ };
48530
50237
  return React__default.createElement(
48531
50238
  'div',
48532
50239
  { id: 'tide-booking', className: 'search__bg' },
@@ -48543,7 +50250,6 @@ var SearchResultsContainer = function () {
48543
50250
  { tideConnection: context.tideConnection },
48544
50251
  React__default.createElement(FlightResultsContainer, { isMobile: isMobile }),
48545
50252
  React__default.createElement(FlyIn, {
48546
- title: 'Select your fare',
48547
50253
  srpType: context.searchConfiguration.qsmType,
48548
50254
  isOpen: flyInIsOpen,
48549
50255
  setIsOpen: handleFlyInToggle,
@@ -48570,7 +50276,13 @@ var SearchResultsContainer = function () {
48570
50276
  return setFiltersOpen(!filtersOpen);
48571
50277
  },
48572
50278
  // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
48573
- isLoading: isLoading
50279
+ isLoading: isLoading,
50280
+ setFilters: function (filters) {
50281
+ return dispatch(setFilters(filters));
50282
+ },
50283
+ resetFilters: function (filters) {
50284
+ return dispatch(resetFilters(filters));
50285
+ }
48574
50286
  }),
48575
50287
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48576
50288
  React__default.createElement(Itinerary, {
@@ -48637,53 +50349,53 @@ var SearchResultsContainer = function () {
48637
50349
  }
48638
50350
  })
48639
50351
  ),
48640
- React__default.createElement(
48641
- 'div',
48642
- { className: 'search__result-row' },
50352
+ context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
48643
50353
  React__default.createElement(
48644
- 'span',
48645
- { className: 'search__result-row-text' },
48646
- !isLoading &&
48647
- context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
50354
+ 'div',
50355
+ { className: 'search__result-row' },
50356
+ React__default.createElement(
50357
+ 'span',
50358
+ { className: 'search__result-row-text' },
50359
+ !isLoading &&
50360
+ React__default.createElement(
50361
+ React__default.Fragment,
50362
+ null,
50363
+ context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
50364
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
50365
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
50366
+ context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
50367
+ (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
50368
+ filteredResults.length,
50369
+ '\u00A0',
50370
+ translations.SRP.TOTAL_RESULTS_LABEL
50371
+ )
50372
+ ),
50373
+ !context.packagingEntry &&
50374
+ !isMobile &&
50375
+ sortByTypes &&
50376
+ sortByTypes.length > 0 &&
48648
50377
  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
50378
+ 'div',
50379
+ { className: 'search__result-row-filter' },
50380
+ React__default.createElement(ItemPicker, {
50381
+ items: sortByTypes,
50382
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
50383
+ selectedSortByType: selectedSortType,
50384
+ label: translations.SRP.SORTBY,
50385
+ placeholder: translations.SRP.SORTBY,
50386
+ classModifier: 'travel-class-picker__items',
50387
+ valueFormatter: function (value, direction) {
50388
+ return getSortingName(
50389
+ translations,
50390
+ findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
50391
+ );
50392
+ },
50393
+ onPick: function (newSortKey, direction) {
50394
+ return handleSortChange(newSortKey, direction);
50395
+ }
50396
+ })
48659
50397
  )
48660
50398
  ),
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
50399
  React__default.createElement(
48688
50400
  'div',
48689
50401
  { className: 'search__results__wrapper' },
@@ -48697,8 +50409,6 @@ var SearchResultsContainer = function () {
48697
50409
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48698
50410
  !context.packagingEntry &&
48699
50411
  context.showFlightResults &&
48700
- // bookingPackageDetails?.outwardFlights &&
48701
- // <FlightResults flights={bookingPackageDetails?.outwardFlights} isDeparture={true} />
48702
50412
  React__default.createElement(
48703
50413
  React__default.Fragment,
48704
50414
  null,
@@ -48737,7 +50447,7 @@ var SearchResultsContainer = function () {
48737
50447
  item: selectedOutward.outward,
48738
50448
  guid: selectedOutward.outwardGuid,
48739
50449
  onSelect: function () {
48740
- return setSelectedOutwardKey(null);
50450
+ return dispatch(setSelectedOutwardKey(null));
48741
50451
  },
48742
50452
  selectedGuid: selectedOutward.outwardGuid,
48743
50453
  isOutward: true,
@@ -48749,7 +50459,7 @@ var SearchResultsContainer = function () {
48749
50459
  key: 'flight-'.concat(result.outwardGuid),
48750
50460
  item: result.outward,
48751
50461
  onSelect: function () {
48752
- return setSelectedOutwardKey(getFlightKey(result.outward.segments));
50462
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
48753
50463
  },
48754
50464
  guid: result.outwardGuid,
48755
50465
  isOutward: true,
@@ -48768,10 +50478,10 @@ var SearchResultsContainer = function () {
48768
50478
  {
48769
50479
  className: 'cta cta--secondary',
48770
50480
  onClick: function () {
48771
- return setShowAllOutwardFlights(!showAllOutwardFlights);
50481
+ return handleShowMoreFlights('flight-outward-results');
48772
50482
  }
48773
50483
  },
48774
- showAllOutwardFlights ? translations.SRP.SHOW_LESS : translations.SRP.SHOW_MORE
50484
+ translations.SRP.SHOW_MORE
48775
50485
  )
48776
50486
  )
48777
50487
  )
@@ -48779,11 +50489,12 @@ var SearchResultsContainer = function () {
48779
50489
  context.showHotelAccommodationResults &&
48780
50490
  !context.packagingEntry &&
48781
50491
  React__default.createElement(HotelAccommodationResults, { isLoading: isLoading }),
50492
+ context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
50493
+ !context.packagingEntry &&
50494
+ React__default.createElement(DayByDayExcursions, null),
48782
50495
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48783
50496
  !context.packagingEntry &&
48784
50497
  context.showFlightResults &&
48785
- // bookingPackageDetails?.returnFlights &&
48786
- // <FlightResults flights={bookingPackageDetails?.returnFlights} isDeparture={false} />
48787
50498
  React__default.createElement(
48788
50499
  React__default.Fragment,
48789
50500
  null,
@@ -48826,7 +50537,7 @@ var SearchResultsContainer = function () {
48826
50537
  key: 'flight-'.concat(result.outwardGuid),
48827
50538
  item: result.return,
48828
50539
  onSelect: function () {
48829
- return setSelectedReturnKey(getFlightKey(result.return.segments));
50540
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
48830
50541
  },
48831
50542
  guid: result.outwardGuid,
48832
50543
  isOutward: false,
@@ -48843,7 +50554,6 @@ var SearchResultsContainer = function () {
48843
50554
  )
48844
50555
  ),
48845
50556
  React__default.createElement(FlyIn, {
48846
- title: ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION),
48847
50557
  srpType: context.searchConfiguration.qsmType,
48848
50558
  isOpen: flyInIsOpen,
48849
50559
  setIsOpen: handleFlyInToggle,
@@ -48854,8 +50564,10 @@ var SearchResultsContainer = function () {
48854
50564
  return (panelRef.current = el);
48855
50565
  },
48856
50566
  detailsLoading: detailsIsLoading,
48857
- accommodationStep: accommodationFlyInStep,
48858
- isPackageEditFlow: !!context.packagingEntry
50567
+ flyInType: flyInType,
50568
+ isPackageEditFlow: !!context.packagingEntry,
50569
+ sortByTypes: sortByTypes,
50570
+ activeSearchSeed: activeSearchSeed
48859
50571
  })
48860
50572
  )
48861
50573
  )