@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
@@ -576,7 +576,8 @@ var QSM$g = {
576
576
  RETURN_DATE: 'تاريخ العودة',
577
577
  CONFIRM: 'تأكيد',
578
578
  TRAVELERS: 'المسافرون',
579
- GROUP_TOUR: 'جولة جماعية'
579
+ GROUP_TOUR: 'جولة جماعية',
580
+ ALL_TRAVELERS: 'جميع المسافرين'
580
581
  };
581
582
  var SRP$f = {
582
583
  SHOW_MORE: 'عرض المزيد',
@@ -627,7 +628,8 @@ var SRP$f = {
627
628
  DEPARTURE_TIME_DESC: 'وقت المغادرة تنازلياً',
628
629
  DURATION_ASC: 'المدة تصاعدياً',
629
630
  DURATION_DESC: 'المدة تنازلياً',
630
- TRAVEL_GROUP: 'مجموعة المسافرين'
631
+ TRAVEL_GROUP: 'مجموعة المسافرين',
632
+ EXCURSION: 'رحلة'
631
633
  };
632
634
  var arJson = {
633
635
  STEPS: STEPS$f,
@@ -982,7 +984,8 @@ var QSM$f = {
982
984
  RETURN_DATE: 'Hjemrejsedato',
983
985
  CONFIRM: 'Bekræft',
984
986
  TRAVELERS: 'Rejsende',
985
- GROUP_TOUR: 'Grupperejse'
987
+ GROUP_TOUR: 'Grupperejse',
988
+ ALL_TRAVELERS: 'Alle rejsende'
986
989
  };
987
990
  var SRP$e = {
988
991
  SHOW_MORE: 'Vis flere',
@@ -1033,7 +1036,8 @@ var SRP$e = {
1033
1036
  DEPARTURE_TIME_DESC: 'Afgangstid faldende',
1034
1037
  DURATION_ASC: 'Varighed stigende',
1035
1038
  DURATION_DESC: 'Varighed faldende',
1036
- TRAVEL_GROUP: 'Rejseselskab'
1039
+ TRAVEL_GROUP: 'Rejseselskab',
1040
+ EXCURSION: 'Udflugt'
1037
1041
  };
1038
1042
  var daJson = {
1039
1043
  STEPS: STEPS$e,
@@ -1389,7 +1393,8 @@ var QSM$e = {
1389
1393
  RETURN_DATE: 'Rückreisedatum',
1390
1394
  CONFIRM: 'Bestätigen',
1391
1395
  TRAVELERS: 'Reisende',
1392
- GROUP_TOUR: 'Gruppentour'
1396
+ GROUP_TOUR: 'Gruppentour',
1397
+ ALL_TRAVELERS: 'Alle Reisenden'
1393
1398
  };
1394
1399
  var SRP$d = {
1395
1400
  SHOW_MORE: 'Mehr anzeigen',
@@ -1440,7 +1445,8 @@ var SRP$d = {
1440
1445
  DEPARTURE_AIRPORTS: 'Abflughäfen',
1441
1446
  ARRIVAL_AIRPORTS: 'Ankunftsflughäfen',
1442
1447
  PRICE: 'Preis',
1443
- TRAVEL_GROUP: 'Reisegruppe'
1448
+ TRAVEL_GROUP: 'Reisegruppe',
1449
+ EXCURSION: 'Ausflug'
1444
1450
  };
1445
1451
  var deJson = {
1446
1452
  STEPS: STEPS$d,
@@ -1799,7 +1805,8 @@ var QSM$d = {
1799
1805
  RETURN_DATE: 'Return date',
1800
1806
  CONFIRM: 'Confirm',
1801
1807
  TRAVELERS: 'Travelers',
1802
- GROUP_TOUR: 'Group tour'
1808
+ GROUP_TOUR: 'Group tour',
1809
+ ALL_TRAVELERS: 'All travelers'
1803
1810
  };
1804
1811
  var SRP$c = {
1805
1812
  SHOW_MORE: 'Show more',
@@ -1850,7 +1857,8 @@ var SRP$c = {
1850
1857
  DEPARTURE_RANGE: 'Departure range',
1851
1858
  DEPARTURE_AIRPORTS: 'Departure airports',
1852
1859
  ARRIVAL_AIRPORTS: 'Arrival airports',
1853
- TRAVEL_GROUP: 'Travel group'
1860
+ TRAVEL_GROUP: 'Travel group',
1861
+ EXCURSION: 'Excursion'
1854
1862
  };
1855
1863
  var enJson = {
1856
1864
  STEPS: STEPS$c,
@@ -2206,7 +2214,8 @@ var QSM$c = {
2206
2214
  RETURN_DATE: 'Fecha de regreso',
2207
2215
  CONFIRM: 'Confirmar',
2208
2216
  TRAVELERS: 'Viajeros',
2209
- GROUP_TOUR: 'Tour grupal'
2217
+ GROUP_TOUR: 'Tour grupal',
2218
+ ALL_TRAVELERS: 'Todos los viajeros'
2210
2219
  };
2211
2220
  var SRP$b = {
2212
2221
  SHOW_MORE: 'Mostrar más',
@@ -2257,7 +2266,8 @@ var SRP$b = {
2257
2266
  DEPARTURE_AIRPORTS: 'Aeropuertos de salida',
2258
2267
  ARRIVAL_AIRPORTS: 'Aeropuertos de llegada',
2259
2268
  PRICE: 'Precio',
2260
- TRAVEL_GROUP: 'Grupo de viaje'
2269
+ TRAVEL_GROUP: 'Grupo de viaje',
2270
+ EXCURSION: 'Excursión'
2261
2271
  };
2262
2272
  var esJson = {
2263
2273
  STEPS: STEPS$b,
@@ -2617,7 +2627,8 @@ var QSM$b = {
2617
2627
  RETURN_DATE: 'Date de retour',
2618
2628
  CONFIRM: 'Confirmer',
2619
2629
  TRAVELERS: 'Voyageurs',
2620
- GROUP_TOUR: 'Tour en groupe'
2630
+ GROUP_TOUR: 'Tour en groupe',
2631
+ ALL_TRAVELERS: 'Tous les voyageurs'
2621
2632
  };
2622
2633
  var SRP$a = {
2623
2634
  SHOW_MORE: 'Afficher plus',
@@ -2668,7 +2679,8 @@ var SRP$a = {
2668
2679
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
2669
2680
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
2670
2681
  PRICE: 'Prix',
2671
- TRAVEL_GROUP: 'Groupe de voyageurs'
2682
+ TRAVEL_GROUP: 'Groupe de voyageurs',
2683
+ EXCURSION: 'Excursion'
2672
2684
  };
2673
2685
  var frBeJson = {
2674
2686
  STEPS: STEPS$a,
@@ -3023,7 +3035,8 @@ var QSM$a = {
3023
3035
  RETURN_DATE: 'Date de retour',
3024
3036
  CONFIRM: 'Confirmer',
3025
3037
  TRAVELERS: 'Voyageurs',
3026
- GROUP_TOUR: 'Tour en groupe'
3038
+ GROUP_TOUR: 'Tour en groupe',
3039
+ ALL_TRAVELERS: 'Tous les voyageurs'
3027
3040
  };
3028
3041
  var SRP$9 = {
3029
3042
  SHOW_MORE: 'Afficher plus',
@@ -3074,7 +3087,8 @@ var SRP$9 = {
3074
3087
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
3075
3088
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
3076
3089
  PRICE: 'Prix',
3077
- TRAVEL_GROUP: 'Groupe de voyageurs'
3090
+ TRAVEL_GROUP: 'Groupe de voyageurs',
3091
+ EXCURSION: 'Excursion'
3078
3092
  };
3079
3093
  var frFrJson = {
3080
3094
  STEPS: STEPS$9,
@@ -3429,7 +3443,8 @@ var QSM$9 = {
3429
3443
  RETURN_DATE: 'Heimkomudagur',
3430
3444
  CONFIRM: 'Staðfesta',
3431
3445
  TRAVELERS: 'Ferðalangar',
3432
- GROUP_TOUR: 'Ferð í hóp'
3446
+ GROUP_TOUR: 'Ferð í hóp',
3447
+ ALL_TRAVELERS: 'Allir ferðalangar'
3433
3448
  };
3434
3449
  var SRP$8 = {
3435
3450
  SHOW_MORE: 'Sýna meira',
@@ -3480,7 +3495,8 @@ var SRP$8 = {
3480
3495
  DEPARTURE_AIRPORTS: 'Brottfararflugvellir',
3481
3496
  ARRIVAL_AIRPORTS: 'Komuflugvellir',
3482
3497
  PRICE: 'Verð',
3483
- TRAVEL_GROUP: 'Ferðahópur'
3498
+ TRAVEL_GROUP: 'Ferðahópur',
3499
+ EXCURSION: 'Útflutningur'
3484
3500
  };
3485
3501
  var isJson = {
3486
3502
  STEPS: STEPS$8,
@@ -3836,7 +3852,8 @@ var QSM$8 = {
3836
3852
  RETURN_DATE: 'Data di ritorno',
3837
3853
  CONFIRM: 'Conferma',
3838
3854
  TRAVELERS: 'Viaggiatori',
3839
- GROUP_TOUR: 'Tour di gruppo'
3855
+ GROUP_TOUR: 'Tour di gruppo',
3856
+ ALL_TRAVELERS: 'Tutti i viaggiatori'
3840
3857
  };
3841
3858
  var SRP$7 = {
3842
3859
  SHOW_MORE: 'Mostra di più',
@@ -3887,7 +3904,8 @@ var SRP$7 = {
3887
3904
  DEPARTURE_AIRPORTS: 'Aeroporti di partenza',
3888
3905
  ARRIVAL_AIRPORTS: 'Aeroporti di arrivo',
3889
3906
  PRICE: 'Prezzo',
3890
- TRAVEL_GROUP: 'Gruppo di viaggio'
3907
+ TRAVEL_GROUP: 'Gruppo di viaggio',
3908
+ EXCURSION: 'Escursione'
3891
3909
  };
3892
3910
  var itJson = {
3893
3911
  STEPS: STEPS$7,
@@ -4247,7 +4265,8 @@ var QSM$7 = {
4247
4265
  RETURN_DATE: 'Terugkeerdatum',
4248
4266
  CONFIRM: 'Bevestigen',
4249
4267
  TRAVELERS: 'Reizigers',
4250
- GROUP_TOUR: 'Groepsreis'
4268
+ GROUP_TOUR: 'Groepsreis',
4269
+ ALL_TRAVELERS: 'Alle reizigers'
4251
4270
  };
4252
4271
  var SRP$6 = {
4253
4272
  SHOW_MORE: 'Toon meer',
@@ -4298,7 +4317,8 @@ var SRP$6 = {
4298
4317
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4299
4318
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4300
4319
  PRICE: 'Prijs',
4301
- TRAVEL_GROUP: 'Reisgezelschap'
4320
+ TRAVEL_GROUP: 'Reisgezelschap',
4321
+ EXCURSION: 'Excursie'
4302
4322
  };
4303
4323
  var nlBeJson = {
4304
4324
  STEPS: STEPS$6,
@@ -4654,7 +4674,8 @@ var QSM$6 = {
4654
4674
  RETURN_DATE: 'Terugkeerdatum',
4655
4675
  CONFIRM: 'Bevestigen',
4656
4676
  TRAVELERS: 'Reizigers',
4657
- GROUP_TOUR: 'Groepsreis'
4677
+ GROUP_TOUR: 'Groepsreis',
4678
+ ALL_TRAVELERS: 'Alle reizigers'
4658
4679
  };
4659
4680
  var SRP$5 = {
4660
4681
  SHOW_MORE: 'Toon meer',
@@ -4705,7 +4726,8 @@ var SRP$5 = {
4705
4726
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4706
4727
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4707
4728
  PRICE: 'Prijs',
4708
- TRAVEL_GROUP: 'Reisgezelschap'
4729
+ TRAVEL_GROUP: 'Reisgezelschap',
4730
+ EXCURSION: 'Excursie'
4709
4731
  };
4710
4732
  var nlNlJson = {
4711
4733
  STEPS: STEPS$5,
@@ -5061,7 +5083,8 @@ var QSM$5 = {
5061
5083
  RETURN_DATE: 'Returdato',
5062
5084
  CONFIRM: 'Bekreft',
5063
5085
  TRAVELERS: 'Reisende',
5064
- GROUP_TOUR: 'Gruppetur'
5086
+ GROUP_TOUR: 'Gruppetur',
5087
+ ALL_TRAVELERS: 'Alle reisende'
5065
5088
  };
5066
5089
  var SRP$4 = {
5067
5090
  SHOW_MORE: 'Vis mer',
@@ -5112,7 +5135,8 @@ var SRP$4 = {
5112
5135
  DEPARTURE_AIRPORTS: 'Avgangsflyplasser',
5113
5136
  ARRIVAL_AIRPORTS: 'Ankomstflyplasser',
5114
5137
  PRICE: 'Pris',
5115
- TRAVEL_GROUP: 'Reisefølge'
5138
+ TRAVEL_GROUP: 'Reisefølge',
5139
+ EXCURSION: 'Utflukt'
5116
5140
  };
5117
5141
  var noJson = {
5118
5142
  STEPS: STEPS$4,
@@ -5468,7 +5492,8 @@ var QSM$4 = {
5468
5492
  RETURN_DATE: 'Data powrotu',
5469
5493
  CONFIRM: 'Potwierdź',
5470
5494
  TRAVELERS: 'Podróżni',
5471
- GROUP_TOUR: 'Tour w grupie'
5495
+ GROUP_TOUR: 'Tour w grupie',
5496
+ ALL_TRAVELERS: 'Wszyscy podróżni'
5472
5497
  };
5473
5498
  var SRP$3 = {
5474
5499
  SHOW_MORE: 'Pokaż więcej',
@@ -5519,7 +5544,8 @@ var SRP$3 = {
5519
5544
  DEPARTURE_AIRPORTS: 'Lotniska wylotu',
5520
5545
  ARRIVAL_AIRPORTS: 'Lotniska przylotu',
5521
5546
  PRICE: 'Cena',
5522
- TRAVEL_GROUP: 'Grupa podróżnych'
5547
+ TRAVEL_GROUP: 'Grupa podróżnych',
5548
+ EXCURSION: 'Wycieczka'
5523
5549
  };
5524
5550
  var plJson = {
5525
5551
  STEPS: STEPS$3,
@@ -5875,7 +5901,8 @@ var QSM$3 = {
5875
5901
  RETURN_DATE: 'Data de regresso',
5876
5902
  CONFIRM: 'Confirmar',
5877
5903
  TRAVELERS: 'Viajantes',
5878
- GROUP_TOUR: 'Tour em grupo'
5904
+ GROUP_TOUR: 'Tour em grupo',
5905
+ ALL_TRAVELERS: 'All travelers'
5879
5906
  };
5880
5907
  var SRP$2 = {
5881
5908
  SHOW_MORE: 'Mostrar mais',
@@ -5926,7 +5953,8 @@ var SRP$2 = {
5926
5953
  DEPARTURE_AIRPORTS: 'Aeroportos de partida',
5927
5954
  ARRIVAL_AIRPORTS: 'Aeroportos de chegada',
5928
5955
  PRICE: 'Preço',
5929
- TRAVEL_GROUP: 'Grupo de viajantes'
5956
+ TRAVEL_GROUP: 'Grupo de viajantes',
5957
+ EXCURSION: 'Excursão'
5930
5958
  };
5931
5959
  var ptJson = {
5932
5960
  STEPS: STEPS$2,
@@ -6282,7 +6310,8 @@ var QSM$2 = {
6282
6310
  RETURN_DATE: 'Hemresedatum',
6283
6311
  CONFIRM: 'Bekräfta',
6284
6312
  TRAVELERS: 'Resenärer',
6285
- GROUP_TOUR: 'Gruppresa'
6313
+ GROUP_TOUR: 'Gruppresa',
6314
+ ALL_TRAVELERS: 'All travelers'
6286
6315
  };
6287
6316
  var SRP$1 = {
6288
6317
  SHOW_MORE: 'Visa mer',
@@ -6333,7 +6362,8 @@ var SRP$1 = {
6333
6362
  DEPARTURE_AIRPORTS: 'Avgångsflygplatser',
6334
6363
  ARRIVAL_AIRPORTS: 'Ankomstflygplatser',
6335
6364
  PRICE: 'Pris',
6336
- TRAVEL_GROUP: 'Resesällskap'
6365
+ TRAVEL_GROUP: 'Resesällskap',
6366
+ EXCURSION: 'Utflykt'
6337
6367
  };
6338
6368
  var svJson = {
6339
6369
  STEPS: STEPS$1,
@@ -6687,7 +6717,8 @@ var QSM$1 = {
6687
6717
  RETURN_DATE: '帰着日',
6688
6718
  CONFIRM: '確認',
6689
6719
  TRAVELERS: '旅行者',
6690
- GROUP_TOUR: 'グループツアー'
6720
+ GROUP_TOUR: 'グループツアー',
6721
+ ALL_TRAVELERS: 'すべての旅行者'
6691
6722
  };
6692
6723
  var SRP = {
6693
6724
  SHOW_MORE: 'もっと見る',
@@ -6738,7 +6769,8 @@ var SRP = {
6738
6769
  DEPARTURE_AIRPORTS: '出発空港',
6739
6770
  ARRIVAL_AIRPORTS: '到着空港',
6740
6771
  PRICE: '価格',
6741
- TRAVEL_GROUP: '旅行グループ'
6772
+ TRAVEL_GROUP: '旅行グループ',
6773
+ EXCURSION: 'エクスカーション'
6742
6774
  };
6743
6775
  var jaJson = {
6744
6776
  STEPS: STEPS,
@@ -6769,7 +6801,7 @@ exports.DepartureRange = void 0;
6769
6801
  DepartureRange[(DepartureRange['Night'] = 3)] = 'Night';
6770
6802
  })(exports.DepartureRange || (exports.DepartureRange = {}));
6771
6803
 
6772
- var formatPrice$2 = function (price, currencyCode, locale) {
6804
+ var formatPrice$3 = function (price, currencyCode, locale) {
6773
6805
  if (locale === void 0) {
6774
6806
  locale = 'nl-BE';
6775
6807
  }
@@ -6876,7 +6908,7 @@ function getLocale(code) {
6876
6908
  }
6877
6909
  }
6878
6910
  var getPriceDifferenceText = function (price, currencyCode) {
6879
- return price > 0 ? '+ '.concat(formatPrice$2(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$2(Math.abs(price), currencyCode));
6911
+ return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
6880
6912
  };
6881
6913
  function format(text, args) {
6882
6914
  return text.replace(/{([0-9]+)}/g, function (match, index) {
@@ -6976,6 +7008,16 @@ var findSortByType = function (sortByTypes, sortKey, direction) {
6976
7008
  }) || sortByTypes[0]
6977
7009
  );
6978
7010
  };
7011
+ var getDatesBetween = function (fromDate, toDate) {
7012
+ var dates = [];
7013
+ var current = new Date(fromDate);
7014
+ var end = new Date(toDate);
7015
+ while (current < end) {
7016
+ dates.push(new Date(current));
7017
+ current.setUTCDate(current.getUTCDate() + 1);
7018
+ }
7019
+ return dates;
7020
+ };
6979
7021
 
6980
7022
  var getDateFromParams = function (params, name) {
6981
7023
  var dateString = params.get(name);
@@ -13449,6 +13491,7 @@ PERFORMANCE OF THIS SOFTWARE.
13449
13491
  var ENDPOINT = '/api/web/packaging';
13450
13492
  var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
13451
13493
  var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
13494
+ var ENDPOINT_EXCURSIONS = ENDPOINT + '/excursions';
13452
13495
  var ENDPOINT_FLIGHTS = ENDPOINT + '/flights';
13453
13496
  var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
13454
13497
  var ENDPOINT_ITINERARY = ENDPOINT + '/itinerary';
@@ -13472,6 +13515,12 @@ PERFORMANCE OF THIS SOFTWARE.
13472
13515
  var body = JSON.stringify(request);
13473
13516
  return post(url, apiKey, body, config.token, signal, true);
13474
13517
  };
13518
+ var searchPackagingExcursions = function (config, request, signal) {
13519
+ var url = '' + config.host + ENDPOINT_EXCURSIONS;
13520
+ var apiKey = config.apiKey;
13521
+ var body = JSON.stringify(request);
13522
+ return post(url, apiKey, body, config.token, signal, true);
13523
+ };
13475
13524
  var getEntry = function (config, magicLinkCode, signal) {
13476
13525
  var apiKey = config.apiKey;
13477
13526
  var url = '' + config.host + ENDPOINT_ENTRY(magicLinkCode);
@@ -13563,6 +13612,7 @@ PERFORMANCE OF THIS SOFTWARE.
13563
13612
  exports.searchLocations = searchLocations;
13564
13613
  exports.searchOords = searchOords;
13565
13614
  exports.searchPackagingAccommodations = searchPackagingAccommodations;
13615
+ exports.searchPackagingExcursions = searchPackagingExcursions;
13566
13616
  exports.searchPackagingFlights = searchPackagingFlights;
13567
13617
  exports.searchRegions = searchRegions;
13568
13618
  exports.searchWithErrorMapping = searchWithErrorMapping;
@@ -13639,16 +13689,16 @@ var formatPriceByMode = function (price, priceMode, personCount, duration, perPe
13639
13689
  if (!price) return '';
13640
13690
  switch (priceMode) {
13641
13691
  case 0:
13642
- return ''.concat(formatPrice$2(price, currencyCode));
13692
+ return ''.concat(formatPrice$3(price, currencyCode));
13643
13693
  case 1:
13644
13694
  var perPersonPrice = price / personCount;
13645
- return ''.concat(formatPrice$2(perPersonPrice, currencyCode), ' / ').concat(perPersonLabel);
13695
+ return ''.concat(formatPrice$3(perPersonPrice, currencyCode), ' / ').concat(perPersonLabel);
13646
13696
  case 2:
13647
13697
  var perNightPrice = price / duration;
13648
- return ''.concat(formatPrice$2(perNightPrice, currencyCode), ' / ').concat(perNightLabel);
13698
+ return ''.concat(formatPrice$3(perNightPrice, currencyCode), ' / ').concat(perNightLabel);
13649
13699
  case 3:
13650
13700
  var perPersonPerNightPrice = price / duration;
13651
- return ''.concat(formatPrice$2(perPersonPerNightPrice, currencyCode), ' / ').concat(perPersonPerNightLabel);
13701
+ return ''.concat(formatPrice$3(perPersonPerNightPrice, currencyCode), ' / ').concat(perPersonPerNightLabel);
13652
13702
  }
13653
13703
  };
13654
13704
 
@@ -21756,7 +21806,11 @@ var FlightOptionsForm = function () {
21756
21806
  setFlightGroups = _f[1];
21757
21807
  var handleSubmit = function (e) {
21758
21808
  if (settings.skipRouter) {
21759
- dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21809
+ if (settings.roomOptions.isHidden) {
21810
+ dispatch(setCurrentStep(OPTIONS_FORM_STEP));
21811
+ } else {
21812
+ dispatch(setCurrentStep(ROOM_OPTIONS_FORM_STEP));
21813
+ }
21760
21814
  } else {
21761
21815
  if (settings.roomOptions.isHidden) {
21762
21816
  navigate(
@@ -22140,7 +22194,7 @@ var NoneOption = function (_a) {
22140
22194
  return x.requirementType === 2;
22141
22195
  });
22142
22196
  var noneSelected = !selectedOption;
22143
- var priceDifferencetext = selectedOption ? '- '.concat(formatPrice$2(Math.abs(selectedOption.line.price), currencyCode)) : '';
22197
+ var priceDifferencetext = selectedOption ? '- '.concat(formatPrice$3(Math.abs(selectedOption.line.price), currencyCode)) : '';
22144
22198
  return React__default['default'].createElement(
22145
22199
  React__default['default'].Fragment,
22146
22200
  null,
@@ -23417,7 +23471,7 @@ var OptionRoom = function (_a) {
23417
23471
  e.preventDefault();
23418
23472
  };
23419
23473
  var getPriceDifferenceText = function (price) {
23420
- return price > 0 ? '+ '.concat(formatPrice$2(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$2(Math.abs(price), currencyCode));
23474
+ return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
23421
23475
  };
23422
23476
  var getAccommodationPriceDifference = function (accommodation) {
23423
23477
  var _a;
@@ -24953,7 +25007,7 @@ var Sidebar = function (_a) {
24953
25007
  { className: 'pricing-summary__property' },
24954
25008
  React__default['default'].createElement('h6', { className: 'pricing-summary__title' }, translations.SIDEBAR.BASE_PRICE)
24955
25009
  ),
24956
- React__default['default'].createElement('div', { className: 'pricing-summary__value' }, formatPrice$2(basePrice, currencyCode))
25010
+ React__default['default'].createElement('div', { className: 'pricing-summary__value' }, formatPrice$3(basePrice, currencyCode))
24957
25011
  ),
24958
25012
  basePricePerPaxType &&
24959
25013
  basePricePerPaxType.map(function (ppt, index) {
@@ -24973,7 +25027,7 @@ var Sidebar = function (_a) {
24973
25027
  React__default['default'].createElement(
24974
25028
  'div',
24975
25029
  { className: 'pricing-summary__value' },
24976
- formatPrice$2(ppt.pricePerPaxType, currencyCode)
25030
+ formatPrice$3(ppt.pricePerPaxType, currencyCode)
24977
25031
  )
24978
25032
  ),
24979
25033
  ppt.details.map(function (detail, dIndex) {
@@ -24993,7 +25047,7 @@ var Sidebar = function (_a) {
24993
25047
  React__default['default'].createElement(
24994
25048
  'div',
24995
25049
  { className: 'pricing-summary__value' },
24996
- formatPrice$2(detail.price / detail.numberOfPax, currencyCode)
25050
+ formatPrice$3(detail.price / detail.numberOfPax, currencyCode)
24997
25051
  )
24998
25052
  );
24999
25053
  })
@@ -25020,7 +25074,7 @@ var Sidebar = function (_a) {
25020
25074
  React__default['default'].createElement(
25021
25075
  'div',
25022
25076
  { className: 'pricing-summary__value' },
25023
- formatPrice$2(priceDetail.price * priceDetail.amount, currencyCode)
25077
+ formatPrice$3(priceDetail.price * priceDetail.amount, currencyCode)
25024
25078
  )
25025
25079
  ),
25026
25080
  React__default['default'].createElement(
@@ -25055,7 +25109,7 @@ var Sidebar = function (_a) {
25055
25109
  React__default['default'].createElement(
25056
25110
  'div',
25057
25111
  { className: 'pricing-summary__value' },
25058
- formatPrice$2(priceDetail.price * priceDetail.amount, currencyCode)
25112
+ formatPrice$3(priceDetail.price * priceDetail.amount, currencyCode)
25059
25113
  )
25060
25114
  ),
25061
25115
  React__default['default'].createElement(
@@ -25085,7 +25139,7 @@ var Sidebar = function (_a) {
25085
25139
  React__default['default'].createElement(
25086
25140
  'div',
25087
25141
  { className: 'pricing-summary__value' },
25088
- formatPrice$2(ppt.pricePerPaxType, currencyCode)
25142
+ formatPrice$3(ppt.pricePerPaxType, currencyCode)
25089
25143
  )
25090
25144
  ),
25091
25145
  ppt.details.map(function (detail, dIndex) {
@@ -25105,7 +25159,7 @@ var Sidebar = function (_a) {
25105
25159
  React__default['default'].createElement(
25106
25160
  'div',
25107
25161
  { className: 'pricing-summary__value' },
25108
- formatPrice$2(detail.price / detail.numberOfPax, currencyCode)
25162
+ formatPrice$3(detail.price / detail.numberOfPax, currencyCode)
25109
25163
  )
25110
25164
  );
25111
25165
  })
@@ -25149,7 +25203,7 @@ var Sidebar = function (_a) {
25149
25203
  React__default['default'].createElement(
25150
25204
  'div',
25151
25205
  { className: 'pricing__price' },
25152
- formatPrice$2(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25206
+ formatPrice$3(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25153
25207
  )
25154
25208
  )
25155
25209
  )
@@ -25170,7 +25224,7 @@ var Sidebar = function (_a) {
25170
25224
  React__default['default'].createElement(
25171
25225
  'div',
25172
25226
  { className: 'pricing' },
25173
- React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$2(totalPrice, currencyCode))
25227
+ React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$3(totalPrice, currencyCode))
25174
25228
  )
25175
25229
  )
25176
25230
  ),
@@ -25188,7 +25242,7 @@ var Sidebar = function (_a) {
25188
25242
  React__default['default'].createElement(
25189
25243
  'div',
25190
25244
  { className: 'pricing' },
25191
- React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$2(deposit, currencyCode))
25245
+ React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$3(deposit, currencyCode))
25192
25246
  )
25193
25247
  )
25194
25248
  ),
@@ -25204,7 +25258,7 @@ var Sidebar = function (_a) {
25204
25258
  translations.SIDEBAR.DEPOSIT_TEXT1,
25205
25259
  React__default['default'].createElement('strong', null, translations.SIDEBAR.DEPOSIT_TEXT2),
25206
25260
  translations.SIDEBAR.DEPOSIT_TEXT3,
25207
- formatPrice$2(remainingAmount, currencyCode),
25261
+ formatPrice$3(remainingAmount, currencyCode),
25208
25262
  translations.SIDEBAR.DEPOSIT_TEXT4,
25209
25263
  React__default['default'].createElement('strong', null, translations.SIDEBAR.DEPOSIT_TEXT5),
25210
25264
  translations.SIDEBAR.DEPOSIT_TEXT6
@@ -25233,7 +25287,7 @@ var Sidebar = function (_a) {
25233
25287
  React__default['default'].createElement(
25234
25288
  'div',
25235
25289
  { className: 'pricing__price' },
25236
- formatPrice$2(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25290
+ formatPrice$3(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25237
25291
  )
25238
25292
  )
25239
25293
  )
@@ -25254,7 +25308,7 @@ var Sidebar = function (_a) {
25254
25308
  React__default['default'].createElement(
25255
25309
  'div',
25256
25310
  { className: 'pricing' },
25257
- React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$2(totalPrice, currencyCode))
25311
+ React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$3(totalPrice, currencyCode))
25258
25312
  )
25259
25313
  )
25260
25314
  )
@@ -33857,22 +33911,32 @@ var initialState$1 = {
33857
33911
  packagingAccoSearchDetails: [],
33858
33912
  selectedPackagingAccoResultCode: null,
33859
33913
  packagingFlightResults: [],
33914
+ filteredPackagingFlightResults: [],
33860
33915
  selectedPackagingFlight: null,
33916
+ selectedOutwardKey: null,
33917
+ selectedReturnKey: null,
33861
33918
  selectedFlight: null,
33862
33919
  selectedFlightDetails: null,
33863
33920
  bookingPackageDetails: null,
33921
+ priceDetails: null,
33864
33922
  isLoading: false,
33865
33923
  flightsLoading: false,
33866
- filters: [],
33867
33924
  selectedSortType: null,
33925
+ selectedFlightSortType: null,
33926
+ initialFilters: [],
33927
+ filters: [],
33928
+ initialFlightFilters: [],
33929
+ flightFilters: [],
33868
33930
  activeTab: 'compact',
33869
33931
  currentPage: 1,
33932
+ transactionId: null,
33870
33933
  flyInIsOpen: false,
33934
+ flyInType: null,
33871
33935
  editablePackagingEntry: null,
33872
- transactionId: null,
33873
- accommodationFlyInStep: 'details',
33874
- priceDetails: null,
33875
- itinerary: null
33936
+ itinerary: null,
33937
+ excursionSearchParams: null,
33938
+ selectedExcursionSearchResult: null,
33939
+ confirmedExcursionsByDay: {}
33876
33940
  };
33877
33941
  var searchResultsSlice = toolkit.createSlice({
33878
33942
  name: 'searchResults',
@@ -33902,6 +33966,9 @@ var searchResultsSlice = toolkit.createSlice({
33902
33966
  setPackagingFlightResults: function (state, action) {
33903
33967
  state.packagingFlightResults = action.payload;
33904
33968
  },
33969
+ setFilteredPackagingFlightResults: function (state, action) {
33970
+ state.filteredPackagingFlightResults = action.payload;
33971
+ },
33905
33972
  setSelectedPackagingFlight: function (state, action) {
33906
33973
  state.selectedPackagingFlight = action.payload;
33907
33974
  },
@@ -33930,6 +33997,9 @@ var searchResultsSlice = toolkit.createSlice({
33930
33997
  setFlightsLoading: function (state, action) {
33931
33998
  state.flightsLoading = action.payload;
33932
33999
  },
34000
+ setInitialFilters: function (state, action) {
34001
+ state.initialFilters = action.payload;
34002
+ },
33933
34003
  setFilters: function (state, action) {
33934
34004
  var updatedFilters = action.payload;
33935
34005
  updatedFilters.forEach(function (updatedFilter) {
@@ -33946,9 +34016,31 @@ var searchResultsSlice = toolkit.createSlice({
33946
34016
  resetFilters: function (state, action) {
33947
34017
  state.filters = action.payload;
33948
34018
  },
34019
+ setInitialFlightFilters: function (state, action) {
34020
+ state.initialFlightFilters = action.payload;
34021
+ },
34022
+ setFlightFilters: function (state, action) {
34023
+ var updatedFilters = action.payload;
34024
+ updatedFilters.forEach(function (updatedFilter) {
34025
+ var existingIndex = state.flightFilters.findIndex(function (f) {
34026
+ return f.property === updatedFilter.property;
34027
+ });
34028
+ if (existingIndex !== -1) {
34029
+ state.flightFilters[existingIndex] = updatedFilter;
34030
+ } else {
34031
+ state.flightFilters.push(updatedFilter); // Optional: Add new filters if not present
34032
+ }
34033
+ });
34034
+ },
34035
+ resetFlightFilters: function (state, action) {
34036
+ state.flightFilters = action.payload;
34037
+ },
33949
34038
  setSortType: function (state, action) {
33950
34039
  state.selectedSortType = action.payload;
33951
34040
  },
34041
+ setFlightSortType: function (state, action) {
34042
+ state.selectedFlightSortType = action.payload;
34043
+ },
33952
34044
  setActiveTab: function (state, action) {
33953
34045
  state.activeTab = action.payload;
33954
34046
  },
@@ -33972,14 +34064,59 @@ var searchResultsSlice = toolkit.createSlice({
33972
34064
  setTransactionId: function (state, action) {
33973
34065
  state.transactionId = action.payload;
33974
34066
  },
33975
- setAccommodationFlyInStep: function (state, action) {
33976
- state.accommodationFlyInStep = action.payload;
34067
+ setFlyInType: function (state, action) {
34068
+ state.flyInType = action.payload;
33977
34069
  },
33978
34070
  setPriceDetails: function (state, action) {
33979
34071
  state.priceDetails = action.payload;
33980
34072
  },
33981
34073
  setItinerary: function (state, action) {
33982
34074
  state.itinerary = action.payload;
34075
+ },
34076
+ setSelectedOutwardKey: function (state, action) {
34077
+ state.selectedOutwardKey = action.payload;
34078
+ },
34079
+ setSelectedReturnKey: function (state, action) {
34080
+ state.selectedReturnKey = action.payload;
34081
+ },
34082
+ resetFlightSelection: function (state) {
34083
+ state.selectedOutwardKey = null;
34084
+ state.selectedReturnKey = null;
34085
+ },
34086
+ setExcursionSearchParams: function (state, action) {
34087
+ state.excursionSearchParams = action.payload;
34088
+ },
34089
+ setSelectedExcursionSearchResult: function (state, action) {
34090
+ state.selectedExcursionSearchResult = action.payload;
34091
+ },
34092
+ confirmExcursionForDay: function (state, action) {
34093
+ var _a;
34094
+ var _b = action.payload,
34095
+ dayKey = _b.dayKey,
34096
+ excursion = _b.excursion;
34097
+ var existingForDay = (_a = state.confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : [];
34098
+ var existingIndex = existingForDay.findIndex(function (item) {
34099
+ return item.code === excursion.code;
34100
+ });
34101
+ if (existingIndex >= 0) {
34102
+ // replace existing confirmed version of same excursion
34103
+ existingForDay[existingIndex] = excursion;
34104
+ } else {
34105
+ existingForDay.push(excursion);
34106
+ }
34107
+ state.confirmedExcursionsByDay[dayKey] = existingForDay;
34108
+ },
34109
+ removeConfirmedExcursionForDay: function (state, action) {
34110
+ var _a;
34111
+ var _b = action.payload,
34112
+ dayKey = _b.dayKey,
34113
+ excursionCode = _b.excursionCode;
34114
+ state.confirmedExcursionsByDay[dayKey] = ((_a = state.confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : []).filter(function (item) {
34115
+ return item.code !== excursionCode;
34116
+ });
34117
+ },
34118
+ clearConfirmedExcursionsForDay: function (state, action) {
34119
+ delete state.confirmedExcursionsByDay[action.payload.dayKey];
33983
34120
  }
33984
34121
  }
33985
34122
  });
@@ -33988,6 +34125,7 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33988
34125
  setSelectedSearchResult = _a.setSelectedSearchResult,
33989
34126
  setPackagingAccoResults = _a.setPackagingAccoResults,
33990
34127
  setFilteredPackagingAccoResults = _a.setFilteredPackagingAccoResults,
34128
+ setFilteredPackagingFlightResults = _a.setFilteredPackagingFlightResults,
33991
34129
  setPackagingAccoSearchDetails = _a.setPackagingAccoSearchDetails,
33992
34130
  setSelectedPackagingAccoResult = _a.setSelectedPackagingAccoResult,
33993
34131
  setPackagingFlightResults = _a.setPackagingFlightResults,
@@ -33998,18 +34136,31 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33998
34136
  _a.selectFlight;
33999
34137
  var setIsLoading = _a.setIsLoading,
34000
34138
  setFlightsLoading = _a.setFlightsLoading,
34139
+ setInitialFilters = _a.setInitialFilters,
34001
34140
  setFilters = _a.setFilters,
34002
34141
  resetFilters = _a.resetFilters,
34142
+ setInitialFlightFilters = _a.setInitialFlightFilters,
34143
+ setFlightFilters = _a.setFlightFilters,
34144
+ resetFlightFilters = _a.resetFlightFilters,
34003
34145
  setSortType = _a.setSortType,
34146
+ setFlightSortType = _a.setFlightSortType,
34004
34147
  setActiveTab = _a.setActiveTab;
34005
34148
  _a.setCurrentPage;
34006
34149
  _a.resetSearchState;
34007
34150
  var setFlyInIsOpen = _a.setFlyInIsOpen,
34008
34151
  setEditablePackagingEntry = _a.setEditablePackagingEntry,
34009
34152
  setTransactionId = _a.setTransactionId,
34010
- setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
34153
+ setFlyInType = _a.setFlyInType,
34011
34154
  setPriceDetails = _a.setPriceDetails,
34012
- setItinerary = _a.setItinerary;
34155
+ setItinerary = _a.setItinerary,
34156
+ setSelectedOutwardKey = _a.setSelectedOutwardKey,
34157
+ setSelectedReturnKey = _a.setSelectedReturnKey;
34158
+ _a.resetFlightSelection;
34159
+ var setExcursionSearchParams = _a.setExcursionSearchParams,
34160
+ setSelectedExcursionSearchResult = _a.setSelectedExcursionSearchResult,
34161
+ confirmExcursionForDay = _a.confirmExcursionForDay,
34162
+ removeConfirmedExcursionForDay = _a.removeConfirmedExcursionForDay;
34163
+ _a.clearConfirmedExcursionsForDay;
34013
34164
  var searchResultsReducer = searchResultsSlice.reducer;
34014
34165
 
34015
34166
  var ItemPicker = function (_a) {
@@ -34542,8 +34693,7 @@ var Icon$1 = function (_a) {
34542
34693
  }),
34543
34694
  title && React__default['default'].createElement('title', null, title),
34544
34695
  React__default['default'].createElement('path', {
34545
- 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',
34546
- fill: 'currentColor'
34696
+ 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'
34547
34697
  })
34548
34698
  );
34549
34699
  case 'ui-backforward':
@@ -35040,6 +35190,7 @@ var Icon$1 = function (_a) {
35040
35190
 
35041
35191
  var GROUP_TOUR_SERVICE_TYPE = 1;
35042
35192
  var ACCOMMODATION_SERVICE_TYPE = 3;
35193
+ var EXCURSION_SERVICE_TYPE = 4;
35043
35194
  var FLIGHT_SERVICE_TYPE = 7;
35044
35195
  var toDateOnlyString = function (value) {
35045
35196
  var date = value instanceof Date ? value : new Date(value);
@@ -35434,12 +35585,12 @@ var Itinerary = function (_a) {
35434
35585
  React__default['default'].createElement(
35435
35586
  'div',
35436
35587
  { className: 'search__filter__prices__wrapper' },
35437
- React__default['default'].createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$2(pricePerPerson, 'EUR')),
35588
+ React__default['default'].createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$3(pricePerPerson, 'EUR')),
35438
35589
  React__default['default'].createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
35439
35590
  React__default['default'].createElement(
35440
35591
  'p',
35441
35592
  null,
35442
- React__default['default'].createElement('strong', null, '(', formatPrice$2(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35593
+ React__default['default'].createElement('strong', null, '(', formatPrice$3(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35443
35594
  )
35444
35595
  ),
35445
35596
  React__default['default'].createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
@@ -38505,7 +38656,8 @@ var FlightsFlyIn = function (_a) {
38505
38656
  React__default['default'].createElement(
38506
38657
  'div',
38507
38658
  { className: 'flyin__footer__price' },
38508
- 'Total price: \u20AC',
38659
+ translations.SHARED.TOTAL_PRICE,
38660
+ ': \u20AC',
38509
38661
  (_o = selectedCombinationFlight === null || selectedCombinationFlight === void 0 ? void 0 : selectedCombinationFlight.price) === null || _o === void 0
38510
38662
  ? void 0
38511
38663
  : _o.toFixed(2)
@@ -38519,7 +38671,7 @@ var FlightsFlyIn = function (_a) {
38519
38671
  );
38520
38672
  };
38521
38673
 
38522
- var formatPrice$1 = function (price, currencyCode) {
38674
+ var formatPrice$2 = function (price, currencyCode) {
38523
38675
  if (typeof price !== 'number') return '';
38524
38676
  var safeCurrency = currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR';
38525
38677
  return new Intl.NumberFormat('nl-BE', {
@@ -38651,7 +38803,7 @@ var AccommodationFlyIn = function (_a) {
38651
38803
  var totalPrice = selectedOptions.reduce(function (total, option) {
38652
38804
  return total + (option.price || 0);
38653
38805
  }, 0);
38654
- return formatPrice$1(totalPrice, selectedPackagingAccoSearchDetails.currencyCode);
38806
+ return formatPrice$2(totalPrice, selectedPackagingAccoSearchDetails.currencyCode);
38655
38807
  };
38656
38808
  var getPriceDifference = function (currentSelectedPrice, roomIndex, accommodationCode, regimeId) {
38657
38809
  var targetPrice = 0;
@@ -38676,7 +38828,7 @@ var AccommodationFlyIn = function (_a) {
38676
38828
  if (difference === 0) {
38677
38829
  return null;
38678
38830
  }
38679
- var formattedAbsoluteValue = formatPrice$1(Math.abs(difference), currencyCode);
38831
+ var formattedAbsoluteValue = formatPrice$2(Math.abs(difference), currencyCode);
38680
38832
  return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
38681
38833
  };
38682
38834
  var getPriceDifferenceClassName = function (difference) {
@@ -38794,7 +38946,7 @@ var AccommodationFlyIn = function (_a) {
38794
38946
  React__default['default'].createElement(
38795
38947
  'div',
38796
38948
  { className: 'flyin__footer' },
38797
- React__default['default'].createElement('div', { className: 'flyin__footer__price' }, 'Total price: ', calculateTotalPrice()),
38949
+ React__default['default'].createElement('div', { className: 'flyin__footer__price' }, translations.SHARED.TOTAL_PRICE, ': ', calculateTotalPrice()),
38798
38950
  React__default['default'].createElement(
38799
38951
  'div',
38800
38952
  { className: 'flyin__button-wrapper' },
@@ -38953,7 +39105,7 @@ var AccommodationFlyIn = function (_a) {
38953
39105
  // )} */}
38954
39106
  // </div>
38955
39107
  // <div className="flyin__footer">
38956
- // <div className="flyin__footer__price">Total price: €</div>
39108
+ // <div className="flyin__footer__price">{translations.SHARED.TOTAL_PRICE}: €</div>
38957
39109
  // <div className="flyin__button-wrapper">
38958
39110
  // <button className="cta cta--select" onClick={handleConfirm}>
38959
39111
  // Toevoegen
@@ -38963,7 +39115,7 @@ var AccommodationFlyIn = function (_a) {
38963
39115
  // </>
38964
39116
  };
38965
39117
 
38966
- var formatPrice = function (price, currencyCode) {
39118
+ var formatPrice$1 = function (price, currencyCode) {
38967
39119
  if (currencyCode === void 0) {
38968
39120
  currencyCode = 'EUR';
38969
39121
  }
@@ -39146,7 +39298,7 @@ var GroupTourFlyIn = function (_a) {
39146
39298
  if (difference === 0) {
39147
39299
  return null;
39148
39300
  }
39149
- var formattedAbsoluteValue = formatPrice(Math.abs(difference), currencyCode);
39301
+ var formattedAbsoluteValue = formatPrice$1(Math.abs(difference), currencyCode);
39150
39302
  return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
39151
39303
  };
39152
39304
  var getPriceDifferenceClassName = function (difference) {
@@ -39279,8 +39431,9 @@ var GroupTourFlyIn = function (_a) {
39279
39431
  React__default['default'].createElement(
39280
39432
  'div',
39281
39433
  { className: 'flyin__footer__price' },
39282
- 'Total price: ',
39283
- formatPrice(adjustedTotalPrice, bookingPackageDetails.currencyCode)
39434
+ translations.SHARED.TOTAL_PRICE,
39435
+ ': ',
39436
+ formatPrice$1(adjustedTotalPrice, bookingPackageDetails.currencyCode)
39284
39437
  ),
39285
39438
  React__default['default'].createElement(
39286
39439
  'div',
@@ -43597,7 +43750,7 @@ var getBaseHotelResult = function (searchResult, cmsItem, languageCode, translat
43597
43750
  searchResult.countryName,
43598
43751
  (_h = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.parentItem) === null || _h === void 0 ? void 0 : _h.name
43599
43752
  ),
43600
- price: formatPrice$2(searchResult.price, searchResult.currencyCode, languageCode),
43753
+ price: formatPrice$3(searchResult.price, searchResult.currencyCode, languageCode),
43601
43754
  ctaText: translations === null || translations === void 0 ? void 0 : translations.SRP.VIEW_DETAILS
43602
43755
  };
43603
43756
  };
@@ -43637,7 +43790,7 @@ var mapPackagingAccoResult = function (searchResult, cmsItem, languageCode, tran
43637
43790
  contents: searchResult.contents
43638
43791
  });
43639
43792
  };
43640
- var renderHotelResults = function (results, context, activeTab, translations) {
43793
+ var renderHotelResults = function (results, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn) {
43641
43794
  var renderedResults = results.map(function (result, index) {
43642
43795
  var _a;
43643
43796
  var key = ''.concat((_a = result.id) !== null && _a !== void 0 ? _a : result.code, '-').concat(index);
@@ -43652,13 +43805,22 @@ var renderHotelResults = function (results, context, activeTab, translations) {
43652
43805
  return React__default['default'].createElement(
43653
43806
  'div',
43654
43807
  { className: 'search__results__cards '.concat(activeTab ? 'search__results__cards--'.concat(activeTab) : '') },
43808
+ selectedPackagingAccoResult &&
43809
+ !isFlyIn &&
43810
+ React__default['default'].createElement(HotelCard, {
43811
+ key: selectedPackagingAccoResult.code,
43812
+ result: selectedPackagingAccoResult,
43813
+ translations: translations
43814
+ }),
43655
43815
  renderedResults
43656
43816
  );
43657
43817
  };
43658
43818
  var HotelAccommodationResults = function (_a) {
43659
43819
  var _b, _c;
43660
- var isLoading = _a.isLoading;
43820
+ var isLoading = _a.isLoading,
43821
+ isFlyIn = _a.isFlyIn;
43661
43822
  var context = React.useContext(SearchResultsConfigurationContext);
43823
+ var dispatch = reactRedux.useDispatch();
43662
43824
  if (!context) {
43663
43825
  return null;
43664
43826
  }
@@ -43668,7 +43830,10 @@ var HotelAccommodationResults = function (_a) {
43668
43830
  }),
43669
43831
  filteredResults = _d.filteredResults,
43670
43832
  filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
43833
+ packagingAccoResults = _d.packagingAccoResults,
43671
43834
  activeTab = _d.activeTab;
43835
+ _d.flyInIsOpen;
43836
+ var selectedPackagingAccoResultCode = _d.selectedPackagingAccoResultCode;
43672
43837
  var cmsMap = React__default['default'].useMemo(
43673
43838
  function () {
43674
43839
  var _a;
@@ -43731,167 +43896,1751 @@ var HotelAccommodationResults = function (_a) {
43731
43896
  : firstPackagingResult.fromDate;
43732
43897
  var firstResultDay = firstResultDate ? dateFns.format(dateFns.parseISO(firstResultDate), 'd') : null;
43733
43898
  var firstResultMonth = firstResultDate ? dateFns.format(dateFns.parseISO(firstResultDate), 'MMM') : null;
43899
+ var selectedPackagingAccoResult = React__default['default'].useMemo(
43900
+ function () {
43901
+ var selectedResult = packagingAccoResults.find(function (result) {
43902
+ return result.code === selectedPackagingAccoResultCode;
43903
+ });
43904
+ if (selectedResult) {
43905
+ return mapPackagingAccoResult(selectedResult, cmsMap.get(selectedResult.code), context.languageCode, translations);
43906
+ }
43907
+ },
43908
+ [packagingAccoResults, selectedPackagingAccoResultCode, cmsMap, context.languageCode, translations]
43909
+ );
43910
+ var visibleResults = React__default['default'].useMemo(
43911
+ function () {
43912
+ var shouldShowAll =
43913
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) !== build.PortalQsmType.AccommodationAndFlight || isFlyIn;
43914
+ if (shouldShowAll) {
43915
+ return mappedResults;
43916
+ }
43917
+ if (selectedPackagingAccoResult) {
43918
+ return mappedResults
43919
+ .filter(function (result) {
43920
+ return result.code !== selectedPackagingAccoResult.code;
43921
+ })
43922
+ .slice(0, 2);
43923
+ }
43924
+ return mappedResults.slice(0, 3);
43925
+ },
43926
+ [context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType, mappedResults, isFlyIn, selectedPackagingAccoResult]
43927
+ );
43928
+ var handleShowMoreHotels = function (flyInType) {
43929
+ dispatch(setFlyInType(flyInType));
43930
+ dispatch(setFlyInIsOpen(true));
43931
+ };
43734
43932
  return React__default['default'].createElement(
43735
43933
  React__default['default'].Fragment,
43736
43934
  null,
43737
- React__default['default'].createElement(
43738
- 'div',
43739
- { className: 'search__results__label search__results__label--secondary' },
43740
- React__default['default'].createElement(
43741
- 'div',
43742
- { className: 'search__results__label__date' },
43743
- firstResultDay && firstResultMonth
43744
- ? React__default['default'].createElement(
43745
- React__default['default'].Fragment,
43746
- null,
43747
- React__default['default'].createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43748
- React__default['default'].createElement('p', null, firstResultMonth)
43749
- )
43750
- : React__default['default'].createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43751
- ),
43935
+ !isFlyIn &&
43752
43936
  React__default['default'].createElement(
43753
43937
  'div',
43754
- { className: 'search__results__label__text' },
43938
+ { className: 'search__results__label search__results__label--secondary' },
43755
43939
  React__default['default'].createElement(
43756
- 'h3',
43757
- null,
43758
- translations.SRP.SELECT,
43759
- ' ',
43760
- React__default['default'].createElement('strong', null, translations.SRP.ACCOMMODATION)
43940
+ 'div',
43941
+ { className: 'search__results__label__date' },
43942
+ firstResultDay && firstResultMonth
43943
+ ? React__default['default'].createElement(
43944
+ React__default['default'].Fragment,
43945
+ null,
43946
+ React__default['default'].createElement('p', { className: 'search__results__label__date-date' }, firstResultDay),
43947
+ React__default['default'].createElement('p', null, firstResultMonth)
43948
+ )
43949
+ : React__default['default'].createElement(Icon$1, { name: 'ui-bed', height: 16, fill: 'white' })
43950
+ ),
43951
+ React__default['default'].createElement(
43952
+ 'div',
43953
+ { className: 'search__results__label__text' },
43954
+ React__default['default'].createElement(
43955
+ 'h3',
43956
+ null,
43957
+ translations.SRP.SELECT,
43958
+ ' ',
43959
+ React__default['default'].createElement('strong', null, translations.SRP.ACCOMMODATION)
43960
+ )
43761
43961
  )
43762
- )
43763
- ),
43962
+ ),
43764
43963
  isLoading
43765
43964
  ? React__default['default'].createElement(
43766
43965
  React__default['default'].Fragment,
43767
43966
  null,
43768
43967
  (_c = context.customSpinner) !== null && _c !== void 0 ? _c : React__default['default'].createElement(Spinner, null)
43769
43968
  )
43770
- : renderHotelResults(mappedResults, context, activeTab, translations),
43969
+ : renderHotelResults(visibleResults, context, activeTab, translations, selectedPackagingAccoResult, isFlyIn),
43970
+ packagingAccoResults.length > 3 &&
43971
+ !isFlyIn &&
43972
+ React__default['default'].createElement(
43973
+ 'div',
43974
+ { className: 'search__results__cards__actions' },
43975
+ React__default['default'].createElement(
43976
+ 'button',
43977
+ {
43978
+ className: 'cta cta--secondary',
43979
+ onClick: function () {
43980
+ return handleShowMoreHotels('acco-results');
43981
+ }
43982
+ },
43983
+ translations.SRP.SHOW_MORE
43984
+ )
43985
+ ),
43771
43986
  mappedResults.length === 0 && !isLoading && React__default['default'].createElement('div', { className: 'no-results' }, translations.SRP.NO_RESULTS)
43772
43987
  );
43773
43988
  };
43774
43989
 
43775
- var FlyIn = function (_a) {
43776
- var title = _a.title,
43777
- srpType = _a.srpType,
43778
- isOpen = _a.isOpen,
43779
- setIsOpen = _a.setIsOpen,
43780
- _b = _a.className,
43781
- className = _b === void 0 ? '' : _b,
43782
- onPanelRef = _a.onPanelRef,
43783
- detailsLoading = _a.detailsLoading,
43784
- accommodationStep = _a.accommodationStep,
43785
- isPackageEditFlow = _a.isPackageEditFlow,
43786
- handleConfirm = _a.handleConfirm;
43787
- var dispatch = reactRedux.useDispatch();
43788
- var onCancelSearch = useFlightSearch().onCancelSearch;
43789
- var panelRef = React.useRef(null);
43790
- // expose DOM node if needed
43791
- React.useEffect(
43792
- function () {
43793
- onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
43794
- return function () {
43795
- return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
43796
- };
43797
- },
43798
- [onPanelRef]
43799
- );
43800
- React.useEffect(
43801
- function () {
43802
- // click outside detection
43803
- var handleClickOutside = function (event) {
43804
- if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
43805
- handleClose();
43806
- }
43807
- };
43808
- document.addEventListener('mousedown', handleClickOutside);
43809
- return function () {
43810
- return document.removeEventListener('mousedown', handleClickOutside);
43811
- };
43812
- },
43813
- [isOpen, setIsOpen]
43814
- );
43815
- // body scroll lock
43816
- React.useEffect(
43817
- function () {
43818
- document.body.style.overflow = isOpen ? 'hidden' : '';
43819
- return function () {
43820
- document.body.style.overflow = '';
43821
- };
43822
- },
43823
- [isOpen]
43824
- );
43825
- var handleClose = function () {
43826
- if (isOpen && panelRef.current) {
43827
- if (srpType === build.PortalQsmType.Flight) {
43828
- dispatch(setSelectedFlight(null));
43829
- dispatch(setSelectedFlightDetails(null));
43830
- onCancelSearch();
43831
- } else {
43832
- dispatch(setSelectedSearchResult(null));
43833
- dispatch(setSelectedPackagingAccoResult(null));
43834
- }
43835
- dispatch(setAccommodationFlyInStep('details'));
43836
- setIsOpen(false);
43990
+ var selectSearchResultsState = function (state) {
43991
+ return state.searchResults;
43992
+ };
43993
+ var selectPackagingAccoResults = toolkit.createSelector([selectSearchResultsState], function (state) {
43994
+ return state.packagingAccoResults;
43995
+ });
43996
+ var selectSelectedPackagingAccoResultCode = toolkit.createSelector([selectSearchResultsState], function (state) {
43997
+ return state.selectedPackagingAccoResultCode;
43998
+ });
43999
+ var selectSelectedPackagingAccoResult = toolkit.createSelector(
44000
+ [selectPackagingAccoResults, selectSelectedPackagingAccoResultCode],
44001
+ function (packagingAccoResults, selectedPackagingAccoResultCode) {
44002
+ var _a;
44003
+ if (!selectedPackagingAccoResultCode) return null;
44004
+ return (_a = packagingAccoResults.find(function (accoResult) {
44005
+ return accoResult.code === selectedPackagingAccoResultCode;
44006
+ })) !== null && _a !== void 0
44007
+ ? _a
44008
+ : null;
44009
+ }
44010
+ );
44011
+ var selectPackagingFlightResults = toolkit.createSelector([selectSearchResultsState], function (state) {
44012
+ return state.packagingFlightResults;
44013
+ });
44014
+ var selectFilteredPackagingFlightResults = toolkit.createSelector([selectSearchResultsState], function (state) {
44015
+ return state.filteredPackagingFlightResults;
44016
+ });
44017
+ var selectSelectedOutwardKey = toolkit.createSelector([selectSearchResultsState], function (state) {
44018
+ return state.selectedOutwardKey;
44019
+ });
44020
+ var selectSelectedReturnKey = toolkit.createSelector([selectSearchResultsState], function (state) {
44021
+ return state.selectedReturnKey;
44022
+ });
44023
+ var selectUniqueOutwardFlights = toolkit.createSelector([selectFilteredPackagingFlightResults], function (packagingFlightResults) {
44024
+ var map = new Map();
44025
+ packagingFlightResults.forEach(function (flight) {
44026
+ var key = getFlightKey(flight.outward.segments);
44027
+ if (!map.has(key)) {
44028
+ map.set(key, flight);
43837
44029
  }
43838
- };
43839
- var handleGoBack = function () {
43840
- dispatch(setAccommodationFlyInStep('results'));
43841
- };
44030
+ });
44031
+ return Array.from(map.values());
44032
+ });
44033
+ var selectUniqueReturnFlights = toolkit.createSelector(
44034
+ [selectFilteredPackagingFlightResults, selectSelectedOutwardKey],
44035
+ function (packagingFlightResults, selectedOutwardKey) {
44036
+ if (!selectedOutwardKey) return [];
44037
+ var matchingCombinations = packagingFlightResults.filter(function (flight) {
44038
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
44039
+ });
44040
+ var map = new Map();
44041
+ matchingCombinations.forEach(function (flight) {
44042
+ var key = getFlightKey(flight.return.segments);
44043
+ if (!map.has(key)) {
44044
+ map.set(key, flight);
44045
+ }
44046
+ });
44047
+ return Array.from(map.values());
44048
+ }
44049
+ );
44050
+ var selectSelectedOutward = toolkit.createSelector(
44051
+ [selectPackagingFlightResults, selectSelectedOutwardKey],
44052
+ function (packagingFlightResults, selectedOutwardKey) {
44053
+ var _a;
44054
+ if (!selectedOutwardKey) return null;
44055
+ return (_a = packagingFlightResults.find(function (flight) {
44056
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
44057
+ })) !== null && _a !== void 0
44058
+ ? _a
44059
+ : null;
44060
+ }
44061
+ );
44062
+ var selectSelectedReturn = toolkit.createSelector(
44063
+ [selectPackagingFlightResults, selectSelectedReturnKey],
44064
+ function (packagingFlightResults, selectedReturnKey) {
44065
+ var _a;
44066
+ if (!selectedReturnKey) return null;
44067
+ return (_a = packagingFlightResults.find(function (flight) {
44068
+ return getFlightKey(flight.return.segments) === selectedReturnKey;
44069
+ })) !== null && _a !== void 0
44070
+ ? _a
44071
+ : null;
44072
+ }
44073
+ );
44074
+ var selectSelectedCombinationFlight = toolkit.createSelector(
44075
+ [selectPackagingFlightResults, selectSelectedOutwardKey, selectSelectedReturnKey],
44076
+ function (packagingFlightResults, selectedOutwardKey, selectedReturnKey) {
44077
+ var _a;
44078
+ if (!selectedOutwardKey || !selectedReturnKey) return null;
44079
+ return (_a = packagingFlightResults.find(function (flight) {
44080
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
44081
+ })) !== null && _a !== void 0
44082
+ ? _a
44083
+ : null;
44084
+ }
44085
+ );
44086
+
44087
+ var IndependentFlightOption = function (_a) {
44088
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
44089
+ var item = _a.item,
44090
+ onSelect = _a.onSelect,
44091
+ guid = _a.guid,
44092
+ selectedGuid = _a.selectedGuid,
44093
+ isOutward = _a.isOutward,
44094
+ showSelectedState = _a.showSelectedState,
44095
+ currentSelectedPrice = _a.currentSelectedPrice,
44096
+ price = _a.price;
44097
+ var context = React.useContext(SearchResultsConfigurationContext);
44098
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44099
+ var translations = getTranslations(language);
44100
+ var _p = React.useState(false),
44101
+ detailsOpen = _p[0],
44102
+ setDetailsOpen = _p[1];
44103
+ var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
43842
44104
  return React__default['default'].createElement(
43843
44105
  'div',
43844
- {
43845
- className: 'flyin '
43846
- .concat(isOpen ? 'flyin--active' : '', ' ')
43847
- .concat(className, ' ')
43848
- .concat(isPackageEditFlow ? 'flyin--large' : '')
43849
- },
44106
+ { className: 'search__result-card', key: 'flight-'.concat(item.code) },
43850
44107
  React__default['default'].createElement(
43851
44108
  'div',
43852
- { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
44109
+ { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
43853
44110
  React__default['default'].createElement(
43854
44111
  'div',
43855
- { className: 'flyin__content' },
44112
+ { className: 'flight__option' },
43856
44113
  React__default['default'].createElement(
43857
44114
  'div',
43858
- { className: 'flyin__content-title-row' },
43859
- React__default['default'].createElement('h3', { className: 'flyin__content-title' }, title),
43860
- React__default['default'].createElement(
43861
- 'span',
43862
- {
43863
- className: 'flyin__close',
43864
- onClick: function () {
43865
- return handleClose();
43866
- }
43867
- },
43868
- React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
43869
- )
43870
- ),
43871
- isPackageEditFlow &&
43872
- accommodationStep === 'details' &&
44115
+ { className: 'flight__content' },
43873
44116
  React__default['default'].createElement(
43874
44117
  'div',
43875
- { className: 'flyin__content-title-row' },
44118
+ { className: 'flight__flights' },
43876
44119
  React__default['default'].createElement(
43877
44120
  'div',
43878
- { onClick: handleGoBack, className: 'flyin__content-title__back' },
43879
- React__default['default'].createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
43880
- 'Go Back'
44121
+ { className: 'flight__flight' },
44122
+ React__default['default'].createElement(
44123
+ 'div',
44124
+ { className: 'flight__flight__header' },
44125
+ React__default['default'].createElement('div', { className: 'flight__status__container' }),
44126
+ React__default['default'].createElement(
44127
+ 'div',
44128
+ { className: 'flight__price' },
44129
+ price != null &&
44130
+ price > 0 &&
44131
+ (isOutward
44132
+ ? React__default['default'].createElement(
44133
+ 'span',
44134
+ { className: 'price' },
44135
+ translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
44136
+ '\u00A0',
44137
+ formatPrice$3(
44138
+ price,
44139
+ 'EUR',
44140
+ (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
44141
+ )
44142
+ )
44143
+ : priceDifference != null &&
44144
+ Math.abs(priceDifference) > 0 &&
44145
+ React__default['default'].createElement(
44146
+ 'span',
44147
+ { className: 'price' },
44148
+ priceDifference > 0 ? '+' : '-',
44149
+ '\u00A0',
44150
+ formatPrice$3(
44151
+ Math.abs(priceDifference),
44152
+ 'EUR',
44153
+ (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
44154
+ )
44155
+ )),
44156
+ React__default['default'].createElement(
44157
+ 'button',
44158
+ {
44159
+ type: 'button',
44160
+ className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
44161
+ onClick: function () {
44162
+ return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
44163
+ }
44164
+ },
44165
+ selectedGuid === guid ? 'Selected' : 'Select'
44166
+ )
44167
+ )
44168
+ )
44169
+ ),
44170
+ React__default['default'].createElement(
44171
+ 'div',
44172
+ { className: 'flight__flight' },
44173
+ React__default['default'].createElement(
44174
+ 'div',
44175
+ { className: 'flight__flight__container' },
44176
+ React__default['default'].createElement(
44177
+ 'div',
44178
+ { className: 'flight__flight__wrapper' },
44179
+ React__default['default'].createElement(
44180
+ 'div',
44181
+ { className: 'flight__logo__wrapper' },
44182
+ React__default['default'].createElement('img', {
44183
+ src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44184
+ (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
44185
+ '.png?height=256'
44186
+ ),
44187
+ alt: '',
44188
+ className: 'flight__logo'
44189
+ }),
44190
+ React__default['default'].createElement(
44191
+ 'span',
44192
+ null,
44193
+ (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName
44194
+ )
44195
+ ),
44196
+ React__default['default'].createElement(
44197
+ 'div',
44198
+ { className: 'flight__info' },
44199
+ React__default['default'].createElement(
44200
+ 'div',
44201
+ { className: 'flight__info__times' },
44202
+ React__default['default'].createElement(
44203
+ 'strong',
44204
+ null,
44205
+ timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
44206
+ ' ',
44207
+ (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
44208
+ ),
44209
+ React__default['default'].createElement(
44210
+ 'p',
44211
+ null,
44212
+ longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
44213
+ )
44214
+ ),
44215
+ React__default['default'].createElement(
44216
+ 'div',
44217
+ { className: 'flight__info__duration' },
44218
+ React__default['default'].createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
44219
+ React__default['default'].createElement(
44220
+ 'div',
44221
+ { className: 'flight__info__duration__stops' },
44222
+ React__default['default'].createElement('div', { className: 'flight__info__duration__stop' })
44223
+ ),
44224
+ React__default['default'].createElement(
44225
+ 'span',
44226
+ null,
44227
+ getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44228
+ )
44229
+ ),
44230
+ React__default['default'].createElement(
44231
+ 'div',
44232
+ { className: 'flight__info__times flight__info__times--arrival' },
44233
+ React__default['default'].createElement(
44234
+ 'strong',
44235
+ null,
44236
+ timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
44237
+ ' ',
44238
+ (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
44239
+ ),
44240
+ React__default['default'].createElement(
44241
+ 'p',
44242
+ null,
44243
+ longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
44244
+ )
44245
+ )
44246
+ )
44247
+ ),
44248
+ React__default['default'].createElement(
44249
+ 'div',
44250
+ { className: 'flight__detail__btn__wrapper' },
44251
+ React__default['default'].createElement(
44252
+ 'div',
44253
+ {
44254
+ className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
44255
+ onClick: function () {
44256
+ return setDetailsOpen(function (prev) {
44257
+ return !prev;
44258
+ });
44259
+ }
44260
+ },
44261
+ React__default['default'].createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44262
+ )
44263
+ )
44264
+ ),
44265
+ React__default['default'].createElement(
44266
+ 'div',
44267
+ { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
44268
+ (_o = getFlightSegments(item)) === null || _o === void 0
44269
+ ? void 0
44270
+ : _o.map(function (segment, index) {
44271
+ return React__default['default'].createElement(
44272
+ React__default['default'].Fragment,
44273
+ { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44274
+ React__default['default'].createElement(
44275
+ 'div',
44276
+ { className: 'flight__info' },
44277
+ React__default['default'].createElement(
44278
+ 'div',
44279
+ { className: 'flight__info__times__wrapper' },
44280
+ React__default['default'].createElement(
44281
+ 'div',
44282
+ { className: 'flight__info__times' },
44283
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44284
+ React__default['default'].createElement('strong', null, segment.departureAirportCode),
44285
+ React__default['default'].createElement('p', null, longFormatDate(segment.departureDateTime, language))
44286
+ ),
44287
+ React__default['default'].createElement(
44288
+ 'div',
44289
+ null,
44290
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
44291
+ )
44292
+ ),
44293
+ React__default['default'].createElement(
44294
+ 'div',
44295
+ { className: 'flight__info__duration' },
44296
+ React__default['default'].createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44297
+ React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
44298
+ React__default['default'].createElement('span', null, segment.marketingAirlineName),
44299
+ React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
44300
+ ),
44301
+ React__default['default'].createElement(
44302
+ 'div',
44303
+ { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44304
+ React__default['default'].createElement(
44305
+ 'div',
44306
+ null,
44307
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
44308
+ ),
44309
+ React__default['default'].createElement(
44310
+ 'div',
44311
+ { className: 'flight__info__times flight__info__times--arrival' },
44312
+ React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44313
+ React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
44314
+ React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44315
+ )
44316
+ )
44317
+ ),
44318
+ segment.transferTimeInTicks &&
44319
+ React__default['default'].createElement(
44320
+ 'div',
44321
+ { className: 'flight__info' },
44322
+ React__default['default'].createElement('div', { className: 'flight__info__times' }),
44323
+ React__default['default'].createElement(
44324
+ 'div',
44325
+ { className: 'flight__info__duration flight__info__duration--waittime' },
44326
+ React__default['default'].createElement(
44327
+ 'div',
44328
+ { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44329
+ React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44330
+ ),
44331
+ React__default['default'].createElement(
44332
+ 'div',
44333
+ { className: 'flight__info__duration__stoptime' },
44334
+ React__default['default'].createElement('span', null, 'Stop time'),
44335
+ React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44336
+ )
44337
+ ),
44338
+ React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44339
+ )
44340
+ );
44341
+ })
44342
+ )
43881
44343
  )
43882
44344
  )
43883
- ),
43884
- srpType === build.PortalQsmType.Flight && React__default['default'].createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
43885
- (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43886
- accommodationStep === 'results' &&
43887
- React__default['default'].createElement(
43888
- 'div',
43889
- { className: 'flyin__content' },
43890
- React__default['default'].createElement(HotelAccommodationResults, { isLoading: detailsLoading })
44345
+ )
44346
+ )
44347
+ )
44348
+ );
44349
+ };
44350
+
44351
+ var MultiRangeFilter = function (_a) {
44352
+ var min = _a.min,
44353
+ max = _a.max,
44354
+ selectedMin = _a.selectedMin,
44355
+ selectedMax = _a.selectedMax,
44356
+ valueFormatter = _a.valueFormatter,
44357
+ onChange = _a.onChange;
44358
+ var _b = React.useState(false),
44359
+ isDragging = _b[0],
44360
+ setIsDragging = _b[1];
44361
+ var _c = React.useState(0),
44362
+ leftPercentage = _c[0],
44363
+ setLeftPercentage = _c[1];
44364
+ var _d = React.useState(0),
44365
+ rightPercentage = _d[0],
44366
+ setRightPercentage = _d[1];
44367
+ var _e = React.useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
44368
+ minVal = _e[0],
44369
+ setMinVal = _e[1];
44370
+ var _f = React.useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
44371
+ maxVal = _f[0],
44372
+ setMaxVal = _f[1];
44373
+ var minGap = 5;
44374
+ // Sync internal state with external selectedMin/selectedMax changes
44375
+ React.useEffect(
44376
+ function () {
44377
+ setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
44378
+ setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
44379
+ },
44380
+ [min, max, selectedMin, selectedMax]
44381
+ );
44382
+ // Recalculate slider track whenever values change
44383
+ React.useEffect(
44384
+ function () {
44385
+ var range = max - min || 1;
44386
+ var minPercent = ((minVal - min) / range) * 100;
44387
+ var maxPercent = ((maxVal - min) / range) * 100;
44388
+ setLeftPercentage(minPercent);
44389
+ setRightPercentage(100 - maxPercent);
44390
+ },
44391
+ [minVal, maxVal, min, max]
44392
+ );
44393
+ var slideMin = function (e) {
44394
+ var value = parseInt(e.target.value, 10);
44395
+ // Ensure the thumbs don’t cross and enforce minGap
44396
+ if (value <= maxVal - minGap) {
44397
+ setMinVal(value);
44398
+ }
44399
+ };
44400
+ var slideMax = function (e) {
44401
+ var value = parseInt(e.target.value, 10);
44402
+ // Ensure the thumbs don’t cross and enforce minGap
44403
+ if (value >= minVal + minGap) {
44404
+ setMaxVal(value);
44405
+ }
44406
+ };
44407
+ var startDrag = function () {
44408
+ setIsDragging(true);
44409
+ };
44410
+ var stopDrag = function () {
44411
+ setIsDragging(false);
44412
+ // Notify parent with the final values
44413
+ onChange(minVal, maxVal);
44414
+ };
44415
+ return React__default['default'].createElement(
44416
+ 'div',
44417
+ { className: 'double-slider-box' },
44418
+ React__default['default'].createElement(
44419
+ 'div',
44420
+ { className: 'input-box' },
44421
+ React__default['default'].createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
44422
+ React__default['default'].createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
44423
+ ),
44424
+ React__default['default'].createElement(
44425
+ 'div',
44426
+ { className: 'range-slider' },
44427
+ React__default['default'].createElement('div', {
44428
+ className: 'slider-track',
44429
+ style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
44430
+ }),
44431
+ React__default['default'].createElement('input', {
44432
+ type: 'range',
44433
+ min: min,
44434
+ max: max,
44435
+ value: minVal,
44436
+ onChange: slideMin,
44437
+ onMouseDown: startDrag,
44438
+ onMouseUp: stopDrag,
44439
+ onTouchStart: startDrag,
44440
+ onTouchEnd: stopDrag,
44441
+ className: 'min-val'
44442
+ }),
44443
+ React__default['default'].createElement('input', {
44444
+ type: 'range',
44445
+ min: min,
44446
+ max: max,
44447
+ value: maxVal,
44448
+ onChange: slideMax,
44449
+ onMouseDown: startDrag,
44450
+ onMouseUp: stopDrag,
44451
+ onTouchStart: startDrag,
44452
+ onTouchEnd: stopDrag,
44453
+ className: 'max-val'
44454
+ }),
44455
+ isDragging && React__default['default'].createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
44456
+ isDragging && React__default['default'].createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
44457
+ )
44458
+ );
44459
+ };
44460
+
44461
+ var Filters = function (_a) {
44462
+ var _b;
44463
+ var initialFilters = _a.initialFilters,
44464
+ filters = _a.filters,
44465
+ isOpen = _a.isOpen,
44466
+ handleSetIsOpen = _a.handleSetIsOpen,
44467
+ isLoading = _a.isLoading,
44468
+ setFilters = _a.setFilters,
44469
+ resetFilters = _a.resetFilters;
44470
+ var context = React.useContext(SearchResultsConfigurationContext);
44471
+ if (!context || !context.showFilters) {
44472
+ return null;
44473
+ }
44474
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44475
+ var _c = React.useState({}),
44476
+ visibleFilters = _c[0],
44477
+ setVisibleFilters = _c[1];
44478
+ var toggleFilterVisibility = function (filterId) {
44479
+ setVisibleFilters(function (prev) {
44480
+ var _a;
44481
+ return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
44482
+ });
44483
+ };
44484
+ var handleCheckBoxFilter = function (filter, option) {
44485
+ var updated = filters.map(function (f) {
44486
+ var _a;
44487
+ if (f.property !== filter.property) return f;
44488
+ return __assign(__assign({}, f), {
44489
+ options:
44490
+ (_a = f.options) === null || _a === void 0
44491
+ ? void 0
44492
+ : _a.map(function (opt) {
44493
+ return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
44494
+ })
44495
+ });
44496
+ });
44497
+ setFilters(updated);
44498
+ };
44499
+ var handleSliderChange = function (filter, newMin, newMax) {
44500
+ var updated = filters.map(function (f) {
44501
+ if (f.property !== filter.property) return f;
44502
+ return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
44503
+ });
44504
+ setFilters(updated);
44505
+ };
44506
+ var handleFullReset = function () {
44507
+ if (!isLoading) {
44508
+ resetFilters(initialFilters);
44509
+ }
44510
+ };
44511
+ return React__default['default'].createElement(
44512
+ 'div',
44513
+ { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
44514
+ React__default['default'].createElement('div', {
44515
+ className: 'search__filters--background',
44516
+ onClick: function () {
44517
+ return handleSetIsOpen();
44518
+ }
44519
+ }),
44520
+ React__default['default'].createElement(
44521
+ 'button',
44522
+ {
44523
+ className: 'search__filters--close',
44524
+ onClick: function () {
44525
+ return handleSetIsOpen();
44526
+ }
44527
+ },
44528
+ React__default['default'].createElement(Icon$1, { name: 'ui-close', height: 24 })
44529
+ ),
44530
+ React__default['default'].createElement(
44531
+ 'div',
44532
+ { className: 'search__filters' },
44533
+ React__default['default'].createElement(
44534
+ 'div',
44535
+ { className: 'search__filter-row search__filter__header' },
44536
+ React__default['default'].createElement(
44537
+ 'div',
44538
+ { className: 'search__filter-row-flex-title' },
44539
+ React__default['default'].createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
44540
+ ),
44541
+ !isLoading &&
44542
+ React__default['default'].createElement(
44543
+ 'a',
44544
+ {
44545
+ className: 'search__filter-reset',
44546
+ onClick: function () {
44547
+ return handleFullReset();
44548
+ }
44549
+ },
44550
+ translations.SRP.RESET
44551
+ )
44552
+ ),
44553
+ isLoading
44554
+ ? React__default['default'].createElement(Spinner, null)
44555
+ : React__default['default'].createElement(
44556
+ React__default['default'].Fragment,
44557
+ null,
44558
+ React__default['default'].createElement(
44559
+ 'div',
44560
+ { className: 'search__filters__group-container' },
44561
+ filters.map(function (filter, index) {
44562
+ var _a, _b;
44563
+ var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
44564
+ return React__default['default'].createElement(
44565
+ 'div',
44566
+ { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
44567
+ React__default['default'].createElement(
44568
+ 'div',
44569
+ {
44570
+ className: 'search__filter-row search__filter-row--underline',
44571
+ onClick: function () {
44572
+ return toggleFilterVisibility(filter.property);
44573
+ },
44574
+ role: 'button',
44575
+ tabIndex: 0
44576
+ },
44577
+ React__default['default'].createElement('h6', { className: 'search__filter-large-title' }, filter.label),
44578
+ React__default['default'].createElement(
44579
+ 'svg',
44580
+ {
44581
+ id: 'search-chevron-up-icon',
44582
+ className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
44583
+ viewBox: '0 0 10 6.063',
44584
+ width: 10,
44585
+ height: 6.063
44586
+ },
44587
+ React__default['default'].createElement('path', {
44588
+ id: 'Path_62',
44589
+ 'data-name': 'Path 62',
44590
+ d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
44591
+ transform: 'translate(-240 624)',
44592
+ fill: '#707070'
44593
+ })
44594
+ )
44595
+ ),
44596
+ isVisible &&
44597
+ filter.type === 'checkbox' &&
44598
+ React__default['default'].createElement(
44599
+ 'div',
44600
+ { className: 'search__filter-rows' },
44601
+ filter.options &&
44602
+ filter.options.map(function (option, optionIndex) {
44603
+ return React__default['default'].createElement(
44604
+ 'div',
44605
+ { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
44606
+ React__default['default'].createElement(
44607
+ 'div',
44608
+ { className: 'checkbox' },
44609
+ React__default['default'].createElement(
44610
+ 'label',
44611
+ { className: 'checkbox__label' },
44612
+ React__default['default'].createElement('input', {
44613
+ type: 'checkbox',
44614
+ className: 'checkbox__input checkbox__input--parent',
44615
+ checked: option.isChecked,
44616
+ onChange: function (e) {
44617
+ return handleCheckBoxFilter(filter, option);
44618
+ }
44619
+ }),
44620
+ React__default['default'].createElement('span', { className: 'radiobutton__label-text' }, option.label)
44621
+ )
44622
+ )
44623
+ );
44624
+ })
44625
+ ),
44626
+ isVisible &&
44627
+ filter.type === 'toggle' &&
44628
+ React__default['default'].createElement(
44629
+ 'div',
44630
+ { className: 'search__filter-rows' },
44631
+ (_b = filter.options) === null || _b === void 0
44632
+ ? void 0
44633
+ : _b.map(function (option, optionIndex) {
44634
+ return React__default['default'].createElement(
44635
+ 'div',
44636
+ { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
44637
+ React__default['default'].createElement('span', { className: 'search__filter-toggle-label' }, option.label),
44638
+ React__default['default'].createElement('div', { className: 'checkbox' }),
44639
+ React__default['default'].createElement(
44640
+ 'label',
44641
+ { className: 'checkbox__label' },
44642
+ React__default['default'].createElement('input', {
44643
+ type: 'checkbox',
44644
+ className: 'checkbox__input',
44645
+ checked: option.isChecked,
44646
+ onChange: function () {
44647
+ return handleCheckBoxFilter(filter, option);
44648
+ }
44649
+ })
44650
+ )
44651
+ );
44652
+ })
44653
+ ),
44654
+ isVisible &&
44655
+ filter &&
44656
+ filter.type === 'slider' &&
44657
+ (function () {
44658
+ var _a, _b, _c, _d;
44659
+ var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
44660
+ var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
44661
+ var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
44662
+ var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
44663
+ return React__default['default'].createElement(MultiRangeFilter, {
44664
+ min: min,
44665
+ max: max,
44666
+ selectedMin: selectedMin,
44667
+ selectedMax: selectedMax,
44668
+ valueFormatter: function (value) {
44669
+ return ''.concat(value);
44670
+ },
44671
+ onChange: function (newMin, newMax) {
44672
+ handleSliderChange(filter, newMin, newMax);
44673
+ }
44674
+ });
44675
+ })()
44676
+ );
44677
+ })
44678
+ )
44679
+ )
44680
+ )
44681
+ );
44682
+ };
44683
+
44684
+ var PackageingFlightsFlyIn = function (_a) {
44685
+ var _b;
44686
+ _a.isOpen;
44687
+ _a.setIsOpen;
44688
+ var context = React.useContext(SearchResultsConfigurationContext);
44689
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44690
+ var translations = getTranslations(language);
44691
+ var dispatch = reactRedux.useDispatch();
44692
+ var _c = reactRedux.useSelector(function (state) {
44693
+ return state.searchResults;
44694
+ }),
44695
+ flightsLoading = _c.flightsLoading,
44696
+ initialFlightFilters = _c.initialFlightFilters,
44697
+ flightFilters = _c.flightFilters,
44698
+ flyInType = _c.flyInType,
44699
+ selectedFlightSortType = _c.selectedFlightSortType;
44700
+ var uniqueOutwardFlights = reactRedux.useSelector(selectUniqueOutwardFlights);
44701
+ var uniqueReturnFlights = reactRedux.useSelector(selectUniqueReturnFlights);
44702
+ var selectedOutward = reactRedux.useSelector(selectSelectedOutward);
44703
+ var selectedReturn = reactRedux.useSelector(selectSelectedReturn);
44704
+ var _d = React.useState(false),
44705
+ outwardStepComplete = _d[0],
44706
+ setOutwardStepComplete = _d[1];
44707
+ var handleConfirm = function () {
44708
+ if (!outwardStepComplete) {
44709
+ setOutwardStepComplete(true);
44710
+ dispatch(setFlyInType('flight-return-results'));
44711
+ return;
44712
+ } else {
44713
+ dispatch(setFlyInType(null));
44714
+ setOutwardStepComplete(false);
44715
+ dispatch(setFlyInIsOpen(false));
44716
+ }
44717
+ };
44718
+ var sortByTypes = [
44719
+ { direction: 'asc', label: 'default' },
44720
+ { direction: 'asc', label: 'price' },
44721
+ { direction: 'desc', label: 'price' },
44722
+ { direction: 'asc', label: 'departureTime' },
44723
+ { direction: 'desc', label: 'departureTime' },
44724
+ { direction: 'asc', label: 'durationInTicks' },
44725
+ { direction: 'desc', label: 'durationInTicks' }
44726
+ ];
44727
+ var handleSortChange = function (newSortKey, direction) {
44728
+ if (sortByTypes === undefined) return;
44729
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
44730
+ if (newSortByType) {
44731
+ dispatch(setFlightSortType(newSortByType));
44732
+ }
44733
+ };
44734
+ return React__default['default'].createElement(
44735
+ React__default['default'].Fragment,
44736
+ null,
44737
+ React__default['default'].createElement(
44738
+ 'div',
44739
+ { className: 'flyin__content flyin__content--columns' },
44740
+ flightsLoading
44741
+ ? React__default['default'].createElement(Spinner, null)
44742
+ : React__default['default'].createElement(
44743
+ React__default['default'].Fragment,
44744
+ null,
44745
+ React__default['default'].createElement(Filters, {
44746
+ initialFilters: initialFlightFilters,
44747
+ filters: flightFilters,
44748
+ isOpen: false,
44749
+ handleSetIsOpen: function () {},
44750
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
44751
+ isLoading: flightsLoading,
44752
+ setFilters: function (filters) {
44753
+ return dispatch(setFlightFilters(filters));
44754
+ },
44755
+ resetFilters: function (filters) {
44756
+ return dispatch(resetFlightFilters(filters));
44757
+ }
44758
+ }),
44759
+ React__default['default'].createElement(
44760
+ 'div',
44761
+ { className: 'search__results__wrapper' },
44762
+ React__default['default'].createElement(
44763
+ 'div',
44764
+ { className: 'search__result-row' },
44765
+ React__default['default'].createElement(
44766
+ 'span',
44767
+ { className: 'search__result-row-text' },
44768
+ (uniqueOutwardFlights === null || uniqueOutwardFlights === void 0 ? void 0 : uniqueOutwardFlights.length) && uniqueOutwardFlights.length,
44769
+ '\u00A0',
44770
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_2,
44771
+ '\u00A0',
44772
+ translations.FLIGHTS_FORM.FLIGHTS_FOUND_3
44773
+ ),
44774
+ sortByTypes &&
44775
+ sortByTypes.length > 0 &&
44776
+ React__default['default'].createElement(
44777
+ 'div',
44778
+ { className: 'search__result-row-filter' },
44779
+ React__default['default'].createElement(ItemPicker, {
44780
+ items: sortByTypes,
44781
+ selection: (selectedFlightSortType === null || selectedFlightSortType === void 0 ? void 0 : selectedFlightSortType.label) || undefined,
44782
+ selectedSortByType: selectedFlightSortType || undefined,
44783
+ label: translations.SRP.SORTBY,
44784
+ placeholder: translations.SRP.SORTBY,
44785
+ classModifier: '',
44786
+ valueFormatter: function (value, direction) {
44787
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
44788
+ },
44789
+ // onPick={handleSortChange}
44790
+ onPick: function (newSortKey, direction) {
44791
+ return handleSortChange(newSortKey, direction);
44792
+ }
44793
+ })
44794
+ )
44795
+ ),
44796
+ React__default['default'].createElement(
44797
+ 'div',
44798
+ { className: 'search__results__cards search__results__cards--extended' },
44799
+ flyInType == 'flight-outward-results' &&
44800
+ uniqueOutwardFlights.map(function (result) {
44801
+ return React__default['default'].createElement(IndependentFlightOption, {
44802
+ key: 'flight-'.concat(result.outwardGuid),
44803
+ item: result.outward,
44804
+ onSelect: function () {
44805
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
44806
+ },
44807
+ guid: result.outwardGuid,
44808
+ isOutward: true,
44809
+ price: result.price,
44810
+ currentSelectedPrice: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.price,
44811
+ selectedGuid: selectedOutward === null || selectedOutward === void 0 ? void 0 : selectedOutward.outwardGuid,
44812
+ showSelectedState: true
44813
+ });
44814
+ }),
44815
+ flyInType == 'flight-return-results' &&
44816
+ uniqueReturnFlights.map(function (result) {
44817
+ return React__default['default'].createElement(IndependentFlightOption, {
44818
+ key: 'flight-'.concat(result.outwardGuid),
44819
+ item: result.return,
44820
+ onSelect: function () {
44821
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
44822
+ },
44823
+ guid: result.outwardGuid,
44824
+ isOutward: false,
44825
+ price: result.price,
44826
+ currentSelectedPrice: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.price,
44827
+ selectedGuid: selectedReturn === null || selectedReturn === void 0 ? void 0 : selectedReturn.outwardGuid,
44828
+ showSelectedState: true
44829
+ });
44830
+ })
44831
+ )
44832
+ )
44833
+ )
44834
+ ),
44835
+ React__default['default'].createElement(
44836
+ 'div',
44837
+ { className: 'flyin__footer' },
44838
+ React__default['default'].createElement('div', { className: 'flyin__footer__price' }),
44839
+ React__default['default'].createElement(
44840
+ 'div',
44841
+ { className: 'flyin__button-wrapper' },
44842
+ React__default['default'].createElement(
44843
+ 'button',
44844
+ {
44845
+ className: 'cta cta--select',
44846
+ onClick: function () {
44847
+ return handleConfirm();
44848
+ }
44849
+ },
44850
+ translations.QSM.CONFIRM
44851
+ )
44852
+ )
44853
+ )
44854
+ );
44855
+ };
44856
+
44857
+ var ExcursionResults = function (_a) {
44858
+ var _b;
44859
+ _a.isFlyIn;
44860
+ var activeSearchSeed = _a.activeSearchSeed;
44861
+ var context = React.useContext(SearchResultsConfigurationContext);
44862
+ var dispatch = reactRedux.useDispatch();
44863
+ var _c = React.useState(false),
44864
+ isLoading = _c[0],
44865
+ setIsLoading = _c[1];
44866
+ var _d = React.useState(null),
44867
+ excursions = _d[0],
44868
+ setExcursions = _d[1];
44869
+ var _e = reactRedux.useSelector(function (state) {
44870
+ return state.searchResults;
44871
+ }),
44872
+ flyInIsOpen = _e.flyInIsOpen,
44873
+ flyInType = _e.flyInType,
44874
+ excursionSearchParams = _e.excursionSearchParams,
44875
+ transactionId = _e.transactionId;
44876
+ React.useEffect(
44877
+ function () {
44878
+ if (!context || !activeSearchSeed || !excursionSearchParams) return;
44879
+ (function () {
44880
+ return __awaiter(void 0, void 0, void 0, function () {
44881
+ var config, destination, allPax, searchRequest, packageExcursionSearchResults, err_1;
44882
+ var _a, _b, _c, _d, _e;
44883
+ return __generator(this, function (_f) {
44884
+ switch (_f.label) {
44885
+ case 0:
44886
+ _f.trys.push([0, 2, 3, 4]);
44887
+ setIsLoading(true);
44888
+ console.log('Excursion search params changed, fetching excursions...', excursionSearchParams);
44889
+ config = {
44890
+ host: context.tideConnection.host,
44891
+ apiKey: context.tideConnection.apiKey
44892
+ };
44893
+ destination = excursionSearchParams.locationId
44894
+ ? { id: Number(excursionSearchParams.locationId), type: 'location' }
44895
+ : excursionSearchParams.oordId
44896
+ ? { id: Number(excursionSearchParams.oordId), type: 'oord' }
44897
+ : excursionSearchParams.regionId
44898
+ ? { id: Number(excursionSearchParams.regionId), type: 'region' }
44899
+ : excursionSearchParams.countryId
44900
+ ? { id: Number(excursionSearchParams.countryId), type: 'country' }
44901
+ : { id: 0, type: null };
44902
+ allPax = activeSearchSeed.rooms.flatMap(function (room) {
44903
+ return room.pax;
44904
+ });
44905
+ searchRequest = {
44906
+ transactionId: transactionId !== null && transactionId !== void 0 ? transactionId : '',
44907
+ officeId: (_a = context.tideConnection.officeId) !== null && _a !== void 0 ? _a : 1,
44908
+ agentId: (_b = context.agentId) !== null && _b !== void 0 ? _b : null,
44909
+ portalId: (_c = context.portalId) !== null && _c !== void 0 ? _c : null,
44910
+ catalogueId: (_d = context.searchConfiguration.defaultCatalogueId) !== null && _d !== void 0 ? _d : 0,
44911
+ searchConfigurationId: context.searchConfiguration.id,
44912
+ language: (_e = context.languageCode) !== null && _e !== void 0 ? _e : 'en-GB',
44913
+ serviceType: EXCURSION_SERVICE_TYPE,
44914
+ fromDate: excursionSearchParams.fromDate,
44915
+ toDate: excursionSearchParams.toDate,
44916
+ destination: {
44917
+ id: destination.id,
44918
+ isCountry: destination.type === 'country',
44919
+ isRegion: destination.type === 'region',
44920
+ isOord: destination.type === 'oord',
44921
+ isLocation: destination.type === 'location',
44922
+ isAirport: false,
44923
+ code: ''
44924
+ },
44925
+ productCode: '',
44926
+ // rooms: activeSearchSeed.rooms.map((room) => ({
44927
+ // travellers: room.pax.map((pax) => ({
44928
+ // id: pax.id,
44929
+ // age: pax.age,
44930
+ // dateOfBirth: pax.dateOfBirth
44931
+ // }))
44932
+ // })),
44933
+ rooms: [
44934
+ {
44935
+ travellers: allPax.map(function (pax) {
44936
+ return {
44937
+ id: pax.id,
44938
+ age: pax.age,
44939
+ dateOfBirth: pax.dateOfBirth
44940
+ };
44941
+ })
44942
+ }
44943
+ ],
44944
+ tagIds: []
44945
+ };
44946
+ return [4 /*yield*/, build.searchPackagingExcursions(config, searchRequest)];
44947
+ case 1:
44948
+ packageExcursionSearchResults = _f.sent();
44949
+ console.log('Excursion search results', packageExcursionSearchResults);
44950
+ setExcursions(packageExcursionSearchResults);
44951
+ return [3 /*break*/, 4];
44952
+ case 2:
44953
+ err_1 = _f.sent();
44954
+ console.error('Excursion search failed', err_1);
44955
+ return [3 /*break*/, 4];
44956
+ case 3:
44957
+ setIsLoading(false);
44958
+ return [7 /*endfinally*/];
44959
+ case 4:
44960
+ return [2 /*return*/];
44961
+ }
44962
+ });
44963
+ });
44964
+ })();
44965
+ },
44966
+ [context, activeSearchSeed, excursionSearchParams, transactionId]
44967
+ );
44968
+ if (!context || !activeSearchSeed) {
44969
+ return null;
44970
+ }
44971
+ if (!flyInIsOpen || flyInType !== 'excursion-results') {
44972
+ return null;
44973
+ }
44974
+ var translations = getTranslations((_b = context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
44975
+ var handleChange = function (excursion) {
44976
+ console.log('Selected excursion', excursion);
44977
+ dispatch(setFlyInType('excursion-details'));
44978
+ dispatch(setSelectedExcursionSearchResult(excursion));
44979
+ };
44980
+ return isLoading
44981
+ ? React__default['default'].createElement(Spinner, null)
44982
+ : React__default['default'].createElement(
44983
+ 'div',
44984
+ { className: 'flyin__content flyin__content--columns' },
44985
+ React__default['default'].createElement(
44986
+ 'div',
44987
+ { className: 'search__results__wrapper' },
44988
+ React__default['default'].createElement(
44989
+ 'div',
44990
+ { className: 'search__result-row' },
44991
+ React__default['default'].createElement(
44992
+ 'span',
44993
+ { className: 'search__result-row-text' },
44994
+ !isLoading &&
44995
+ React__default['default'].createElement(
44996
+ React__default['default'].Fragment,
44997
+ null,
44998
+ (excursions === null || excursions === void 0 ? void 0 : excursions.length) && excursions.length,
44999
+ '\u00A0',
45000
+ translations.SRP.TOTAL_RESULTS_LABEL
45001
+ )
45002
+ )
45003
+ ),
45004
+ React__default['default'].createElement(
45005
+ 'div',
45006
+ { className: 'search__results__cards search__results__cards--compact' },
45007
+ excursions &&
45008
+ excursions.length > 0 &&
45009
+ excursions.map(function (excursion) {
45010
+ return React__default['default'].createElement(
45011
+ 'div',
45012
+ {
45013
+ key: excursion.code,
45014
+ className: 'search__result-card__wrapper search__result-card__wrapper--custom',
45015
+ onMouseEnter: function (e) {
45016
+ return (e.currentTarget.style.transform = 'scale(1.02)');
45017
+ },
45018
+ onMouseLeave: function (e) {
45019
+ return (e.currentTarget.style.transform = 'scale(1)');
45020
+ }
45021
+ },
45022
+ excursion.contents
45023
+ ? React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: he.decode(excursion.contents) } })
45024
+ : 'no contents',
45025
+ React__default['default'].createElement(
45026
+ 'div',
45027
+ { className: 'search__result-card__footer' },
45028
+ React__default['default'].createElement(
45029
+ 'button',
45030
+ {
45031
+ type: 'button',
45032
+ className: 'cta cta--select',
45033
+ onClick: function () {
45034
+ return handleChange(excursion);
45035
+ }
45036
+ },
45037
+ translations === null || translations === void 0 ? void 0 : translations.SHARED.SELECT
45038
+ )
45039
+ )
45040
+ );
45041
+ })
45042
+ )
45043
+ )
45044
+ );
45045
+ };
45046
+
45047
+ var formatPrice = function (price, currencyCode) {
45048
+ if (typeof price !== 'number') return '';
45049
+ return new Intl.NumberFormat('nl-BE', {
45050
+ style: 'currency',
45051
+ currency: currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR'
45052
+ }).format(price);
45053
+ };
45054
+ var getExcursionDayKey = function (date) {
45055
+ var parsed = typeof date === 'string' ? dateFns.parseISO(date) : date;
45056
+ return dateFns.format(parsed, 'yyyy-MM-dd');
45057
+ };
45058
+ var getOptionPaxIds = function (option) {
45059
+ return Array.isArray(option.paxIds)
45060
+ ? Array.from(new Set(option.paxIds)).sort(function (a, b) {
45061
+ return a - b;
45062
+ })
45063
+ : [];
45064
+ };
45065
+ var optionAppliesToPax = function (option, paxId) {
45066
+ return getOptionPaxIds(option).includes(paxId);
45067
+ };
45068
+ var optionAppliesToAllTravellers = function (option, travellerCount) {
45069
+ var paxIds = getOptionPaxIds(option);
45070
+ var expected = Array.from({ length: travellerCount }, function (_, i) {
45071
+ return i;
45072
+ });
45073
+ return (
45074
+ paxIds.length === expected.length &&
45075
+ paxIds.every(function (id, index) {
45076
+ return id === expected[index];
45077
+ })
45078
+ );
45079
+ };
45080
+ var groupOptionsByExcursion = function (options) {
45081
+ var groupedMap = new Map();
45082
+ options.forEach(function (option) {
45083
+ var key = option.accommodationCode;
45084
+ if (!groupedMap.has(key)) {
45085
+ groupedMap.set(key, {
45086
+ accommodationCode: option.accommodationCode,
45087
+ accommodationName: option.accommodationName,
45088
+ options: []
45089
+ });
45090
+ }
45091
+ groupedMap.get(key).options.push(option);
45092
+ });
45093
+ return Array.from(groupedMap.values());
45094
+ };
45095
+ var ExcursionDetails = function () {
45096
+ var _a;
45097
+ var context = React.useContext(SearchResultsConfigurationContext);
45098
+ var dispatch = reactRedux.useDispatch();
45099
+ var _b = reactRedux.useSelector(function (state) {
45100
+ return state.searchResults;
45101
+ }),
45102
+ selectedExcursionSearchResult = _b.selectedExcursionSearchResult,
45103
+ editablePackagingEntry = _b.editablePackagingEntry,
45104
+ excursionSearchParams = _b.excursionSearchParams;
45105
+ if (
45106
+ !context ||
45107
+ !selectedExcursionSearchResult ||
45108
+ !editablePackagingEntry ||
45109
+ !(excursionSearchParams === null || excursionSearchParams === void 0 ? void 0 : excursionSearchParams.date)
45110
+ ) {
45111
+ return null;
45112
+ }
45113
+ var translations = getTranslations((_a = context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
45114
+ var travellerCount = editablePackagingEntry.pax.length;
45115
+ var allOptions = React.useMemo(
45116
+ function () {
45117
+ return selectedExcursionSearchResult.rooms.flatMap(function (room) {
45118
+ var _a;
45119
+ return (_a = room.options) !== null && _a !== void 0 ? _a : [];
45120
+ });
45121
+ },
45122
+ [selectedExcursionSearchResult]
45123
+ );
45124
+ var sharedOptions = React.useMemo(
45125
+ function () {
45126
+ return allOptions.filter(function (option) {
45127
+ return optionAppliesToAllTravellers(option, travellerCount);
45128
+ });
45129
+ },
45130
+ [allOptions, travellerCount]
45131
+ );
45132
+ var sharedExcursions = React.useMemo(
45133
+ function () {
45134
+ return groupOptionsByExcursion(sharedOptions);
45135
+ },
45136
+ [sharedOptions]
45137
+ );
45138
+ var paxGroups = React.useMemo(
45139
+ function () {
45140
+ return editablePackagingEntry.pax.map(function (pax) {
45141
+ var paxOptions = allOptions.filter(function (option) {
45142
+ return optionAppliesToPax(option, pax.id) && !optionAppliesToAllTravellers(option, travellerCount);
45143
+ });
45144
+ return {
45145
+ pax: pax,
45146
+ paxId: pax.id,
45147
+ excursions: groupOptionsByExcursion(paxOptions)
45148
+ };
45149
+ });
45150
+ },
45151
+ [editablePackagingEntry.pax, allOptions, travellerCount]
45152
+ );
45153
+ var getSelectedSharedOption = function () {
45154
+ return sharedOptions.find(function (option) {
45155
+ return option.isSelected;
45156
+ });
45157
+ };
45158
+ var getSelectedSharedOptionForExcursion = function (accommodationCode) {
45159
+ return sharedOptions.find(function (option) {
45160
+ return option.accommodationCode === accommodationCode && option.isSelected;
45161
+ });
45162
+ };
45163
+ var getSelectedOptionForPax = function (paxId) {
45164
+ return allOptions.find(function (option) {
45165
+ return optionAppliesToPax(option, paxId) && !optionAppliesToAllTravellers(option, travellerCount) && option.isSelected;
45166
+ });
45167
+ };
45168
+ var getSelectedOptionForExcursion = function (paxId, accommodationCode) {
45169
+ return allOptions.find(function (option) {
45170
+ return (
45171
+ optionAppliesToPax(option, paxId) &&
45172
+ !optionAppliesToAllTravellers(option, travellerCount) &&
45173
+ option.accommodationCode === accommodationCode &&
45174
+ option.isSelected
45175
+ );
45176
+ });
45177
+ };
45178
+ var handlePick = function (selectedGuid, paxId) {
45179
+ var updatedExcursionSearchResult = __assign(__assign({}, selectedExcursionSearchResult), {
45180
+ rooms: selectedExcursionSearchResult.rooms.map(function (room) {
45181
+ return __assign(__assign({}, room), {
45182
+ options: room.options.map(function (option) {
45183
+ var isSharedOption = optionAppliesToAllTravellers(option, travellerCount);
45184
+ if (paxId === undefined) {
45185
+ if (!isSharedOption) {
45186
+ return option;
45187
+ }
45188
+ return __assign(__assign({}, option), { isSelected: option.guid === selectedGuid });
45189
+ }
45190
+ if (isSharedOption || !optionAppliesToPax(option, paxId)) {
45191
+ return option;
45192
+ }
45193
+ return __assign(__assign({}, option), { isSelected: option.guid === selectedGuid });
45194
+ })
45195
+ });
45196
+ })
45197
+ });
45198
+ dispatch(setSelectedExcursionSearchResult(updatedExcursionSearchResult));
45199
+ };
45200
+ var calculateTotalPrice = function () {
45201
+ var selectedOptions = allOptions.filter(function (option) {
45202
+ return option.isSelected;
45203
+ });
45204
+ var totalPrice = selectedOptions.reduce(function (total, option) {
45205
+ return total + (option.price || 0);
45206
+ }, 0);
45207
+ return formatPrice(totalPrice, selectedExcursionSearchResult.currencyCode);
45208
+ };
45209
+ var getSharedPriceDifference = function (accommodationCode) {
45210
+ var currentSelectedShared = getSelectedSharedOption();
45211
+ var targetPrice = 0;
45212
+ var selectedOption = getSelectedSharedOptionForExcursion(accommodationCode);
45213
+ if (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.price) {
45214
+ targetPrice = selectedOption.price;
45215
+ } else {
45216
+ var firstOption = sharedOptions.find(function (option) {
45217
+ return option.accommodationCode === accommodationCode;
45218
+ });
45219
+ targetPrice = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.price) || 0;
45220
+ }
45221
+ return targetPrice - ((currentSelectedShared === null || currentSelectedShared === void 0 ? void 0 : currentSelectedShared.price) || 0);
45222
+ };
45223
+ var getPriceDifference = function (currentSelectedPrice, paxId, accommodationCode) {
45224
+ var targetPrice = 0;
45225
+ var selectedOption = getSelectedOptionForExcursion(paxId, accommodationCode);
45226
+ if (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.price) {
45227
+ targetPrice = selectedOption.price;
45228
+ } else {
45229
+ var firstOption = allOptions.find(function (option) {
45230
+ return optionAppliesToPax(option, paxId) && !optionAppliesToAllTravellers(option, travellerCount) && option.accommodationCode === accommodationCode;
45231
+ });
45232
+ targetPrice = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.price) || 0;
45233
+ }
45234
+ return targetPrice - (currentSelectedPrice || 0);
45235
+ };
45236
+ var formatPriceDifference = function (difference, currencyCode) {
45237
+ if (difference === 0) {
45238
+ return null;
45239
+ }
45240
+ var formattedAbsoluteValue = formatPrice(Math.abs(difference), currencyCode);
45241
+ return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
45242
+ };
45243
+ var getPriceDifferenceClassName = function (difference) {
45244
+ if (difference < 0) {
45245
+ return 'flyin__acco__price flyin__acco__price--decrease';
45246
+ }
45247
+ if (difference > 0) {
45248
+ return 'flyin__acco__price flyin__acco__price--increase';
45249
+ }
45250
+ return 'flyin__acco__price';
45251
+ };
45252
+ var handleConfirm = function () {
45253
+ var dayKey = getExcursionDayKey(excursionSearchParams.date);
45254
+ dispatch(
45255
+ confirmExcursionForDay({
45256
+ dayKey: dayKey,
45257
+ excursion: selectedExcursionSearchResult
45258
+ })
45259
+ );
45260
+ dispatch(setFlyInIsOpen(false));
45261
+ };
45262
+ return React__default['default'].createElement(
45263
+ React__default['default'].Fragment,
45264
+ null,
45265
+ React__default['default'].createElement(
45266
+ 'div',
45267
+ { className: 'flyin__content' },
45268
+ sharedExcursions.length > 0 &&
45269
+ React__default['default'].createElement(
45270
+ 'div',
45271
+ { className: 'flyin__acco' },
45272
+ React__default['default'].createElement('h3', { className: 'flyin__acco__room-title' }, translations.QSM.ALL_TRAVELERS),
45273
+ React__default['default'].createElement(
45274
+ 'div',
45275
+ { className: 'flyin__acco__cards' },
45276
+ sharedExcursions.map(function (excursion) {
45277
+ var selectedOption = getSelectedSharedOptionForExcursion(excursion.accommodationCode);
45278
+ var priceDifference = getSharedPriceDifference(excursion.accommodationCode);
45279
+ return React__default['default'].createElement(
45280
+ 'div',
45281
+ { className: 'flyin__acco__card', key: 'all-'.concat(excursion.accommodationCode) },
45282
+ React__default['default'].createElement(
45283
+ 'div',
45284
+ { className: 'flyin__acco__content' },
45285
+ React__default['default'].createElement('h4', { className: 'flyin__acco__title' }, excursion.accommodationName)
45286
+ ),
45287
+ React__default['default'].createElement(
45288
+ 'div',
45289
+ { className: 'flyin__acco__footer' },
45290
+ React__default['default'].createElement(
45291
+ 'div',
45292
+ { className: 'flyin__acco__footer__actions' },
45293
+ React__default['default'].createElement(
45294
+ 'button',
45295
+ {
45296
+ className: selectedOption ? 'cta cta--select cta--selected' : 'cta cta--select',
45297
+ onClick: function () {
45298
+ var _a;
45299
+ return handlePick(
45300
+ selectedOption ? selectedOption.guid : (_a = lodash.first(excursion.options)) === null || _a === void 0 ? void 0 : _a.guid
45301
+ );
45302
+ }
45303
+ },
45304
+ selectedOption
45305
+ ? translations === null || translations === void 0
45306
+ ? void 0
45307
+ : translations.SHARED.SELECTED
45308
+ : translations === null || translations === void 0
45309
+ ? void 0
45310
+ : translations.SHARED.SELECT
45311
+ ),
45312
+ React__default['default'].createElement(
45313
+ 'div',
45314
+ { className: 'flyin__acco__price__wrapper' },
45315
+ React__default['default'].createElement(
45316
+ 'span',
45317
+ { className: getPriceDifferenceClassName(priceDifference) },
45318
+ formatPriceDifference(priceDifference, selectedExcursionSearchResult.currencyCode)
45319
+ )
45320
+ )
45321
+ )
45322
+ )
45323
+ );
45324
+ })
45325
+ )
45326
+ ),
45327
+ paxGroups.map(function (_a) {
45328
+ var pax = _a.pax,
45329
+ paxId = _a.paxId,
45330
+ excursions = _a.excursions;
45331
+ if (excursions.length === 0) {
45332
+ return null;
45333
+ }
45334
+ var selectedPaxOption = getSelectedOptionForPax(paxId);
45335
+ return React__default['default'].createElement(
45336
+ 'div',
45337
+ { className: 'flyin__acco', key: 'pax-'.concat(pax.id) },
45338
+ React__default['default'].createElement('h3', { className: 'flyin__acco__room-title' }, translations.SUMMARY.TRAVELER, ' ', pax.id + 1),
45339
+ React__default['default'].createElement(
45340
+ 'div',
45341
+ { className: 'flyin__acco__cards' },
45342
+ excursions.map(function (excursion) {
45343
+ var selectedOption = getSelectedOptionForExcursion(paxId, excursion.accommodationCode);
45344
+ var priceDifference = getPriceDifference(
45345
+ selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.price,
45346
+ paxId,
45347
+ excursion.accommodationCode
45348
+ );
45349
+ return React__default['default'].createElement(
45350
+ 'div',
45351
+ { className: 'flyin__acco__card', key: ''.concat(pax.id, '-').concat(excursion.accommodationCode) },
45352
+ React__default['default'].createElement(
45353
+ 'div',
45354
+ { className: 'flyin__acco__content' },
45355
+ React__default['default'].createElement('h4', { className: 'flyin__acco__title' }, excursion.accommodationName)
45356
+ ),
45357
+ React__default['default'].createElement(
45358
+ 'div',
45359
+ { className: 'flyin__acco__footer' },
45360
+ React__default['default'].createElement(
45361
+ 'div',
45362
+ { className: 'flyin__acco__footer__actions' },
45363
+ React__default['default'].createElement(
45364
+ 'button',
45365
+ {
45366
+ className:
45367
+ (selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.accommodationCode) ===
45368
+ excursion.accommodationCode
45369
+ ? 'cta cta--select cta--selected'
45370
+ : 'cta cta--select',
45371
+ onClick: function () {
45372
+ var _a;
45373
+ return handlePick(
45374
+ selectedOption ? selectedOption.guid : (_a = lodash.first(excursion.options)) === null || _a === void 0 ? void 0 : _a.guid,
45375
+ paxId
45376
+ );
45377
+ }
45378
+ },
45379
+ (selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.accommodationCode) ===
45380
+ excursion.accommodationCode
45381
+ ? translations === null || translations === void 0
45382
+ ? void 0
45383
+ : translations.SHARED.SELECTED
45384
+ : translations === null || translations === void 0
45385
+ ? void 0
45386
+ : translations.SHARED.SELECT
45387
+ ),
45388
+ React__default['default'].createElement(
45389
+ 'div',
45390
+ { className: 'flyin__acco__price__wrapper' },
45391
+ React__default['default'].createElement(
45392
+ 'span',
45393
+ { className: getPriceDifferenceClassName(priceDifference) },
45394
+ formatPriceDifference(priceDifference, selectedExcursionSearchResult.currencyCode)
45395
+ )
45396
+ )
45397
+ )
45398
+ )
45399
+ );
45400
+ })
45401
+ )
45402
+ );
45403
+ })
45404
+ ),
45405
+ React__default['default'].createElement(
45406
+ 'div',
45407
+ { className: 'flyin__footer' },
45408
+ React__default['default'].createElement('div', { className: 'flyin__footer__price' }, translations.SHARED.TOTAL_PRICE, ': ', calculateTotalPrice()),
45409
+ React__default['default'].createElement(
45410
+ 'button',
45411
+ { type: 'button', className: 'cta cta--primary', onClick: handleConfirm },
45412
+ translations === null || translations === void 0 ? void 0 : translations.QSM.CONFIRM
45413
+ )
45414
+ )
45415
+ );
45416
+ };
45417
+
45418
+ var FlyIn = function (_a) {
45419
+ var _b;
45420
+ var srpType = _a.srpType,
45421
+ isOpen = _a.isOpen,
45422
+ setIsOpen = _a.setIsOpen,
45423
+ _c = _a.className,
45424
+ className = _c === void 0 ? '' : _c,
45425
+ onPanelRef = _a.onPanelRef,
45426
+ detailsLoading = _a.detailsLoading,
45427
+ flyInType = _a.flyInType,
45428
+ isPackageEditFlow = _a.isPackageEditFlow,
45429
+ handleConfirm = _a.handleConfirm,
45430
+ sortByTypes = _a.sortByTypes,
45431
+ activeSearchSeed = _a.activeSearchSeed;
45432
+ var dispatch = reactRedux.useDispatch();
45433
+ var context = React.useContext(SearchResultsConfigurationContext);
45434
+ var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
45435
+ var translations = getTranslations(language);
45436
+ var _d = reactRedux.useSelector(function (state) {
45437
+ return state.searchResults;
45438
+ }),
45439
+ isLoading = _d.isLoading,
45440
+ initialFilters = _d.initialFilters,
45441
+ filters = _d.filters,
45442
+ filteredPackagingAccoResults = _d.filteredPackagingAccoResults,
45443
+ selectedSortType = _d.selectedSortType;
45444
+ var onCancelSearch = useFlightSearch().onCancelSearch;
45445
+ var panelRef = React.useRef(null);
45446
+ // expose DOM node if needed
45447
+ React.useEffect(
45448
+ function () {
45449
+ onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
45450
+ return function () {
45451
+ return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
45452
+ };
45453
+ },
45454
+ [onPanelRef]
45455
+ );
45456
+ React.useEffect(
45457
+ function () {
45458
+ // click outside detection
45459
+ var handleClickOutside = function (event) {
45460
+ if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
45461
+ handleClose();
45462
+ }
45463
+ };
45464
+ document.addEventListener('mousedown', handleClickOutside);
45465
+ return function () {
45466
+ return document.removeEventListener('mousedown', handleClickOutside);
45467
+ };
45468
+ },
45469
+ [isOpen, setIsOpen]
45470
+ );
45471
+ // body scroll lock
45472
+ React.useEffect(
45473
+ function () {
45474
+ document.body.style.overflow = isOpen ? 'hidden' : '';
45475
+ return function () {
45476
+ document.body.style.overflow = '';
45477
+ };
45478
+ },
45479
+ [isOpen]
45480
+ );
45481
+ var handleClose = function () {
45482
+ if (isOpen && panelRef.current) {
45483
+ if (srpType === build.PortalQsmType.Flight) {
45484
+ dispatch(setSelectedFlight(null));
45485
+ dispatch(setSelectedFlightDetails(null));
45486
+ onCancelSearch();
45487
+ } else {
45488
+ dispatch(setSelectedSearchResult(null));
45489
+ }
45490
+ dispatch(setFlyInType('acco-details'));
45491
+ setIsOpen(false);
45492
+ }
45493
+ };
45494
+ var handleGoBack = function () {
45495
+ if (flyInType === 'acco-details') {
45496
+ dispatch(setFlyInType('acco-results'));
45497
+ } else if (flyInType === 'excursion-details') {
45498
+ dispatch(setFlyInType('excursion-results'));
45499
+ }
45500
+ };
45501
+ var handleSortChange = function (newSortKey, direction) {
45502
+ if (sortByTypes === undefined) return;
45503
+ var newSortByType = findSortByType(sortByTypes, newSortKey, direction !== null && direction !== void 0 ? direction : 'asc');
45504
+ if (newSortByType) {
45505
+ dispatch(setSortType(newSortByType));
45506
+ }
45507
+ };
45508
+ return React__default['default'].createElement(
45509
+ 'div',
45510
+ {
45511
+ className: 'flyin '
45512
+ .concat(isOpen ? 'flyin--active' : '', ' ')
45513
+ .concat(className, ' ')
45514
+ .concat(
45515
+ isPackageEditFlow || flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'acco-results'
45516
+ ? 'flyin--large'
45517
+ : ''
45518
+ )
45519
+ },
45520
+ React__default['default'].createElement(
45521
+ 'div',
45522
+ { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
45523
+ React__default['default'].createElement(
45524
+ 'div',
45525
+ { className: 'flyin__content' },
45526
+ React__default['default'].createElement(
45527
+ 'div',
45528
+ { className: 'flyin__content-title-row' },
45529
+ React__default['default'].createElement(
45530
+ 'h3',
45531
+ { className: 'flyin__content-title' },
45532
+ srpType === build.PortalQsmType.Flight && 'Select your fare',
45533
+ srpType === build.PortalQsmType.Accommodation ||
45534
+ (srpType === build.PortalQsmType.AccommodationAndFlight &&
45535
+ (flyInType === 'acco-results' || flyInType === 'acco-details') &&
45536
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION)),
45537
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45538
+ flyInType === 'flight-outward-results' &&
45539
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.OUTWARD_FLIGHT),
45540
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45541
+ flyInType === 'flight-return-results' &&
45542
+ ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.RETURN_FLIGHT),
45543
+ srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'flight-details' && 'Select your fare',
45544
+ flyInType === 'excursion-results' || (flyInType === 'excursion-details' && 'Select excursion')
45545
+ ),
45546
+ React__default['default'].createElement(
45547
+ 'span',
45548
+ {
45549
+ className: 'flyin__close',
45550
+ onClick: function () {
45551
+ return handleClose();
45552
+ }
45553
+ },
45554
+ React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
45555
+ )
45556
+ ),
45557
+ ((isPackageEditFlow && flyInType === 'acco-details') || flyInType === 'excursion-details') &&
45558
+ React__default['default'].createElement(
45559
+ 'div',
45560
+ { className: 'flyin__content-title-row' },
45561
+ React__default['default'].createElement(
45562
+ 'div',
45563
+ { onClick: handleGoBack, className: 'flyin__content-title__back' },
45564
+ React__default['default'].createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
45565
+ 'Go Back'
45566
+ )
45567
+ )
45568
+ ),
45569
+ srpType === build.PortalQsmType.Flight && React__default['default'].createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
45570
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
45571
+ flyInType === 'acco-results' &&
45572
+ React__default['default'].createElement(
45573
+ 'div',
45574
+ { className: 'flyin__content flyin__content--columns' },
45575
+ React__default['default'].createElement(Filters, {
45576
+ initialFilters: initialFilters,
45577
+ filters: filters,
45578
+ isOpen: false,
45579
+ handleSetIsOpen: function () {},
45580
+ // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
45581
+ isLoading: isLoading,
45582
+ setFilters: function (filters) {
45583
+ return dispatch(setFilters(filters));
45584
+ },
45585
+ resetFilters: function (filters) {
45586
+ return dispatch(resetFilters(filters));
45587
+ }
45588
+ }),
45589
+ React__default['default'].createElement(
45590
+ 'div',
45591
+ { className: 'search__results__wrapper' },
45592
+ React__default['default'].createElement(
45593
+ 'div',
45594
+ { className: 'search__result-row' },
45595
+ React__default['default'].createElement(
45596
+ 'span',
45597
+ { className: 'search__result-row-text' },
45598
+ !isLoading &&
45599
+ React__default['default'].createElement(
45600
+ React__default['default'].Fragment,
45601
+ null,
45602
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
45603
+ filteredPackagingAccoResults.length,
45604
+ '\u00A0',
45605
+ translations.SRP.TOTAL_RESULTS_LABEL
45606
+ )
45607
+ ),
45608
+ sortByTypes &&
45609
+ sortByTypes.length > 0 &&
45610
+ React__default['default'].createElement(
45611
+ 'div',
45612
+ { className: 'search__result-row-filter' },
45613
+ React__default['default'].createElement(ItemPicker, {
45614
+ items: sortByTypes,
45615
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
45616
+ selectedSortByType: selectedSortType,
45617
+ label: translations.SRP.SORTBY,
45618
+ placeholder: translations.SRP.SORTBY,
45619
+ classModifier: 'travel-class-picker__items',
45620
+ valueFormatter: function (value, direction) {
45621
+ return getSortingName(translations, findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc'));
45622
+ },
45623
+ onPick: function (newSortKey, direction) {
45624
+ return handleSortChange(newSortKey, direction);
45625
+ }
45626
+ })
45627
+ )
45628
+ ),
45629
+ React__default['default'].createElement(HotelAccommodationResults, { isLoading: detailsLoading, isFlyIn: true })
45630
+ )
43891
45631
  ),
43892
45632
  (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43893
- accommodationStep === 'details' &&
45633
+ flyInType === 'acco-details' &&
43894
45634
  React__default['default'].createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
45635
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45636
+ (flyInType === 'flight-outward-results' || flyInType === 'flight-return-results') &&
45637
+ React__default['default'].createElement(PackageingFlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
45638
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45639
+ flyInType === 'excursion-results' &&
45640
+ React__default['default'].createElement(ExcursionResults, { isFlyIn: true, activeSearchSeed: activeSearchSeed }),
45641
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45642
+ flyInType === 'excursion-details' &&
45643
+ React__default['default'].createElement(ExcursionDetails, null),
43895
45644
  srpType === build.PortalQsmType.GroupTour &&
43896
45645
  React__default['default'].createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
43897
45646
  )
@@ -44250,7 +45999,7 @@ var PairedFlightOption = function (_a) {
44250
45999
  React__default['default'].createElement(
44251
46000
  'span',
44252
46001
  { className: 'price' },
44253
- formatPrice$2(
46002
+ formatPrice$3(
44254
46003
  item.price,
44255
46004
  'EUR',
44256
46005
  (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
@@ -44663,270 +46412,6 @@ var PairedFlightSelection = function (_a) {
44663
46412
  );
44664
46413
  };
44665
46414
 
44666
- var IndependentFlightOption = function (_a) {
44667
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
44668
- var item = _a.item,
44669
- onSelect = _a.onSelect,
44670
- guid = _a.guid,
44671
- selectedGuid = _a.selectedGuid,
44672
- isOutward = _a.isOutward,
44673
- showSelectedState = _a.showSelectedState,
44674
- currentSelectedPrice = _a.currentSelectedPrice,
44675
- price = _a.price;
44676
- var context = React.useContext(SearchResultsConfigurationContext);
44677
- var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44678
- var translations = getTranslations(language);
44679
- var _p = React.useState(false),
44680
- detailsOpen = _p[0],
44681
- setDetailsOpen = _p[1];
44682
- var priceDifference = price && currentSelectedPrice ? price - currentSelectedPrice : null;
44683
- return React__default['default'].createElement(
44684
- 'div',
44685
- { className: 'search__result-card', key: 'flight-'.concat(item.code) },
44686
- React__default['default'].createElement(
44687
- 'div',
44688
- { className: 'flight '.concat(showSelectedState && selectedGuid === guid ? 'flight--selected' : '') },
44689
- React__default['default'].createElement(
44690
- 'div',
44691
- { className: 'flight__option' },
44692
- React__default['default'].createElement(
44693
- 'div',
44694
- { className: 'flight__content' },
44695
- React__default['default'].createElement(
44696
- 'div',
44697
- { className: 'flight__flights' },
44698
- React__default['default'].createElement(
44699
- 'div',
44700
- { className: 'flight__flight' },
44701
- React__default['default'].createElement(
44702
- 'div',
44703
- { className: 'flight__flight__header' },
44704
- React__default['default'].createElement('div', { className: 'flight__status__container' }),
44705
- React__default['default'].createElement(
44706
- 'div',
44707
- { className: 'flight__price' },
44708
- price != null &&
44709
- price > 0 &&
44710
- (isOutward
44711
- ? React__default['default'].createElement(
44712
- 'span',
44713
- { className: 'price' },
44714
- translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
44715
- '\u00A0',
44716
- formatPrice$2(
44717
- price,
44718
- 'EUR',
44719
- (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
44720
- )
44721
- )
44722
- : priceDifference != null &&
44723
- Math.abs(priceDifference) > 0 &&
44724
- React__default['default'].createElement(
44725
- 'span',
44726
- { className: 'price' },
44727
- priceDifference > 0 ? '+' : '-',
44728
- '\u00A0',
44729
- formatPrice$2(
44730
- Math.abs(priceDifference),
44731
- 'EUR',
44732
- (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
44733
- )
44734
- )),
44735
- React__default['default'].createElement(
44736
- 'button',
44737
- {
44738
- type: 'button',
44739
- className: 'cta '.concat(selectedGuid === guid ? 'cta--selected' : 'cta--select'),
44740
- onClick: function () {
44741
- return onSelect === null || onSelect === void 0 ? void 0 : onSelect();
44742
- }
44743
- },
44744
- selectedGuid === guid ? 'Selected' : 'Select'
44745
- )
44746
- )
44747
- )
44748
- ),
44749
- React__default['default'].createElement(
44750
- 'div',
44751
- { className: 'flight__flight' },
44752
- React__default['default'].createElement(
44753
- 'div',
44754
- { className: 'flight__flight__container' },
44755
- React__default['default'].createElement(
44756
- 'div',
44757
- { className: 'flight__flight__wrapper' },
44758
- React__default['default'].createElement(
44759
- 'div',
44760
- { className: 'flight__logo__wrapper' },
44761
- React__default['default'].createElement('img', {
44762
- src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(
44763
- (_e = getDepartureSegment(item)) === null || _e === void 0 ? void 0 : _e.marketingAirlineCode,
44764
- '.png?height=256'
44765
- ),
44766
- alt: '',
44767
- className: 'flight__logo'
44768
- }),
44769
- React__default['default'].createElement(
44770
- 'span',
44771
- null,
44772
- (_f = getDepartureSegment(item)) === null || _f === void 0 ? void 0 : _f.marketingAirlineName
44773
- )
44774
- ),
44775
- React__default['default'].createElement(
44776
- 'div',
44777
- { className: 'flight__info' },
44778
- React__default['default'].createElement(
44779
- 'div',
44780
- { className: 'flight__info__times' },
44781
- React__default['default'].createElement(
44782
- 'strong',
44783
- null,
44784
- timeFromDateTime((_g = getDepartureSegment(item)) === null || _g === void 0 ? void 0 : _g.departureDateTime),
44785
- ' ',
44786
- (_h = getDepartureSegment(item)) === null || _h === void 0 ? void 0 : _h.departureAirportCode
44787
- ),
44788
- React__default['default'].createElement(
44789
- 'p',
44790
- null,
44791
- longFormatDate((_j = getDepartureSegment(item)) === null || _j === void 0 ? void 0 : _j.departureDateTime, language)
44792
- )
44793
- ),
44794
- React__default['default'].createElement(
44795
- 'div',
44796
- { className: 'flight__info__duration' },
44797
- React__default['default'].createElement('p', null, durationTicksInHoursString(item.durationInTicks)),
44798
- React__default['default'].createElement(
44799
- 'div',
44800
- { className: 'flight__info__duration__stops' },
44801
- React__default['default'].createElement('div', { className: 'flight__info__duration__stop' })
44802
- ),
44803
- React__default['default'].createElement(
44804
- 'span',
44805
- null,
44806
- getNumberOfStopsLabel(item, translations.SRP.DIRECT, translations.SRP.STOPS, translations.SRP.STOP)
44807
- )
44808
- ),
44809
- React__default['default'].createElement(
44810
- 'div',
44811
- { className: 'flight__info__times flight__info__times--arrival' },
44812
- React__default['default'].createElement(
44813
- 'strong',
44814
- null,
44815
- timeFromDateTime((_k = getArrivalSegment(item)) === null || _k === void 0 ? void 0 : _k.arrivalDateTime),
44816
- ' ',
44817
- (_l = getArrivalSegment(item)) === null || _l === void 0 ? void 0 : _l.arrivalAirportCode
44818
- ),
44819
- React__default['default'].createElement(
44820
- 'p',
44821
- null,
44822
- longFormatDate((_m = getArrivalSegment(item)) === null || _m === void 0 ? void 0 : _m.arrivalDateTime, language)
44823
- )
44824
- )
44825
- )
44826
- ),
44827
- React__default['default'].createElement(
44828
- 'div',
44829
- { className: 'flight__detail__btn__wrapper' },
44830
- React__default['default'].createElement(
44831
- 'div',
44832
- {
44833
- className: 'flight__detail__btn '.concat(detailsOpen ? 'flight__detail__btn--active' : ''),
44834
- onClick: function () {
44835
- return setDetailsOpen(function (prev) {
44836
- return !prev;
44837
- });
44838
- }
44839
- },
44840
- React__default['default'].createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44841
- )
44842
- )
44843
- ),
44844
- React__default['default'].createElement(
44845
- 'div',
44846
- { className: 'flight__detail '.concat(detailsOpen ? 'flight__detail--active' : '') },
44847
- (_o = getFlightSegments(item)) === null || _o === void 0
44848
- ? void 0
44849
- : _o.map(function (segment, index) {
44850
- return React__default['default'].createElement(
44851
- React__default['default'].Fragment,
44852
- { key: 'outward-segment-'.concat(index, '-').concat(segment.flightNumber) },
44853
- React__default['default'].createElement(
44854
- 'div',
44855
- { className: 'flight__info' },
44856
- React__default['default'].createElement(
44857
- 'div',
44858
- { className: 'flight__info__times__wrapper' },
44859
- React__default['default'].createElement(
44860
- 'div',
44861
- { className: 'flight__info__times' },
44862
- React__default['default'].createElement('p', null, timeFromDateTime(segment.departureDateTime)),
44863
- React__default['default'].createElement('strong', null, segment.departureAirportCode),
44864
- React__default['default'].createElement('p', null, longFormatDate(segment.departureDateTime, language))
44865
- ),
44866
- React__default['default'].createElement(
44867
- 'div',
44868
- null,
44869
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
44870
- )
44871
- ),
44872
- React__default['default'].createElement(
44873
- 'div',
44874
- { className: 'flight__info__duration' },
44875
- React__default['default'].createElement('p', null, durationTicksInHoursString(segment.durationInTicks)),
44876
- React__default['default'].createElement('div', { className: 'flight__info__duration__stops' }),
44877
- React__default['default'].createElement('span', null, segment.marketingAirlineName),
44878
- React__default['default'].createElement('strong', null, segment.operatingFlightNumber)
44879
- ),
44880
- React__default['default'].createElement(
44881
- 'div',
44882
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44883
- React__default['default'].createElement(
44884
- 'div',
44885
- null,
44886
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 })
44887
- ),
44888
- React__default['default'].createElement(
44889
- 'div',
44890
- { className: 'flight__info__times flight__info__times--arrival' },
44891
- React__default['default'].createElement('p', null, timeFromDateTime(segment.arrivalDateTime)),
44892
- React__default['default'].createElement('strong', null, segment.arrivalAirportCode),
44893
- React__default['default'].createElement('p', null, longFormatDate(segment.arrivalDateTime, language))
44894
- )
44895
- )
44896
- ),
44897
- segment.transferTimeInTicks &&
44898
- React__default['default'].createElement(
44899
- 'div',
44900
- { className: 'flight__info' },
44901
- React__default['default'].createElement('div', { className: 'flight__info__times' }),
44902
- React__default['default'].createElement(
44903
- 'div',
44904
- { className: 'flight__info__duration flight__info__duration--waittime' },
44905
- React__default['default'].createElement(
44906
- 'div',
44907
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44908
- React__default['default'].createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44909
- ),
44910
- React__default['default'].createElement(
44911
- 'div',
44912
- { className: 'flight__info__duration__stoptime' },
44913
- React__default['default'].createElement('span', null, 'Stop time'),
44914
- React__default['default'].createElement('strong', null, durationTicksInHoursString(segment.transferTimeInTicks))
44915
- )
44916
- ),
44917
- React__default['default'].createElement('div', { className: 'flight__info__times flight__info__times--arrival' })
44918
- )
44919
- );
44920
- })
44921
- )
44922
- )
44923
- )
44924
- )
44925
- )
44926
- )
44927
- );
44928
- };
44929
-
44930
46415
  var IndependentFlightSelection = function (_a) {
44931
46416
  var _b;
44932
46417
  var searchResults = _a.searchResults;
@@ -45122,116 +46607,6 @@ var FlightSelection = function (_a) {
45122
46607
  : React__default['default'].createElement(IndependentFlightSelection, { searchResults: searchResults });
45123
46608
  };
45124
46609
 
45125
- var MultiRangeFilter = function (_a) {
45126
- var min = _a.min,
45127
- max = _a.max,
45128
- selectedMin = _a.selectedMin,
45129
- selectedMax = _a.selectedMax,
45130
- valueFormatter = _a.valueFormatter,
45131
- onChange = _a.onChange;
45132
- var _b = React.useState(false),
45133
- isDragging = _b[0],
45134
- setIsDragging = _b[1];
45135
- var _c = React.useState(0),
45136
- leftPercentage = _c[0],
45137
- setLeftPercentage = _c[1];
45138
- var _d = React.useState(0),
45139
- rightPercentage = _d[0],
45140
- setRightPercentage = _d[1];
45141
- var _e = React.useState(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min),
45142
- minVal = _e[0],
45143
- setMinVal = _e[1];
45144
- var _f = React.useState(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max),
45145
- maxVal = _f[0],
45146
- setMaxVal = _f[1];
45147
- var minGap = 5;
45148
- // Sync internal state with external selectedMin/selectedMax changes
45149
- React.useEffect(
45150
- function () {
45151
- setMinVal(selectedMin !== null && selectedMin !== void 0 ? selectedMin : min);
45152
- setMaxVal(selectedMax !== null && selectedMax !== void 0 ? selectedMax : max);
45153
- },
45154
- [min, max, selectedMin, selectedMax]
45155
- );
45156
- // Recalculate slider track whenever values change
45157
- React.useEffect(
45158
- function () {
45159
- var range = max - min || 1;
45160
- var minPercent = ((minVal - min) / range) * 100;
45161
- var maxPercent = ((maxVal - min) / range) * 100;
45162
- setLeftPercentage(minPercent);
45163
- setRightPercentage(100 - maxPercent);
45164
- },
45165
- [minVal, maxVal, min, max]
45166
- );
45167
- var slideMin = function (e) {
45168
- var value = parseInt(e.target.value, 10);
45169
- // Ensure the thumbs don’t cross and enforce minGap
45170
- if (value <= maxVal - minGap) {
45171
- setMinVal(value);
45172
- }
45173
- };
45174
- var slideMax = function (e) {
45175
- var value = parseInt(e.target.value, 10);
45176
- // Ensure the thumbs don’t cross and enforce minGap
45177
- if (value >= minVal + minGap) {
45178
- setMaxVal(value);
45179
- }
45180
- };
45181
- var startDrag = function () {
45182
- setIsDragging(true);
45183
- };
45184
- var stopDrag = function () {
45185
- setIsDragging(false);
45186
- // Notify parent with the final values
45187
- onChange(minVal, maxVal);
45188
- };
45189
- return React__default['default'].createElement(
45190
- 'div',
45191
- { className: 'double-slider-box' },
45192
- React__default['default'].createElement(
45193
- 'div',
45194
- { className: 'input-box' },
45195
- React__default['default'].createElement('div', { className: 'min-box' }, valueFormatter(minVal)),
45196
- React__default['default'].createElement('div', { className: 'max-box' }, valueFormatter(maxVal))
45197
- ),
45198
- React__default['default'].createElement(
45199
- 'div',
45200
- { className: 'range-slider' },
45201
- React__default['default'].createElement('div', {
45202
- className: 'slider-track',
45203
- style: { left: ''.concat(leftPercentage, '%'), right: ''.concat(rightPercentage, '%') }
45204
- }),
45205
- React__default['default'].createElement('input', {
45206
- type: 'range',
45207
- min: min,
45208
- max: max,
45209
- value: minVal,
45210
- onChange: slideMin,
45211
- onMouseDown: startDrag,
45212
- onMouseUp: stopDrag,
45213
- onTouchStart: startDrag,
45214
- onTouchEnd: stopDrag,
45215
- className: 'min-val'
45216
- }),
45217
- React__default['default'].createElement('input', {
45218
- type: 'range',
45219
- min: min,
45220
- max: max,
45221
- value: maxVal,
45222
- onChange: slideMax,
45223
- onMouseDown: startDrag,
45224
- onMouseUp: stopDrag,
45225
- onTouchStart: startDrag,
45226
- onTouchEnd: stopDrag,
45227
- className: 'max-val'
45228
- }),
45229
- isDragging && React__default['default'].createElement('div', { className: 'min-tooltip' }, valueFormatter(minVal)),
45230
- isDragging && React__default['default'].createElement('div', { className: 'max-tooltip' }, valueFormatter(maxVal))
45231
- )
45232
- );
45233
- };
45234
-
45235
46610
  var FlightFilters = function (_a) {
45236
46611
  var _b;
45237
46612
  var isOpen = _a.isOpen,
@@ -46320,228 +47695,6 @@ var FlightResultsContainer = function (_a) {
46320
47695
  );
46321
47696
  };
46322
47697
 
46323
- var Filters = function (_a) {
46324
- var _b;
46325
- var initialFilters = _a.initialFilters,
46326
- filters = _a.filters,
46327
- isOpen = _a.isOpen,
46328
- handleSetIsOpen = _a.handleSetIsOpen,
46329
- isLoading = _a.isLoading;
46330
- var context = React.useContext(SearchResultsConfigurationContext);
46331
- if (!context || !context.showFilters) {
46332
- return null;
46333
- }
46334
- var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
46335
- var _c = React.useState({}),
46336
- visibleFilters = _c[0],
46337
- setVisibleFilters = _c[1];
46338
- var dispatch = reactRedux.useDispatch();
46339
- var toggleFilterVisibility = function (filterId) {
46340
- setVisibleFilters(function (prev) {
46341
- var _a;
46342
- return __assign(__assign({}, prev), ((_a = {}), (_a[filterId] = !prev[filterId]), _a));
46343
- });
46344
- };
46345
- var handleCheckBoxFilter = function (filter, option) {
46346
- var updated = filters.map(function (f) {
46347
- var _a;
46348
- if (f.property !== filter.property) return f;
46349
- return __assign(__assign({}, f), {
46350
- options:
46351
- (_a = f.options) === null || _a === void 0
46352
- ? void 0
46353
- : _a.map(function (opt) {
46354
- return opt.value === option.value ? __assign(__assign({}, opt), { isChecked: !opt.isChecked }) : opt;
46355
- })
46356
- });
46357
- });
46358
- dispatch(setFilters(updated));
46359
- };
46360
- var handleSliderChange = function (filter, newMin, newMax) {
46361
- var updated = filters.map(function (f) {
46362
- if (f.property !== filter.property) return f;
46363
- return __assign(__assign({}, f), { selectedMin: newMin, selectedMax: newMax });
46364
- });
46365
- dispatch(setFilters(updated));
46366
- };
46367
- var handleFullReset = function () {
46368
- if (!isLoading) {
46369
- dispatch(resetFilters(initialFilters));
46370
- }
46371
- };
46372
- return React__default['default'].createElement(
46373
- 'div',
46374
- { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
46375
- React__default['default'].createElement('div', {
46376
- className: 'search__filters--background',
46377
- onClick: function () {
46378
- return handleSetIsOpen();
46379
- }
46380
- }),
46381
- React__default['default'].createElement(
46382
- 'button',
46383
- {
46384
- className: 'search__filters--close',
46385
- onClick: function () {
46386
- return handleSetIsOpen();
46387
- }
46388
- },
46389
- React__default['default'].createElement(Icon$1, { name: 'ui-close', height: 24 })
46390
- ),
46391
- React__default['default'].createElement(
46392
- 'div',
46393
- { className: 'search__filters' },
46394
- React__default['default'].createElement(
46395
- 'div',
46396
- { className: 'search__filter-row search__filter__header' },
46397
- React__default['default'].createElement(
46398
- 'div',
46399
- { className: 'search__filter-row-flex-title' },
46400
- React__default['default'].createElement('p', { className: 'search__filter-small-title' }, translations.SRP.FILTERS)
46401
- ),
46402
- !isLoading &&
46403
- React__default['default'].createElement(
46404
- 'a',
46405
- {
46406
- className: 'search__filter-reset',
46407
- onClick: function () {
46408
- return handleFullReset();
46409
- }
46410
- },
46411
- translations.SRP.RESET
46412
- )
46413
- ),
46414
- isLoading
46415
- ? React__default['default'].createElement(Spinner, null)
46416
- : React__default['default'].createElement(
46417
- React__default['default'].Fragment,
46418
- null,
46419
- React__default['default'].createElement(
46420
- 'div',
46421
- { className: 'search__filters__group-container' },
46422
- filters.map(function (filter, index) {
46423
- var _a, _b;
46424
- var isVisible = (_a = visibleFilters[filter.property]) !== null && _a !== void 0 ? _a : true;
46425
- return React__default['default'].createElement(
46426
- 'div',
46427
- { key: ''.concat(filter.property, '-').concat(index), className: 'search__filter-group' },
46428
- React__default['default'].createElement(
46429
- 'div',
46430
- {
46431
- className: 'search__filter-row search__filter-row--underline',
46432
- onClick: function () {
46433
- return toggleFilterVisibility(filter.property);
46434
- },
46435
- role: 'button',
46436
- tabIndex: 0
46437
- },
46438
- React__default['default'].createElement('h6', { className: 'search__filter-large-title' }, filter.label),
46439
- React__default['default'].createElement(
46440
- 'svg',
46441
- {
46442
- id: 'search-chevron-up-icon',
46443
- className: 'search__filter-chevron-icon '.concat(isVisible ? 'search__filter-chevron-icon--flipped' : '', ' '),
46444
- viewBox: '0 0 10 6.063',
46445
- width: 10,
46446
- height: 6.063
46447
- },
46448
- React__default['default'].createElement('path', {
46449
- id: 'Path_62',
46450
- 'data-name': 'Path 62',
46451
- d: 'M245-617.937l-5-5L241.063-624,245-620.062,248.938-624,250-622.937Z',
46452
- transform: 'translate(-240 624)',
46453
- fill: '#707070'
46454
- })
46455
- )
46456
- ),
46457
- isVisible &&
46458
- filter.type === 'checkbox' &&
46459
- React__default['default'].createElement(
46460
- 'div',
46461
- { className: 'search__filter-rows' },
46462
- filter.options &&
46463
- filter.options.map(function (option, optionIndex) {
46464
- return React__default['default'].createElement(
46465
- 'div',
46466
- { className: 'search__filter-row search__filter-row--checkbox', key: ''.concat(option.label, '-').concat(optionIndex) },
46467
- React__default['default'].createElement(
46468
- 'div',
46469
- { className: 'checkbox' },
46470
- React__default['default'].createElement(
46471
- 'label',
46472
- { className: 'checkbox__label' },
46473
- React__default['default'].createElement('input', {
46474
- type: 'checkbox',
46475
- className: 'checkbox__input checkbox__input--parent',
46476
- checked: option.isChecked,
46477
- onChange: function (e) {
46478
- return handleCheckBoxFilter(filter, option);
46479
- }
46480
- }),
46481
- React__default['default'].createElement('span', { className: 'radiobutton__label-text' }, option.label)
46482
- )
46483
- )
46484
- );
46485
- })
46486
- ),
46487
- isVisible &&
46488
- filter.type === 'toggle' &&
46489
- React__default['default'].createElement(
46490
- 'div',
46491
- { className: 'search__filter-rows' },
46492
- (_b = filter.options) === null || _b === void 0
46493
- ? void 0
46494
- : _b.map(function (option, optionIndex) {
46495
- return React__default['default'].createElement(
46496
- 'div',
46497
- { className: 'search__filter-row', key: ''.concat(option.label, '-').concat(optionIndex) },
46498
- React__default['default'].createElement('span', { className: 'search__filter-toggle-label' }, option.label),
46499
- React__default['default'].createElement('div', { className: 'checkbox' }),
46500
- React__default['default'].createElement(
46501
- 'label',
46502
- { className: 'checkbox__label' },
46503
- React__default['default'].createElement('input', {
46504
- type: 'checkbox',
46505
- className: 'checkbox__input',
46506
- checked: option.isChecked,
46507
- onChange: function () {
46508
- return handleCheckBoxFilter(filter, option);
46509
- }
46510
- })
46511
- )
46512
- );
46513
- })
46514
- ),
46515
- isVisible &&
46516
- filter &&
46517
- filter.type === 'slider' &&
46518
- (function () {
46519
- var _a, _b, _c, _d;
46520
- var min = (_a = filter.min) !== null && _a !== void 0 ? _a : 0;
46521
- var max = (_b = filter.max) !== null && _b !== void 0 ? _b : 100;
46522
- var selectedMin = (_c = filter.selectedMin) !== null && _c !== void 0 ? _c : min;
46523
- var selectedMax = (_d = filter.selectedMax) !== null && _d !== void 0 ? _d : max;
46524
- return React__default['default'].createElement(MultiRangeFilter, {
46525
- min: min,
46526
- max: max,
46527
- selectedMin: selectedMin,
46528
- selectedMax: selectedMax,
46529
- valueFormatter: function (value) {
46530
- return ''.concat(value);
46531
- },
46532
- onChange: function (newMin, newMax) {
46533
- handleSliderChange(filter, newMin, newMax);
46534
- }
46535
- });
46536
- })()
46537
- );
46538
- })
46539
- )
46540
- )
46541
- )
46542
- );
46543
- };
46544
-
46545
47698
  var GroupTourCard = function (_a) {
46546
47699
  var _b, _c, _d, _e, _f, _g;
46547
47700
  var result = _a.result,
@@ -46682,7 +47835,7 @@ var GroupTourCard = function (_a) {
46682
47835
  React__default['default'].createElement(
46683
47836
  'div',
46684
47837
  { className: 'search__result-card__allotment__price' },
46685
- formatPrice$2(result.price, result.currencyCode, languageCode),
47838
+ formatPrice$3(result.price, result.currencyCode, languageCode),
46686
47839
  ' ',
46687
47840
  translations.PRODUCT.PER_PERSON
46688
47841
  )
@@ -46859,80 +48012,245 @@ var enrichFiltersWithResults = function (results, filters, tags) {
46859
48012
  return updatedFilter;
46860
48013
  });
46861
48014
  };
46862
- var enrichFiltersWithPackageAccoResults = function (results, filters, tags) {
46863
- if (!results || results.length === 0 || !filters) {
46864
- return filters !== null && filters !== void 0 ? filters : [];
46865
- }
46866
- return filters.map(function (filter) {
46867
- var updatedFilter = __assign({}, filter);
46868
- if (filter.property === 'price' && (filter.min == null || filter.max == null)) {
46869
- var prices = results
46870
- .map(function (r) {
46871
- var _a;
46872
- return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
46873
- })
46874
- .filter(function (p) {
46875
- return p > 0;
46876
- });
46877
- if (prices.length > 0) {
46878
- updatedFilter.min = Math.floor(Math.min.apply(Math, prices));
46879
- updatedFilter.max = Math.ceil(Math.max.apply(Math, prices));
46880
- }
46881
- }
46882
- if (filter.property === 'accommodation') {
46883
- var map_4 = new Map();
46884
- results.forEach(function (r) {
46885
- var rooms = lodash.flatMap(r.rooms);
46886
- if (rooms) {
46887
- rooms.map(function (room) {
46888
- room.options.map(function (option) {
46889
- if (option.accommodationCode) {
46890
- map_4.set(option.accommodationCode, {
46891
- name: option.accommodationName,
46892
- code: option.accommodationCode
46893
- });
46894
- }
48015
+ var enrichFiltersWithPackageAccoResults = function (results, tags) {
48016
+ var filters = [];
48017
+ if (!results || results.length === 0) {
48018
+ return filters;
48019
+ }
48020
+ var regimeFilter = {
48021
+ property: 'regime',
48022
+ label: 'Regime',
48023
+ type: 'checkbox',
48024
+ options: [],
48025
+ isFrontendFilter: true
48026
+ };
48027
+ var map = new Map();
48028
+ results.forEach(function (r) {
48029
+ var rooms = lodash.flatMap(r.rooms);
48030
+ if (rooms) {
48031
+ rooms.map(function (room) {
48032
+ room.options.map(function (option) {
48033
+ if (option.regimeCode) {
48034
+ map.set(option.regimeCode, {
48035
+ name: option.regimeName,
48036
+ code: option.regimeCode
46895
48037
  });
46896
- });
46897
- }
48038
+ }
48039
+ });
46898
48040
  });
46899
- updatedFilter.options = Array.from(map_4.values()).map(function (accommodation) {
46900
- var _a;
46901
- return {
46902
- label: (_a = accommodation.name) !== null && _a !== void 0 ? _a : accommodation.code,
46903
- value: accommodation.code,
46904
- isChecked: false
46905
- };
48041
+ }
48042
+ });
48043
+ regimeFilter.options = Array.from(map.values()).map(function (regime) {
48044
+ var _a;
48045
+ return {
48046
+ label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
48047
+ value: regime.code,
48048
+ isChecked: false
48049
+ };
48050
+ });
48051
+ filters.push(regimeFilter);
48052
+ var priceFilter = {
48053
+ property: 'price',
48054
+ label: 'Prijs',
48055
+ type: 'slider',
48056
+ isFrontendFilter: true
48057
+ };
48058
+ var prices = results
48059
+ .map(function (r) {
48060
+ var _a;
48061
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
48062
+ })
48063
+ .filter(function (p) {
48064
+ return p > 0;
48065
+ });
48066
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
48067
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
48068
+ filters.push(priceFilter);
48069
+ return filters;
48070
+ };
48071
+ var enrichFiltersWithPackageFlightResults = function (results, tags, translations) {
48072
+ var filters = [];
48073
+ if (!results || results.length === 0) {
48074
+ return filters;
48075
+ }
48076
+ // Airlines
48077
+ var airlinesFilter = {
48078
+ label: 'Airlines',
48079
+ property: 'airline',
48080
+ type: 'checkbox',
48081
+ isFrontendFilter: true,
48082
+ options: []
48083
+ };
48084
+ var airlinesFilterMap = new Map();
48085
+ results.map(function (r) {
48086
+ var airlineCode = r.airlineCode;
48087
+ var airlineName = r.airlineName;
48088
+ if (airlineCode && airlineName) {
48089
+ airlinesFilterMap.set(airlineCode, {
48090
+ name: airlineName,
48091
+ code: airlineCode
46906
48092
  });
46907
48093
  }
46908
- if (filter.property === 'regime') {
46909
- var map_5 = new Map();
46910
- results.forEach(function (r) {
46911
- var rooms = lodash.flatMap(r.rooms);
46912
- if (rooms) {
46913
- rooms.map(function (room) {
46914
- room.options.map(function (option) {
46915
- if (option.regimeCode) {
46916
- map_5.set(option.regimeCode, {
46917
- name: option.regimeName,
46918
- code: option.regimeCode
46919
- });
46920
- }
46921
- });
46922
- });
46923
- }
48094
+ });
48095
+ airlinesFilter.options = Array.from(airlinesFilterMap.values()).map(function (airline) {
48096
+ var _a;
48097
+ return {
48098
+ label: (_a = airline.name) !== null && _a !== void 0 ? _a : airline.code,
48099
+ value: airline.code,
48100
+ isChecked: false
48101
+ };
48102
+ });
48103
+ filters.push(airlinesFilter);
48104
+ // Number of stops
48105
+ var stopsFilter = {
48106
+ label: 'Number of Stops',
48107
+ property: 'numberOfStops',
48108
+ type: 'checkbox',
48109
+ isFrontendFilter: true,
48110
+ options: []
48111
+ };
48112
+ var stopsMap = new Map();
48113
+ results.map(function (result) {
48114
+ var numberOfStops = getNumberOfStops(result.outward);
48115
+ if (!stopsMap.has(numberOfStops)) {
48116
+ stopsMap.set(numberOfStops, { numberOfStops: numberOfStops });
48117
+ }
48118
+ });
48119
+ stopsFilter.options = Array.from(stopsMap.values()).map(function (stop) {
48120
+ return {
48121
+ label: ''.concat(stop.numberOfStops == 0 ? 'direct' : stop.numberOfStops + ' Stop'.concat(stop.numberOfStops !== 1 ? 's' : '')),
48122
+ value: stop.numberOfStops,
48123
+ isChecked: false
48124
+ };
48125
+ });
48126
+ filters.push(stopsFilter);
48127
+ // Departure range
48128
+ var departureRangeFilter = {
48129
+ label: 'Departure Range',
48130
+ property: 'departureRange',
48131
+ type: 'checkbox',
48132
+ isFrontendFilter: true,
48133
+ options: []
48134
+ };
48135
+ var departureRangeMap = new Map();
48136
+ results.map(function (result) {
48137
+ var _a;
48138
+ var departureRange = rangeFromDateTimeInMinutes((_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime);
48139
+ if (!departureRangeMap.has(departureRange)) {
48140
+ departureRangeMap.set(departureRange, departureRange);
48141
+ }
48142
+ });
48143
+ departureRangeFilter.options = lodash.orderBy(Array.from(departureRangeMap.values()), ['id'], ['asc']).map(function (range) {
48144
+ return {
48145
+ label: getDepartureRangeName(translations, range),
48146
+ value: range,
48147
+ isChecked: false
48148
+ };
48149
+ });
48150
+ filters.push(departureRangeFilter);
48151
+ // Departure Airport
48152
+ var departureAirportFilter = {
48153
+ label: 'Departure Airport',
48154
+ property: 'departureAirport',
48155
+ type: 'checkbox',
48156
+ isFrontendFilter: true,
48157
+ options: []
48158
+ };
48159
+ var departureAirportsMap = new Map();
48160
+ results.map(function (result) {
48161
+ var departureSegment = getDepartureSegment(result.outward);
48162
+ var departureAirport = departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportCode;
48163
+ if (departureAirport && !departureAirportsMap.has(departureAirport)) {
48164
+ departureAirportsMap.set(departureAirport, {
48165
+ name: (departureSegment === null || departureSegment === void 0 ? void 0 : departureSegment.departureAirportName) + ' (' + departureAirport + ')',
48166
+ code: departureAirport
46924
48167
  });
46925
- updatedFilter.options = Array.from(map_5.values()).map(function (regime) {
46926
- var _a;
46927
- return {
46928
- label: (_a = regime.name) !== null && _a !== void 0 ? _a : regime.code,
46929
- value: regime.code,
46930
- isChecked: false
46931
- };
48168
+ }
48169
+ });
48170
+ departureAirportFilter.options = Array.from(departureAirportsMap.values()).map(function (airport) {
48171
+ var _a;
48172
+ return {
48173
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
48174
+ value: airport.code,
48175
+ isChecked: false
48176
+ };
48177
+ });
48178
+ filters.push(departureAirportFilter);
48179
+ // Arrival Airport
48180
+ var arrivalAirportFilter = {
48181
+ label: 'Arrival Airport',
48182
+ property: 'arrivalAirport',
48183
+ type: 'checkbox',
48184
+ isFrontendFilter: true,
48185
+ options: []
48186
+ };
48187
+ var arrivalAirportsMap = new Map();
48188
+ results.map(function (result) {
48189
+ var arrivalSegment = getArrivalSegment(result.outward);
48190
+ var arrivalAirport = arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportCode;
48191
+ if (arrivalAirport && !arrivalAirportsMap.has(arrivalAirport)) {
48192
+ arrivalAirportsMap.set(arrivalAirport, {
48193
+ name: (arrivalSegment === null || arrivalSegment === void 0 ? void 0 : arrivalSegment.arrivalAirportName) + ' (' + arrivalAirport + ')',
48194
+ code: arrivalAirport
46932
48195
  });
46933
48196
  }
46934
- return updatedFilter;
46935
48197
  });
48198
+ arrivalAirportFilter.options = Array.from(arrivalAirportsMap.values()).map(function (airport) {
48199
+ var _a;
48200
+ return {
48201
+ label: (_a = airport.name) !== null && _a !== void 0 ? _a : airport.code,
48202
+ value: airport.code,
48203
+ isChecked: false
48204
+ };
48205
+ });
48206
+ filters.push(arrivalAirportFilter);
48207
+ // Price
48208
+ var priceFilter = {
48209
+ label: 'Price',
48210
+ property: 'price',
48211
+ type: 'slider',
48212
+ isFrontendFilter: true
48213
+ };
48214
+ var prices = results
48215
+ .map(function (r) {
48216
+ var _a;
48217
+ return (_a = r.price) !== null && _a !== void 0 ? _a : 0;
48218
+ })
48219
+ .filter(function (p) {
48220
+ return p > 0;
48221
+ });
48222
+ if (prices.length > 0) {
48223
+ priceFilter.min = Math.floor(Math.min.apply(Math, prices));
48224
+ priceFilter.max = Math.ceil(Math.max.apply(Math, prices));
48225
+ }
48226
+ filters.push(priceFilter);
48227
+ // Travel duration
48228
+ var travelDurationFilter = {
48229
+ label: 'Travel Duration',
48230
+ property: 'travelDuration',
48231
+ type: 'slider',
48232
+ isFrontendFilter: true
48233
+ };
48234
+ var minTravelTimeDuration = Math.min.apply(
48235
+ Math,
48236
+ results.map(function (result) {
48237
+ return result.outward.durationInTicks;
48238
+ })
48239
+ );
48240
+ var maxTravelTimeDuration = Math.max.apply(
48241
+ Math,
48242
+ results.map(function (result) {
48243
+ return result.outward.durationInTicks;
48244
+ })
48245
+ );
48246
+ var minTravelTimeValue = durationInTicksInMinutes(minTravelTimeDuration);
48247
+ var maxTravelTimeValue = durationInTicksInMinutes(maxTravelTimeDuration);
48248
+ if (minTravelTimeValue != null && maxTravelTimeValue != null) {
48249
+ travelDurationFilter.min = minTravelTimeValue;
48250
+ travelDurationFilter.max = maxTravelTimeValue;
48251
+ }
48252
+ filters.push(travelDurationFilter);
48253
+ return filters;
46936
48254
  };
46937
48255
  var applyFilters = function (results, filters, sortBy) {
46938
48256
  var filtered = results.filter(function (r) {
@@ -47074,6 +48392,147 @@ var applyFiltersToPackageAccoResults = function (results, filters, sortBy) {
47074
48392
  return 0;
47075
48393
  });
47076
48394
  };
48395
+ var applyFiltersToPackageFlightResults = function (results, filters, sortBy) {
48396
+ var filtered = results.filter(function (result) {
48397
+ return filters.every(function (filter) {
48398
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
48399
+ if (!filter.isFrontendFilter) return true;
48400
+ // Airline
48401
+ if (filter.property === 'airline') {
48402
+ var selected =
48403
+ (_a = filter.options) === null || _a === void 0
48404
+ ? void 0
48405
+ : _a
48406
+ .filter(function (o) {
48407
+ return o.isChecked;
48408
+ })
48409
+ .map(function (o) {
48410
+ return o.value;
48411
+ });
48412
+ if (!selected || selected.length === 0) return true;
48413
+ return selected.includes(result.airlineCode);
48414
+ }
48415
+ // Stops
48416
+ if (filter.property === 'numberOfStops') {
48417
+ var selected =
48418
+ (_b = filter.options) === null || _b === void 0
48419
+ ? void 0
48420
+ : _b
48421
+ .filter(function (o) {
48422
+ return o.isChecked;
48423
+ })
48424
+ .map(function (o) {
48425
+ return o.value;
48426
+ });
48427
+ if (!selected || selected.length === 0) return true;
48428
+ return selected.includes(getNumberOfStops(result.outward)) && selected.includes(getNumberOfStops(result.return));
48429
+ }
48430
+ // Departure range
48431
+ if (filter.property === 'departureRange') {
48432
+ var selected =
48433
+ (_c = filter.options) === null || _c === void 0
48434
+ ? void 0
48435
+ : _c
48436
+ .filter(function (o) {
48437
+ return o.isChecked;
48438
+ })
48439
+ .map(function (o) {
48440
+ return o.value;
48441
+ });
48442
+ if (!selected || selected.length === 0) return true;
48443
+ return selected.includes(
48444
+ rangeFromDateTimeInMinutes((_d = getDepartureSegment(result.outward)) === null || _d === void 0 ? void 0 : _d.departureDateTime)
48445
+ );
48446
+ }
48447
+ // Departure airport
48448
+ if (filter.property === 'departureAirport') {
48449
+ var selected =
48450
+ (_e = filter.options) === null || _e === void 0
48451
+ ? void 0
48452
+ : _e
48453
+ .filter(function (o) {
48454
+ return o.isChecked;
48455
+ })
48456
+ .map(function (o) {
48457
+ return o.value;
48458
+ });
48459
+ if (!selected || selected.length === 0) return true;
48460
+ var departureAirportCode = (_f = getDepartureSegment(result.outward)) === null || _f === void 0 ? void 0 : _f.departureAirportCode;
48461
+ if (!departureAirportCode) return false;
48462
+ return selected.includes(departureAirportCode);
48463
+ }
48464
+ // Arrival airport
48465
+ if (filter.property === 'arrivalAirport') {
48466
+ var selected =
48467
+ (_g = filter.options) === null || _g === void 0
48468
+ ? void 0
48469
+ : _g
48470
+ .filter(function (o) {
48471
+ return o.isChecked;
48472
+ })
48473
+ .map(function (o) {
48474
+ return o.value;
48475
+ });
48476
+ if (!selected || selected.length === 0) return true;
48477
+ var arrivalAirportCode = (_h = getArrivalSegment(result.outward)) === null || _h === void 0 ? void 0 : _h.arrivalAirportCode;
48478
+ if (!arrivalAirportCode) return false;
48479
+ return selected.includes(arrivalAirportCode);
48480
+ }
48481
+ // PRICE
48482
+ if (filter.property === 'price') {
48483
+ if (filter.selectedMin != null && result.price < filter.selectedMin) return false;
48484
+ if (filter.selectedMax != null && result.price > filter.selectedMax) return false;
48485
+ return true;
48486
+ }
48487
+ // Travel times
48488
+ if (filter.property === 'travelDuration') {
48489
+ if (
48490
+ filter.selectedMin != null &&
48491
+ durationInTicksInMinutes((_j = result.outward) === null || _j === void 0 ? void 0 : _j.durationInTicks) < filter.selectedMin
48492
+ )
48493
+ return false;
48494
+ if (
48495
+ filter.selectedMax != null &&
48496
+ durationInTicksInMinutes((_k = result.outward) === null || _k === void 0 ? void 0 : _k.durationInTicks) > filter.selectedMax
48497
+ )
48498
+ return false;
48499
+ return true;
48500
+ }
48501
+ return true;
48502
+ });
48503
+ });
48504
+ // SORTING
48505
+ if (!sortBy || sortBy.label === 'default') {
48506
+ return filtered;
48507
+ }
48508
+ if (sortBy.label === 'departureTime') {
48509
+ return lodash.orderBy(
48510
+ results,
48511
+ [
48512
+ function (result) {
48513
+ var _a;
48514
+ return (_a = getDepartureSegment(result.outward)) === null || _a === void 0 ? void 0 : _a.departureDateTime;
48515
+ }
48516
+ ],
48517
+ [sortBy.direction] // or "desc"
48518
+ );
48519
+ } else if (sortBy.label === 'durationInTicks') {
48520
+ return lodash.orderBy(
48521
+ results,
48522
+ [
48523
+ function (result) {
48524
+ var _a, _b;
48525
+ return durationInTicksInMinutes(
48526
+ (_b = (_a = result.outward) === null || _a === void 0 ? void 0 : _a.durationInTicks) !== null && _b !== void 0 ? _b : 0
48527
+ );
48528
+ }
48529
+ ],
48530
+ [sortBy.direction] // or "desc"
48531
+ );
48532
+ } else {
48533
+ return lodash.orderBy(results, [sortBy.label], [sortBy.direction]);
48534
+ }
48535
+ };
47077
48536
 
47078
48537
  var getSelectedOptionsPerRoom = function (details) {
47079
48538
  var _a;
@@ -47270,6 +48729,227 @@ var FullItinerary = function (_a) {
47270
48729
  return React__default['default'].createElement('div', { ref: hostRef });
47271
48730
  };
47272
48731
 
48732
+ var getExcursionContentWithUpdatedPrice = function (contents, totalPrice, currencyCode) {
48733
+ if (!contents) return '';
48734
+ var decodedHtml = he.decode(contents);
48735
+ var parser = new DOMParser();
48736
+ var doc = parser.parseFromString(decodedHtml, 'text/html');
48737
+ var priceElement = doc.querySelector('[data-excursion-price]');
48738
+ if (priceElement) {
48739
+ priceElement.textContent = new Intl.NumberFormat('nl-BE', {
48740
+ style: 'currency',
48741
+ currency: currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR'
48742
+ }).format(totalPrice);
48743
+ }
48744
+ return doc.body.innerHTML;
48745
+ };
48746
+ var DayByDayExcursions = function () {
48747
+ var _a;
48748
+ var context = React.useContext(SearchResultsConfigurationContext);
48749
+ var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
48750
+ var dispatch = reactRedux.useDispatch();
48751
+ var confirmedExcursionsByDay = reactRedux.useSelector(function (state) {
48752
+ return state.searchResults;
48753
+ }).confirmedExcursionsByDay;
48754
+ var selectedPackagingAccoResult = reactRedux.useSelector(selectSelectedPackagingAccoResult);
48755
+ var stayDates = React.useMemo(
48756
+ function () {
48757
+ if (
48758
+ !(selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.fromDate) ||
48759
+ !(selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.toDate)
48760
+ ) {
48761
+ return [];
48762
+ }
48763
+ return getDatesBetween(selectedPackagingAccoResult.fromDate, selectedPackagingAccoResult.toDate);
48764
+ },
48765
+ [
48766
+ selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.fromDate,
48767
+ selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.toDate
48768
+ ]
48769
+ );
48770
+ var handleSearchExcursions = function (day) {
48771
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
48772
+ if (!selectedPackagingAccoResult) {
48773
+ return;
48774
+ }
48775
+ var searchParams = {
48776
+ date: day.toISOString(),
48777
+ fromDate: day.toISOString(),
48778
+ toDate: day.toISOString(),
48779
+ countryId: selectedPackagingAccoResult.countryId,
48780
+ regionId: selectedPackagingAccoResult.regionId,
48781
+ oordId: selectedPackagingAccoResult.oordId,
48782
+ locationId: selectedPackagingAccoResult.locationId,
48783
+ locationName: selectedPackagingAccoResult.locationName,
48784
+ accommodationCode:
48785
+ (_e =
48786
+ (_d =
48787
+ (_c =
48788
+ (_b = (_a = selectedPackagingAccoResult.rooms) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.options) ===
48789
+ null || _c === void 0
48790
+ ? void 0
48791
+ : _c.find(function (option) {
48792
+ return option.isSelected;
48793
+ })) === null || _d === void 0
48794
+ ? void 0
48795
+ : _d.accommodationCode) !== null && _e !== void 0
48796
+ ? _e
48797
+ : null,
48798
+ accommodationName:
48799
+ (_k =
48800
+ (_j =
48801
+ (_h =
48802
+ (_g = (_f = selectedPackagingAccoResult.rooms) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.options) ===
48803
+ null || _h === void 0
48804
+ ? void 0
48805
+ : _h.find(function (option) {
48806
+ return option.isSelected;
48807
+ })) === null || _j === void 0
48808
+ ? void 0
48809
+ : _j.accommodationName) !== null && _k !== void 0
48810
+ ? _k
48811
+ : null,
48812
+ hotelCode: selectedPackagingAccoResult.code,
48813
+ hotelName: selectedPackagingAccoResult.name,
48814
+ rooms:
48815
+ (_l = selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.rooms) !== null &&
48816
+ _l !== void 0
48817
+ ? _l
48818
+ : []
48819
+ };
48820
+ dispatch(setExcursionSearchParams(searchParams));
48821
+ dispatch(setFlyInIsOpen(true));
48822
+ dispatch(setFlyInType('excursion-results'));
48823
+ };
48824
+ var getSelectedOptionsSummary = function (excursion) {
48825
+ var options = excursion.rooms.flatMap(function (room) {
48826
+ var _a;
48827
+ return (_a = room.options) !== null && _a !== void 0 ? _a : [];
48828
+ });
48829
+ return options.filter(function (option) {
48830
+ return option.isSelected;
48831
+ });
48832
+ };
48833
+ if (!selectedPackagingAccoResult || stayDates.length === 0) {
48834
+ return null;
48835
+ }
48836
+ return React__default['default'].createElement(
48837
+ React__default['default'].Fragment,
48838
+ null,
48839
+ stayDates.map(function (day) {
48840
+ var _a;
48841
+ var dayKey = dateFns.format(day, 'yyyy-MM-dd');
48842
+ var formattedDay = dateFns.format(day, 'd');
48843
+ var formattedMonth = dateFns.format(day, 'MMM');
48844
+ var confirmedExcursions = (_a = confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : [];
48845
+ return React__default['default'].createElement(
48846
+ React__default['default'].Fragment,
48847
+ { key: dayKey },
48848
+ React__default['default'].createElement(
48849
+ 'div',
48850
+ { className: 'search__results__label search__results__label--secondary' },
48851
+ React__default['default'].createElement(
48852
+ 'div',
48853
+ { className: 'search__results__label__date' },
48854
+ React__default['default'].createElement('p', { className: 'search__results__label__date-date' }, formattedDay),
48855
+ React__default['default'].createElement('p', null, formattedMonth)
48856
+ ),
48857
+ React__default['default'].createElement(
48858
+ 'div',
48859
+ { className: 'search__results__label__text' },
48860
+ React__default['default'].createElement(
48861
+ 'h3',
48862
+ null,
48863
+ translations.SRP.SELECT,
48864
+ ' ',
48865
+ React__default['default'].createElement('strong', null, translations.SRP.EXCURSION)
48866
+ )
48867
+ )
48868
+ ),
48869
+ React__default['default'].createElement(
48870
+ 'div',
48871
+ { className: 'search__results__cards__actions' },
48872
+ React__default['default'].createElement('span', null, 'Accommodation for this day: ', selectedPackagingAccoResult.name),
48873
+ React__default['default'].createElement(
48874
+ 'button',
48875
+ {
48876
+ type: 'button',
48877
+ className: 'cta cta--secondary',
48878
+ onClick: function () {
48879
+ return handleSearchExcursions(day);
48880
+ }
48881
+ },
48882
+ confirmedExcursions.length > 0 ? 'Add another excursion' : ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.EXCURSION)
48883
+ )
48884
+ ),
48885
+ React__default['default'].createElement(
48886
+ 'div',
48887
+ { className: 'search__results__cards search__results__cards--compact' },
48888
+ confirmedExcursions &&
48889
+ confirmedExcursions.length > 0 &&
48890
+ confirmedExcursions.map(function (excursion) {
48891
+ var selectedOptions = getSelectedOptionsSummary(excursion);
48892
+ var totalPrice = selectedOptions.reduce(function (sum, option) {
48893
+ return sum + (option.price || 0);
48894
+ }, 0);
48895
+ var updatedContents = getExcursionContentWithUpdatedPrice(excursion.contents, totalPrice, excursion.currencyCode);
48896
+ return React__default['default'].createElement(
48897
+ 'div',
48898
+ {
48899
+ key: excursion.code,
48900
+ className: 'search__result-card__wrapper search__result-card__wrapper--custom',
48901
+ onMouseEnter: function (e) {
48902
+ return (e.currentTarget.style.transform = 'scale(1.02)');
48903
+ },
48904
+ onMouseLeave: function (e) {
48905
+ return (e.currentTarget.style.transform = 'scale(1)');
48906
+ }
48907
+ },
48908
+ React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: updatedContents } }),
48909
+ React__default['default'].createElement(
48910
+ 'div',
48911
+ { className: 'search__result-card__content--extra' },
48912
+ React__default['default'].createElement(
48913
+ 'div',
48914
+ { className: 'search__result-card__content__wrapper' },
48915
+ React__default['default'].createElement(
48916
+ 'div',
48917
+ { className: 'search__result-card__options' },
48918
+ selectedOptions.length > 0 &&
48919
+ selectedOptions.map(function (option) {
48920
+ return React__default['default'].createElement(
48921
+ 'div',
48922
+ { className: 'search__result-card__option', key: option.guid },
48923
+ React__default['default'].createElement(Icon$1, { name: 'ui-ticket', width: 14, height: 14, 'aria-hidden': 'true' }),
48924
+ React__default['default'].createElement('span', null, option.accommodationName)
48925
+ );
48926
+ })
48927
+ )
48928
+ )
48929
+ ),
48930
+ React__default['default'].createElement(
48931
+ 'div',
48932
+ { className: 'search__result-card__footer' },
48933
+ React__default['default'].createElement(
48934
+ 'button',
48935
+ {
48936
+ type: 'button',
48937
+ className: 'cta cta--remove',
48938
+ onClick: function () {
48939
+ return dispatch(removeConfirmedExcursionForDay({ dayKey: dayKey, excursionCode: excursion.code }));
48940
+ }
48941
+ },
48942
+ 'Remove'
48943
+ )
48944
+ )
48945
+ );
48946
+ })
48947
+ )
48948
+ );
48949
+ })
48950
+ );
48951
+ };
48952
+
47273
48953
  var SearchResultsContainer = function () {
47274
48954
  var _a, _b;
47275
48955
  var currentSearch = typeof window !== 'undefined' ? window.location.search : '';
@@ -47282,28 +48962,31 @@ var SearchResultsContainer = function () {
47282
48962
  results = _c.results,
47283
48963
  filteredResults = _c.filteredResults,
47284
48964
  packagingAccoResults = _c.packagingAccoResults,
47285
- filteredPackagingAccoResults = _c.filteredPackagingAccoResults;
47286
- _c.bookingPackageDetails;
47287
- var isLoading = _c.isLoading,
48965
+ filteredPackagingAccoResults = _c.filteredPackagingAccoResults,
48966
+ isLoading = _c.isLoading,
47288
48967
  flightsLoading = _c.flightsLoading,
48968
+ initialFilters = _c.initialFilters,
47289
48969
  filters = _c.filters,
48970
+ flightFilters = _c.flightFilters,
47290
48971
  selectedSortType = _c.selectedSortType,
48972
+ selectedFlightSortType = _c.selectedFlightSortType,
47291
48973
  selectedSearchResult = _c.selectedSearchResult,
47292
48974
  selectedPackagingAccoResultCode = _c.selectedPackagingAccoResultCode,
47293
48975
  flyInIsOpen = _c.flyInIsOpen,
47294
48976
  packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
47295
48977
  editablePackagingEntry = _c.editablePackagingEntry,
47296
48978
  transactionId = _c.transactionId,
47297
- accommodationFlyInStep = _c.accommodationFlyInStep,
48979
+ flyInType = _c.flyInType,
47298
48980
  itinerary = _c.itinerary,
47299
- packagingFlightResults = _c.packagingFlightResults;
48981
+ packagingFlightResults = _c.packagingFlightResults,
48982
+ confirmedExcursionsByDay = _c.confirmedExcursionsByDay;
47300
48983
  var isMobile = useMediaQuery('(max-width: 1200px)');
47301
48984
  var _d = React.useState(false),
47302
48985
  initialFiltersSet = _d[0],
47303
48986
  setInitialFiltersSet = _d[1];
47304
- var _e = React.useState([]),
47305
- initialFilters = _e[0],
47306
- setInitialFilters = _e[1];
48987
+ var _e = React.useState(false),
48988
+ initialFlightFiltersSet = _e[0],
48989
+ setInitialFlightFiltersSet = _e[1];
47307
48990
  var _f = React.useState(false),
47308
48991
  filtersOpen = _f[0],
47309
48992
  setFiltersOpen = _f[1];
@@ -47323,9 +49006,6 @@ var SearchResultsContainer = function () {
47323
49006
  selectedAccommodationSeed = _l[0],
47324
49007
  setSelectedAccommodationSeed = _l[1];
47325
49008
  var skipInitialPackagingAccoDetailsRef = React.useRef(false);
47326
- var _m = React.useState(false),
47327
- showAllOutwardFlights = _m[0],
47328
- setShowAllOutwardFlights = _m[1];
47329
49009
  var panelRef = React.useRef(null);
47330
49010
  var sortByTypes = [
47331
49011
  { direction: 'asc', label: 'default' },
@@ -47643,7 +49323,7 @@ var SearchResultsContainer = function () {
47643
49323
  if (!seed) return [2 /*return*/];
47644
49324
  setDetailsIsLoading(true);
47645
49325
  setSelectedAccommodationSeed(seed);
47646
- dispatch(setAccommodationFlyInStep('results'));
49326
+ dispatch(setFlyInType('acco-results'));
47647
49327
  handleFlyInToggle(true);
47648
49328
  return [4 /*yield*/, getOrCreateTransactionId()];
47649
49329
  case 1:
@@ -47801,7 +49481,7 @@ var SearchResultsContainer = function () {
47801
49481
  enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47802
49482
  if (!initialFiltersSet) {
47803
49483
  dispatch(resetFilters(enrichedFilters));
47804
- setInitialFilters(enrichedFilters);
49484
+ dispatch(setInitialFilters(enrichedFilters));
47805
49485
  setInitialFiltersSet(true);
47806
49486
  }
47807
49487
  dispatch(setResults(packageSearchResults));
@@ -47876,11 +49556,7 @@ var SearchResultsContainer = function () {
47876
49556
  return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47877
49557
  case 1:
47878
49558
  packageAccoSearchResults = _d.sent();
47879
- enrichedFilters = enrichFiltersWithPackageAccoResults(
47880
- packageAccoSearchResults,
47881
- context.filters,
47882
- (_a = context.tags) !== null && _a !== void 0 ? _a : []
47883
- );
49559
+ enrichedFilters = enrichFiltersWithPackageAccoResults(packageAccoSearchResults, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47884
49560
  if (!initialFiltersSet) {
47885
49561
  dispatch(resetFilters(enrichedFilters));
47886
49562
  setInitialFilters(enrichedFilters);
@@ -47926,11 +49602,12 @@ var SearchResultsContainer = function () {
47926
49602
  };
47927
49603
  var runFlightSearch = function (currentTransactionId, seed) {
47928
49604
  return __awaiter(void 0, void 0, void 0, function () {
47929
- var config, searchRequest, packageFlightSearchResults, firstResult, err_4;
47930
- return __generator(this, function (_a) {
47931
- switch (_a.label) {
49605
+ var config, searchRequest, packageFlightSearchResults, enrichedFilters, initialFilteredResults, firstResult, err_4;
49606
+ var _a;
49607
+ return __generator(this, function (_b) {
49608
+ switch (_b.label) {
47932
49609
  case 0:
47933
- _a.trys.push([0, 2, , 3]);
49610
+ _b.trys.push([0, 2, , 3]);
47934
49611
  if (!context) return [2 /*return*/];
47935
49612
  dispatch(setFlightsLoading(true));
47936
49613
  config = {
@@ -47941,17 +49618,31 @@ var SearchResultsContainer = function () {
47941
49618
  searchRequest.agentId = context.agentId;
47942
49619
  return [4 /*yield*/, build.searchPackagingFlights(config, searchRequest)];
47943
49620
  case 1:
47944
- packageFlightSearchResults = _a.sent();
49621
+ packageFlightSearchResults = _b.sent();
49622
+ enrichedFilters = enrichFiltersWithPackageFlightResults(
49623
+ packageFlightSearchResults,
49624
+ (_a = context.tags) !== null && _a !== void 0 ? _a : [],
49625
+ translations
49626
+ );
49627
+ if (!initialFlightFiltersSet) {
49628
+ dispatch(resetFlightFilters(enrichedFilters));
49629
+ dispatch(setInitialFlightFilters(enrichedFilters));
49630
+ setInitialFlightFiltersSet(true);
49631
+ }
47945
49632
  dispatch(setPackagingFlightResults(packageFlightSearchResults));
47946
- firstResult = lodash.first(packageFlightSearchResults);
47947
- if (firstResult) {
47948
- setSelectedOutwardKey(getFlightKey(firstResult.outward.segments));
47949
- setSelectedReturnKey(getFlightKey(firstResult.return.segments));
49633
+ initialFilteredResults = applyFiltersToPackageFlightResults(packageFlightSearchResults, filters, null);
49634
+ dispatch(setFilteredPackagingFlightResults(initialFilteredResults));
49635
+ if (initialFilteredResults.length > 0) {
49636
+ firstResult = lodash.first(packageFlightSearchResults);
49637
+ if (firstResult) {
49638
+ dispatch(setSelectedOutwardKey(getFlightKey(firstResult.outward.segments)));
49639
+ dispatch(setSelectedReturnKey(getFlightKey(firstResult.return.segments)));
49640
+ }
47950
49641
  }
47951
49642
  dispatch(setFlightsLoading(false));
47952
49643
  return [3 /*break*/, 3];
47953
49644
  case 2:
47954
- err_4 = _a.sent();
49645
+ err_4 = _b.sent();
47955
49646
  console.error('FlightSearch failed', err_4);
47956
49647
  dispatch(setFlightsLoading(false));
47957
49648
  return [3 /*break*/, 3];
@@ -48173,6 +49864,7 @@ var SearchResultsContainer = function () {
48173
49864
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour
48174
49865
  ) {
48175
49866
  handleFlyInToggle(true);
49867
+ dispatch(setFlyInType('acco-details'));
48176
49868
  }
48177
49869
  _f.label = 1;
48178
49870
  case 1:
@@ -48264,13 +49956,15 @@ var SearchResultsContainer = function () {
48264
49956
  if (selectedPackagingAccoResultCode) {
48265
49957
  fetchPackagingAccoSearchDetails();
48266
49958
  }
48267
- dispatch(setAccommodationFlyInStep('details'));
48268
49959
  },
48269
49960
  [selectedSearchResult, selectedPackagingAccoResultCode]
48270
49961
  );
48271
49962
  React.useEffect(
48272
49963
  function () {
48273
- if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
49964
+ if (
49965
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
49966
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight
49967
+ ) {
48274
49968
  var filteredPackageAccoResults = applyFiltersToPackageAccoResults(packagingAccoResults, filters, selectedSortType);
48275
49969
  dispatch(setFilteredPackagingAccoResults(filteredPackageAccoResults));
48276
49970
  } else {
@@ -48280,6 +49974,15 @@ var SearchResultsContainer = function () {
48280
49974
  },
48281
49975
  [filters, results, packagingAccoResults, selectedSortType]
48282
49976
  );
49977
+ React.useEffect(
49978
+ function () {
49979
+ if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight) {
49980
+ var filteredPackageFlightResults = applyFiltersToPackageFlightResults(packagingFlightResults, flightFilters, selectedFlightSortType);
49981
+ dispatch(setFilteredPackagingFlightResults(filteredPackageFlightResults));
49982
+ }
49983
+ },
49984
+ [flightFilters, packagingFlightResults, selectedFlightSortType]
49985
+ );
48283
49986
  React.useEffect(
48284
49987
  function () {
48285
49988
  setInitialFiltersSet(false);
@@ -48354,7 +50057,6 @@ var SearchResultsContainer = function () {
48354
50057
  return [4 /*yield*/, build.getItinerary(config, request)];
48355
50058
  case 2:
48356
50059
  itinerary_1 = _c.sent();
48357
- console.log('Fetched itinerary', itinerary_1);
48358
50060
  dispatch(setItinerary(itinerary_1));
48359
50061
  setItineraryIsLoading(false);
48360
50062
  return [3 /*break*/, 4];
@@ -48375,37 +50077,22 @@ var SearchResultsContainer = function () {
48375
50077
  [editablePackagingEntry]
48376
50078
  );
48377
50079
  // Flight selection
48378
- var _o = React.useState(null),
48379
- selectedOutwardKey = _o[0],
48380
- setSelectedOutwardKey = _o[1];
48381
- var _p = React.useState(null),
48382
- selectedReturnKey = _p[0],
48383
- setSelectedReturnKey = _p[1];
48384
- var uniqueOutwardFlights = React__default['default'].useMemo(
48385
- function () {
48386
- var map = new Map();
48387
- packagingFlightResults.forEach(function (flight) {
48388
- var key = getFlightKey(flight.outward.segments);
48389
- if (!map.has(key)) {
48390
- map.set(key, flight);
48391
- }
48392
- });
48393
- return Array.from(map.values());
48394
- },
48395
- [packagingFlightResults]
48396
- );
48397
- var _q = React.useState([]),
48398
- uniqueReturnFlights = _q[0],
48399
- setUniqueReturnFlights = _q[1];
50080
+ // const [selectedOutwardKey, setSelectedOutwardKey] = useState<string | null>(null);
50081
+ // const [selectedReturnKey, setSelectedReturnKey] = useState<string | null>(null);
50082
+ var selectedOutwardKey = reactRedux.useSelector(selectSelectedOutwardKey);
50083
+ var selectedReturnKey = reactRedux.useSelector(selectSelectedReturnKey);
50084
+ var uniqueOutwardFlights = reactRedux.useSelector(selectUniqueOutwardFlights);
50085
+ var uniqueReturnFlights = reactRedux.useSelector(selectUniqueReturnFlights);
50086
+ var selectedOutward = reactRedux.useSelector(selectSelectedOutward);
50087
+ var selectedReturn = reactRedux.useSelector(selectSelectedReturn);
50088
+ var selectedCombinationFlight = reactRedux.useSelector(selectSelectedCombinationFlight);
48400
50089
  React.useEffect(
48401
50090
  function () {
48402
50091
  var _a;
48403
50092
  if (!selectedOutwardKey) {
48404
- setUniqueReturnFlights([]);
48405
- setSelectedReturnKey(null);
50093
+ dispatch(setSelectedReturnKey(null));
48406
50094
  return;
48407
50095
  }
48408
- // Filter combinations that match selected outward fare
48409
50096
  var matchingCombinations = packagingFlightResults.filter(function (flight) {
48410
50097
  return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48411
50098
  });
@@ -48417,44 +50104,26 @@ var SearchResultsContainer = function () {
48417
50104
  }
48418
50105
  });
48419
50106
  var returns = Array.from(returnMap.values());
48420
- setUniqueReturnFlights(returns);
48421
- var firstReturnKey = returns.length > 0 ? getFlightKey((_a = lodash.first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments) : null;
48422
- if (firstReturnKey) {
48423
- setSelectedReturnKey(firstReturnKey);
50107
+ var segments = (_a = lodash.first(returns)) === null || _a === void 0 ? void 0 : _a.return.segments;
50108
+ var firstReturnKey = returns.length > 0 && segments ? getFlightKey(segments) : null;
50109
+ if (
50110
+ !returns.some(function (x) {
50111
+ return getFlightKey(x.return.segments) === selectedReturnKey;
50112
+ })
50113
+ ) {
50114
+ dispatch(setSelectedReturnKey(firstReturnKey));
48424
50115
  }
48425
50116
  },
48426
- [selectedOutwardKey, packagingFlightResults]
50117
+ [selectedOutwardKey, packagingFlightResults, selectedReturnKey, dispatch]
48427
50118
  );
48428
- var selectedOutward = React__default['default'].useMemo(
48429
- function () {
48430
- if (!selectedOutwardKey) return null;
48431
- return (
48432
- packagingFlightResults.find(function (flight) {
48433
- return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48434
- }) || null
48435
- );
48436
- },
48437
- [packagingFlightResults, selectedOutwardKey]
48438
- );
48439
- var selectedReturn = React__default['default'].useMemo(
48440
- function () {
48441
- if (!selectedReturnKey) return null;
48442
- return (
48443
- packagingFlightResults.find(function (flight) {
48444
- return getFlightKey(flight.return.segments) === selectedReturnKey;
48445
- }) || null
48446
- );
48447
- },
48448
- [packagingFlightResults, selectedReturnKey]
48449
- );
48450
- var selectedCombinationFlight = React__default['default'].useMemo(
50119
+ var visibleOutwardFlights = React__default['default'].useMemo(
48451
50120
  function () {
48452
- if (!selectedOutwardKey || !selectedReturnKey) return undefined;
48453
- return packagingFlightResults.find(function (flight) {
48454
- return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
50121
+ var withoutSelected = uniqueOutwardFlights.filter(function (x) {
50122
+ return getFlightKey(x.outward.segments) !== selectedOutwardKey;
48455
50123
  });
50124
+ return withoutSelected.slice(0, 3);
48456
50125
  },
48457
- [packagingFlightResults, selectedOutwardKey, selectedReturnKey]
50126
+ [uniqueOutwardFlights, selectedOutwardKey]
48458
50127
  );
48459
50128
  // TODO: get details for selected combination flight and show in fly-in
48460
50129
  // useEffect(() => {
@@ -48463,6 +50132,7 @@ var SearchResultsContainer = function () {
48463
50132
  // // onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
48464
50133
  // dispatch(setFlyInIsOpen(true));
48465
50134
  // }, [selectedCombinationFlight, dispatch]);
50135
+ // Build packagingEntry
48466
50136
  React.useEffect(
48467
50137
  function () {
48468
50138
  var _a, _b, _c, _d;
@@ -48478,6 +50148,7 @@ var SearchResultsContainer = function () {
48478
50148
  selectedHotelCode: selectedPackagingAccoResultCode,
48479
50149
  accommodationResults: packagingAccoResults,
48480
50150
  selectedFlight: selectedCombinationFlight !== null && selectedCombinationFlight !== void 0 ? selectedCombinationFlight : null,
50151
+ confirmedExcursionsByDay: confirmedExcursionsByDay,
48481
50152
  seed: seed,
48482
50153
  transactionId:
48483
50154
  (_c =
@@ -48490,6 +50161,7 @@ var SearchResultsContainer = function () {
48490
50161
  : '',
48491
50162
  language: (_d = context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
48492
50163
  });
50164
+ console.log('Built nextEntry', nextEntry);
48493
50165
  if (!nextEntry) return;
48494
50166
  dispatch(setEditablePackagingEntry(nextEntry));
48495
50167
  if (selectedCombinationFlight) {
@@ -48503,6 +50175,7 @@ var SearchResultsContainer = function () {
48503
50175
  packagingAccoResults,
48504
50176
  packagingAccoSearchDetails,
48505
50177
  selectedCombinationFlight,
50178
+ confirmedExcursionsByDay,
48506
50179
  transactionId,
48507
50180
  dispatch
48508
50181
  ]
@@ -48517,56 +50190,103 @@ var SearchResultsContainer = function () {
48517
50190
  return line.serviceType !== FLIGHT_SERVICE_TYPE;
48518
50191
  });
48519
50192
  };
50193
+ var removeExcursionLines = function (lines) {
50194
+ return lines.filter(function (line) {
50195
+ return line.serviceType !== EXCURSION_SERVICE_TYPE;
50196
+ });
50197
+ };
48520
50198
  var buildAccommodationLinesFromSelection = function (selectedHotel, seed) {
48521
- if (!selectedHotel) return [];
50199
+ return buildPackagingAccommodationLines(selectedHotel, seed, ACCOMMODATION_SERVICE_TYPE);
50200
+ };
50201
+ var buildExcursionLinesFromConfirmedDays = function (confirmedExcursionsByDay) {
50202
+ return Object.values(confirmedExcursionsByDay)
50203
+ .flat()
50204
+ .flatMap(function (excursion) {
50205
+ var selectedOptions = excursion.rooms.flatMap(function (room) {
50206
+ return room.options.filter(function (option) {
50207
+ return option.isSelected;
50208
+ });
50209
+ });
50210
+ var parentGuid = crypto.randomUUID();
50211
+ return selectedOptions.map(function (option, index) {
50212
+ var _a, _b, _c;
50213
+ return {
50214
+ guid: (_a = option.guid) !== null && _a !== void 0 ? _a : crypto.randomUUID(),
50215
+ moment: '',
50216
+ parentGuid: index === 0 ? null : parentGuid,
50217
+ order: index,
50218
+ isChanged: true,
50219
+ from: excursion.fromDate,
50220
+ to: excursion.toDate,
50221
+ serviceType: EXCURSION_SERVICE_TYPE,
50222
+ productName: excursion.name,
50223
+ productCode: excursion.code,
50224
+ accommodationName: option.accommodationName,
50225
+ accommodationCode: option.accommodationCode,
50226
+ regimeName: option.regimeName,
50227
+ regimeCode: option.regimeCode,
50228
+ country: excursion.countryId ? { id: excursion.countryId, name: excursion.countryName, localizations: [] } : null,
50229
+ region: excursion.regionId ? { id: excursion.regionId, name: excursion.regionName, localizations: [] } : null,
50230
+ oord: excursion.oordId ? { id: excursion.oordId, name: excursion.oordName, localizations: [] } : null,
50231
+ location: excursion.locationId ? { id: excursion.locationId, name: excursion.locationName, localizations: [] } : null,
50232
+ longitude: (_b = excursion.longitude) !== null && _b !== void 0 ? _b : null,
50233
+ latitude: (_c = excursion.latitude) !== null && _c !== void 0 ? _c : null,
50234
+ pax: Array.isArray(option.paxIds)
50235
+ ? option.paxIds.map(function (paxId, paxIndex) {
50236
+ return {
50237
+ paxId: paxId,
50238
+ room: 0,
50239
+ order: paxIndex
50240
+ };
50241
+ })
50242
+ : [],
50243
+ flightInformation: null
50244
+ };
50245
+ });
50246
+ });
50247
+ };
50248
+ var buildPackagingAccommodationLines = function (selectedItem, seed, serviceType) {
50249
+ if (!selectedItem) return [];
48522
50250
  var parentGuid = crypto.randomUUID();
48523
- return selectedHotel.rooms
50251
+ return selectedItem.rooms
48524
50252
  .filter(function (room) {
48525
50253
  return room.options.some(function (o) {
48526
50254
  return o.isSelected;
48527
50255
  });
48528
50256
  })
48529
50257
  .map(function (room, index) {
48530
- var _a, _b, _c, _d, _e;
50258
+ var _a, _b, _c;
48531
50259
  var option = room.options.find(function (o) {
48532
50260
  return o.isSelected;
48533
50261
  });
48534
- var pax =
48535
- (_b =
48536
- (_a = seed.rooms) === null || _a === void 0
48537
- ? void 0
48538
- : _a.flatMap(function (room, roomIndex) {
48539
- return room.pax.map(function (p, paxIndex) {
48540
- return {
48541
- paxId: p.id,
48542
- room: roomIndex,
48543
- order: paxIndex
48544
- };
48545
- });
48546
- })) !== null && _b !== void 0
48547
- ? _b
48548
- : [];
50262
+ var pax = option.paxIds.map(function (p, paxIndex) {
50263
+ return {
50264
+ paxId: p,
50265
+ room: index,
50266
+ order: paxIndex
50267
+ };
50268
+ });
48549
50269
  return {
48550
- guid: (_c = option.guid) !== null && _c !== void 0 ? _c : crypto.randomUUID(),
50270
+ guid: (_a = option.guid) !== null && _a !== void 0 ? _a : crypto.randomUUID(),
48551
50271
  moment: '',
48552
50272
  parentGuid: index === 0 ? null : parentGuid,
48553
50273
  order: index,
48554
50274
  isChanged: true,
48555
- from: selectedHotel.fromDate,
48556
- to: selectedHotel.toDate,
48557
- serviceType: ACCOMMODATION_SERVICE_TYPE,
48558
- productName: selectedHotel.name,
48559
- productCode: selectedHotel.code,
50275
+ from: selectedItem.fromDate,
50276
+ to: selectedItem.toDate,
50277
+ serviceType: serviceType,
50278
+ productName: selectedItem.name,
50279
+ productCode: selectedItem.code,
48560
50280
  accommodationName: option.accommodationName,
48561
50281
  accommodationCode: option.accommodationCode,
48562
50282
  regimeName: option.regimeName,
48563
50283
  regimeCode: option.regimeCode,
48564
- country: selectedHotel.countryId ? { id: selectedHotel.countryId, name: selectedHotel.countryName, localizations: [] } : null,
48565
- region: selectedHotel.regionId ? { id: selectedHotel.regionId, name: selectedHotel.regionName, localizations: [] } : null,
48566
- oord: selectedHotel.oordId ? { id: selectedHotel.oordId, name: selectedHotel.oordName, localizations: [] } : null,
48567
- location: selectedHotel.locationId ? { id: selectedHotel.locationId, name: selectedHotel.locationName, localizations: [] } : null,
48568
- longitude: (_d = selectedHotel.longitude) !== null && _d !== void 0 ? _d : null,
48569
- latitude: (_e = selectedHotel.latitude) !== null && _e !== void 0 ? _e : null,
50284
+ country: selectedItem.countryId ? { id: selectedItem.countryId, name: selectedItem.countryName, localizations: [] } : null,
50285
+ region: selectedItem.regionId ? { id: selectedItem.regionId, name: selectedItem.regionName, localizations: [] } : null,
50286
+ oord: selectedItem.oordId ? { id: selectedItem.oordId, name: selectedItem.oordName, localizations: [] } : null,
50287
+ location: selectedItem.locationId ? { id: selectedItem.locationId, name: selectedItem.locationName, localizations: [] } : null,
50288
+ longitude: (_b = selectedItem.longitude) !== null && _b !== void 0 ? _b : null,
50289
+ latitude: (_c = selectedItem.latitude) !== null && _c !== void 0 ? _c : null,
48570
50290
  pax: pax,
48571
50291
  flightInformation: null
48572
50292
  };
@@ -48694,6 +50414,7 @@ var SearchResultsContainer = function () {
48694
50414
  selectedHotelCode = _a.selectedHotelCode,
48695
50415
  accommodationResults = _a.accommodationResults,
48696
50416
  selectedFlight = _a.selectedFlight,
50417
+ confirmedExcursionsByDay = _a.confirmedExcursionsByDay,
48697
50418
  seed = _a.seed,
48698
50419
  transactionId = _a.transactionId,
48699
50420
  language = _a.language;
@@ -48721,6 +50442,12 @@ var SearchResultsContainer = function () {
48721
50442
  nextLines = __spreadArray(__spreadArray([], nextLines, true), flightLines, true);
48722
50443
  }
48723
50444
  }
50445
+ // excursions
50446
+ var excursionLines = buildExcursionLinesFromConfirmedDays(confirmedExcursionsByDay);
50447
+ nextLines = removeExcursionLines(nextLines);
50448
+ if (excursionLines.length) {
50449
+ nextLines = __spreadArray(__spreadArray([], nextLines, true), excursionLines, true);
50450
+ }
48724
50451
  nextLines = nextLines.map(function (line, index) {
48725
50452
  return __assign(__assign({}, line), { order: index });
48726
50453
  });
@@ -48731,7 +50458,7 @@ var SearchResultsContainer = function () {
48731
50458
  if (sourceEntry) {
48732
50459
  return structuredClone(sourceEntry);
48733
50460
  }
48734
- var paxId = 1;
50461
+ var paxId = 0;
48735
50462
  var pax =
48736
50463
  (_b =
48737
50464
  (_a = seed.rooms) === null || _a === void 0
@@ -48761,12 +50488,10 @@ var SearchResultsContainer = function () {
48761
50488
  lines: []
48762
50489
  };
48763
50490
  };
48764
- var visibleOutwardFlights = React__default['default'].useMemo(
48765
- function () {
48766
- return showAllOutwardFlights ? uniqueOutwardFlights : uniqueOutwardFlights.slice(0, 3);
48767
- },
48768
- [showAllOutwardFlights, uniqueOutwardFlights]
48769
- );
50491
+ var handleShowMoreFlights = function (flyInType) {
50492
+ dispatch(setFlyInType(flyInType));
50493
+ dispatch(setFlyInIsOpen(true));
50494
+ };
48770
50495
  return React__default['default'].createElement(
48771
50496
  'div',
48772
50497
  { id: 'tide-booking', className: 'search__bg' },
@@ -48783,7 +50508,6 @@ var SearchResultsContainer = function () {
48783
50508
  { tideConnection: context.tideConnection },
48784
50509
  React__default['default'].createElement(FlightResultsContainer, { isMobile: isMobile }),
48785
50510
  React__default['default'].createElement(FlyIn, {
48786
- title: 'Select your fare',
48787
50511
  srpType: context.searchConfiguration.qsmType,
48788
50512
  isOpen: flyInIsOpen,
48789
50513
  setIsOpen: handleFlyInToggle,
@@ -48810,7 +50534,13 @@ var SearchResultsContainer = function () {
48810
50534
  return setFiltersOpen(!filtersOpen);
48811
50535
  },
48812
50536
  // handleApplyFilters={() => setSearchTrigger((prev) => prev + 1)}
48813
- isLoading: isLoading
50537
+ isLoading: isLoading,
50538
+ setFilters: function (filters) {
50539
+ return dispatch(setFilters(filters));
50540
+ },
50541
+ resetFilters: function (filters) {
50542
+ return dispatch(resetFilters(filters));
50543
+ }
48814
50544
  }),
48815
50545
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48816
50546
  React__default['default'].createElement(Itinerary, {
@@ -48877,53 +50607,53 @@ var SearchResultsContainer = function () {
48877
50607
  }
48878
50608
  })
48879
50609
  ),
48880
- React__default['default'].createElement(
48881
- 'div',
48882
- { className: 'search__result-row' },
50610
+ context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
48883
50611
  React__default['default'].createElement(
48884
- 'span',
48885
- { className: 'search__result-row-text' },
48886
- !isLoading &&
48887
- context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
50612
+ 'div',
50613
+ { className: 'search__result-row' },
50614
+ React__default['default'].createElement(
50615
+ 'span',
50616
+ { className: 'search__result-row-text' },
50617
+ !isLoading &&
50618
+ React__default['default'].createElement(
50619
+ React__default['default'].Fragment,
50620
+ null,
50621
+ context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
50622
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
50623
+ (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
50624
+ context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
50625
+ (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
50626
+ filteredResults.length,
50627
+ '\u00A0',
50628
+ translations.SRP.TOTAL_RESULTS_LABEL
50629
+ )
50630
+ ),
50631
+ !context.packagingEntry &&
50632
+ !isMobile &&
50633
+ sortByTypes &&
50634
+ sortByTypes.length > 0 &&
48888
50635
  React__default['default'].createElement(
48889
- React__default['default'].Fragment,
48890
- null,
48891
- context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
48892
- (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
48893
- (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
48894
- context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
48895
- (filteredResults === null || filteredResults === void 0 ? void 0 : filteredResults.length) &&
48896
- filteredResults.length,
48897
- '\u00A0',
48898
- translations.SRP.TOTAL_RESULTS_LABEL
50636
+ 'div',
50637
+ { className: 'search__result-row-filter' },
50638
+ React__default['default'].createElement(ItemPicker, {
50639
+ items: sortByTypes,
50640
+ selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
50641
+ selectedSortByType: selectedSortType,
50642
+ label: translations.SRP.SORTBY,
50643
+ placeholder: translations.SRP.SORTBY,
50644
+ classModifier: 'travel-class-picker__items',
50645
+ valueFormatter: function (value, direction) {
50646
+ return getSortingName(
50647
+ translations,
50648
+ findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
50649
+ );
50650
+ },
50651
+ onPick: function (newSortKey, direction) {
50652
+ return handleSortChange(newSortKey, direction);
50653
+ }
50654
+ })
48899
50655
  )
48900
50656
  ),
48901
- !context.packagingEntry &&
48902
- !isMobile &&
48903
- sortByTypes &&
48904
- sortByTypes.length > 0 &&
48905
- React__default['default'].createElement(
48906
- 'div',
48907
- { className: 'search__result-row-filter' },
48908
- React__default['default'].createElement(ItemPicker, {
48909
- items: sortByTypes,
48910
- selection: (selectedSortType === null || selectedSortType === void 0 ? void 0 : selectedSortType.label) || undefined,
48911
- selectedSortByType: selectedSortType,
48912
- label: translations.SRP.SORTBY,
48913
- placeholder: translations.SRP.SORTBY,
48914
- classModifier: 'travel-class-picker__items',
48915
- valueFormatter: function (value, direction) {
48916
- return getSortingName(
48917
- translations,
48918
- findSortByType(sortByTypes, value, direction !== null && direction !== void 0 ? direction : 'asc')
48919
- );
48920
- },
48921
- onPick: function (newSortKey, direction) {
48922
- return handleSortChange(newSortKey, direction);
48923
- }
48924
- })
48925
- )
48926
- ),
48927
50657
  React__default['default'].createElement(
48928
50658
  'div',
48929
50659
  { className: 'search__results__wrapper' },
@@ -48937,8 +50667,6 @@ var SearchResultsContainer = function () {
48937
50667
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48938
50668
  !context.packagingEntry &&
48939
50669
  context.showFlightResults &&
48940
- // bookingPackageDetails?.outwardFlights &&
48941
- // <FlightResults flights={bookingPackageDetails?.outwardFlights} isDeparture={true} />
48942
50670
  React__default['default'].createElement(
48943
50671
  React__default['default'].Fragment,
48944
50672
  null,
@@ -48977,7 +50705,7 @@ var SearchResultsContainer = function () {
48977
50705
  item: selectedOutward.outward,
48978
50706
  guid: selectedOutward.outwardGuid,
48979
50707
  onSelect: function () {
48980
- return setSelectedOutwardKey(null);
50708
+ return dispatch(setSelectedOutwardKey(null));
48981
50709
  },
48982
50710
  selectedGuid: selectedOutward.outwardGuid,
48983
50711
  isOutward: true,
@@ -48989,7 +50717,7 @@ var SearchResultsContainer = function () {
48989
50717
  key: 'flight-'.concat(result.outwardGuid),
48990
50718
  item: result.outward,
48991
50719
  onSelect: function () {
48992
- return setSelectedOutwardKey(getFlightKey(result.outward.segments));
50720
+ return dispatch(setSelectedOutwardKey(getFlightKey(result.outward.segments)));
48993
50721
  },
48994
50722
  guid: result.outwardGuid,
48995
50723
  isOutward: true,
@@ -49008,10 +50736,10 @@ var SearchResultsContainer = function () {
49008
50736
  {
49009
50737
  className: 'cta cta--secondary',
49010
50738
  onClick: function () {
49011
- return setShowAllOutwardFlights(!showAllOutwardFlights);
50739
+ return handleShowMoreFlights('flight-outward-results');
49012
50740
  }
49013
50741
  },
49014
- showAllOutwardFlights ? translations.SRP.SHOW_LESS : translations.SRP.SHOW_MORE
50742
+ translations.SRP.SHOW_MORE
49015
50743
  )
49016
50744
  )
49017
50745
  )
@@ -49019,11 +50747,12 @@ var SearchResultsContainer = function () {
49019
50747
  context.showHotelAccommodationResults &&
49020
50748
  !context.packagingEntry &&
49021
50749
  React__default['default'].createElement(HotelAccommodationResults, { isLoading: isLoading }),
50750
+ context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
50751
+ !context.packagingEntry &&
50752
+ React__default['default'].createElement(DayByDayExcursions, null),
49022
50753
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
49023
50754
  !context.packagingEntry &&
49024
50755
  context.showFlightResults &&
49025
- // bookingPackageDetails?.returnFlights &&
49026
- // <FlightResults flights={bookingPackageDetails?.returnFlights} isDeparture={false} />
49027
50756
  React__default['default'].createElement(
49028
50757
  React__default['default'].Fragment,
49029
50758
  null,
@@ -49066,7 +50795,7 @@ var SearchResultsContainer = function () {
49066
50795
  key: 'flight-'.concat(result.outwardGuid),
49067
50796
  item: result.return,
49068
50797
  onSelect: function () {
49069
- return setSelectedReturnKey(getFlightKey(result.return.segments));
50798
+ return dispatch(setSelectedReturnKey(getFlightKey(result.return.segments)));
49070
50799
  },
49071
50800
  guid: result.outwardGuid,
49072
50801
  isOutward: false,
@@ -49083,7 +50812,6 @@ var SearchResultsContainer = function () {
49083
50812
  )
49084
50813
  ),
49085
50814
  React__default['default'].createElement(FlyIn, {
49086
- title: ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.ACCOMMODATION),
49087
50815
  srpType: context.searchConfiguration.qsmType,
49088
50816
  isOpen: flyInIsOpen,
49089
50817
  setIsOpen: handleFlyInToggle,
@@ -49094,8 +50822,10 @@ var SearchResultsContainer = function () {
49094
50822
  return (panelRef.current = el);
49095
50823
  },
49096
50824
  detailsLoading: detailsIsLoading,
49097
- accommodationStep: accommodationFlyInStep,
49098
- isPackageEditFlow: !!context.packagingEntry
50825
+ flyInType: flyInType,
50826
+ isPackageEditFlow: !!context.packagingEntry,
50827
+ sortByTypes: sortByTypes,
50828
+ activeSearchSeed: activeSearchSeed
49099
50829
  })
49100
50830
  )
49101
50831
  )