@qite/tide-booking-component 1.4.104 → 1.4.106

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 (58) hide show
  1. package/build/build-cjs/index.js +1312 -187
  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/store/search-results-selectors.d.ts +122 -0
  6. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +30 -2
  7. package/build/build-cjs/src/search-results/types.d.ts +27 -1
  8. package/build/build-cjs/src/search-results/utils/query-utils.d.ts +1 -0
  9. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +2 -1
  10. package/build/build-cjs/src/shared/utils/localization-util.d.ts +3 -0
  11. package/build/build-cjs/src/shared/utils/tide-api-utils.d.ts +6 -0
  12. package/build/build-esm/index.js +1304 -187
  13. package/build/build-esm/src/search-results/components/excursions/day-by-day-excursions.d.ts +4 -0
  14. package/build/build-esm/src/search-results/components/excursions/excursion-details.d.ts +3 -0
  15. package/build/build-esm/src/search-results/components/excursions/excursion-results.d.ts +8 -0
  16. package/build/build-esm/src/search-results/store/search-results-selectors.d.ts +122 -0
  17. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +30 -2
  18. package/build/build-esm/src/search-results/types.d.ts +27 -1
  19. package/build/build-esm/src/search-results/utils/query-utils.d.ts +1 -0
  20. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +2 -1
  21. package/build/build-esm/src/shared/utils/localization-util.d.ts +3 -0
  22. package/build/build-esm/src/shared/utils/tide-api-utils.d.ts +6 -0
  23. package/package.json +2 -2
  24. package/src/search-results/components/excursions/day-by-day-excursions.tsx +169 -0
  25. package/src/search-results/components/excursions/excursion-details.tsx +340 -0
  26. package/src/search-results/components/excursions/excursion-results.tsx +186 -0
  27. package/src/search-results/components/hotel/hotel-card.tsx +0 -3
  28. package/src/search-results/components/icon.tsx +1 -4
  29. package/src/search-results/components/itinerary/full-itinerary.tsx +161 -53
  30. package/src/search-results/components/itinerary/index.tsx +31 -7
  31. package/src/search-results/components/search-results-container/search-results-container.tsx +90 -28
  32. package/src/search-results/store/search-results-selectors.ts +11 -0
  33. package/src/search-results/store/search-results-slice.ts +46 -3
  34. package/src/search-results/types.ts +42 -1
  35. package/src/search-results/utils/query-utils.ts +1 -0
  36. package/src/shared/components/flyin/accommodation-flyin.tsx +4 -2
  37. package/src/shared/components/flyin/flights-flyin.tsx +3 -1
  38. package/src/shared/components/flyin/flyin.tsx +18 -6
  39. package/src/shared/components/flyin/group-tour-flyin.tsx +3 -1
  40. package/src/shared/translations/ar-SA.json +8 -2
  41. package/src/shared/translations/da-DK.json +8 -2
  42. package/src/shared/translations/de-DE.json +8 -2
  43. package/src/shared/translations/en-GB.json +8 -2
  44. package/src/shared/translations/es-ES.json +8 -2
  45. package/src/shared/translations/fr-BE.json +8 -2
  46. package/src/shared/translations/fr-FR.json +8 -2
  47. package/src/shared/translations/is-IS.json +8 -2
  48. package/src/shared/translations/it-IT.json +8 -2
  49. package/src/shared/translations/ja-JP.json +8 -2
  50. package/src/shared/translations/nl-BE.json +8 -2
  51. package/src/shared/translations/nl-NL.json +8 -2
  52. package/src/shared/translations/no-NO.json +8 -2
  53. package/src/shared/translations/pl-PL.json +8 -2
  54. package/src/shared/translations/pt-PT.json +8 -2
  55. package/src/shared/translations/sv-SE.json +8 -2
  56. package/src/shared/utils/localization-util.ts +14 -0
  57. package/src/shared/utils/tide-api-utils.ts +8 -0
  58. package/styles/components/_search.scss +11 -1
@@ -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,12 @@ var SRP$f = {
627
628
  DEPARTURE_TIME_DESC: 'وقت المغادرة تنازلياً',
628
629
  DURATION_ASC: 'المدة تصاعدياً',
629
630
  DURATION_DESC: 'المدة تنازلياً',
630
- TRAVEL_GROUP: 'مجموعة المسافرين'
631
+ TRAVEL_GROUP: 'مجموعة المسافرين',
632
+ EXCURSION: 'رحلة'
633
+ };
634
+ var ITINERARY$f = {
635
+ DAY: 'اليوم',
636
+ NO_ITEMS: 'لا توجد عناصر لهذا اليوم.'
631
637
  };
632
638
  var arJson = {
633
639
  STEPS: STEPS$f,
@@ -647,7 +653,8 @@ var arJson = {
647
653
  NAVBAR: NAVBAR$f,
648
654
  LOGIN: LOGIN$f,
649
655
  QSM: QSM$g,
650
- SRP: SRP$f
656
+ SRP: SRP$f,
657
+ ITINERARY: ITINERARY$f
651
658
  };
652
659
 
653
660
  var STEPS$e = {
@@ -982,7 +989,8 @@ var QSM$f = {
982
989
  RETURN_DATE: 'Hjemrejsedato',
983
990
  CONFIRM: 'Bekræft',
984
991
  TRAVELERS: 'Rejsende',
985
- GROUP_TOUR: 'Grupperejse'
992
+ GROUP_TOUR: 'Grupperejse',
993
+ ALL_TRAVELERS: 'Alle rejsende'
986
994
  };
987
995
  var SRP$e = {
988
996
  SHOW_MORE: 'Vis flere',
@@ -1033,7 +1041,12 @@ var SRP$e = {
1033
1041
  DEPARTURE_TIME_DESC: 'Afgangstid faldende',
1034
1042
  DURATION_ASC: 'Varighed stigende',
1035
1043
  DURATION_DESC: 'Varighed faldende',
1036
- TRAVEL_GROUP: 'Rejseselskab'
1044
+ TRAVEL_GROUP: 'Rejseselskab',
1045
+ EXCURSION: 'Udflugt'
1046
+ };
1047
+ var ITINERARY$e = {
1048
+ DAY: 'Dag',
1049
+ NO_ITEMS: 'Ingen elementer for denne dag.'
1037
1050
  };
1038
1051
  var daJson = {
1039
1052
  STEPS: STEPS$e,
@@ -1053,7 +1066,8 @@ var daJson = {
1053
1066
  NAVBAR: NAVBAR$e,
1054
1067
  LOGIN: LOGIN$e,
1055
1068
  QSM: QSM$f,
1056
- SRP: SRP$e
1069
+ SRP: SRP$e,
1070
+ ITINERARY: ITINERARY$e
1057
1071
  };
1058
1072
 
1059
1073
  var STEPS$d = {
@@ -1389,7 +1403,8 @@ var QSM$e = {
1389
1403
  RETURN_DATE: 'Rückreisedatum',
1390
1404
  CONFIRM: 'Bestätigen',
1391
1405
  TRAVELERS: 'Reisende',
1392
- GROUP_TOUR: 'Gruppentour'
1406
+ GROUP_TOUR: 'Gruppentour',
1407
+ ALL_TRAVELERS: 'Alle Reisenden'
1393
1408
  };
1394
1409
  var SRP$d = {
1395
1410
  SHOW_MORE: 'Mehr anzeigen',
@@ -1440,7 +1455,12 @@ var SRP$d = {
1440
1455
  DEPARTURE_AIRPORTS: 'Abflughäfen',
1441
1456
  ARRIVAL_AIRPORTS: 'Ankunftsflughäfen',
1442
1457
  PRICE: 'Preis',
1443
- TRAVEL_GROUP: 'Reisegruppe'
1458
+ TRAVEL_GROUP: 'Reisegruppe',
1459
+ EXCURSION: 'Ausflug'
1460
+ };
1461
+ var ITINERARY$d = {
1462
+ DAY: 'Tag',
1463
+ NO_ITEMS: 'Keine Elemente für diesen Tag.'
1444
1464
  };
1445
1465
  var deJson = {
1446
1466
  STEPS: STEPS$d,
@@ -1460,7 +1480,8 @@ var deJson = {
1460
1480
  NAVBAR: NAVBAR$d,
1461
1481
  LOGIN: LOGIN$d,
1462
1482
  QSM: QSM$e,
1463
- SRP: SRP$d
1483
+ SRP: SRP$d,
1484
+ ITINERARY: ITINERARY$d
1464
1485
  };
1465
1486
 
1466
1487
  var STEPS$c = {
@@ -1799,7 +1820,8 @@ var QSM$d = {
1799
1820
  RETURN_DATE: 'Return date',
1800
1821
  CONFIRM: 'Confirm',
1801
1822
  TRAVELERS: 'Travelers',
1802
- GROUP_TOUR: 'Group tour'
1823
+ GROUP_TOUR: 'Group tour',
1824
+ ALL_TRAVELERS: 'All travelers'
1803
1825
  };
1804
1826
  var SRP$c = {
1805
1827
  SHOW_MORE: 'Show more',
@@ -1850,7 +1872,12 @@ var SRP$c = {
1850
1872
  DEPARTURE_RANGE: 'Departure range',
1851
1873
  DEPARTURE_AIRPORTS: 'Departure airports',
1852
1874
  ARRIVAL_AIRPORTS: 'Arrival airports',
1853
- TRAVEL_GROUP: 'Travel group'
1875
+ TRAVEL_GROUP: 'Travel group',
1876
+ EXCURSION: 'Excursion'
1877
+ };
1878
+ var ITINERARY$c = {
1879
+ DAY: 'Day',
1880
+ NO_ITEMS: 'No items for this day.'
1854
1881
  };
1855
1882
  var enJson = {
1856
1883
  STEPS: STEPS$c,
@@ -1870,7 +1897,8 @@ var enJson = {
1870
1897
  NAVBAR: NAVBAR$c,
1871
1898
  LOGIN: LOGIN$c,
1872
1899
  QSM: QSM$d,
1873
- SRP: SRP$c
1900
+ SRP: SRP$c,
1901
+ ITINERARY: ITINERARY$c
1874
1902
  };
1875
1903
 
1876
1904
  var STEPS$b = {
@@ -2206,7 +2234,8 @@ var QSM$c = {
2206
2234
  RETURN_DATE: 'Fecha de regreso',
2207
2235
  CONFIRM: 'Confirmar',
2208
2236
  TRAVELERS: 'Viajeros',
2209
- GROUP_TOUR: 'Tour grupal'
2237
+ GROUP_TOUR: 'Tour grupal',
2238
+ ALL_TRAVELERS: 'Todos los viajeros'
2210
2239
  };
2211
2240
  var SRP$b = {
2212
2241
  SHOW_MORE: 'Mostrar más',
@@ -2257,7 +2286,12 @@ var SRP$b = {
2257
2286
  DEPARTURE_AIRPORTS: 'Aeropuertos de salida',
2258
2287
  ARRIVAL_AIRPORTS: 'Aeropuertos de llegada',
2259
2288
  PRICE: 'Precio',
2260
- TRAVEL_GROUP: 'Grupo de viaje'
2289
+ TRAVEL_GROUP: 'Grupo de viaje',
2290
+ EXCURSION: 'Excursión'
2291
+ };
2292
+ var ITINERARY$b = {
2293
+ DAY: 'Día',
2294
+ NO_ITEMS: 'No hay elementos para este día.'
2261
2295
  };
2262
2296
  var esJson = {
2263
2297
  STEPS: STEPS$b,
@@ -2277,7 +2311,8 @@ var esJson = {
2277
2311
  NAVBAR: NAVBAR$b,
2278
2312
  LOGIN: LOGIN$b,
2279
2313
  QSM: QSM$c,
2280
- SRP: SRP$b
2314
+ SRP: SRP$b,
2315
+ ITINERARY: ITINERARY$b
2281
2316
  };
2282
2317
 
2283
2318
  var STEPS$a = {
@@ -2617,7 +2652,8 @@ var QSM$b = {
2617
2652
  RETURN_DATE: 'Date de retour',
2618
2653
  CONFIRM: 'Confirmer',
2619
2654
  TRAVELERS: 'Voyageurs',
2620
- GROUP_TOUR: 'Tour en groupe'
2655
+ GROUP_TOUR: 'Tour en groupe',
2656
+ ALL_TRAVELERS: 'Tous les voyageurs'
2621
2657
  };
2622
2658
  var SRP$a = {
2623
2659
  SHOW_MORE: 'Afficher plus',
@@ -2668,7 +2704,12 @@ var SRP$a = {
2668
2704
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
2669
2705
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
2670
2706
  PRICE: 'Prix',
2671
- TRAVEL_GROUP: 'Groupe de voyageurs'
2707
+ TRAVEL_GROUP: 'Groupe de voyageurs',
2708
+ EXCURSION: 'Excursion'
2709
+ };
2710
+ var ITINERARY$a = {
2711
+ DAY: 'Jour',
2712
+ NO_ITEMS: 'Aucun élément pour ce jour.'
2672
2713
  };
2673
2714
  var frBeJson = {
2674
2715
  STEPS: STEPS$a,
@@ -2688,7 +2729,8 @@ var frBeJson = {
2688
2729
  NAVBAR: NAVBAR$a,
2689
2730
  LOGIN: LOGIN$a,
2690
2731
  QSM: QSM$b,
2691
- SRP: SRP$a
2732
+ SRP: SRP$a,
2733
+ ITINERARY: ITINERARY$a
2692
2734
  };
2693
2735
 
2694
2736
  var STEPS$9 = {
@@ -3023,7 +3065,8 @@ var QSM$a = {
3023
3065
  RETURN_DATE: 'Date de retour',
3024
3066
  CONFIRM: 'Confirmer',
3025
3067
  TRAVELERS: 'Voyageurs',
3026
- GROUP_TOUR: 'Tour en groupe'
3068
+ GROUP_TOUR: 'Tour en groupe',
3069
+ ALL_TRAVELERS: 'Tous les voyageurs'
3027
3070
  };
3028
3071
  var SRP$9 = {
3029
3072
  SHOW_MORE: 'Afficher plus',
@@ -3074,7 +3117,12 @@ var SRP$9 = {
3074
3117
  DEPARTURE_AIRPORTS: 'Aéroports de départ',
3075
3118
  ARRIVAL_AIRPORTS: 'Aéroports d’arrivée',
3076
3119
  PRICE: 'Prix',
3077
- TRAVEL_GROUP: 'Groupe de voyageurs'
3120
+ TRAVEL_GROUP: 'Groupe de voyageurs',
3121
+ EXCURSION: 'Excursion'
3122
+ };
3123
+ var ITINERARY$9 = {
3124
+ DAY: 'Jour',
3125
+ NO_ITEMS: 'Aucun élément pour ce jour.'
3078
3126
  };
3079
3127
  var frFrJson = {
3080
3128
  STEPS: STEPS$9,
@@ -3094,7 +3142,8 @@ var frFrJson = {
3094
3142
  NAVBAR: NAVBAR$9,
3095
3143
  LOGIN: LOGIN$9,
3096
3144
  QSM: QSM$a,
3097
- SRP: SRP$9
3145
+ SRP: SRP$9,
3146
+ ITINERARY: ITINERARY$9
3098
3147
  };
3099
3148
 
3100
3149
  var STEPS$8 = {
@@ -3429,7 +3478,8 @@ var QSM$9 = {
3429
3478
  RETURN_DATE: 'Heimkomudagur',
3430
3479
  CONFIRM: 'Staðfesta',
3431
3480
  TRAVELERS: 'Ferðalangar',
3432
- GROUP_TOUR: 'Ferð í hóp'
3481
+ GROUP_TOUR: 'Ferð í hóp',
3482
+ ALL_TRAVELERS: 'Allir ferðalangar'
3433
3483
  };
3434
3484
  var SRP$8 = {
3435
3485
  SHOW_MORE: 'Sýna meira',
@@ -3480,7 +3530,12 @@ var SRP$8 = {
3480
3530
  DEPARTURE_AIRPORTS: 'Brottfararflugvellir',
3481
3531
  ARRIVAL_AIRPORTS: 'Komuflugvellir',
3482
3532
  PRICE: 'Verð',
3483
- TRAVEL_GROUP: 'Ferðahópur'
3533
+ TRAVEL_GROUP: 'Ferðahópur',
3534
+ EXCURSION: 'Útflutningur'
3535
+ };
3536
+ var ITINERARY$8 = {
3537
+ DAY: 'Dagur',
3538
+ NO_ITEMS: 'Engar upplýsingar fyrir þennan dag.'
3484
3539
  };
3485
3540
  var isJson = {
3486
3541
  STEPS: STEPS$8,
@@ -3500,7 +3555,8 @@ var isJson = {
3500
3555
  NAVBAR: NAVBAR$8,
3501
3556
  LOGIN: LOGIN$8,
3502
3557
  QSM: QSM$9,
3503
- SRP: SRP$8
3558
+ SRP: SRP$8,
3559
+ ITINERARY: ITINERARY$8
3504
3560
  };
3505
3561
 
3506
3562
  var STEPS$7 = {
@@ -3836,7 +3892,8 @@ var QSM$8 = {
3836
3892
  RETURN_DATE: 'Data di ritorno',
3837
3893
  CONFIRM: 'Conferma',
3838
3894
  TRAVELERS: 'Viaggiatori',
3839
- GROUP_TOUR: 'Tour di gruppo'
3895
+ GROUP_TOUR: 'Tour di gruppo',
3896
+ ALL_TRAVELERS: 'Tutti i viaggiatori'
3840
3897
  };
3841
3898
  var SRP$7 = {
3842
3899
  SHOW_MORE: 'Mostra di più',
@@ -3887,7 +3944,12 @@ var SRP$7 = {
3887
3944
  DEPARTURE_AIRPORTS: 'Aeroporti di partenza',
3888
3945
  ARRIVAL_AIRPORTS: 'Aeroporti di arrivo',
3889
3946
  PRICE: 'Prezzo',
3890
- TRAVEL_GROUP: 'Gruppo di viaggio'
3947
+ TRAVEL_GROUP: 'Gruppo di viaggio',
3948
+ EXCURSION: 'Escursione'
3949
+ };
3950
+ var ITINERARY$7 = {
3951
+ DAY: 'Giorno',
3952
+ NO_ITEMS: 'Nessun elemento per questo giorno.'
3891
3953
  };
3892
3954
  var itJson = {
3893
3955
  STEPS: STEPS$7,
@@ -3907,7 +3969,8 @@ var itJson = {
3907
3969
  NAVBAR: NAVBAR$7,
3908
3970
  LOGIN: LOGIN$7,
3909
3971
  QSM: QSM$8,
3910
- SRP: SRP$7
3972
+ SRP: SRP$7,
3973
+ ITINERARY: ITINERARY$7
3911
3974
  };
3912
3975
 
3913
3976
  var STEPS$6 = {
@@ -4247,7 +4310,8 @@ var QSM$7 = {
4247
4310
  RETURN_DATE: 'Terugkeerdatum',
4248
4311
  CONFIRM: 'Bevestigen',
4249
4312
  TRAVELERS: 'Reizigers',
4250
- GROUP_TOUR: 'Groepsreis'
4313
+ GROUP_TOUR: 'Groepsreis',
4314
+ ALL_TRAVELERS: 'Alle reizigers'
4251
4315
  };
4252
4316
  var SRP$6 = {
4253
4317
  SHOW_MORE: 'Toon meer',
@@ -4298,7 +4362,12 @@ var SRP$6 = {
4298
4362
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4299
4363
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4300
4364
  PRICE: 'Prijs',
4301
- TRAVEL_GROUP: 'Reisgezelschap'
4365
+ TRAVEL_GROUP: 'Reisgezelschap',
4366
+ EXCURSION: 'Excursie'
4367
+ };
4368
+ var ITINERARY$6 = {
4369
+ DAY: 'Dag',
4370
+ NO_ITEMS: 'Geen elementen voor deze dag.'
4302
4371
  };
4303
4372
  var nlBeJson = {
4304
4373
  STEPS: STEPS$6,
@@ -4318,7 +4387,8 @@ var nlBeJson = {
4318
4387
  NAVBAR: NAVBAR$6,
4319
4388
  LOGIN: LOGIN$6,
4320
4389
  QSM: QSM$7,
4321
- SRP: SRP$6
4390
+ SRP: SRP$6,
4391
+ ITINERARY: ITINERARY$6
4322
4392
  };
4323
4393
 
4324
4394
  var STEPS$5 = {
@@ -4654,7 +4724,8 @@ var QSM$6 = {
4654
4724
  RETURN_DATE: 'Terugkeerdatum',
4655
4725
  CONFIRM: 'Bevestigen',
4656
4726
  TRAVELERS: 'Reizigers',
4657
- GROUP_TOUR: 'Groepsreis'
4727
+ GROUP_TOUR: 'Groepsreis',
4728
+ ALL_TRAVELERS: 'Alle reizigers'
4658
4729
  };
4659
4730
  var SRP$5 = {
4660
4731
  SHOW_MORE: 'Toon meer',
@@ -4705,7 +4776,12 @@ var SRP$5 = {
4705
4776
  DEPARTURE_AIRPORTS: 'Vertrekluchthavens',
4706
4777
  ARRIVAL_AIRPORTS: 'Aankomstluchthavens',
4707
4778
  PRICE: 'Prijs',
4708
- TRAVEL_GROUP: 'Reisgezelschap'
4779
+ TRAVEL_GROUP: 'Reisgezelschap',
4780
+ EXCURSION: 'Excursie'
4781
+ };
4782
+ var ITINERARY$5 = {
4783
+ DAY: 'Dag',
4784
+ NO_ITEMS: 'Geen elementen voor deze dag.'
4709
4785
  };
4710
4786
  var nlNlJson = {
4711
4787
  STEPS: STEPS$5,
@@ -4725,7 +4801,8 @@ var nlNlJson = {
4725
4801
  NAVBAR: NAVBAR$5,
4726
4802
  LOGIN: LOGIN$5,
4727
4803
  QSM: QSM$6,
4728
- SRP: SRP$5
4804
+ SRP: SRP$5,
4805
+ ITINERARY: ITINERARY$5
4729
4806
  };
4730
4807
 
4731
4808
  var STEPS$4 = {
@@ -5061,7 +5138,8 @@ var QSM$5 = {
5061
5138
  RETURN_DATE: 'Returdato',
5062
5139
  CONFIRM: 'Bekreft',
5063
5140
  TRAVELERS: 'Reisende',
5064
- GROUP_TOUR: 'Gruppetur'
5141
+ GROUP_TOUR: 'Gruppetur',
5142
+ ALL_TRAVELERS: 'Alle reisende'
5065
5143
  };
5066
5144
  var SRP$4 = {
5067
5145
  SHOW_MORE: 'Vis mer',
@@ -5112,7 +5190,12 @@ var SRP$4 = {
5112
5190
  DEPARTURE_AIRPORTS: 'Avgangsflyplasser',
5113
5191
  ARRIVAL_AIRPORTS: 'Ankomstflyplasser',
5114
5192
  PRICE: 'Pris',
5115
- TRAVEL_GROUP: 'Reisefølge'
5193
+ TRAVEL_GROUP: 'Reisefølge',
5194
+ EXCURSION: 'Utflukt'
5195
+ };
5196
+ var ITINERARY$4 = {
5197
+ DAY: 'Dag',
5198
+ NO_ITEMS: 'Ingen elementer for denne dagen.'
5116
5199
  };
5117
5200
  var noJson = {
5118
5201
  STEPS: STEPS$4,
@@ -5132,7 +5215,8 @@ var noJson = {
5132
5215
  NAVBAR: NAVBAR$4,
5133
5216
  LOGIN: LOGIN$4,
5134
5217
  QSM: QSM$5,
5135
- SRP: SRP$4
5218
+ SRP: SRP$4,
5219
+ ITINERARY: ITINERARY$4
5136
5220
  };
5137
5221
 
5138
5222
  var STEPS$3 = {
@@ -5468,7 +5552,8 @@ var QSM$4 = {
5468
5552
  RETURN_DATE: 'Data powrotu',
5469
5553
  CONFIRM: 'Potwierdź',
5470
5554
  TRAVELERS: 'Podróżni',
5471
- GROUP_TOUR: 'Tour w grupie'
5555
+ GROUP_TOUR: 'Tour w grupie',
5556
+ ALL_TRAVELERS: 'Wszyscy podróżni'
5472
5557
  };
5473
5558
  var SRP$3 = {
5474
5559
  SHOW_MORE: 'Pokaż więcej',
@@ -5519,7 +5604,12 @@ var SRP$3 = {
5519
5604
  DEPARTURE_AIRPORTS: 'Lotniska wylotu',
5520
5605
  ARRIVAL_AIRPORTS: 'Lotniska przylotu',
5521
5606
  PRICE: 'Cena',
5522
- TRAVEL_GROUP: 'Grupa podróżnych'
5607
+ TRAVEL_GROUP: 'Grupa podróżnych',
5608
+ EXCURSION: 'Wycieczka'
5609
+ };
5610
+ var ITINERARY$3 = {
5611
+ DAY: 'Dzień',
5612
+ NO_ITEMS: 'Brak elementów dla tego dnia.'
5523
5613
  };
5524
5614
  var plJson = {
5525
5615
  STEPS: STEPS$3,
@@ -5539,7 +5629,8 @@ var plJson = {
5539
5629
  NAVBAR: NAVBAR$3,
5540
5630
  LOGIN: LOGIN$3,
5541
5631
  QSM: QSM$4,
5542
- SRP: SRP$3
5632
+ SRP: SRP$3,
5633
+ ITINERARY: ITINERARY$3
5543
5634
  };
5544
5635
 
5545
5636
  var STEPS$2 = {
@@ -5875,7 +5966,8 @@ var QSM$3 = {
5875
5966
  RETURN_DATE: 'Data de regresso',
5876
5967
  CONFIRM: 'Confirmar',
5877
5968
  TRAVELERS: 'Viajantes',
5878
- GROUP_TOUR: 'Tour em grupo'
5969
+ GROUP_TOUR: 'Tour em grupo',
5970
+ ALL_TRAVELERS: 'All travelers'
5879
5971
  };
5880
5972
  var SRP$2 = {
5881
5973
  SHOW_MORE: 'Mostrar mais',
@@ -5926,7 +6018,12 @@ var SRP$2 = {
5926
6018
  DEPARTURE_AIRPORTS: 'Aeroportos de partida',
5927
6019
  ARRIVAL_AIRPORTS: 'Aeroportos de chegada',
5928
6020
  PRICE: 'Preço',
5929
- TRAVEL_GROUP: 'Grupo de viajantes'
6021
+ TRAVEL_GROUP: 'Grupo de viajantes',
6022
+ EXCURSION: 'Excursão'
6023
+ };
6024
+ var ITINERARY$2 = {
6025
+ DAY: 'Dia',
6026
+ NO_ITEMS: 'Nenhum item para este dia.'
5930
6027
  };
5931
6028
  var ptJson = {
5932
6029
  STEPS: STEPS$2,
@@ -5946,7 +6043,8 @@ var ptJson = {
5946
6043
  NAVBAR: NAVBAR$2,
5947
6044
  LOGIN: LOGIN$2,
5948
6045
  QSM: QSM$3,
5949
- SRP: SRP$2
6046
+ SRP: SRP$2,
6047
+ ITINERARY: ITINERARY$2
5950
6048
  };
5951
6049
 
5952
6050
  var STEPS$1 = {
@@ -6282,7 +6380,8 @@ var QSM$2 = {
6282
6380
  RETURN_DATE: 'Hemresedatum',
6283
6381
  CONFIRM: 'Bekräfta',
6284
6382
  TRAVELERS: 'Resenärer',
6285
- GROUP_TOUR: 'Gruppresa'
6383
+ GROUP_TOUR: 'Gruppresa',
6384
+ ALL_TRAVELERS: 'All travelers'
6286
6385
  };
6287
6386
  var SRP$1 = {
6288
6387
  SHOW_MORE: 'Visa mer',
@@ -6333,7 +6432,12 @@ var SRP$1 = {
6333
6432
  DEPARTURE_AIRPORTS: 'Avgångsflygplatser',
6334
6433
  ARRIVAL_AIRPORTS: 'Ankomstflygplatser',
6335
6434
  PRICE: 'Pris',
6336
- TRAVEL_GROUP: 'Resesällskap'
6435
+ TRAVEL_GROUP: 'Resesällskap',
6436
+ EXCURSION: 'Utflykt'
6437
+ };
6438
+ var ITINERARY$1 = {
6439
+ DAY: 'Dag',
6440
+ NO_ITEMS: 'Inga element för denna dag.'
6337
6441
  };
6338
6442
  var svJson = {
6339
6443
  STEPS: STEPS$1,
@@ -6353,7 +6457,8 @@ var svJson = {
6353
6457
  NAVBAR: NAVBAR$1,
6354
6458
  LOGIN: LOGIN$1,
6355
6459
  QSM: QSM$2,
6356
- SRP: SRP$1
6460
+ SRP: SRP$1,
6461
+ ITINERARY: ITINERARY$1
6357
6462
  };
6358
6463
 
6359
6464
  var STEPS = {
@@ -6687,7 +6792,8 @@ var QSM$1 = {
6687
6792
  RETURN_DATE: '帰着日',
6688
6793
  CONFIRM: '確認',
6689
6794
  TRAVELERS: '旅行者',
6690
- GROUP_TOUR: 'グループツアー'
6795
+ GROUP_TOUR: 'グループツアー',
6796
+ ALL_TRAVELERS: 'すべての旅行者'
6691
6797
  };
6692
6798
  var SRP = {
6693
6799
  SHOW_MORE: 'もっと見る',
@@ -6738,7 +6844,12 @@ var SRP = {
6738
6844
  DEPARTURE_AIRPORTS: '出発空港',
6739
6845
  ARRIVAL_AIRPORTS: '到着空港',
6740
6846
  PRICE: '価格',
6741
- TRAVEL_GROUP: '旅行グループ'
6847
+ TRAVEL_GROUP: '旅行グループ',
6848
+ EXCURSION: 'エクスカーション'
6849
+ };
6850
+ var ITINERARY = {
6851
+ DAY: '日',
6852
+ NO_ITEMS: 'この日のアイテムはありません。'
6742
6853
  };
6743
6854
  var jaJson = {
6744
6855
  STEPS: STEPS,
@@ -6758,7 +6869,8 @@ var jaJson = {
6758
6869
  NAVBAR: NAVBAR,
6759
6870
  LOGIN: LOGIN,
6760
6871
  QSM: QSM$1,
6761
- SRP: SRP
6872
+ SRP: SRP,
6873
+ ITINERARY: ITINERARY
6762
6874
  };
6763
6875
 
6764
6876
  exports.DepartureRange = void 0;
@@ -6769,7 +6881,7 @@ exports.DepartureRange = void 0;
6769
6881
  DepartureRange[(DepartureRange['Night'] = 3)] = 'Night';
6770
6882
  })(exports.DepartureRange || (exports.DepartureRange = {}));
6771
6883
 
6772
- var formatPrice$2 = function (price, currencyCode, locale) {
6884
+ var formatPrice$3 = function (price, currencyCode, locale) {
6773
6885
  if (locale === void 0) {
6774
6886
  locale = 'nl-BE';
6775
6887
  }
@@ -6876,7 +6988,7 @@ function getLocale(code) {
6876
6988
  }
6877
6989
  }
6878
6990
  var getPriceDifferenceText = function (price, currencyCode) {
6879
- return price > 0 ? '+ '.concat(formatPrice$2(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$2(Math.abs(price), currencyCode));
6991
+ return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
6880
6992
  };
6881
6993
  function format(text, args) {
6882
6994
  return text.replace(/{([0-9]+)}/g, function (match, index) {
@@ -6976,6 +7088,16 @@ var findSortByType = function (sortByTypes, sortKey, direction) {
6976
7088
  }) || sortByTypes[0]
6977
7089
  );
6978
7090
  };
7091
+ var getDatesBetween = function (fromDate, toDate) {
7092
+ var dates = [];
7093
+ var current = new Date(fromDate);
7094
+ var end = new Date(toDate);
7095
+ while (current < end) {
7096
+ dates.push(new Date(current));
7097
+ current.setUTCDate(current.getUTCDate() + 1);
7098
+ }
7099
+ return dates;
7100
+ };
6979
7101
 
6980
7102
  var getDateFromParams = function (params, name) {
6981
7103
  var dateString = params.get(name);
@@ -13449,6 +13571,7 @@ PERFORMANCE OF THIS SOFTWARE.
13449
13571
  var ENDPOINT = '/api/web/packaging';
13450
13572
  var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
13451
13573
  var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
13574
+ var ENDPOINT_EXCURSIONS = ENDPOINT + '/excursions';
13452
13575
  var ENDPOINT_FLIGHTS = ENDPOINT + '/flights';
13453
13576
  var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
13454
13577
  var ENDPOINT_ITINERARY = ENDPOINT + '/itinerary';
@@ -13472,6 +13595,12 @@ PERFORMANCE OF THIS SOFTWARE.
13472
13595
  var body = JSON.stringify(request);
13473
13596
  return post(url, apiKey, body, config.token, signal, true);
13474
13597
  };
13598
+ var searchPackagingExcursions = function (config, request, signal) {
13599
+ var url = '' + config.host + ENDPOINT_EXCURSIONS;
13600
+ var apiKey = config.apiKey;
13601
+ var body = JSON.stringify(request);
13602
+ return post(url, apiKey, body, config.token, signal, true);
13603
+ };
13475
13604
  var getEntry = function (config, magicLinkCode, signal) {
13476
13605
  var apiKey = config.apiKey;
13477
13606
  var url = '' + config.host + ENDPOINT_ENTRY(magicLinkCode);
@@ -13563,6 +13692,7 @@ PERFORMANCE OF THIS SOFTWARE.
13563
13692
  exports.searchLocations = searchLocations;
13564
13693
  exports.searchOords = searchOords;
13565
13694
  exports.searchPackagingAccommodations = searchPackagingAccommodations;
13695
+ exports.searchPackagingExcursions = searchPackagingExcursions;
13566
13696
  exports.searchPackagingFlights = searchPackagingFlights;
13567
13697
  exports.searchRegions = searchRegions;
13568
13698
  exports.searchWithErrorMapping = searchWithErrorMapping;
@@ -13639,16 +13769,16 @@ var formatPriceByMode = function (price, priceMode, personCount, duration, perPe
13639
13769
  if (!price) return '';
13640
13770
  switch (priceMode) {
13641
13771
  case 0:
13642
- return ''.concat(formatPrice$2(price, currencyCode));
13772
+ return ''.concat(formatPrice$3(price, currencyCode));
13643
13773
  case 1:
13644
13774
  var perPersonPrice = price / personCount;
13645
- return ''.concat(formatPrice$2(perPersonPrice, currencyCode), ' / ').concat(perPersonLabel);
13775
+ return ''.concat(formatPrice$3(perPersonPrice, currencyCode), ' / ').concat(perPersonLabel);
13646
13776
  case 2:
13647
13777
  var perNightPrice = price / duration;
13648
- return ''.concat(formatPrice$2(perNightPrice, currencyCode), ' / ').concat(perNightLabel);
13778
+ return ''.concat(formatPrice$3(perNightPrice, currencyCode), ' / ').concat(perNightLabel);
13649
13779
  case 3:
13650
13780
  var perPersonPerNightPrice = price / duration;
13651
- return ''.concat(formatPrice$2(perPersonPerNightPrice, currencyCode), ' / ').concat(perPersonPerNightLabel);
13781
+ return ''.concat(formatPrice$3(perPersonPerNightPrice, currencyCode), ' / ').concat(perPersonPerNightLabel);
13652
13782
  }
13653
13783
  };
13654
13784
 
@@ -22144,7 +22274,7 @@ var NoneOption = function (_a) {
22144
22274
  return x.requirementType === 2;
22145
22275
  });
22146
22276
  var noneSelected = !selectedOption;
22147
- var priceDifferencetext = selectedOption ? '- '.concat(formatPrice$2(Math.abs(selectedOption.line.price), currencyCode)) : '';
22277
+ var priceDifferencetext = selectedOption ? '- '.concat(formatPrice$3(Math.abs(selectedOption.line.price), currencyCode)) : '';
22148
22278
  return React__default['default'].createElement(
22149
22279
  React__default['default'].Fragment,
22150
22280
  null,
@@ -23421,7 +23551,7 @@ var OptionRoom = function (_a) {
23421
23551
  e.preventDefault();
23422
23552
  };
23423
23553
  var getPriceDifferenceText = function (price) {
23424
- return price > 0 ? '+ '.concat(formatPrice$2(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$2(Math.abs(price), currencyCode));
23554
+ return price > 0 ? '+ '.concat(formatPrice$3(Math.abs(price), currencyCode)) : '- '.concat(formatPrice$3(Math.abs(price), currencyCode));
23425
23555
  };
23426
23556
  var getAccommodationPriceDifference = function (accommodation) {
23427
23557
  var _a;
@@ -24957,7 +25087,7 @@ var Sidebar = function (_a) {
24957
25087
  { className: 'pricing-summary__property' },
24958
25088
  React__default['default'].createElement('h6', { className: 'pricing-summary__title' }, translations.SIDEBAR.BASE_PRICE)
24959
25089
  ),
24960
- React__default['default'].createElement('div', { className: 'pricing-summary__value' }, formatPrice$2(basePrice, currencyCode))
25090
+ React__default['default'].createElement('div', { className: 'pricing-summary__value' }, formatPrice$3(basePrice, currencyCode))
24961
25091
  ),
24962
25092
  basePricePerPaxType &&
24963
25093
  basePricePerPaxType.map(function (ppt, index) {
@@ -24977,7 +25107,7 @@ var Sidebar = function (_a) {
24977
25107
  React__default['default'].createElement(
24978
25108
  'div',
24979
25109
  { className: 'pricing-summary__value' },
24980
- formatPrice$2(ppt.pricePerPaxType, currencyCode)
25110
+ formatPrice$3(ppt.pricePerPaxType, currencyCode)
24981
25111
  )
24982
25112
  ),
24983
25113
  ppt.details.map(function (detail, dIndex) {
@@ -24997,7 +25127,7 @@ var Sidebar = function (_a) {
24997
25127
  React__default['default'].createElement(
24998
25128
  'div',
24999
25129
  { className: 'pricing-summary__value' },
25000
- formatPrice$2(detail.price / detail.numberOfPax, currencyCode)
25130
+ formatPrice$3(detail.price / detail.numberOfPax, currencyCode)
25001
25131
  )
25002
25132
  );
25003
25133
  })
@@ -25024,7 +25154,7 @@ var Sidebar = function (_a) {
25024
25154
  React__default['default'].createElement(
25025
25155
  'div',
25026
25156
  { className: 'pricing-summary__value' },
25027
- formatPrice$2(priceDetail.price * priceDetail.amount, currencyCode)
25157
+ formatPrice$3(priceDetail.price * priceDetail.amount, currencyCode)
25028
25158
  )
25029
25159
  ),
25030
25160
  React__default['default'].createElement(
@@ -25059,7 +25189,7 @@ var Sidebar = function (_a) {
25059
25189
  React__default['default'].createElement(
25060
25190
  'div',
25061
25191
  { className: 'pricing-summary__value' },
25062
- formatPrice$2(priceDetail.price * priceDetail.amount, currencyCode)
25192
+ formatPrice$3(priceDetail.price * priceDetail.amount, currencyCode)
25063
25193
  )
25064
25194
  ),
25065
25195
  React__default['default'].createElement(
@@ -25089,7 +25219,7 @@ var Sidebar = function (_a) {
25089
25219
  React__default['default'].createElement(
25090
25220
  'div',
25091
25221
  { className: 'pricing-summary__value' },
25092
- formatPrice$2(ppt.pricePerPaxType, currencyCode)
25222
+ formatPrice$3(ppt.pricePerPaxType, currencyCode)
25093
25223
  )
25094
25224
  ),
25095
25225
  ppt.details.map(function (detail, dIndex) {
@@ -25109,7 +25239,7 @@ var Sidebar = function (_a) {
25109
25239
  React__default['default'].createElement(
25110
25240
  'div',
25111
25241
  { className: 'pricing-summary__value' },
25112
- formatPrice$2(detail.price / detail.numberOfPax, currencyCode)
25242
+ formatPrice$3(detail.price / detail.numberOfPax, currencyCode)
25113
25243
  )
25114
25244
  );
25115
25245
  })
@@ -25153,7 +25283,7 @@ var Sidebar = function (_a) {
25153
25283
  React__default['default'].createElement(
25154
25284
  'div',
25155
25285
  { className: 'pricing__price' },
25156
- formatPrice$2(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25286
+ formatPrice$3(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25157
25287
  )
25158
25288
  )
25159
25289
  )
@@ -25174,7 +25304,7 @@ var Sidebar = function (_a) {
25174
25304
  React__default['default'].createElement(
25175
25305
  'div',
25176
25306
  { className: 'pricing' },
25177
- React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$2(totalPrice, currencyCode))
25307
+ React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$3(totalPrice, currencyCode))
25178
25308
  )
25179
25309
  )
25180
25310
  ),
@@ -25192,7 +25322,7 @@ var Sidebar = function (_a) {
25192
25322
  React__default['default'].createElement(
25193
25323
  'div',
25194
25324
  { className: 'pricing' },
25195
- React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$2(deposit, currencyCode))
25325
+ React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$3(deposit, currencyCode))
25196
25326
  )
25197
25327
  )
25198
25328
  ),
@@ -25208,7 +25338,7 @@ var Sidebar = function (_a) {
25208
25338
  translations.SIDEBAR.DEPOSIT_TEXT1,
25209
25339
  React__default['default'].createElement('strong', null, translations.SIDEBAR.DEPOSIT_TEXT2),
25210
25340
  translations.SIDEBAR.DEPOSIT_TEXT3,
25211
- formatPrice$2(remainingAmount, currencyCode),
25341
+ formatPrice$3(remainingAmount, currencyCode),
25212
25342
  translations.SIDEBAR.DEPOSIT_TEXT4,
25213
25343
  React__default['default'].createElement('strong', null, translations.SIDEBAR.DEPOSIT_TEXT5),
25214
25344
  translations.SIDEBAR.DEPOSIT_TEXT6
@@ -25237,7 +25367,7 @@ var Sidebar = function (_a) {
25237
25367
  React__default['default'].createElement(
25238
25368
  'div',
25239
25369
  { className: 'pricing__price' },
25240
- formatPrice$2(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25370
+ formatPrice$3(commission !== null && commission !== void 0 ? commission : 0, currencyCode)
25241
25371
  )
25242
25372
  )
25243
25373
  )
@@ -25258,7 +25388,7 @@ var Sidebar = function (_a) {
25258
25388
  React__default['default'].createElement(
25259
25389
  'div',
25260
25390
  { className: 'pricing' },
25261
- React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$2(totalPrice, currencyCode))
25391
+ React__default['default'].createElement('div', { className: 'pricing__price' }, formatPrice$3(totalPrice, currencyCode))
25262
25392
  )
25263
25393
  )
25264
25394
  )
@@ -33883,7 +34013,10 @@ var initialState$1 = {
33883
34013
  flyInIsOpen: false,
33884
34014
  flyInType: null,
33885
34015
  editablePackagingEntry: null,
33886
- itinerary: null
34016
+ itinerary: null,
34017
+ excursionSearchParams: null,
34018
+ selectedExcursionSearchResult: null,
34019
+ confirmedExcursionsByDay: {}
33887
34020
  };
33888
34021
  var searchResultsSlice = toolkit.createSlice({
33889
34022
  name: 'searchResults',
@@ -34029,6 +34162,41 @@ var searchResultsSlice = toolkit.createSlice({
34029
34162
  resetFlightSelection: function (state) {
34030
34163
  state.selectedOutwardKey = null;
34031
34164
  state.selectedReturnKey = null;
34165
+ },
34166
+ setExcursionSearchParams: function (state, action) {
34167
+ state.excursionSearchParams = action.payload;
34168
+ },
34169
+ setSelectedExcursionSearchResult: function (state, action) {
34170
+ state.selectedExcursionSearchResult = action.payload;
34171
+ },
34172
+ confirmExcursionForDay: function (state, action) {
34173
+ var _a;
34174
+ var _b = action.payload,
34175
+ dayKey = _b.dayKey,
34176
+ excursion = _b.excursion;
34177
+ var existingForDay = (_a = state.confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : [];
34178
+ var existingIndex = existingForDay.findIndex(function (item) {
34179
+ return item.code === excursion.code;
34180
+ });
34181
+ if (existingIndex >= 0) {
34182
+ // replace existing confirmed version of same excursion
34183
+ existingForDay[existingIndex] = excursion;
34184
+ } else {
34185
+ existingForDay.push(excursion);
34186
+ }
34187
+ state.confirmedExcursionsByDay[dayKey] = existingForDay;
34188
+ },
34189
+ removeConfirmedExcursionForDay: function (state, action) {
34190
+ var _a;
34191
+ var _b = action.payload,
34192
+ dayKey = _b.dayKey,
34193
+ excursionCode = _b.excursionCode;
34194
+ state.confirmedExcursionsByDay[dayKey] = ((_a = state.confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : []).filter(function (item) {
34195
+ return item.code !== excursionCode;
34196
+ });
34197
+ },
34198
+ clearConfirmedExcursionsForDay: function (state, action) {
34199
+ delete state.confirmedExcursionsByDay[action.payload.dayKey];
34032
34200
  }
34033
34201
  }
34034
34202
  });
@@ -34068,6 +34236,11 @@ var setFlyInIsOpen = _a.setFlyInIsOpen,
34068
34236
  setSelectedOutwardKey = _a.setSelectedOutwardKey,
34069
34237
  setSelectedReturnKey = _a.setSelectedReturnKey;
34070
34238
  _a.resetFlightSelection;
34239
+ var setExcursionSearchParams = _a.setExcursionSearchParams,
34240
+ setSelectedExcursionSearchResult = _a.setSelectedExcursionSearchResult,
34241
+ confirmExcursionForDay = _a.confirmExcursionForDay,
34242
+ removeConfirmedExcursionForDay = _a.removeConfirmedExcursionForDay;
34243
+ _a.clearConfirmedExcursionsForDay;
34071
34244
  var searchResultsReducer = searchResultsSlice.reducer;
34072
34245
 
34073
34246
  var ItemPicker = function (_a) {
@@ -34600,8 +34773,7 @@ var Icon$1 = function (_a) {
34600
34773
  }),
34601
34774
  title && React__default['default'].createElement('title', null, title),
34602
34775
  React__default['default'].createElement('path', {
34603
- 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',
34604
- fill: 'currentColor'
34776
+ 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'
34605
34777
  })
34606
34778
  );
34607
34779
  case 'ui-backforward':
@@ -35098,6 +35270,7 @@ var Icon$1 = function (_a) {
35098
35270
 
35099
35271
  var GROUP_TOUR_SERVICE_TYPE = 1;
35100
35272
  var ACCOMMODATION_SERVICE_TYPE = 3;
35273
+ var EXCURSION_SERVICE_TYPE = 4;
35101
35274
  var FLIGHT_SERVICE_TYPE = 7;
35102
35275
  var toDateOnlyString = function (value) {
35103
35276
  var date = value instanceof Date ? value : new Date(value);
@@ -35330,6 +35503,21 @@ var getSegmentTitle = function (segment) {
35330
35503
  var _a;
35331
35504
  return (_a = segment.productName) !== null && _a !== void 0 ? _a : segment.accommodationName;
35332
35505
  };
35506
+ var SERVICE_TYPE_PRIORITY = {
35507
+ 7: 0, // Flight
35508
+ 13: 1, // Transfer
35509
+ 3: 2, // Hotel
35510
+ 4: 3 // Excursion
35511
+ };
35512
+ var getServiceTypePriority = function (serviceType) {
35513
+ var _a;
35514
+ return (_a = SERVICE_TYPE_PRIORITY[serviceType !== null && serviceType !== void 0 ? serviceType : -1]) !== null && _a !== void 0 ? _a : 2;
35515
+ };
35516
+ var getDateOnlyTime = function (date) {
35517
+ if (!date) return 0;
35518
+ var parsedDate = new Date(date);
35519
+ return new Date(parsedDate.getFullYear(), parsedDate.getMonth(), parsedDate.getDate()).getTime();
35520
+ };
35333
35521
  var Itinerary = function (_a) {
35334
35522
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
35335
35523
  var isOpen = _a.isOpen,
@@ -35358,14 +35546,17 @@ var Itinerary = function (_a) {
35358
35546
  true
35359
35547
  ).sort(function (a, b) {
35360
35548
  var _a, _b;
35361
- var orderA = (_a = a.order) !== null && _a !== void 0 ? _a : Infinity;
35362
- var orderB = (_b = b.order) !== null && _b !== void 0 ? _b : Infinity;
35363
- // First sort by order
35364
- if (orderA !== orderB) {
35365
- return orderA - orderB;
35366
- }
35367
- // Fallback to date
35368
- return new Date(a.from).getTime() - new Date(b.from).getTime();
35549
+ var dateA = getDateOnlyTime(a.from);
35550
+ var dateB = getDateOnlyTime(b.from);
35551
+ if (dateA !== dateB) {
35552
+ return dateA - dateB;
35553
+ }
35554
+ var priorityA = getServiceTypePriority(a.serviceType);
35555
+ var priorityB = getServiceTypePriority(b.serviceType);
35556
+ if (priorityA !== priorityB) {
35557
+ return priorityA - priorityB;
35558
+ }
35559
+ return ((_a = a.order) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.order) !== null && _b !== void 0 ? _b : Infinity);
35369
35560
  });
35370
35561
  },
35371
35562
  [packagingEntry]
@@ -35492,12 +35683,12 @@ var Itinerary = function (_a) {
35492
35683
  React__default['default'].createElement(
35493
35684
  'div',
35494
35685
  { className: 'search__filter__prices__wrapper' },
35495
- React__default['default'].createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$2(pricePerPerson, 'EUR')),
35686
+ React__default['default'].createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$3(pricePerPerson, 'EUR')),
35496
35687
  React__default['default'].createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
35497
35688
  React__default['default'].createElement(
35498
35689
  'p',
35499
35690
  null,
35500
- React__default['default'].createElement('strong', null, '(', formatPrice$2(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35691
+ React__default['default'].createElement('strong', null, '(', formatPrice$3(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35501
35692
  )
35502
35693
  ),
35503
35694
  React__default['default'].createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
@@ -38563,7 +38754,8 @@ var FlightsFlyIn = function (_a) {
38563
38754
  React__default['default'].createElement(
38564
38755
  'div',
38565
38756
  { className: 'flyin__footer__price' },
38566
- 'Total price: \u20AC',
38757
+ translations.SHARED.TOTAL_PRICE,
38758
+ ': \u20AC',
38567
38759
  (_o = selectedCombinationFlight === null || selectedCombinationFlight === void 0 ? void 0 : selectedCombinationFlight.price) === null || _o === void 0
38568
38760
  ? void 0
38569
38761
  : _o.toFixed(2)
@@ -38577,7 +38769,7 @@ var FlightsFlyIn = function (_a) {
38577
38769
  );
38578
38770
  };
38579
38771
 
38580
- var formatPrice$1 = function (price, currencyCode) {
38772
+ var formatPrice$2 = function (price, currencyCode) {
38581
38773
  if (typeof price !== 'number') return '';
38582
38774
  var safeCurrency = currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR';
38583
38775
  return new Intl.NumberFormat('nl-BE', {
@@ -38709,7 +38901,7 @@ var AccommodationFlyIn = function (_a) {
38709
38901
  var totalPrice = selectedOptions.reduce(function (total, option) {
38710
38902
  return total + (option.price || 0);
38711
38903
  }, 0);
38712
- return formatPrice$1(totalPrice, selectedPackagingAccoSearchDetails.currencyCode);
38904
+ return formatPrice$2(totalPrice, selectedPackagingAccoSearchDetails.currencyCode);
38713
38905
  };
38714
38906
  var getPriceDifference = function (currentSelectedPrice, roomIndex, accommodationCode, regimeId) {
38715
38907
  var targetPrice = 0;
@@ -38734,7 +38926,7 @@ var AccommodationFlyIn = function (_a) {
38734
38926
  if (difference === 0) {
38735
38927
  return null;
38736
38928
  }
38737
- var formattedAbsoluteValue = formatPrice$1(Math.abs(difference), currencyCode);
38929
+ var formattedAbsoluteValue = formatPrice$2(Math.abs(difference), currencyCode);
38738
38930
  return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
38739
38931
  };
38740
38932
  var getPriceDifferenceClassName = function (difference) {
@@ -38852,7 +39044,7 @@ var AccommodationFlyIn = function (_a) {
38852
39044
  React__default['default'].createElement(
38853
39045
  'div',
38854
39046
  { className: 'flyin__footer' },
38855
- React__default['default'].createElement('div', { className: 'flyin__footer__price' }, 'Total price: ', calculateTotalPrice()),
39047
+ React__default['default'].createElement('div', { className: 'flyin__footer__price' }, translations.SHARED.TOTAL_PRICE, ': ', calculateTotalPrice()),
38856
39048
  React__default['default'].createElement(
38857
39049
  'div',
38858
39050
  { className: 'flyin__button-wrapper' },
@@ -39011,7 +39203,7 @@ var AccommodationFlyIn = function (_a) {
39011
39203
  // )} */}
39012
39204
  // </div>
39013
39205
  // <div className="flyin__footer">
39014
- // <div className="flyin__footer__price">Total price: €</div>
39206
+ // <div className="flyin__footer__price">{translations.SHARED.TOTAL_PRICE}: €</div>
39015
39207
  // <div className="flyin__button-wrapper">
39016
39208
  // <button className="cta cta--select" onClick={handleConfirm}>
39017
39209
  // Toevoegen
@@ -39021,7 +39213,7 @@ var AccommodationFlyIn = function (_a) {
39021
39213
  // </>
39022
39214
  };
39023
39215
 
39024
- var formatPrice = function (price, currencyCode) {
39216
+ var formatPrice$1 = function (price, currencyCode) {
39025
39217
  if (currencyCode === void 0) {
39026
39218
  currencyCode = 'EUR';
39027
39219
  }
@@ -39204,7 +39396,7 @@ var GroupTourFlyIn = function (_a) {
39204
39396
  if (difference === 0) {
39205
39397
  return null;
39206
39398
  }
39207
- var formattedAbsoluteValue = formatPrice(Math.abs(difference), currencyCode);
39399
+ var formattedAbsoluteValue = formatPrice$1(Math.abs(difference), currencyCode);
39208
39400
  return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
39209
39401
  };
39210
39402
  var getPriceDifferenceClassName = function (difference) {
@@ -39337,8 +39529,9 @@ var GroupTourFlyIn = function (_a) {
39337
39529
  React__default['default'].createElement(
39338
39530
  'div',
39339
39531
  { className: 'flyin__footer__price' },
39340
- 'Total price: ',
39341
- formatPrice(adjustedTotalPrice, bookingPackageDetails.currencyCode)
39532
+ translations.SHARED.TOTAL_PRICE,
39533
+ ': ',
39534
+ formatPrice$1(adjustedTotalPrice, bookingPackageDetails.currencyCode)
39342
39535
  ),
39343
39536
  React__default['default'].createElement(
39344
39537
  'div',
@@ -43655,7 +43848,7 @@ var getBaseHotelResult = function (searchResult, cmsItem, languageCode, translat
43655
43848
  searchResult.countryName,
43656
43849
  (_h = cmsItem === null || cmsItem === void 0 ? void 0 : cmsItem.parentItem) === null || _h === void 0 ? void 0 : _h.name
43657
43850
  ),
43658
- price: formatPrice$2(searchResult.price, searchResult.currencyCode, languageCode),
43851
+ price: formatPrice$3(searchResult.price, searchResult.currencyCode, languageCode),
43659
43852
  ctaText: translations === null || translations === void 0 ? void 0 : translations.SRP.VIEW_DETAILS
43660
43853
  };
43661
43854
  };
@@ -43895,6 +44088,24 @@ var HotelAccommodationResults = function (_a) {
43895
44088
  var selectSearchResultsState = function (state) {
43896
44089
  return state.searchResults;
43897
44090
  };
44091
+ var selectPackagingAccoResults = toolkit.createSelector([selectSearchResultsState], function (state) {
44092
+ return state.packagingAccoResults;
44093
+ });
44094
+ var selectSelectedPackagingAccoResultCode = toolkit.createSelector([selectSearchResultsState], function (state) {
44095
+ return state.selectedPackagingAccoResultCode;
44096
+ });
44097
+ var selectSelectedPackagingAccoResult = toolkit.createSelector(
44098
+ [selectPackagingAccoResults, selectSelectedPackagingAccoResultCode],
44099
+ function (packagingAccoResults, selectedPackagingAccoResultCode) {
44100
+ var _a;
44101
+ if (!selectedPackagingAccoResultCode) return null;
44102
+ return (_a = packagingAccoResults.find(function (accoResult) {
44103
+ return accoResult.code === selectedPackagingAccoResultCode;
44104
+ })) !== null && _a !== void 0
44105
+ ? _a
44106
+ : null;
44107
+ }
44108
+ );
43898
44109
  var selectPackagingFlightResults = toolkit.createSelector([selectSearchResultsState], function (state) {
43899
44110
  return state.packagingFlightResults;
43900
44111
  });
@@ -44021,7 +44232,7 @@ var IndependentFlightOption = function (_a) {
44021
44232
  { className: 'price' },
44022
44233
  translations.QSM.ROUNDTRIP + ' ' + translations.SRP.PRICE,
44023
44234
  '\u00A0',
44024
- formatPrice$2(
44235
+ formatPrice$3(
44025
44236
  price,
44026
44237
  'EUR',
44027
44238
  (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
@@ -44034,7 +44245,7 @@ var IndependentFlightOption = function (_a) {
44034
44245
  { className: 'price' },
44035
44246
  priceDifference > 0 ? '+' : '-',
44036
44247
  '\u00A0',
44037
- formatPrice$2(
44248
+ formatPrice$3(
44038
44249
  Math.abs(priceDifference),
44039
44250
  'EUR',
44040
44251
  (_d = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
@@ -44741,6 +44952,567 @@ var PackageingFlightsFlyIn = function (_a) {
44741
44952
  );
44742
44953
  };
44743
44954
 
44955
+ var ExcursionResults = function (_a) {
44956
+ var _b;
44957
+ _a.isFlyIn;
44958
+ var activeSearchSeed = _a.activeSearchSeed;
44959
+ var context = React.useContext(SearchResultsConfigurationContext);
44960
+ var dispatch = reactRedux.useDispatch();
44961
+ var _c = React.useState(false),
44962
+ isLoading = _c[0],
44963
+ setIsLoading = _c[1];
44964
+ var _d = React.useState(null),
44965
+ excursions = _d[0],
44966
+ setExcursions = _d[1];
44967
+ var _e = reactRedux.useSelector(function (state) {
44968
+ return state.searchResults;
44969
+ }),
44970
+ flyInIsOpen = _e.flyInIsOpen,
44971
+ flyInType = _e.flyInType,
44972
+ excursionSearchParams = _e.excursionSearchParams,
44973
+ transactionId = _e.transactionId;
44974
+ React.useEffect(
44975
+ function () {
44976
+ if (!context || !activeSearchSeed || !excursionSearchParams) return;
44977
+ (function () {
44978
+ return __awaiter(void 0, void 0, void 0, function () {
44979
+ var config, destination, allPax, searchRequest, packageExcursionSearchResults, err_1;
44980
+ var _a, _b, _c, _d, _e;
44981
+ return __generator(this, function (_f) {
44982
+ switch (_f.label) {
44983
+ case 0:
44984
+ _f.trys.push([0, 2, 3, 4]);
44985
+ setIsLoading(true);
44986
+ console.log('Excursion search params changed, fetching excursions...', excursionSearchParams);
44987
+ config = {
44988
+ host: context.tideConnection.host,
44989
+ apiKey: context.tideConnection.apiKey
44990
+ };
44991
+ destination = excursionSearchParams.locationId
44992
+ ? { id: Number(excursionSearchParams.locationId), type: 'location' }
44993
+ : excursionSearchParams.oordId
44994
+ ? { id: Number(excursionSearchParams.oordId), type: 'oord' }
44995
+ : excursionSearchParams.regionId
44996
+ ? { id: Number(excursionSearchParams.regionId), type: 'region' }
44997
+ : excursionSearchParams.countryId
44998
+ ? { id: Number(excursionSearchParams.countryId), type: 'country' }
44999
+ : { id: 0, type: null };
45000
+ allPax = activeSearchSeed.rooms.flatMap(function (room) {
45001
+ return room.pax;
45002
+ });
45003
+ searchRequest = {
45004
+ transactionId: transactionId !== null && transactionId !== void 0 ? transactionId : '',
45005
+ officeId: (_a = context.tideConnection.officeId) !== null && _a !== void 0 ? _a : 1,
45006
+ agentId: (_b = context.agentId) !== null && _b !== void 0 ? _b : null,
45007
+ portalId: (_c = context.portalId) !== null && _c !== void 0 ? _c : null,
45008
+ catalogueId: (_d = context.searchConfiguration.defaultCatalogueId) !== null && _d !== void 0 ? _d : 0,
45009
+ searchConfigurationId: context.searchConfiguration.id,
45010
+ language: (_e = context.languageCode) !== null && _e !== void 0 ? _e : 'en-GB',
45011
+ serviceType: EXCURSION_SERVICE_TYPE,
45012
+ fromDate: excursionSearchParams.fromDate,
45013
+ toDate: excursionSearchParams.toDate,
45014
+ destination: {
45015
+ id: destination.id,
45016
+ isCountry: destination.type === 'country',
45017
+ isRegion: destination.type === 'region',
45018
+ isOord: destination.type === 'oord',
45019
+ isLocation: destination.type === 'location',
45020
+ isAirport: false,
45021
+ code: ''
45022
+ },
45023
+ productCode: '',
45024
+ // rooms: activeSearchSeed.rooms.map((room) => ({
45025
+ // travellers: room.pax.map((pax) => ({
45026
+ // id: pax.id,
45027
+ // age: pax.age,
45028
+ // dateOfBirth: pax.dateOfBirth
45029
+ // }))
45030
+ // })),
45031
+ rooms: [
45032
+ {
45033
+ travellers: allPax.map(function (pax) {
45034
+ return {
45035
+ id: pax.id,
45036
+ age: pax.age,
45037
+ dateOfBirth: pax.dateOfBirth
45038
+ };
45039
+ })
45040
+ }
45041
+ ],
45042
+ tagIds: []
45043
+ };
45044
+ return [4 /*yield*/, build.searchPackagingExcursions(config, searchRequest)];
45045
+ case 1:
45046
+ packageExcursionSearchResults = _f.sent();
45047
+ console.log('Excursion search results', packageExcursionSearchResults);
45048
+ setExcursions(packageExcursionSearchResults);
45049
+ return [3 /*break*/, 4];
45050
+ case 2:
45051
+ err_1 = _f.sent();
45052
+ console.error('Excursion search failed', err_1);
45053
+ return [3 /*break*/, 4];
45054
+ case 3:
45055
+ setIsLoading(false);
45056
+ return [7 /*endfinally*/];
45057
+ case 4:
45058
+ return [2 /*return*/];
45059
+ }
45060
+ });
45061
+ });
45062
+ })();
45063
+ },
45064
+ [context, activeSearchSeed, excursionSearchParams, transactionId]
45065
+ );
45066
+ if (!context || !activeSearchSeed) {
45067
+ return null;
45068
+ }
45069
+ if (!flyInIsOpen || flyInType !== 'excursion-results') {
45070
+ return null;
45071
+ }
45072
+ var translations = getTranslations((_b = context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
45073
+ var handleChange = function (excursion) {
45074
+ console.log('Selected excursion', excursion);
45075
+ dispatch(setFlyInType('excursion-details'));
45076
+ dispatch(setSelectedExcursionSearchResult(excursion));
45077
+ };
45078
+ return isLoading
45079
+ ? React__default['default'].createElement(Spinner, null)
45080
+ : React__default['default'].createElement(
45081
+ 'div',
45082
+ { className: 'flyin__content flyin__content--columns' },
45083
+ React__default['default'].createElement(
45084
+ 'div',
45085
+ { className: 'search__results__wrapper' },
45086
+ React__default['default'].createElement(
45087
+ 'div',
45088
+ { className: 'search__result-row' },
45089
+ React__default['default'].createElement(
45090
+ 'span',
45091
+ { className: 'search__result-row-text' },
45092
+ !isLoading &&
45093
+ React__default['default'].createElement(
45094
+ React__default['default'].Fragment,
45095
+ null,
45096
+ (excursions === null || excursions === void 0 ? void 0 : excursions.length) && excursions.length,
45097
+ '\u00A0',
45098
+ translations.SRP.TOTAL_RESULTS_LABEL
45099
+ )
45100
+ )
45101
+ ),
45102
+ React__default['default'].createElement(
45103
+ 'div',
45104
+ { className: 'search__results__cards search__results__cards--compact' },
45105
+ excursions &&
45106
+ excursions.length > 0 &&
45107
+ excursions.map(function (excursion) {
45108
+ return React__default['default'].createElement(
45109
+ 'div',
45110
+ {
45111
+ key: excursion.code,
45112
+ className: 'search__result-card__wrapper search__result-card__wrapper--custom',
45113
+ onMouseEnter: function (e) {
45114
+ return (e.currentTarget.style.transform = 'scale(1.02)');
45115
+ },
45116
+ onMouseLeave: function (e) {
45117
+ return (e.currentTarget.style.transform = 'scale(1)');
45118
+ }
45119
+ },
45120
+ excursion.contents
45121
+ ? React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: he.decode(excursion.contents) } })
45122
+ : 'no contents',
45123
+ React__default['default'].createElement(
45124
+ 'div',
45125
+ { className: 'search__result-card__footer' },
45126
+ React__default['default'].createElement(
45127
+ 'button',
45128
+ {
45129
+ type: 'button',
45130
+ className: 'cta cta--select',
45131
+ onClick: function () {
45132
+ return handleChange(excursion);
45133
+ }
45134
+ },
45135
+ translations === null || translations === void 0 ? void 0 : translations.SHARED.SELECT
45136
+ )
45137
+ )
45138
+ );
45139
+ })
45140
+ )
45141
+ )
45142
+ );
45143
+ };
45144
+
45145
+ var formatPrice = function (price, currencyCode) {
45146
+ if (typeof price !== 'number') return '';
45147
+ return new Intl.NumberFormat('nl-BE', {
45148
+ style: 'currency',
45149
+ currency: currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR'
45150
+ }).format(price);
45151
+ };
45152
+ var getExcursionDayKey = function (date) {
45153
+ var parsed = typeof date === 'string' ? dateFns.parseISO(date) : date;
45154
+ return dateFns.format(parsed, 'yyyy-MM-dd');
45155
+ };
45156
+ var getOptionPaxIds = function (option) {
45157
+ return Array.isArray(option.paxIds)
45158
+ ? Array.from(new Set(option.paxIds)).sort(function (a, b) {
45159
+ return a - b;
45160
+ })
45161
+ : [];
45162
+ };
45163
+ var optionAppliesToPax = function (option, paxId) {
45164
+ return getOptionPaxIds(option).includes(paxId);
45165
+ };
45166
+ var optionAppliesToAllTravellers = function (option, travellerCount) {
45167
+ var paxIds = getOptionPaxIds(option);
45168
+ var expected = Array.from({ length: travellerCount }, function (_, i) {
45169
+ return i;
45170
+ });
45171
+ return (
45172
+ paxIds.length === expected.length &&
45173
+ paxIds.every(function (id, index) {
45174
+ return id === expected[index];
45175
+ })
45176
+ );
45177
+ };
45178
+ var groupOptionsByExcursion = function (options) {
45179
+ var groupedMap = new Map();
45180
+ options.forEach(function (option) {
45181
+ var key = option.accommodationCode;
45182
+ if (!groupedMap.has(key)) {
45183
+ groupedMap.set(key, {
45184
+ accommodationCode: option.accommodationCode,
45185
+ accommodationName: option.accommodationName,
45186
+ options: []
45187
+ });
45188
+ }
45189
+ groupedMap.get(key).options.push(option);
45190
+ });
45191
+ return Array.from(groupedMap.values());
45192
+ };
45193
+ var ExcursionDetails = function () {
45194
+ var _a;
45195
+ var context = React.useContext(SearchResultsConfigurationContext);
45196
+ var dispatch = reactRedux.useDispatch();
45197
+ var _b = reactRedux.useSelector(function (state) {
45198
+ return state.searchResults;
45199
+ }),
45200
+ selectedExcursionSearchResult = _b.selectedExcursionSearchResult,
45201
+ editablePackagingEntry = _b.editablePackagingEntry,
45202
+ excursionSearchParams = _b.excursionSearchParams;
45203
+ if (
45204
+ !context ||
45205
+ !selectedExcursionSearchResult ||
45206
+ !editablePackagingEntry ||
45207
+ !(excursionSearchParams === null || excursionSearchParams === void 0 ? void 0 : excursionSearchParams.date)
45208
+ ) {
45209
+ return null;
45210
+ }
45211
+ var translations = getTranslations((_a = context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
45212
+ var travellerCount = editablePackagingEntry.pax.length;
45213
+ var allOptions = React.useMemo(
45214
+ function () {
45215
+ return selectedExcursionSearchResult.rooms.flatMap(function (room) {
45216
+ var _a;
45217
+ return (_a = room.options) !== null && _a !== void 0 ? _a : [];
45218
+ });
45219
+ },
45220
+ [selectedExcursionSearchResult]
45221
+ );
45222
+ var sharedOptions = React.useMemo(
45223
+ function () {
45224
+ return allOptions.filter(function (option) {
45225
+ return optionAppliesToAllTravellers(option, travellerCount);
45226
+ });
45227
+ },
45228
+ [allOptions, travellerCount]
45229
+ );
45230
+ var sharedExcursions = React.useMemo(
45231
+ function () {
45232
+ return groupOptionsByExcursion(sharedOptions);
45233
+ },
45234
+ [sharedOptions]
45235
+ );
45236
+ var paxGroups = React.useMemo(
45237
+ function () {
45238
+ return editablePackagingEntry.pax.map(function (pax) {
45239
+ var paxOptions = allOptions.filter(function (option) {
45240
+ return optionAppliesToPax(option, pax.id) && !optionAppliesToAllTravellers(option, travellerCount);
45241
+ });
45242
+ return {
45243
+ pax: pax,
45244
+ paxId: pax.id,
45245
+ excursions: groupOptionsByExcursion(paxOptions)
45246
+ };
45247
+ });
45248
+ },
45249
+ [editablePackagingEntry.pax, allOptions, travellerCount]
45250
+ );
45251
+ var getSelectedSharedOption = function () {
45252
+ return sharedOptions.find(function (option) {
45253
+ return option.isSelected;
45254
+ });
45255
+ };
45256
+ var getSelectedSharedOptionForExcursion = function (accommodationCode) {
45257
+ return sharedOptions.find(function (option) {
45258
+ return option.accommodationCode === accommodationCode && option.isSelected;
45259
+ });
45260
+ };
45261
+ var getSelectedOptionForPax = function (paxId) {
45262
+ return allOptions.find(function (option) {
45263
+ return optionAppliesToPax(option, paxId) && !optionAppliesToAllTravellers(option, travellerCount) && option.isSelected;
45264
+ });
45265
+ };
45266
+ var getSelectedOptionForExcursion = function (paxId, accommodationCode) {
45267
+ return allOptions.find(function (option) {
45268
+ return (
45269
+ optionAppliesToPax(option, paxId) &&
45270
+ !optionAppliesToAllTravellers(option, travellerCount) &&
45271
+ option.accommodationCode === accommodationCode &&
45272
+ option.isSelected
45273
+ );
45274
+ });
45275
+ };
45276
+ var handlePick = function (selectedGuid, paxId) {
45277
+ var updatedExcursionSearchResult = __assign(__assign({}, selectedExcursionSearchResult), {
45278
+ rooms: selectedExcursionSearchResult.rooms.map(function (room) {
45279
+ return __assign(__assign({}, room), {
45280
+ options: room.options.map(function (option) {
45281
+ var isSharedOption = optionAppliesToAllTravellers(option, travellerCount);
45282
+ if (paxId === undefined) {
45283
+ if (!isSharedOption) {
45284
+ return option;
45285
+ }
45286
+ return __assign(__assign({}, option), { isSelected: option.guid === selectedGuid });
45287
+ }
45288
+ if (isSharedOption || !optionAppliesToPax(option, paxId)) {
45289
+ return option;
45290
+ }
45291
+ return __assign(__assign({}, option), { isSelected: option.guid === selectedGuid });
45292
+ })
45293
+ });
45294
+ })
45295
+ });
45296
+ dispatch(setSelectedExcursionSearchResult(updatedExcursionSearchResult));
45297
+ };
45298
+ var calculateTotalPrice = function () {
45299
+ var selectedOptions = allOptions.filter(function (option) {
45300
+ return option.isSelected;
45301
+ });
45302
+ var totalPrice = selectedOptions.reduce(function (total, option) {
45303
+ return total + (option.price || 0);
45304
+ }, 0);
45305
+ return formatPrice(totalPrice, selectedExcursionSearchResult.currencyCode);
45306
+ };
45307
+ var getSharedPriceDifference = function (accommodationCode) {
45308
+ var currentSelectedShared = getSelectedSharedOption();
45309
+ var targetPrice = 0;
45310
+ var selectedOption = getSelectedSharedOptionForExcursion(accommodationCode);
45311
+ if (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.price) {
45312
+ targetPrice = selectedOption.price;
45313
+ } else {
45314
+ var firstOption = sharedOptions.find(function (option) {
45315
+ return option.accommodationCode === accommodationCode;
45316
+ });
45317
+ targetPrice = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.price) || 0;
45318
+ }
45319
+ return targetPrice - ((currentSelectedShared === null || currentSelectedShared === void 0 ? void 0 : currentSelectedShared.price) || 0);
45320
+ };
45321
+ var getPriceDifference = function (currentSelectedPrice, paxId, accommodationCode) {
45322
+ var targetPrice = 0;
45323
+ var selectedOption = getSelectedOptionForExcursion(paxId, accommodationCode);
45324
+ if (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.price) {
45325
+ targetPrice = selectedOption.price;
45326
+ } else {
45327
+ var firstOption = allOptions.find(function (option) {
45328
+ return optionAppliesToPax(option, paxId) && !optionAppliesToAllTravellers(option, travellerCount) && option.accommodationCode === accommodationCode;
45329
+ });
45330
+ targetPrice = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.price) || 0;
45331
+ }
45332
+ return targetPrice - (currentSelectedPrice || 0);
45333
+ };
45334
+ var formatPriceDifference = function (difference, currencyCode) {
45335
+ if (difference === 0) {
45336
+ return null;
45337
+ }
45338
+ var formattedAbsoluteValue = formatPrice(Math.abs(difference), currencyCode);
45339
+ return ''.concat(difference > 0 ? '+' : '-', ' ').concat(formattedAbsoluteValue);
45340
+ };
45341
+ var getPriceDifferenceClassName = function (difference) {
45342
+ if (difference < 0) {
45343
+ return 'flyin__acco__price flyin__acco__price--decrease';
45344
+ }
45345
+ if (difference > 0) {
45346
+ return 'flyin__acco__price flyin__acco__price--increase';
45347
+ }
45348
+ return 'flyin__acco__price';
45349
+ };
45350
+ var handleConfirm = function () {
45351
+ var dayKey = getExcursionDayKey(excursionSearchParams.date);
45352
+ dispatch(
45353
+ confirmExcursionForDay({
45354
+ dayKey: dayKey,
45355
+ excursion: selectedExcursionSearchResult
45356
+ })
45357
+ );
45358
+ dispatch(setFlyInIsOpen(false));
45359
+ };
45360
+ return React__default['default'].createElement(
45361
+ React__default['default'].Fragment,
45362
+ null,
45363
+ React__default['default'].createElement(
45364
+ 'div',
45365
+ { className: 'flyin__content' },
45366
+ sharedExcursions.length > 0 &&
45367
+ React__default['default'].createElement(
45368
+ 'div',
45369
+ { className: 'flyin__acco' },
45370
+ React__default['default'].createElement('h3', { className: 'flyin__acco__room-title' }, translations.QSM.ALL_TRAVELERS),
45371
+ React__default['default'].createElement(
45372
+ 'div',
45373
+ { className: 'flyin__acco__cards' },
45374
+ sharedExcursions.map(function (excursion) {
45375
+ var selectedOption = getSelectedSharedOptionForExcursion(excursion.accommodationCode);
45376
+ var priceDifference = getSharedPriceDifference(excursion.accommodationCode);
45377
+ return React__default['default'].createElement(
45378
+ 'div',
45379
+ { className: 'flyin__acco__card', key: 'all-'.concat(excursion.accommodationCode) },
45380
+ React__default['default'].createElement(
45381
+ 'div',
45382
+ { className: 'flyin__acco__content' },
45383
+ React__default['default'].createElement('h4', { className: 'flyin__acco__title' }, excursion.accommodationName)
45384
+ ),
45385
+ React__default['default'].createElement(
45386
+ 'div',
45387
+ { className: 'flyin__acco__footer' },
45388
+ React__default['default'].createElement(
45389
+ 'div',
45390
+ { className: 'flyin__acco__footer__actions' },
45391
+ React__default['default'].createElement(
45392
+ 'button',
45393
+ {
45394
+ className: selectedOption ? 'cta cta--select cta--selected' : 'cta cta--select',
45395
+ onClick: function () {
45396
+ var _a;
45397
+ return handlePick(
45398
+ selectedOption ? selectedOption.guid : (_a = lodash.first(excursion.options)) === null || _a === void 0 ? void 0 : _a.guid
45399
+ );
45400
+ }
45401
+ },
45402
+ selectedOption
45403
+ ? translations === null || translations === void 0
45404
+ ? void 0
45405
+ : translations.SHARED.SELECTED
45406
+ : translations === null || translations === void 0
45407
+ ? void 0
45408
+ : translations.SHARED.SELECT
45409
+ ),
45410
+ React__default['default'].createElement(
45411
+ 'div',
45412
+ { className: 'flyin__acco__price__wrapper' },
45413
+ React__default['default'].createElement(
45414
+ 'span',
45415
+ { className: getPriceDifferenceClassName(priceDifference) },
45416
+ formatPriceDifference(priceDifference, selectedExcursionSearchResult.currencyCode)
45417
+ )
45418
+ )
45419
+ )
45420
+ )
45421
+ );
45422
+ })
45423
+ )
45424
+ ),
45425
+ paxGroups.map(function (_a) {
45426
+ var pax = _a.pax,
45427
+ paxId = _a.paxId,
45428
+ excursions = _a.excursions;
45429
+ if (excursions.length === 0) {
45430
+ return null;
45431
+ }
45432
+ var selectedPaxOption = getSelectedOptionForPax(paxId);
45433
+ return React__default['default'].createElement(
45434
+ 'div',
45435
+ { className: 'flyin__acco', key: 'pax-'.concat(pax.id) },
45436
+ React__default['default'].createElement('h3', { className: 'flyin__acco__room-title' }, translations.SUMMARY.TRAVELER, ' ', pax.id + 1),
45437
+ React__default['default'].createElement(
45438
+ 'div',
45439
+ { className: 'flyin__acco__cards' },
45440
+ excursions.map(function (excursion) {
45441
+ var selectedOption = getSelectedOptionForExcursion(paxId, excursion.accommodationCode);
45442
+ var priceDifference = getPriceDifference(
45443
+ selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.price,
45444
+ paxId,
45445
+ excursion.accommodationCode
45446
+ );
45447
+ return React__default['default'].createElement(
45448
+ 'div',
45449
+ { className: 'flyin__acco__card', key: ''.concat(pax.id, '-').concat(excursion.accommodationCode) },
45450
+ React__default['default'].createElement(
45451
+ 'div',
45452
+ { className: 'flyin__acco__content' },
45453
+ React__default['default'].createElement('h4', { className: 'flyin__acco__title' }, excursion.accommodationName)
45454
+ ),
45455
+ React__default['default'].createElement(
45456
+ 'div',
45457
+ { className: 'flyin__acco__footer' },
45458
+ React__default['default'].createElement(
45459
+ 'div',
45460
+ { className: 'flyin__acco__footer__actions' },
45461
+ React__default['default'].createElement(
45462
+ 'button',
45463
+ {
45464
+ className:
45465
+ (selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.accommodationCode) ===
45466
+ excursion.accommodationCode
45467
+ ? 'cta cta--select cta--selected'
45468
+ : 'cta cta--select',
45469
+ onClick: function () {
45470
+ var _a;
45471
+ return handlePick(
45472
+ selectedOption ? selectedOption.guid : (_a = lodash.first(excursion.options)) === null || _a === void 0 ? void 0 : _a.guid,
45473
+ paxId
45474
+ );
45475
+ }
45476
+ },
45477
+ (selectedPaxOption === null || selectedPaxOption === void 0 ? void 0 : selectedPaxOption.accommodationCode) ===
45478
+ excursion.accommodationCode
45479
+ ? translations === null || translations === void 0
45480
+ ? void 0
45481
+ : translations.SHARED.SELECTED
45482
+ : translations === null || translations === void 0
45483
+ ? void 0
45484
+ : translations.SHARED.SELECT
45485
+ ),
45486
+ React__default['default'].createElement(
45487
+ 'div',
45488
+ { className: 'flyin__acco__price__wrapper' },
45489
+ React__default['default'].createElement(
45490
+ 'span',
45491
+ { className: getPriceDifferenceClassName(priceDifference) },
45492
+ formatPriceDifference(priceDifference, selectedExcursionSearchResult.currencyCode)
45493
+ )
45494
+ )
45495
+ )
45496
+ )
45497
+ );
45498
+ })
45499
+ )
45500
+ );
45501
+ })
45502
+ ),
45503
+ React__default['default'].createElement(
45504
+ 'div',
45505
+ { className: 'flyin__footer' },
45506
+ React__default['default'].createElement('div', { className: 'flyin__footer__price' }, translations.SHARED.TOTAL_PRICE, ': ', calculateTotalPrice()),
45507
+ React__default['default'].createElement(
45508
+ 'button',
45509
+ { type: 'button', className: 'cta cta--primary', onClick: handleConfirm },
45510
+ translations === null || translations === void 0 ? void 0 : translations.QSM.CONFIRM
45511
+ )
45512
+ )
45513
+ );
45514
+ };
45515
+
44744
45516
  var FlyIn = function (_a) {
44745
45517
  var _b;
44746
45518
  var srpType = _a.srpType,
@@ -44753,7 +45525,8 @@ var FlyIn = function (_a) {
44753
45525
  flyInType = _a.flyInType,
44754
45526
  isPackageEditFlow = _a.isPackageEditFlow,
44755
45527
  handleConfirm = _a.handleConfirm,
44756
- sortByTypes = _a.sortByTypes;
45528
+ sortByTypes = _a.sortByTypes,
45529
+ activeSearchSeed = _a.activeSearchSeed;
44757
45530
  var dispatch = reactRedux.useDispatch();
44758
45531
  var context = React.useContext(SearchResultsConfigurationContext);
44759
45532
  var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
@@ -44811,14 +45584,17 @@ var FlyIn = function (_a) {
44811
45584
  onCancelSearch();
44812
45585
  } else {
44813
45586
  dispatch(setSelectedSearchResult(null));
44814
- dispatch(setSelectedPackagingAccoResult(null));
44815
45587
  }
44816
45588
  dispatch(setFlyInType('acco-details'));
44817
45589
  setIsOpen(false);
44818
45590
  }
44819
45591
  };
44820
45592
  var handleGoBack = function () {
44821
- dispatch(setFlyInType('acco-results'));
45593
+ if (flyInType === 'acco-details') {
45594
+ dispatch(setFlyInType('acco-results'));
45595
+ } else if (flyInType === 'excursion-details') {
45596
+ dispatch(setFlyInType('excursion-results'));
45597
+ }
44822
45598
  };
44823
45599
  var handleSortChange = function (newSortKey, direction) {
44824
45600
  if (sortByTypes === undefined) return;
@@ -44862,7 +45638,8 @@ var FlyIn = function (_a) {
44862
45638
  srpType === build.PortalQsmType.AccommodationAndFlight &&
44863
45639
  flyInType === 'flight-return-results' &&
44864
45640
  ''.concat(translations.SRP.SELECT, ' ').concat(translations.FLIGHTS_FORM.RETURN_FLIGHT),
44865
- srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'flight-details' && 'Select your fare'
45641
+ srpType === build.PortalQsmType.AccommodationAndFlight && flyInType === 'flight-details' && 'Select your fare',
45642
+ flyInType === 'excursion-results' || (flyInType === 'excursion-details' && 'Select excursion')
44866
45643
  ),
44867
45644
  React__default['default'].createElement(
44868
45645
  'span',
@@ -44875,8 +45652,7 @@ var FlyIn = function (_a) {
44875
45652
  React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
44876
45653
  )
44877
45654
  ),
44878
- isPackageEditFlow &&
44879
- flyInType === 'acco-details' &&
45655
+ ((isPackageEditFlow && flyInType === 'acco-details') || flyInType === 'excursion-details') &&
44880
45656
  React__default['default'].createElement(
44881
45657
  'div',
44882
45658
  { className: 'flyin__content-title-row' },
@@ -44957,6 +45733,12 @@ var FlyIn = function (_a) {
44957
45733
  srpType === build.PortalQsmType.AccommodationAndFlight &&
44958
45734
  (flyInType === 'flight-outward-results' || flyInType === 'flight-return-results') &&
44959
45735
  React__default['default'].createElement(PackageingFlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
45736
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45737
+ flyInType === 'excursion-results' &&
45738
+ React__default['default'].createElement(ExcursionResults, { isFlyIn: true, activeSearchSeed: activeSearchSeed }),
45739
+ srpType === build.PortalQsmType.AccommodationAndFlight &&
45740
+ flyInType === 'excursion-details' &&
45741
+ React__default['default'].createElement(ExcursionDetails, null),
44960
45742
  srpType === build.PortalQsmType.GroupTour &&
44961
45743
  React__default['default'].createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
44962
45744
  )
@@ -45315,7 +46097,7 @@ var PairedFlightOption = function (_a) {
45315
46097
  React__default['default'].createElement(
45316
46098
  'span',
45317
46099
  { className: 'price' },
45318
- formatPrice$2(
46100
+ formatPrice$3(
45319
46101
  item.price,
45320
46102
  'EUR',
45321
46103
  (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB'
@@ -47151,7 +47933,7 @@ var GroupTourCard = function (_a) {
47151
47933
  React__default['default'].createElement(
47152
47934
  'div',
47153
47935
  { className: 'search__result-card__allotment__price' },
47154
- formatPrice$2(result.price, result.currencyCode, languageCode),
47936
+ formatPrice$3(result.price, result.currencyCode, languageCode),
47155
47937
  ' ',
47156
47938
  translations.PRODUCT.PER_PERSON
47157
47939
  )
@@ -47933,33 +48715,98 @@ var getRequestRoomsFromPackagingSegments = function (entry, segments) {
47933
48715
  });
47934
48716
  };
47935
48717
 
47936
- var formatNodeDate = function (date) {
47937
- if (!date) return '';
47938
- try {
47939
- return new Intl.DateTimeFormat('nl-BE', {
47940
- weekday: 'long',
47941
- day: '2-digit',
47942
- month: '2-digit',
47943
- year: 'numeric'
47944
- }).format(date);
47945
- } catch (_a) {
47946
- return '';
47947
- }
47948
- };
47949
48718
  var escapeHtml = function (value) {
47950
48719
  if (!value) return '';
47951
48720
  return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
47952
48721
  };
47953
- var buildItineraryHtml = function (itinerary) {
48722
+ var getNodeDayRange = function (node) {
48723
+ var _a, _b;
48724
+ var startDay = Number((_a = node.startDay) !== null && _a !== void 0 ? _a : 0);
48725
+ var endDay = Number((_b = node.endDay) !== null && _b !== void 0 ? _b : startDay);
48726
+ return { startDay: startDay, endDay: endDay };
48727
+ };
48728
+ var getItemDuration = function (item) {
48729
+ var _a;
48730
+ var duration = Number((_a = item.productDuration) !== null && _a !== void 0 ? _a : 0);
48731
+ return Number.isFinite(duration) && duration > 0 ? duration : 0;
48732
+ };
48733
+ var isAccommodationItem = function (item) {
48734
+ var _a;
48735
+ return getItemDuration(item) > 1 && ((_a = item.templateName) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes('hotel'));
48736
+ };
48737
+ var getAccommodationName = function (item) {
48738
+ return item.title || 'Onbekende accommodatie';
48739
+ };
48740
+ var getItemDeduplicationKey = function (item) {
48741
+ var _a;
48742
+ (_a = item.templateName) === null || _a === void 0 ? void 0 : _a.toLowerCase();
48743
+ // if (templateName === 'hotel') {
48744
+ // return [item.templateName, item.productCode, item.accommodationCode, item.regimeCode].filter(Boolean).join('|');
48745
+ // }
48746
+ // if (templateName === 'excursion') {
48747
+ // return [item.templateName, item.productCode].filter(Boolean).join('|');
48748
+ // }
48749
+ return [item.templateName, item.productCode, item.title].filter(Boolean).join('|');
48750
+ };
48751
+ var getUniqueItems = function (items) {
48752
+ if (items === void 0) {
48753
+ items = [];
48754
+ }
48755
+ var seen = new Set();
48756
+ return items.filter(function (item) {
48757
+ var key = getItemDeduplicationKey(item) || item.itemGuid;
48758
+ if (seen.has(key)) {
48759
+ return false;
48760
+ }
48761
+ seen.add(key);
48762
+ return true;
48763
+ });
48764
+ };
48765
+ var findAccommodationForDay = function (nodes, currentDay) {
48766
+ var _a;
48767
+ for (var _i = 0, _b = nodes !== null && nodes !== void 0 ? nodes : []; _i < _b.length; _i++) {
48768
+ var node = _b[_i];
48769
+ var startDay = getNodeDayRange(node).startDay;
48770
+ var uniqueItems = getUniqueItems((_a = node.items) !== null && _a !== void 0 ? _a : []);
48771
+ for (var _c = 0, uniqueItems_1 = uniqueItems; _c < uniqueItems_1.length; _c++) {
48772
+ var item = uniqueItems_1[_c];
48773
+ if (!isAccommodationItem(item)) {
48774
+ continue;
48775
+ }
48776
+ var duration = getItemDuration(item);
48777
+ var accommodationEndDay = startDay + duration - 1;
48778
+ if (currentDay >= startDay && currentDay <= accommodationEndDay) {
48779
+ return item;
48780
+ }
48781
+ }
48782
+ }
48783
+ return null;
48784
+ };
48785
+ var buildItineraryHtml = function (itinerary, translations) {
47954
48786
  var _a;
47955
48787
  if (!itinerary) {
47956
48788
  return '\n <div class="itinerary-shell">\n <div class="itinerary-empty">Geen reisroute beschikbaar.</div>\n </div>\n ';
47957
48789
  }
47958
- var nodesHtml = ((_a = itinerary.nodes) !== null && _a !== void 0 ? _a : [])
48790
+ var allNodes = (_a = itinerary.nodes) !== null && _a !== void 0 ? _a : [];
48791
+ var nodesHtml = allNodes
47959
48792
  .map(function (node) {
47960
- var hasItems = Array.isArray(node.items) && node.items.length > 0;
48793
+ var _a;
48794
+ var startDay = getNodeDayRange(node).startDay;
48795
+ var day = node.startDate ? dateFns.format(node.startDate, 'd') : null;
48796
+ var month = node.startDate ? dateFns.format(node.startDate, 'MMM') : null;
48797
+ var uniqueItems = getUniqueItems((_a = node.items) !== null && _a !== void 0 ? _a : []);
48798
+ var hasItems = uniqueItems.length > 0;
48799
+ var hasAccommodationInCurrentNode = uniqueItems.some(isAccommodationItem);
48800
+ var activeAccommodation = findAccommodationForDay(allNodes, startDay);
48801
+ var accommodationBanner =
48802
+ !hasAccommodationInCurrentNode && activeAccommodation
48803
+ ? '\n <div class="itinerary-node__accommodation-banner">\n Accommodatie voor deze dag: <strong>'.concat(
48804
+ escapeHtml(getAccommodationName(activeAccommodation)),
48805
+ '</strong>\n </div>\n '
48806
+ )
48807
+ : '';
47961
48808
  var itemsHtml = hasItems
47962
- ? node.items
48809
+ ? uniqueItems
47963
48810
  .map(function (item) {
47964
48811
  var _a;
47965
48812
  return '\n <article class="itinerary-item" data-template="'
@@ -47967,25 +48814,19 @@ var buildItineraryHtml = function (itinerary) {
47967
48814
  .concat((_a = item.contents) !== null && _a !== void 0 ? _a : '', '\n </article>\n ');
47968
48815
  })
47969
48816
  .join('')
47970
- : '<div class="itinerary-node__empty">Geen items voor deze dag.</div>';
47971
- return '\n <section class="itinerary-node">\n <header class="itinerary-node__header">\n <div class="itinerary-node__day">Dag '
47972
- .concat(node.startDay)
47973
- .concat(
47974
- node.endDay > node.startDay ? ' - '.concat(node.endDay) : '',
47975
- '</div>\n <div class="itinerary-node__meta">\n <h2 class="itinerary-node__title">'
47976
- )
47977
- .concat(escapeHtml(node.title), '</h2>\n <div class="itinerary-node__date">')
47978
- .concat(
47979
- escapeHtml(formatNodeDate(node.startDate)),
47980
- '</div>\n </div>\n </header>\n\n <div class="itinerary-node__content">\n '
47981
- )
48817
+ : '<div class="itinerary-node__empty">'.concat(translations.ITINERARY.NO_ITEMS, '</div>');
48818
+ return '\n <section class="itinerary-node">\n <header class="itinerary-node__header">\n \n <div class="itinerary-node__day">\n <p class="itinerary-node__day-day">'
48819
+ .concat(day, '</p>\n <p class="itinerary-node__day-month">')
48820
+ .concat(month, '</p>\n </div>\n\n <div>\n <h2 class="itinerary-node__title">')
48821
+ .concat(escapeHtml(node.title), '</h2>\n </div>\n </header>\n\n <div class="itinerary-node__content">\n ')
48822
+ .concat(accommodationBanner, '\n ')
47982
48823
  .concat(itemsHtml, '\n </div>\n </section>\n ');
47983
48824
  })
47984
48825
  .join('');
47985
48826
  var defaultItemsHtml =
47986
48827
  itinerary.defaultItems && itinerary.defaultItems.length > 0
47987
48828
  ? '\n <section class="itinerary-default-items">\n <h2 class="itinerary-default-items__title">Algemene info</h2>\n '.concat(
47988
- itinerary.defaultItems
48829
+ getUniqueItems(itinerary.defaultItems)
47989
48830
  .map(function (item) {
47990
48831
  var _a;
47991
48832
  return '\n <article class="itinerary-item" data-template="'
@@ -48007,42 +48848,270 @@ var buildItineraryHtml = function (itinerary) {
48007
48848
  .concat(defaultItemsHtml, '\n </div>\n </div>\n ');
48008
48849
  };
48009
48850
  var FullItinerary = function (_a) {
48851
+ var _b;
48010
48852
  var isLoading = _a.isLoading;
48011
- if (isLoading) {
48012
- return React__default['default'].createElement(Spinner, null);
48013
- }
48014
48853
  var itinerary = reactRedux.useSelector(function (state) {
48015
48854
  return state.searchResults;
48016
48855
  }).itinerary;
48856
+ var context = React.useContext(SearchResultsConfigurationContext);
48857
+ var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
48017
48858
  var hostRef = React.useRef(null);
48018
48859
  var shadowRootRef = React.useRef(null);
48019
48860
  var html = React.useMemo(
48020
48861
  function () {
48021
- return buildItineraryHtml(itinerary);
48862
+ return buildItineraryHtml(itinerary, translations);
48022
48863
  },
48023
- [itinerary]
48864
+ [itinerary, translations]
48024
48865
  );
48025
48866
  React.useEffect(
48026
48867
  function () {
48027
- var _a;
48028
- if (!hostRef.current) {
48868
+ var _a, _b;
48869
+ if (isLoading) {
48029
48870
  return;
48030
48871
  }
48031
- if (!shadowRootRef.current) {
48032
- shadowRootRef.current = hostRef.current.attachShadow({ mode: 'open' });
48872
+ var host = hostRef.current;
48873
+ if (!host) {
48874
+ return;
48033
48875
  }
48034
- var shadowRoot = shadowRootRef.current;
48876
+ var shadowRoot = (_a = host.shadowRoot) !== null && _a !== void 0 ? _a : host.attachShadow({ mode: 'open' });
48877
+ shadowRootRef.current = shadowRoot;
48035
48878
  shadowRoot.innerHTML =
48036
- "\n <style>\n :host {\n all: initial;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n .itinerary-shell {\n width: 100%;\n margin: 0 auto;\n font-family: 'Outfit', sans-serif;\n color: #222;\n }\n\n .itinerary-shell__header {\n margin-bottom: 24px;\n }\n\n .itinerary-shell__title {\n margin: 0;\n font-size: 32px;\n line-height: 1.2;\n }\n\n .itinerary-shell__content {\n display: grid;\n gap: 24px;\n }\n\n .itinerary-node {\n border: 1px solid #e5e7eb;\n border-radius: 16px;\n overflow: hidden;\n background: #fff;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);\n }\n\n .itinerary-node__header {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n padding: 20px 20px 16px;\n border-bottom: 1px solid #eef0f2;\n background: #fafafa;\n }\n\n .itinerary-node__day {\n flex: 0 0 auto;\n min-width: 72px;\n padding: 8px 12px;\n border-radius: 999px;\n font-size: 14px;\n font-weight: 700;\n line-height: 1;\n background: #111827;\n color: #fff;\n text-align: center;\n }\n\n .itinerary-node__meta {\n min-width: 0;\n }\n\n .itinerary-node__title {\n margin: 0;\n font-size: 22px;\n line-height: 1.25;\n }\n\n .itinerary-node__date {\n margin-top: 6px;\n font-size: 14px;\n color: #6b7280;\n }\n\n .itinerary-node__content {\n display: grid;\n gap: 20px;\n padding: 20px;\n }\n\n .itinerary-item {\n display: block;\n border-radius: 12px;\n overflow: hidden;\n background: #fff;\n }\n\n .itinerary-node__empty,\n .itinerary-empty {\n padding: 20px;\n border: 1px dashed #d1d5db;\n border-radius: 12px;\n color: #6b7280;\n background: #fafafa;\n }\n\n .itinerary-default-items {\n border: 1px solid #e5e7eb;\n border-radius: 16px;\n padding: 20px;\n background: #fff;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);\n }\n\n .itinerary-default-items__title {\n margin: 0 0 16px;\n font-size: 22px;\n }\n\n @media (max-width: 768px) {\n .itinerary-shell {\n padding: 16px;\n }\n\n .itinerary-node__header {\n flex-direction: column;\n }\n\n .itinerary-node__day {\n min-width: auto;\n }\n }\n\n "
48879
+ "\n <style>\n :host {\n all: initial;\n display: block;\n width: 100%;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n .itinerary-shell {\n width: 100%;\n margin: 0 auto;\n font-family: 'Outfit', sans-serif;\n color: #222;\n }\n\n .itinerary-shell__header {\n margin-bottom: 24px;\n }\n\n .itinerary-shell__title {\n margin: 0;\n font-size: 32px;\n line-height: 1.2;\n }\n\n .itinerary-shell__content {\n display: grid;\n gap: 24px;\n }\n\n .itinerary-node {\n border: 1px solid #e5e7eb;\n border-radius: 16px;\n overflow: hidden;\n background: #fff;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);\n }\n\n .itinerary-node__header {\n display: flex;\n gap: 16px;\n align-items: center;\n border-bottom: 1px solid #eef0f2;\n background: #fafafa;\n }\n\n .itinerary-node__day {\n flex: 50px 0 0;\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-content: center;\n background: #1f9470;\n color: white;\n border: 1.5px solid var(--tide-booking-color-secondary);\n }\n\n .itinerary-node__day-month {\n margin: 0px;\n }\n\n .itinerary-node__day-day {\n margin: 0px;\n font-weight: var(--tide-booking-search-results-label-date-month-font-weight);\n color: var(--tide-booking-search-results-label-date-month-color);\n font-size: 24px;\n }\n\n .itinerary-node__title {\n margin: 0;\n font-size: 22px;\n line-height: 1.25;\n }\n\n .itinerary-node__content {\n display: grid;\n gap: 20px;\n padding: 20px;\n }\n\n .itinerary-node__accommodation-banner {\n padding: 12px 16px;\n border: 1px solid #dbeafe;\n border-radius: 12px;\n background: #eff6ff;\n color: #1e3a8a;\n font-size: 14px;\n line-height: 1.4;\n }\n\n .itinerary-item {\n display: block;\n border-radius: 12px;\n overflow: hidden;\n background: #fff;\n }\n\n .itinerary-node__empty,\n .itinerary-empty {\n padding: 20px;\n border: 1px dashed #d1d5db;\n border-radius: 12px;\n color: #6b7280;\n background: #fafafa;\n }\n\n .itinerary-default-items {\n border: 1px solid #e5e7eb;\n border-radius: 16px;\n padding: 20px;\n background: #fff;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);\n }\n\n .itinerary-default-items__title {\n margin: 0 0 16px;\n font-size: 22px;\n }\n\n @media (max-width: 768px) {\n .itinerary-shell {\n padding: 16px;\n }\n }\n\n "
48037
48880
  .concat(
48038
- (_a = itinerary === null || itinerary === void 0 ? void 0 : itinerary.styleSheetBody) !== null && _a !== void 0 ? _a : '',
48881
+ (_b = itinerary === null || itinerary === void 0 ? void 0 : itinerary.styleSheetBody) !== null && _b !== void 0 ? _b : '',
48039
48882
  '\n </style>\n\n '
48040
48883
  )
48041
48884
  .concat(html, '\n ');
48042
48885
  },
48043
- [html, itinerary === null || itinerary === void 0 ? void 0 : itinerary.styleSheetBody]
48886
+ [html, itinerary === null || itinerary === void 0 ? void 0 : itinerary.styleSheetBody, isLoading]
48887
+ );
48888
+ return React__default['default'].createElement(
48889
+ React__default['default'].Fragment,
48890
+ null,
48891
+ isLoading && React__default['default'].createElement(Spinner, null),
48892
+ React__default['default'].createElement('div', { ref: hostRef, style: { display: isLoading ? 'none' : 'block' } })
48893
+ );
48894
+ };
48895
+
48896
+ var getExcursionContentWithUpdatedPrice = function (contents, totalPrice, currencyCode) {
48897
+ if (!contents) return '';
48898
+ var decodedHtml = he.decode(contents);
48899
+ var parser = new DOMParser();
48900
+ var doc = parser.parseFromString(decodedHtml, 'text/html');
48901
+ var priceElement = doc.querySelector('[data-excursion-price]');
48902
+ if (priceElement) {
48903
+ priceElement.textContent = new Intl.NumberFormat('nl-BE', {
48904
+ style: 'currency',
48905
+ currency: currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR'
48906
+ }).format(totalPrice);
48907
+ }
48908
+ return doc.body.innerHTML;
48909
+ };
48910
+ var DayByDayExcursions = function () {
48911
+ var _a;
48912
+ var context = React.useContext(SearchResultsConfigurationContext);
48913
+ var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
48914
+ var dispatch = reactRedux.useDispatch();
48915
+ var confirmedExcursionsByDay = reactRedux.useSelector(function (state) {
48916
+ return state.searchResults;
48917
+ }).confirmedExcursionsByDay;
48918
+ var selectedPackagingAccoResult = reactRedux.useSelector(selectSelectedPackagingAccoResult);
48919
+ var stayDates = React.useMemo(
48920
+ function () {
48921
+ if (
48922
+ !(selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.fromDate) ||
48923
+ !(selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.toDate)
48924
+ ) {
48925
+ return [];
48926
+ }
48927
+ return getDatesBetween(selectedPackagingAccoResult.fromDate, selectedPackagingAccoResult.toDate);
48928
+ },
48929
+ [
48930
+ selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.fromDate,
48931
+ selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.toDate
48932
+ ]
48933
+ );
48934
+ var handleSearchExcursions = function (day) {
48935
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
48936
+ if (!selectedPackagingAccoResult) {
48937
+ return;
48938
+ }
48939
+ var searchParams = {
48940
+ date: day.toISOString(),
48941
+ fromDate: day.toISOString(),
48942
+ toDate: day.toISOString(),
48943
+ countryId: selectedPackagingAccoResult.countryId,
48944
+ regionId: selectedPackagingAccoResult.regionId,
48945
+ oordId: selectedPackagingAccoResult.oordId,
48946
+ locationId: selectedPackagingAccoResult.locationId,
48947
+ locationName: selectedPackagingAccoResult.locationName,
48948
+ accommodationCode:
48949
+ (_e =
48950
+ (_d =
48951
+ (_c =
48952
+ (_b = (_a = selectedPackagingAccoResult.rooms) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.options) ===
48953
+ null || _c === void 0
48954
+ ? void 0
48955
+ : _c.find(function (option) {
48956
+ return option.isSelected;
48957
+ })) === null || _d === void 0
48958
+ ? void 0
48959
+ : _d.accommodationCode) !== null && _e !== void 0
48960
+ ? _e
48961
+ : null,
48962
+ accommodationName:
48963
+ (_k =
48964
+ (_j =
48965
+ (_h =
48966
+ (_g = (_f = selectedPackagingAccoResult.rooms) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.options) ===
48967
+ null || _h === void 0
48968
+ ? void 0
48969
+ : _h.find(function (option) {
48970
+ return option.isSelected;
48971
+ })) === null || _j === void 0
48972
+ ? void 0
48973
+ : _j.accommodationName) !== null && _k !== void 0
48974
+ ? _k
48975
+ : null,
48976
+ hotelCode: selectedPackagingAccoResult.code,
48977
+ hotelName: selectedPackagingAccoResult.name,
48978
+ rooms:
48979
+ (_l = selectedPackagingAccoResult === null || selectedPackagingAccoResult === void 0 ? void 0 : selectedPackagingAccoResult.rooms) !== null &&
48980
+ _l !== void 0
48981
+ ? _l
48982
+ : []
48983
+ };
48984
+ dispatch(setExcursionSearchParams(searchParams));
48985
+ dispatch(setFlyInIsOpen(true));
48986
+ dispatch(setFlyInType('excursion-results'));
48987
+ };
48988
+ var getSelectedOptionsSummary = function (excursion) {
48989
+ var options = excursion.rooms.flatMap(function (room) {
48990
+ var _a;
48991
+ return (_a = room.options) !== null && _a !== void 0 ? _a : [];
48992
+ });
48993
+ return options.filter(function (option) {
48994
+ return option.isSelected;
48995
+ });
48996
+ };
48997
+ if (!selectedPackagingAccoResult || stayDates.length === 0) {
48998
+ return null;
48999
+ }
49000
+ return React__default['default'].createElement(
49001
+ React__default['default'].Fragment,
49002
+ null,
49003
+ stayDates.map(function (day) {
49004
+ var _a;
49005
+ var dayKey = dateFns.format(day, 'yyyy-MM-dd');
49006
+ var formattedDay = dateFns.format(day, 'd');
49007
+ var formattedMonth = dateFns.format(day, 'MMM');
49008
+ var confirmedExcursions = (_a = confirmedExcursionsByDay[dayKey]) !== null && _a !== void 0 ? _a : [];
49009
+ return React__default['default'].createElement(
49010
+ React__default['default'].Fragment,
49011
+ { key: dayKey },
49012
+ React__default['default'].createElement(
49013
+ 'div',
49014
+ { className: 'search__results__label search__results__label--secondary' },
49015
+ React__default['default'].createElement(
49016
+ 'div',
49017
+ { className: 'search__results__label__date' },
49018
+ React__default['default'].createElement('p', { className: 'search__results__label__date-date' }, formattedDay),
49019
+ React__default['default'].createElement('p', null, formattedMonth)
49020
+ ),
49021
+ React__default['default'].createElement(
49022
+ 'div',
49023
+ { className: 'search__results__label__text' },
49024
+ React__default['default'].createElement(
49025
+ 'h3',
49026
+ null,
49027
+ translations.SRP.SELECT,
49028
+ ' ',
49029
+ React__default['default'].createElement('strong', null, translations.SRP.EXCURSION)
49030
+ )
49031
+ )
49032
+ ),
49033
+ React__default['default'].createElement(
49034
+ 'div',
49035
+ { className: 'search__results__cards__actions' },
49036
+ React__default['default'].createElement('span', null, 'Accommodation for this day: ', selectedPackagingAccoResult.name),
49037
+ React__default['default'].createElement(
49038
+ 'button',
49039
+ {
49040
+ type: 'button',
49041
+ className: 'cta cta--secondary',
49042
+ onClick: function () {
49043
+ return handleSearchExcursions(day);
49044
+ }
49045
+ },
49046
+ confirmedExcursions.length > 0 ? 'Add another excursion' : ''.concat(translations.SRP.SELECT, ' ').concat(translations.SRP.EXCURSION)
49047
+ )
49048
+ ),
49049
+ React__default['default'].createElement(
49050
+ 'div',
49051
+ { className: 'search__results__cards search__results__cards--compact' },
49052
+ confirmedExcursions &&
49053
+ confirmedExcursions.length > 0 &&
49054
+ confirmedExcursions.map(function (excursion) {
49055
+ var selectedOptions = getSelectedOptionsSummary(excursion);
49056
+ var totalPrice = selectedOptions.reduce(function (sum, option) {
49057
+ return sum + (option.price || 0);
49058
+ }, 0);
49059
+ var updatedContents = getExcursionContentWithUpdatedPrice(excursion.contents, totalPrice, excursion.currencyCode);
49060
+ return React__default['default'].createElement(
49061
+ 'div',
49062
+ {
49063
+ key: excursion.code,
49064
+ className: 'search__result-card__wrapper search__result-card__wrapper--custom',
49065
+ onMouseEnter: function (e) {
49066
+ return (e.currentTarget.style.transform = 'scale(1.02)');
49067
+ },
49068
+ onMouseLeave: function (e) {
49069
+ return (e.currentTarget.style.transform = 'scale(1)');
49070
+ }
49071
+ },
49072
+ React__default['default'].createElement('div', { dangerouslySetInnerHTML: { __html: updatedContents } }),
49073
+ React__default['default'].createElement(
49074
+ 'div',
49075
+ { className: 'search__result-card__content--extra' },
49076
+ React__default['default'].createElement(
49077
+ 'div',
49078
+ { className: 'search__result-card__content__wrapper' },
49079
+ React__default['default'].createElement(
49080
+ 'div',
49081
+ { className: 'search__result-card__options' },
49082
+ selectedOptions.length > 0 &&
49083
+ selectedOptions.map(function (option) {
49084
+ return React__default['default'].createElement(
49085
+ 'div',
49086
+ { className: 'search__result-card__option', key: option.guid },
49087
+ React__default['default'].createElement(Icon$1, { name: 'ui-ticket', width: 14, height: 14, 'aria-hidden': 'true' }),
49088
+ React__default['default'].createElement('span', null, option.accommodationName)
49089
+ );
49090
+ })
49091
+ )
49092
+ )
49093
+ ),
49094
+ React__default['default'].createElement(
49095
+ 'div',
49096
+ { className: 'search__result-card__footer' },
49097
+ React__default['default'].createElement(
49098
+ 'button',
49099
+ {
49100
+ type: 'button',
49101
+ className: 'cta cta--remove',
49102
+ onClick: function () {
49103
+ return dispatch(removeConfirmedExcursionForDay({ dayKey: dayKey, excursionCode: excursion.code }));
49104
+ }
49105
+ },
49106
+ 'Remove'
49107
+ )
49108
+ )
49109
+ );
49110
+ })
49111
+ )
49112
+ );
49113
+ })
48044
49114
  );
48045
- return React__default['default'].createElement('div', { ref: hostRef });
48046
49115
  };
48047
49116
 
48048
49117
  var SearchResultsContainer = function () {
@@ -48071,9 +49140,10 @@ var SearchResultsContainer = function () {
48071
49140
  packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
48072
49141
  editablePackagingEntry = _c.editablePackagingEntry,
48073
49142
  transactionId = _c.transactionId,
48074
- flyInType = _c.flyInType,
48075
- itinerary = _c.itinerary,
48076
- packagingFlightResults = _c.packagingFlightResults;
49143
+ flyInType = _c.flyInType;
49144
+ _c.itinerary;
49145
+ var packagingFlightResults = _c.packagingFlightResults,
49146
+ confirmedExcursionsByDay = _c.confirmedExcursionsByDay;
48077
49147
  var isMobile = useMediaQuery('(max-width: 1200px)');
48078
49148
  var _d = React.useState(false),
48079
49149
  initialFiltersSet = _d[0],
@@ -49242,6 +50312,7 @@ var SearchResultsContainer = function () {
49242
50312
  selectedHotelCode: selectedPackagingAccoResultCode,
49243
50313
  accommodationResults: packagingAccoResults,
49244
50314
  selectedFlight: selectedCombinationFlight !== null && selectedCombinationFlight !== void 0 ? selectedCombinationFlight : null,
50315
+ confirmedExcursionsByDay: confirmedExcursionsByDay,
49245
50316
  seed: seed,
49246
50317
  transactionId:
49247
50318
  (_c =
@@ -49267,6 +50338,7 @@ var SearchResultsContainer = function () {
49267
50338
  packagingAccoResults,
49268
50339
  packagingAccoSearchDetails,
49269
50340
  selectedCombinationFlight,
50341
+ confirmedExcursionsByDay,
49270
50342
  transactionId,
49271
50343
  dispatch
49272
50344
  ]
@@ -49281,56 +50353,103 @@ var SearchResultsContainer = function () {
49281
50353
  return line.serviceType !== FLIGHT_SERVICE_TYPE;
49282
50354
  });
49283
50355
  };
50356
+ var removeExcursionLines = function (lines) {
50357
+ return lines.filter(function (line) {
50358
+ return line.serviceType !== EXCURSION_SERVICE_TYPE;
50359
+ });
50360
+ };
49284
50361
  var buildAccommodationLinesFromSelection = function (selectedHotel, seed) {
49285
- if (!selectedHotel) return [];
50362
+ return buildPackagingAccommodationLines(selectedHotel, seed, ACCOMMODATION_SERVICE_TYPE);
50363
+ };
50364
+ var buildExcursionLinesFromConfirmedDays = function (confirmedExcursionsByDay) {
50365
+ return Object.values(confirmedExcursionsByDay)
50366
+ .flat()
50367
+ .flatMap(function (excursion) {
50368
+ var selectedOptions = excursion.rooms.flatMap(function (room) {
50369
+ return room.options.filter(function (option) {
50370
+ return option.isSelected;
50371
+ });
50372
+ });
50373
+ var parentGuid = crypto.randomUUID();
50374
+ return selectedOptions.map(function (option, index) {
50375
+ var _a, _b, _c;
50376
+ return {
50377
+ guid: (_a = option.guid) !== null && _a !== void 0 ? _a : crypto.randomUUID(),
50378
+ moment: '',
50379
+ parentGuid: index === 0 ? null : parentGuid,
50380
+ order: index,
50381
+ isChanged: true,
50382
+ from: excursion.fromDate,
50383
+ to: excursion.toDate,
50384
+ serviceType: EXCURSION_SERVICE_TYPE,
50385
+ productName: excursion.name,
50386
+ productCode: excursion.code,
50387
+ accommodationName: option.accommodationName,
50388
+ accommodationCode: option.accommodationCode,
50389
+ regimeName: option.regimeName,
50390
+ regimeCode: option.regimeCode,
50391
+ country: excursion.countryId ? { id: excursion.countryId, name: excursion.countryName, localizations: [] } : null,
50392
+ region: excursion.regionId ? { id: excursion.regionId, name: excursion.regionName, localizations: [] } : null,
50393
+ oord: excursion.oordId ? { id: excursion.oordId, name: excursion.oordName, localizations: [] } : null,
50394
+ location: excursion.locationId ? { id: excursion.locationId, name: excursion.locationName, localizations: [] } : null,
50395
+ longitude: (_b = excursion.longitude) !== null && _b !== void 0 ? _b : null,
50396
+ latitude: (_c = excursion.latitude) !== null && _c !== void 0 ? _c : null,
50397
+ pax: Array.isArray(option.paxIds)
50398
+ ? option.paxIds.map(function (paxId, paxIndex) {
50399
+ return {
50400
+ paxId: paxId,
50401
+ room: 0,
50402
+ order: paxIndex
50403
+ };
50404
+ })
50405
+ : [],
50406
+ flightInformation: null
50407
+ };
50408
+ });
50409
+ });
50410
+ };
50411
+ var buildPackagingAccommodationLines = function (selectedItem, seed, serviceType) {
50412
+ if (!selectedItem) return [];
49286
50413
  var parentGuid = crypto.randomUUID();
49287
- return selectedHotel.rooms
50414
+ return selectedItem.rooms
49288
50415
  .filter(function (room) {
49289
50416
  return room.options.some(function (o) {
49290
50417
  return o.isSelected;
49291
50418
  });
49292
50419
  })
49293
50420
  .map(function (room, index) {
49294
- var _a, _b, _c, _d, _e;
50421
+ var _a, _b, _c;
49295
50422
  var option = room.options.find(function (o) {
49296
50423
  return o.isSelected;
49297
50424
  });
49298
- var pax =
49299
- (_b =
49300
- (_a = seed.rooms) === null || _a === void 0
49301
- ? void 0
49302
- : _a.flatMap(function (room, roomIndex) {
49303
- return room.pax.map(function (p, paxIndex) {
49304
- return {
49305
- paxId: p.id,
49306
- room: roomIndex,
49307
- order: paxIndex
49308
- };
49309
- });
49310
- })) !== null && _b !== void 0
49311
- ? _b
49312
- : [];
50425
+ var pax = option.paxIds.map(function (p, paxIndex) {
50426
+ return {
50427
+ paxId: p,
50428
+ room: index,
50429
+ order: paxIndex
50430
+ };
50431
+ });
49313
50432
  return {
49314
- guid: (_c = option.guid) !== null && _c !== void 0 ? _c : crypto.randomUUID(),
50433
+ guid: (_a = option.guid) !== null && _a !== void 0 ? _a : crypto.randomUUID(),
49315
50434
  moment: '',
49316
50435
  parentGuid: index === 0 ? null : parentGuid,
49317
50436
  order: index,
49318
50437
  isChanged: true,
49319
- from: selectedHotel.fromDate,
49320
- to: selectedHotel.toDate,
49321
- serviceType: ACCOMMODATION_SERVICE_TYPE,
49322
- productName: selectedHotel.name,
49323
- productCode: selectedHotel.code,
50438
+ from: selectedItem.fromDate,
50439
+ to: selectedItem.toDate,
50440
+ serviceType: serviceType,
50441
+ productName: selectedItem.name,
50442
+ productCode: selectedItem.code,
49324
50443
  accommodationName: option.accommodationName,
49325
50444
  accommodationCode: option.accommodationCode,
49326
50445
  regimeName: option.regimeName,
49327
50446
  regimeCode: option.regimeCode,
49328
- country: selectedHotel.countryId ? { id: selectedHotel.countryId, name: selectedHotel.countryName, localizations: [] } : null,
49329
- region: selectedHotel.regionId ? { id: selectedHotel.regionId, name: selectedHotel.regionName, localizations: [] } : null,
49330
- oord: selectedHotel.oordId ? { id: selectedHotel.oordId, name: selectedHotel.oordName, localizations: [] } : null,
49331
- location: selectedHotel.locationId ? { id: selectedHotel.locationId, name: selectedHotel.locationName, localizations: [] } : null,
49332
- longitude: (_d = selectedHotel.longitude) !== null && _d !== void 0 ? _d : null,
49333
- latitude: (_e = selectedHotel.latitude) !== null && _e !== void 0 ? _e : null,
50447
+ country: selectedItem.countryId ? { id: selectedItem.countryId, name: selectedItem.countryName, localizations: [] } : null,
50448
+ region: selectedItem.regionId ? { id: selectedItem.regionId, name: selectedItem.regionName, localizations: [] } : null,
50449
+ oord: selectedItem.oordId ? { id: selectedItem.oordId, name: selectedItem.oordName, localizations: [] } : null,
50450
+ location: selectedItem.locationId ? { id: selectedItem.locationId, name: selectedItem.locationName, localizations: [] } : null,
50451
+ longitude: (_b = selectedItem.longitude) !== null && _b !== void 0 ? _b : null,
50452
+ latitude: (_c = selectedItem.latitude) !== null && _c !== void 0 ? _c : null,
49334
50453
  pax: pax,
49335
50454
  flightInformation: null
49336
50455
  };
@@ -49458,6 +50577,7 @@ var SearchResultsContainer = function () {
49458
50577
  selectedHotelCode = _a.selectedHotelCode,
49459
50578
  accommodationResults = _a.accommodationResults,
49460
50579
  selectedFlight = _a.selectedFlight,
50580
+ confirmedExcursionsByDay = _a.confirmedExcursionsByDay,
49461
50581
  seed = _a.seed,
49462
50582
  transactionId = _a.transactionId,
49463
50583
  language = _a.language;
@@ -49485,6 +50605,12 @@ var SearchResultsContainer = function () {
49485
50605
  nextLines = __spreadArray(__spreadArray([], nextLines, true), flightLines, true);
49486
50606
  }
49487
50607
  }
50608
+ // excursions
50609
+ var excursionLines = buildExcursionLinesFromConfirmedDays(confirmedExcursionsByDay);
50610
+ nextLines = removeExcursionLines(nextLines);
50611
+ if (excursionLines.length) {
50612
+ nextLines = __spreadArray(__spreadArray([], nextLines, true), excursionLines, true);
50613
+ }
49488
50614
  nextLines = nextLines.map(function (line, index) {
49489
50615
  return __assign(__assign({}, line), { order: index });
49490
50616
  });
@@ -49495,7 +50621,7 @@ var SearchResultsContainer = function () {
49495
50621
  if (sourceEntry) {
49496
50622
  return structuredClone(sourceEntry);
49497
50623
  }
49498
- var paxId = 1;
50624
+ var paxId = 0;
49499
50625
  var pax =
49500
50626
  (_b =
49501
50627
  (_a = seed.rooms) === null || _a === void 0
@@ -49704,8 +50830,6 @@ var SearchResultsContainer = function () {
49704
50830
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
49705
50831
  !context.packagingEntry &&
49706
50832
  context.showFlightResults &&
49707
- // bookingPackageDetails?.outwardFlights &&
49708
- // <FlightResults flights={bookingPackageDetails?.outwardFlights} isDeparture={true} />
49709
50833
  React__default['default'].createElement(
49710
50834
  React__default['default'].Fragment,
49711
50835
  null,
@@ -49786,11 +50910,12 @@ var SearchResultsContainer = function () {
49786
50910
  context.showHotelAccommodationResults &&
49787
50911
  !context.packagingEntry &&
49788
50912
  React__default['default'].createElement(HotelAccommodationResults, { isLoading: isLoading }),
50913
+ context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
50914
+ !context.packagingEntry &&
50915
+ React__default['default'].createElement(DayByDayExcursions, null),
49789
50916
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
49790
50917
  !context.packagingEntry &&
49791
50918
  context.showFlightResults &&
49792
- // bookingPackageDetails?.returnFlights &&
49793
- // <FlightResults flights={bookingPackageDetails?.returnFlights} isDeparture={false} />
49794
50919
  React__default['default'].createElement(
49795
50920
  React__default['default'].Fragment,
49796
50921
  null,
@@ -49845,7 +50970,6 @@ var SearchResultsContainer = function () {
49845
50970
  ),
49846
50971
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
49847
50972
  context.packagingEntry &&
49848
- itinerary &&
49849
50973
  React__default['default'].createElement(FullItinerary, { isLoading: itineraryIsLoading })
49850
50974
  )
49851
50975
  ),
@@ -49862,7 +50986,8 @@ var SearchResultsContainer = function () {
49862
50986
  detailsLoading: detailsIsLoading,
49863
50987
  flyInType: flyInType,
49864
50988
  isPackageEditFlow: !!context.packagingEntry,
49865
- sortByTypes: sortByTypes
50989
+ sortByTypes: sortByTypes,
50990
+ activeSearchSeed: activeSearchSeed
49866
50991
  })
49867
50992
  )
49868
50993
  )