@qite/tide-booking-component 1.4.100 → 1.4.102

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 (23) hide show
  1. package/build/build-cjs/index.js +990 -423
  2. package/build/build-cjs/src/index.d.ts +3 -1
  3. package/build/build-cjs/src/search-results/components/itinerary/full-itinerary.d.ts +6 -0
  4. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +18 -2
  5. package/build/build-cjs/src/search-results/types.d.ts +3 -1
  6. package/build/build-cjs/src/search-results/utils/flight-utils.d.ts +1 -0
  7. package/build/build-esm/index.js +990 -417
  8. package/build/build-esm/src/index.d.ts +3 -1
  9. package/build/build-esm/src/search-results/components/itinerary/full-itinerary.d.ts +6 -0
  10. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +18 -2
  11. package/build/build-esm/src/search-results/types.d.ts +3 -1
  12. package/build/build-esm/src/search-results/utils/flight-utils.d.ts +1 -0
  13. package/package.json +2 -2
  14. package/src/index.ts +3 -1
  15. package/src/search-results/components/flight/flight-selection/independent-flight-option.tsx +1 -7
  16. package/src/search-results/components/flight/flight-selection/independent-flight-selection.tsx +2 -6
  17. package/src/search-results/components/itinerary/full-itinerary.tsx +266 -0
  18. package/src/search-results/components/itinerary/index.tsx +0 -2
  19. package/src/search-results/components/search-results-container/search-results-container.tsx +668 -78
  20. package/src/search-results/store/search-results-slice.ts +35 -3
  21. package/src/search-results/types.ts +3 -1
  22. package/src/search-results/utils/flight-utils.ts +5 -0
  23. package/src/shared/components/flyin/accommodation-flyin.tsx +4 -2
@@ -13449,11 +13449,12 @@ PERFORMANCE OF THIS SOFTWARE.
13449
13449
  var ENDPOINT = '/api/web/packaging';
13450
13450
  var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
13451
13451
  var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
13452
+ var ENDPOINT_FLIGHTS = ENDPOINT + '/flights';
13452
13453
  var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
13454
+ var ENDPOINT_ITINERARY = ENDPOINT + '/itinerary';
13453
13455
  var ENDPOINT_ENTRY = function (magicLinkCode) {
13454
13456
  return ENDPOINT + '/entry/' + magicLinkCode;
13455
13457
  };
13456
- // MANUAL PACKAGING SEARCH
13457
13458
  var startTransaction = function (config, signal) {
13458
13459
  var apiKey = config.apiKey;
13459
13460
  var url = '' + config.host + ENDPOINT_START_TRANSACTION;
@@ -13465,6 +13466,12 @@ PERFORMANCE OF THIS SOFTWARE.
13465
13466
  var body = JSON.stringify(request);
13466
13467
  return post(url, apiKey, body, config.token, signal, true);
13467
13468
  };
13469
+ var searchPackagingFlights = function (config, request, signal) {
13470
+ var url = '' + config.host + ENDPOINT_FLIGHTS;
13471
+ var apiKey = config.apiKey;
13472
+ var body = JSON.stringify(request);
13473
+ return post(url, apiKey, body, config.token, signal, true);
13474
+ };
13468
13475
  var getEntry = function (config, magicLinkCode, signal) {
13469
13476
  var apiKey = config.apiKey;
13470
13477
  var url = '' + config.host + ENDPOINT_ENTRY(magicLinkCode);
@@ -13476,6 +13483,12 @@ PERFORMANCE OF THIS SOFTWARE.
13476
13483
  var body = JSON.stringify(request);
13477
13484
  return post(url, apiKey, body, config.token, signal, true);
13478
13485
  };
13486
+ var getItinerary = function (config, request, signal) {
13487
+ var url = '' + config.host + ENDPOINT_ITINERARY;
13488
+ var apiKey = config.apiKey;
13489
+ var body = JSON.stringify(request);
13490
+ return post(url, apiKey, body, config.token, signal, true);
13491
+ };
13479
13492
 
13480
13493
  exports.AllotmentType = AllotmentType;
13481
13494
  exports.ContactForm = ContactForm;
@@ -13528,6 +13541,7 @@ PERFORMANCE OF THIS SOFTWARE.
13528
13541
  exports.getEntryStatus = getEntryStatus;
13529
13542
  exports.getEntryTotals = getEntryTotals;
13530
13543
  exports.getInvoiceList = getInvoiceList;
13544
+ exports.getItinerary = getItinerary;
13531
13545
  exports.getLocations = getLocations;
13532
13546
  exports.getMolliePayment = getMolliePayment;
13533
13547
  exports.getPortal = getPortal;
@@ -13549,6 +13563,7 @@ PERFORMANCE OF THIS SOFTWARE.
13549
13563
  exports.searchLocations = searchLocations;
13550
13564
  exports.searchOords = searchOords;
13551
13565
  exports.searchPackagingAccommodations = searchPackagingAccommodations;
13566
+ exports.searchPackagingFlights = searchPackagingFlights;
13552
13567
  exports.searchRegions = searchRegions;
13553
13568
  exports.searchWithErrorMapping = searchWithErrorMapping;
13554
13569
  exports.setCustomEntryStatus = setCustomEntryStatus;
@@ -20487,7 +20502,7 @@ var getFlightDetails = function (flight) {
20487
20502
  arrivalDate: lastLine.arrivalDate,
20488
20503
  arrivalTime: lastLine.arrivalTime,
20489
20504
  arrivalAirport: lastLine.arrivalAirportDescription,
20490
- travelDuration: formatDuration$1(flight.flightMetaData.durationInTicks),
20505
+ travelDuration: formatDuration(flight.flightMetaData.durationInTicks),
20491
20506
  travelDurationMinutes: minutesFromTicks(flight.flightMetaData.durationInTicks),
20492
20507
  changeDurationMinutes: getTotalChangeDuration(flight),
20493
20508
  numberOfStops: flight.flightMetaData.flightLines.length - 1,
@@ -20503,7 +20518,7 @@ var getFlightDetails = function (flight) {
20503
20518
  arrivalTime: x.arrivalTime,
20504
20519
  arrivalAirport: x.arrivalAirportDescription,
20505
20520
  number: ''.concat(x.airlineCode, ' ').concat(x.number),
20506
- travelDuration: formatDuration$1(x.durationInTicks),
20521
+ travelDuration: formatDuration(x.durationInTicks),
20507
20522
  waitDuration: waitDurations.length - 1 <= i ? waitDurations[i] : undefined
20508
20523
  };
20509
20524
  })
@@ -20579,7 +20594,7 @@ var minutesFromTicks = function (ticks) {
20579
20594
  var totalSeconds = ticks / 10000000;
20580
20595
  return Math.floor(totalSeconds / 60);
20581
20596
  };
20582
- var formatDuration$1 = function (ticks) {
20597
+ var formatDuration = function (ticks) {
20583
20598
  if (!ticks) return '';
20584
20599
  var totalSeconds = ticks / 10000000;
20585
20600
  var hh = Math.floor(totalSeconds / 3600);
@@ -33668,10 +33683,13 @@ var initialState$1 = {
33668
33683
  filteredPackagingAccoResults: [],
33669
33684
  packagingAccoSearchDetails: [],
33670
33685
  selectedPackagingAccoResultCode: null,
33686
+ packagingFlightResults: [],
33687
+ selectedPackagingFlight: null,
33671
33688
  selectedFlight: null,
33672
33689
  selectedFlightDetails: null,
33673
33690
  bookingPackageDetails: null,
33674
33691
  isLoading: false,
33692
+ flightsLoading: false,
33675
33693
  filters: [],
33676
33694
  selectedSortType: null,
33677
33695
  activeTab: 'compact',
@@ -33680,7 +33698,8 @@ var initialState$1 = {
33680
33698
  editablePackagingEntry: null,
33681
33699
  transactionId: null,
33682
33700
  accommodationFlyInStep: 'details',
33683
- priceDetails: null
33701
+ priceDetails: null,
33702
+ itinerary: null
33684
33703
  };
33685
33704
  var searchResultsSlice = createSlice({
33686
33705
  name: 'searchResults',
@@ -33707,6 +33726,12 @@ var searchResultsSlice = createSlice({
33707
33726
  setSelectedPackagingAccoResult: function (state, action) {
33708
33727
  state.selectedPackagingAccoResultCode = action.payload;
33709
33728
  },
33729
+ setPackagingFlightResults: function (state, action) {
33730
+ state.packagingFlightResults = action.payload;
33731
+ },
33732
+ setSelectedPackagingFlight: function (state, action) {
33733
+ state.selectedPackagingFlight = action.payload;
33734
+ },
33710
33735
  setSelectedFlight: function (state, action) {
33711
33736
  state.selectedFlight = action.payload;
33712
33737
  },
@@ -33729,6 +33754,9 @@ var searchResultsSlice = createSlice({
33729
33754
  setIsLoading: function (state, action) {
33730
33755
  state.isLoading = action.payload;
33731
33756
  },
33757
+ setFlightsLoading: function (state, action) {
33758
+ state.flightsLoading = action.payload;
33759
+ },
33732
33760
  setFilters: function (state, action) {
33733
33761
  var updatedFilters = action.payload;
33734
33762
  updatedFilters.forEach(function (updatedFilter) {
@@ -33776,6 +33804,9 @@ var searchResultsSlice = createSlice({
33776
33804
  },
33777
33805
  setPriceDetails: function (state, action) {
33778
33806
  state.priceDetails = action.payload;
33807
+ },
33808
+ setItinerary: function (state, action) {
33809
+ state.itinerary = action.payload;
33779
33810
  }
33780
33811
  }
33781
33812
  });
@@ -33786,11 +33817,14 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33786
33817
  setFilteredPackagingAccoResults = _a.setFilteredPackagingAccoResults,
33787
33818
  setPackagingAccoSearchDetails = _a.setPackagingAccoSearchDetails,
33788
33819
  setSelectedPackagingAccoResult = _a.setSelectedPackagingAccoResult,
33820
+ setPackagingFlightResults = _a.setPackagingFlightResults,
33821
+ setSelectedPackagingFlight = _a.setSelectedPackagingFlight,
33789
33822
  setSelectedFlight = _a.setSelectedFlight,
33790
33823
  setSelectedFlightDetails = _a.setSelectedFlightDetails,
33791
- setBookingPackageDetails = _a.setBookingPackageDetails,
33792
- selectFlight = _a.selectFlight,
33793
- setIsLoading = _a.setIsLoading,
33824
+ setBookingPackageDetails = _a.setBookingPackageDetails;
33825
+ _a.selectFlight;
33826
+ var setIsLoading = _a.setIsLoading,
33827
+ setFlightsLoading = _a.setFlightsLoading,
33794
33828
  setFilters = _a.setFilters,
33795
33829
  resetFilters = _a.resetFilters,
33796
33830
  setSortType = _a.setSortType,
@@ -33801,7 +33835,8 @@ var setFlyInIsOpen = _a.setFlyInIsOpen,
33801
33835
  setEditablePackagingEntry = _a.setEditablePackagingEntry,
33802
33836
  setTransactionId = _a.setTransactionId,
33803
33837
  setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
33804
- setPriceDetails = _a.setPriceDetails;
33838
+ setPriceDetails = _a.setPriceDetails,
33839
+ setItinerary = _a.setItinerary;
33805
33840
  var searchResultsReducer = searchResultsSlice.reducer;
33806
33841
 
33807
33842
  var ItemPicker = function (_a) {
@@ -35159,8 +35194,6 @@ var Itinerary = function (_a) {
35159
35194
  segments: segments
35160
35195
  };
35161
35196
  });
35162
- console.log('otherSegments', otherSegments);
35163
- console.log('groupedOtherSegments', groupedOtherSegments);
35164
35197
  var numberOfPax = ((_p = packagingEntry.pax) === null || _p === void 0 ? void 0 : _p.length) || 1;
35165
35198
  var totalPrice = (priceDetails === null || priceDetails === void 0 ? void 0 : priceDetails.total) || packagingEntry.price || 0;
35166
35199
  var pricePerPerson = totalPrice / numberOfPax;
@@ -36738,6 +36771,14 @@ var Icon = function (_a) {
36738
36771
  }
36739
36772
  };
36740
36773
 
36774
+ var getFlightKey = function (segments) {
36775
+ if (!segments || segments.length === 0) return '';
36776
+ return segments
36777
+ .map(function (s) {
36778
+ return ''.concat(s.marketingAirlineCode).concat(s.flightNumber, '_').concat(s.departureDateTime);
36779
+ })
36780
+ .join('_');
36781
+ };
36741
36782
  // export const getAirportName = (airport: TideAirport | undefined, language: string): string => {
36742
36783
  // if (!airport || !airport.name) {
36743
36784
  // return "";
@@ -38276,13 +38317,11 @@ var FlightsFlyIn = function (_a) {
38276
38317
  };
38277
38318
 
38278
38319
  var formatPrice$1 = function (price, currencyCode) {
38279
- if (currencyCode === void 0) {
38280
- currencyCode = 'EUR';
38281
- }
38282
38320
  if (typeof price !== 'number') return '';
38321
+ var safeCurrency = currencyCode !== null && currencyCode !== void 0 ? currencyCode : 'EUR';
38283
38322
  return new Intl.NumberFormat('nl-BE', {
38284
38323
  style: 'currency',
38285
- currency: currencyCode
38324
+ currency: safeCurrency
38286
38325
  }).format(price);
38287
38326
  };
38288
38327
  var AccommodationFlyIn = function (_a) {
@@ -43933,259 +43972,6 @@ var RoundTripResults = function () {
43933
43972
  );
43934
43973
  };
43935
43974
 
43936
- var ticksToMinutes = function (ticks) {
43937
- return Math.floor(ticks / 600000000);
43938
- };
43939
- var formatDuration = function (ticks) {
43940
- var minutes = ticksToMinutes(ticks);
43941
- var h = Math.floor(minutes / 60);
43942
- var m = minutes % 60;
43943
- return ''.concat(h, 'h ').concat(m, 'm');
43944
- };
43945
- var FlightResults = function (_a) {
43946
- var _b;
43947
- var flights = _a.flights,
43948
- isDeparture = _a.isDeparture;
43949
- var context = useContext(SearchResultsConfigurationContext);
43950
- var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
43951
- var dispatch = useDispatch();
43952
- var _c = useState(null),
43953
- activeDetailId = _c[0],
43954
- setActiveDetailId = _c[1];
43955
- var handleDetailClick = function (flightOptionId) {
43956
- setActiveDetailId(function (prev) {
43957
- return prev === flightOptionId ? null : flightOptionId;
43958
- });
43959
- };
43960
- var firstResult = flights === null || flights === void 0 ? void 0 : flights[0];
43961
- var firstResultDate = (firstResult === null || firstResult === void 0 ? void 0 : firstResult.startDateTime) ? parseISO(firstResult.startDateTime) : null;
43962
- return React__default.createElement(
43963
- React__default.Fragment,
43964
- null,
43965
- React__default.createElement(
43966
- 'div',
43967
- { className: 'search__results__label' },
43968
- React__default.createElement(
43969
- 'div',
43970
- { className: 'search__results__label__date' },
43971
- firstResultDate &&
43972
- React__default.createElement(
43973
- React__default.Fragment,
43974
- null,
43975
- React__default.createElement('p', { className: 'search__results__label__date-date' }, format$1(firstResultDate, 'd')),
43976
- React__default.createElement('p', null, format$1(firstResultDate, 'MMM'))
43977
- )
43978
- ),
43979
- React__default.createElement(
43980
- 'div',
43981
- { className: 'search__results__label__text' },
43982
- React__default.createElement(
43983
- 'h3',
43984
- null,
43985
- translations.SRP.SELECT,
43986
- ' ',
43987
- React__default.createElement('strong', null, isDeparture ? translations.SRP.DEPARTURE : translations.SRP.RETURN)
43988
- )
43989
- )
43990
- ),
43991
- flights &&
43992
- flights.length > 0 &&
43993
- React__default.createElement(
43994
- 'div',
43995
- { className: 'search__results__cards search__results__cards--extended' },
43996
- flights.map(function (flight, index) {
43997
- var lines = flight.flightMetaData.flightLines;
43998
- var firstLine = lines[0];
43999
- var lastLine = lines[lines.length - 1];
44000
- var stops = lines.length - 1;
44001
- return React__default.createElement(
44002
- 'div',
44003
- { className: 'flight', key: 'flight-'.concat(flight.flightId, '-').concat(index) },
44004
- React__default.createElement(
44005
- 'div',
44006
- { className: 'flight__option' },
44007
- React__default.createElement(
44008
- 'div',
44009
- { className: 'flight__content' },
44010
- React__default.createElement(
44011
- 'div',
44012
- { className: 'flight__flights' },
44013
- React__default.createElement(
44014
- 'div',
44015
- { className: 'flight__flight' },
44016
- React__default.createElement(
44017
- 'div',
44018
- { className: 'flight__flight__header' },
44019
- React__default.createElement('div', { className: 'flight__status__container' }),
44020
- React__default.createElement(
44021
- 'div',
44022
- { className: 'flight__price' },
44023
- React__default.createElement('span', { className: 'price' }, '\u20AC ', flight.price.toFixed(2)),
44024
- React__default.createElement(
44025
- 'button',
44026
- {
44027
- type: 'button',
44028
- className: 'cta '.concat(flight.isSelected ? 'cta--selected' : 'cta--select'),
44029
- onClick: function () {
44030
- return dispatch(selectFlight({ flightOptionId: flight.flightOptionId, isDeparture: !!isDeparture }));
44031
- }
44032
- },
44033
- flight.isSelected ? 'Selected' : 'Select'
44034
- )
44035
- )
44036
- )
44037
- ),
44038
- React__default.createElement(
44039
- 'div',
44040
- { className: 'flight__flight' },
44041
- React__default.createElement(
44042
- 'div',
44043
- { className: 'flight__flight__container' },
44044
- React__default.createElement(
44045
- 'div',
44046
- { className: 'flight__flight__wrapper' },
44047
- React__default.createElement(
44048
- 'div',
44049
- { className: 'flight__logo__wrapper' },
44050
- React__default.createElement('img', {
44051
- src: 'https://media.tidesoftware.be/media/shared/Airlines/'.concat(firstLine.airlineCode, '.png?height=256'),
44052
- alt: flight.airlineDescription,
44053
- className: 'flight__logo'
44054
- }),
44055
- React__default.createElement('span', null, flight.airlineDescription)
44056
- ),
44057
- React__default.createElement(
44058
- 'div',
44059
- { className: 'flight__info' },
44060
- React__default.createElement(
44061
- 'div',
44062
- { className: 'flight__info__times' },
44063
- React__default.createElement('strong', null, firstLine.departureTime, ' ', firstLine.departureAirport),
44064
- React__default.createElement('p', null, format$1(parseISO(firstLine.departureDate), 'EEE dd MMM yyyy'))
44065
- ),
44066
- React__default.createElement(
44067
- 'div',
44068
- { className: 'flight__info__duration' },
44069
- React__default.createElement('p', null, formatDuration(flight.flightMetaData.durationInTicks)),
44070
- React__default.createElement(
44071
- 'div',
44072
- { className: 'flight__info__duration__stops' },
44073
- stops > 0 && React__default.createElement('div', { className: 'flight__info__duration__stop' })
44074
- ),
44075
- React__default.createElement(
44076
- 'span',
44077
- null,
44078
- stops === 0
44079
- ? translations.SRP.DIRECT
44080
- : ''
44081
- .concat(stops, ' ')
44082
- .concat(translations.SRP.STOP)
44083
- .concat(stops > 1 ? 's' : '')
44084
- )
44085
- ),
44086
- React__default.createElement(
44087
- 'div',
44088
- { className: 'flight__info__times flight__info__times--arrival' },
44089
- React__default.createElement('strong', null, lastLine.arrivalTime, ' ', lastLine.arrivalAirport),
44090
- React__default.createElement('p', null, format$1(parseISO(lastLine.arrivalDate), 'EEE dd MMM yyyy'))
44091
- )
44092
- )
44093
- ),
44094
- React__default.createElement(
44095
- 'div',
44096
- { className: 'flight__detail__btn__wrapper' },
44097
- React__default.createElement(
44098
- 'div',
44099
- {
44100
- className: 'flight__detail__btn '.concat(activeDetailId === flight.flightOptionId ? 'flight__detail__btn--active' : ''),
44101
- onClick: function () {
44102
- return handleDetailClick(flight.flightOptionId);
44103
- }
44104
- },
44105
- React__default.createElement(Icon$1, { name: 'ui-chevron', className: 'flight__detail__btn__arrow', width: 16, height: 16 })
44106
- )
44107
- )
44108
- ),
44109
- React__default.createElement(
44110
- 'div',
44111
- { className: 'flight__detail '.concat(activeDetailId === flight.flightOptionId ? 'flight__detail--active' : '') },
44112
- lines.map(function (line, index) {
44113
- var nextLine = lines[index + 1];
44114
- return React__default.createElement(
44115
- React__default.Fragment,
44116
- { key: index },
44117
- React__default.createElement(
44118
- 'div',
44119
- { className: 'flight__info' },
44120
- React__default.createElement(
44121
- 'div',
44122
- { className: 'flight__info__times__wrapper' },
44123
- React__default.createElement(
44124
- 'div',
44125
- { className: 'flight__info__times' },
44126
- React__default.createElement('p', null, line.departureTime),
44127
- React__default.createElement('strong', null, line.departureAirport),
44128
- React__default.createElement('p', null, format$1(parseISO(line.departureDate), 'EEE dd MMM yyyy'))
44129
- ),
44130
- React__default.createElement(Icon$1, { name: 'ui-plane-depart', width: 30, height: 20 })
44131
- ),
44132
- React__default.createElement(
44133
- 'div',
44134
- { className: 'flight__info__duration' },
44135
- React__default.createElement('p', null, formatDuration(line.durationInTicks)),
44136
- React__default.createElement('span', null, line.airline, ' ', line.number)
44137
- ),
44138
- React__default.createElement(
44139
- 'div',
44140
- { className: 'flight__info__times__wrapper flight__info__times__wrapper--arrival' },
44141
- React__default.createElement(Icon$1, { name: 'ui-plane-arrive', width: 30, height: 20 }),
44142
- React__default.createElement(
44143
- 'div',
44144
- { className: 'flight__info__times flight__info__times--arrival' },
44145
- React__default.createElement('p', null, line.arrivalTime),
44146
- React__default.createElement('strong', null, line.arrivalAirport),
44147
- React__default.createElement('p', null, format$1(parseISO(line.arrivalDate), 'EEE dd MMM yyyy'))
44148
- )
44149
- )
44150
- ),
44151
- nextLine &&
44152
- React__default.createElement(
44153
- 'div',
44154
- { className: 'flight__info' },
44155
- React__default.createElement(
44156
- 'div',
44157
- { className: 'flight__info__duration flight__info__duration--waittime' },
44158
- React__default.createElement(
44159
- 'div',
44160
- { className: 'flight__info__duration__stops flight__info__duration__stops--stoptime' },
44161
- React__default.createElement(Icon$1, { name: 'ui-clock', width: 24, height: 24 })
44162
- ),
44163
- React__default.createElement(
44164
- 'div',
44165
- { className: 'flight__info__duration__stoptime' },
44166
- React__default.createElement('span', null, translations.SRP.STOP_TIME),
44167
- React__default.createElement(
44168
- 'strong',
44169
- null,
44170
- formatDuration(parseISO(nextLine.departureDate).getTime() - parseISO(line.arrivalDate).getTime())
44171
- )
44172
- )
44173
- )
44174
- )
44175
- );
44176
- })
44177
- )
44178
- )
44179
- ),
44180
- React__default.createElement('div', { className: 'flight__rate' })
44181
- )
44182
- )
44183
- );
44184
- })
44185
- )
44186
- );
44187
- };
44188
-
44189
43975
  var PairedFlightOption = function (_a) {
44190
43976
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
44191
43977
  var item = _a.item;
@@ -44634,7 +44420,6 @@ var IndependentFlightOption = function (_a) {
44634
44420
  guid = _a.guid,
44635
44421
  selectedGuid = _a.selectedGuid;
44636
44422
  _a.isOutward;
44637
- useDispatch();
44638
44423
  var context = useContext(SearchResultsConfigurationContext);
44639
44424
  var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
44640
44425
  var translations = getTranslations(language);
@@ -44849,14 +44634,6 @@ var IndependentFlightOption = function (_a) {
44849
44634
  );
44850
44635
  };
44851
44636
 
44852
- var getFlightKey = function (segments) {
44853
- if (!segments || segments.length === 0) return '';
44854
- return segments
44855
- .map(function (s) {
44856
- return ''.concat(s.marketingAirlineCode).concat(s.flightNumber, '_').concat(s.departureDateTime);
44857
- })
44858
- .join('_');
44859
- };
44860
44637
  var IndependentFlightSelection = function (_a) {
44861
44638
  var _b;
44862
44639
  var searchResults = _a.searchResults;
@@ -47076,6 +46853,118 @@ var getRequestRoomsFromPackagingSegments = function (entry, segments) {
47076
46853
  });
47077
46854
  };
47078
46855
 
46856
+ var formatNodeDate = function (date) {
46857
+ if (!date) return '';
46858
+ try {
46859
+ return new Intl.DateTimeFormat('nl-BE', {
46860
+ weekday: 'long',
46861
+ day: '2-digit',
46862
+ month: '2-digit',
46863
+ year: 'numeric'
46864
+ }).format(date);
46865
+ } catch (_a) {
46866
+ return '';
46867
+ }
46868
+ };
46869
+ var escapeHtml = function (value) {
46870
+ if (!value) return '';
46871
+ return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
46872
+ };
46873
+ var buildItineraryHtml = function (itinerary) {
46874
+ var _a;
46875
+ if (!itinerary) {
46876
+ return '\n <div class="itinerary-shell">\n <div class="itinerary-empty">Geen reisroute beschikbaar.</div>\n </div>\n ';
46877
+ }
46878
+ var nodesHtml = ((_a = itinerary.nodes) !== null && _a !== void 0 ? _a : [])
46879
+ .map(function (node) {
46880
+ var hasItems = Array.isArray(node.items) && node.items.length > 0;
46881
+ var itemsHtml = hasItems
46882
+ ? node.items
46883
+ .map(function (item) {
46884
+ var _a;
46885
+ return '\n <article class="itinerary-item" data-template="'
46886
+ .concat(escapeHtml(item.templateName), '">\n ')
46887
+ .concat((_a = item.contents) !== null && _a !== void 0 ? _a : '', '\n </article>\n ');
46888
+ })
46889
+ .join('')
46890
+ : '<div class="itinerary-node__empty">Geen items voor deze dag.</div>';
46891
+ return '\n <section class="itinerary-node">\n <header class="itinerary-node__header">\n <div class="itinerary-node__day">Dag '
46892
+ .concat(node.startDay)
46893
+ .concat(
46894
+ node.endDay > node.startDay ? ' - '.concat(node.endDay) : '',
46895
+ '</div>\n <div class="itinerary-node__meta">\n <h2 class="itinerary-node__title">'
46896
+ )
46897
+ .concat(escapeHtml(node.title), '</h2>\n <div class="itinerary-node__date">')
46898
+ .concat(
46899
+ escapeHtml(formatNodeDate(node.startDate)),
46900
+ '</div>\n </div>\n </header>\n\n <div class="itinerary-node__content">\n '
46901
+ )
46902
+ .concat(itemsHtml, '\n </div>\n </section>\n ');
46903
+ })
46904
+ .join('');
46905
+ var defaultItemsHtml =
46906
+ itinerary.defaultItems && itinerary.defaultItems.length > 0
46907
+ ? '\n <section class="itinerary-default-items">\n <h2 class="itinerary-default-items__title">Algemene info</h2>\n '.concat(
46908
+ itinerary.defaultItems
46909
+ .map(function (item) {
46910
+ var _a;
46911
+ return '\n <article class="itinerary-item" data-template="'
46912
+ .concat(escapeHtml(item.templateName), '">\n ')
46913
+ .concat((_a = item.contents) !== null && _a !== void 0 ? _a : '', '\n </article>\n ');
46914
+ })
46915
+ .join(''),
46916
+ '\n </section>\n '
46917
+ )
46918
+ : '';
46919
+ return '\n <div class="itinerary-shell">\n '
46920
+ .concat(
46921
+ itinerary.title
46922
+ ? '<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">'.concat(escapeHtml(itinerary.title), '</h1></header>')
46923
+ : '',
46924
+ '\n\n <div class="itinerary-shell__content">\n '
46925
+ )
46926
+ .concat(nodesHtml, '\n ')
46927
+ .concat(defaultItemsHtml, '\n </div>\n </div>\n ');
46928
+ };
46929
+ var FullItinerary = function (_a) {
46930
+ var isLoading = _a.isLoading;
46931
+ if (isLoading) {
46932
+ return React__default.createElement(Spinner, null);
46933
+ }
46934
+ var itinerary = useSelector(function (state) {
46935
+ return state.searchResults;
46936
+ }).itinerary;
46937
+ var hostRef = useRef(null);
46938
+ var shadowRootRef = useRef(null);
46939
+ var html = useMemo(
46940
+ function () {
46941
+ return buildItineraryHtml(itinerary);
46942
+ },
46943
+ [itinerary]
46944
+ );
46945
+ useEffect(
46946
+ function () {
46947
+ var _a;
46948
+ if (!hostRef.current) {
46949
+ return;
46950
+ }
46951
+ if (!shadowRootRef.current) {
46952
+ shadowRootRef.current = hostRef.current.attachShadow({ mode: 'open' });
46953
+ }
46954
+ var shadowRoot = shadowRootRef.current;
46955
+ shadowRoot.innerHTML =
46956
+ "\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 "
46957
+ .concat(
46958
+ (_a = itinerary === null || itinerary === void 0 ? void 0 : itinerary.styleSheetBody) !== null && _a !== void 0 ? _a : '',
46959
+ '\n </style>\n\n '
46960
+ )
46961
+ .concat(html, '\n ');
46962
+ },
46963
+ [html, itinerary === null || itinerary === void 0 ? void 0 : itinerary.styleSheetBody]
46964
+ );
46965
+ return React__default.createElement('div', { ref: hostRef });
46966
+ };
46967
+
47079
46968
  var SearchResultsContainer = function () {
47080
46969
  var _a, _b;
47081
46970
  var currentSearch = typeof window !== 'undefined' ? window.location.search : '';
@@ -47088,9 +46977,9 @@ var SearchResultsContainer = function () {
47088
46977
  results = _c.results,
47089
46978
  filteredResults = _c.filteredResults,
47090
46979
  packagingAccoResults = _c.packagingAccoResults,
47091
- filteredPackagingAccoResults = _c.filteredPackagingAccoResults,
47092
- bookingPackageDetails = _c.bookingPackageDetails,
47093
- isLoading = _c.isLoading,
46980
+ filteredPackagingAccoResults = _c.filteredPackagingAccoResults;
46981
+ _c.bookingPackageDetails;
46982
+ var isLoading = _c.isLoading,
47094
46983
  filters = _c.filters,
47095
46984
  selectedSortType = _c.selectedSortType,
47096
46985
  selectedSearchResult = _c.selectedSearchResult,
@@ -47099,7 +46988,9 @@ var SearchResultsContainer = function () {
47099
46988
  packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
47100
46989
  editablePackagingEntry = _c.editablePackagingEntry,
47101
46990
  transactionId = _c.transactionId,
47102
- accommodationFlyInStep = _c.accommodationFlyInStep;
46991
+ accommodationFlyInStep = _c.accommodationFlyInStep,
46992
+ itinerary = _c.itinerary,
46993
+ packagingFlightResults = _c.packagingFlightResults;
47103
46994
  var isMobile = useMediaQuery('(max-width: 1200px)');
47104
46995
  var _d = useState(false),
47105
46996
  initialFiltersSet = _d[0],
@@ -47117,11 +47008,15 @@ var SearchResultsContainer = function () {
47117
47008
  pricesAreLoading = _h[0],
47118
47009
  setPricesAreLoading = _h[1];
47119
47010
  var _j = useState(false),
47120
- itineraryOpen = _j[0],
47121
- setItineraryOpen = _j[1];
47122
- var _k = useState(null),
47123
- selectedAccommodationSeed = _k[0],
47124
- setSelectedAccommodationSeed = _k[1];
47011
+ itineraryIsLoading = _j[0],
47012
+ setItineraryIsLoading = _j[1];
47013
+ var _k = useState(false),
47014
+ itineraryOpen = _k[0],
47015
+ setItineraryOpen = _k[1];
47016
+ var _l = useState(null),
47017
+ selectedAccommodationSeed = _l[0],
47018
+ setSelectedAccommodationSeed = _l[1];
47019
+ var skipInitialPackagingAccoDetailsRef = useRef(false);
47125
47020
  var panelRef = useRef(null);
47126
47021
  var sortByTypes = [
47127
47022
  { direction: 'asc', label: 'default' },
@@ -47233,7 +47128,7 @@ var SearchResultsContainer = function () {
47233
47128
  };
47234
47129
  };
47235
47130
  var buildPackagingAccommodationRequestFromSeed = function (seed, currentTransactionId) {
47236
- var _a, _b, _c, _d;
47131
+ var _a, _b, _c, _d, _e, _f;
47237
47132
  var country = seed.country;
47238
47133
  var region = seed.region;
47239
47134
  var oord = seed.oord;
@@ -47269,11 +47164,15 @@ var SearchResultsContainer = function () {
47269
47164
  }
47270
47165
  return {
47271
47166
  transactionId: currentTransactionId,
47272
- officeId: 1,
47273
- agentId: (_b = context === null || context === void 0 ? void 0 : context.agentId) !== null && _b !== void 0 ? _b : null,
47274
- catalogueId: (_c = context.searchConfiguration.defaultCatalogueId) !== null && _c !== void 0 ? _c : 0,
47167
+ officeId:
47168
+ (_c = (_b = context === null || context === void 0 ? void 0 : context.tideConnection) === null || _b === void 0 ? void 0 : _b.officeId) !== null &&
47169
+ _c !== void 0
47170
+ ? _c
47171
+ : 1,
47172
+ agentId: (_d = context === null || context === void 0 ? void 0 : context.agentId) !== null && _d !== void 0 ? _d : null,
47173
+ catalogueId: (_e = context.searchConfiguration.defaultCatalogueId) !== null && _e !== void 0 ? _e : 0,
47275
47174
  searchConfigurationId: context.searchConfiguration.id,
47276
- language: (_d = context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB',
47175
+ language: (_f = context.languageCode) !== null && _f !== void 0 ? _f : 'en-GB',
47277
47176
  serviceType: ACCOMMODATION_SERVICE_TYPE,
47278
47177
  fromDate: seed.fromDate,
47279
47178
  toDate: seed.toDate,
@@ -47291,6 +47190,74 @@ var SearchResultsContainer = function () {
47291
47190
  tagIds: tagId ? [tagId] : []
47292
47191
  };
47293
47192
  };
47193
+ var buildPackagingFlightRequestFromSeed = function (seed, currentTransactionId) {
47194
+ var _a, _b, _c, _d;
47195
+ if (typeof window !== 'undefined') {
47196
+ window.scrollTo(0, 0);
47197
+ }
47198
+ var adults = seed.rooms
47199
+ .flatMap(function (x) {
47200
+ return x.pax;
47201
+ })
47202
+ .filter(function (x) {
47203
+ return x.age >= 18;
47204
+ }).length;
47205
+ var kids = seed.rooms
47206
+ .flatMap(function (x) {
47207
+ return x.pax;
47208
+ })
47209
+ .filter(function (x) {
47210
+ return x.age >= 2 && x.age < 18;
47211
+ }).length;
47212
+ var babies = seed.rooms
47213
+ .flatMap(function (x) {
47214
+ return x.pax;
47215
+ })
47216
+ .filter(function (x) {
47217
+ return x.age < 2;
47218
+ }).length;
47219
+ return {
47220
+ transactionId: currentTransactionId,
47221
+ officeId:
47222
+ (_b = (_a = context === null || context === void 0 ? void 0 : context.tideConnection) === null || _a === void 0 ? void 0 : _a.officeId) !== null &&
47223
+ _b !== void 0
47224
+ ? _b
47225
+ : 1,
47226
+ catalogueId:
47227
+ (_d = first((_c = context === null || context === void 0 ? void 0 : context.tideConnection) === null || _c === void 0 ? void 0 : _c.catalogueIds)) !==
47228
+ null && _d !== void 0
47229
+ ? _d
47230
+ : 0,
47231
+ departureAirportCode: seed.departureAirport,
47232
+ arrivalAirportCode: seed.destinationAirport,
47233
+ returnAirportCode: seed.returnAirport,
47234
+ luggageIncluded: null,
47235
+ maxStops: null,
47236
+ travelClass: seed.travelClass,
47237
+ pax: concat(
47238
+ Array.from({ length: adults !== null && adults !== void 0 ? adults : 0 }, function (_, index) {
47239
+ return {
47240
+ id: index,
47241
+ age: 31
47242
+ };
47243
+ }),
47244
+ Array.from({ length: kids !== null && kids !== void 0 ? kids : 0 }, function (_, index) {
47245
+ return {
47246
+ id: index + (adults !== null && adults !== void 0 ? adults : 0),
47247
+ age: 8
47248
+ };
47249
+ }),
47250
+ Array.from({ length: babies !== null && babies !== void 0 ? babies : 0 }, function (_, index) {
47251
+ return {
47252
+ id: index + (adults !== null && adults !== void 0 ? adults : 0) + (kids !== null && kids !== void 0 ? kids : 0),
47253
+ age: 1
47254
+ };
47255
+ })
47256
+ ),
47257
+ outward: seed.fromDate ? { date: dateToDateStruct(new Date(seed.fromDate)) } : null,
47258
+ return: seed.toDate ? { date: dateToDateStruct(new Date(seed.toDate)) } : null
47259
+ };
47260
+ };
47294
47261
  var buildSearchSeedFromQueryParams = function (params) {
47295
47262
  var from = getDateFromParams(params, 'fromDate');
47296
47263
  var to = getDateFromParams(params, 'toDate');
@@ -47303,6 +47270,8 @@ var SearchResultsContainer = function () {
47303
47270
  var tagId = getNumberFromParams(params, 'tagId');
47304
47271
  var destinationAirport = getStringFromParams(params, 'destinationAirport');
47305
47272
  var departureAirport = getStringFromParams(params, 'departureAirport');
47273
+ var travelClass = getStringFromParams(params, 'travelClass');
47274
+ var nationality = getStringFromParams(params, 'nationality');
47306
47275
  if (!from || !to) {
47307
47276
  return null;
47308
47277
  }
@@ -47318,12 +47287,68 @@ var SearchResultsContainer = function () {
47318
47287
  tagId: tagId,
47319
47288
  destinationAirport: destinationAirport,
47320
47289
  departureAirport: departureAirport,
47290
+ travelClass: travelClass,
47291
+ nationality: nationality,
47321
47292
  rooms: getRequestRooms(rooms)
47322
47293
  };
47323
47294
  };
47295
+ var buildSearchSeedFromAccommodationSegments = function (entry, segments) {
47296
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
47297
+ if (!(segments === null || segments === void 0 ? void 0 : segments.length)) return null;
47298
+ var sortedSegments = __spreadArray([], segments, true).sort(function (a, b) {
47299
+ return new Date(a.from).getTime() - new Date(b.from).getTime();
47300
+ });
47301
+ var firstSegment = first(sortedSegments);
47302
+ var lastSegment = last(sortedSegments);
47303
+ if (!firstSegment || !lastSegment) return null;
47304
+ return {
47305
+ fromDate: toDateOnlyString(firstSegment.from),
47306
+ toDate: toDateOnlyString(lastSegment.to),
47307
+ country: (_b = (_a = firstSegment.country) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null,
47308
+ region: (_d = (_c = firstSegment.region) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null,
47309
+ oord: (_f = (_e = firstSegment.oord) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : null,
47310
+ location: (_h = (_g = firstSegment.location) === null || _g === void 0 ? void 0 : _g.id) !== null && _h !== void 0 ? _h : null,
47311
+ hotel: parseHotelId(firstSegment),
47312
+ hotelCode: (_j = firstSegment.productCode) !== null && _j !== void 0 ? _j : null,
47313
+ tagId: null,
47314
+ destinationAirport: getDestinationAirportFromEntry((_k = entry.lines) !== null && _k !== void 0 ? _k : []),
47315
+ departureAirport: getDepartureAirportFromEntry((_l = entry.lines) !== null && _l !== void 0 ? _l : []),
47316
+ rooms: getRequestRoomsFromPackagingSegments(entry, sortedSegments)
47317
+ };
47318
+ };
47319
+ var handleEditAccommodation = function (segments) {
47320
+ return __awaiter(void 0, void 0, void 0, function () {
47321
+ var sourceEntry, seed, currentTransactionId;
47322
+ return __generator(this, function (_a) {
47323
+ switch (_a.label) {
47324
+ case 0:
47325
+ sourceEntry =
47326
+ editablePackagingEntry !== null && editablePackagingEntry !== void 0
47327
+ ? editablePackagingEntry
47328
+ : context === null || context === void 0
47329
+ ? void 0
47330
+ : context.packagingEntry;
47331
+ if (!sourceEntry) return [2 /*return*/];
47332
+ seed = buildSearchSeedFromAccommodationSegments(sourceEntry, segments);
47333
+ if (!seed) return [2 /*return*/];
47334
+ setDetailsIsLoading(true);
47335
+ setSelectedAccommodationSeed(seed);
47336
+ dispatch(setAccommodationFlyInStep('results'));
47337
+ handleFlyInToggle(true);
47338
+ return [4 /*yield*/, getOrCreateTransactionId()];
47339
+ case 1:
47340
+ currentTransactionId = _a.sent();
47341
+ return [4 /*yield*/, runAccommodationFlow(seed, currentTransactionId !== null && currentTransactionId !== void 0 ? currentTransactionId : '')];
47342
+ case 2:
47343
+ _a.sent();
47344
+ setDetailsIsLoading(false);
47345
+ return [2 /*return*/];
47346
+ }
47347
+ });
47348
+ });
47349
+ };
47324
47350
  var handleConfirmHotelSwap = function () {
47325
47351
  var updatedEntry = swapHotelInPackagingEntry();
47326
- console.log('Updated entry after hotel swap', updatedEntry);
47327
47352
  if (!updatedEntry) return;
47328
47353
  dispatch(setEditablePackagingEntry(updatedEntry));
47329
47354
  handleFlyInToggle(false);
@@ -47338,7 +47363,6 @@ var SearchResultsContainer = function () {
47338
47363
  var details = packagingAccoSearchDetails;
47339
47364
  if (!sourceEntry || !(details === null || details === void 0 ? void 0 : details.length)) return null;
47340
47365
  var selectedOptionsPerRoom = getSelectedOptionsPerRoom(details);
47341
- console.log('Selected options per room', selectedOptionsPerRoom);
47342
47366
  if (!selectedOptionsPerRoom.length) return null;
47343
47367
  var selectedHotel = details[0];
47344
47368
  var roomIndex = 0;
@@ -47351,7 +47375,6 @@ var SearchResultsContainer = function () {
47351
47375
  return x.roomIndex === roomIndex;
47352
47376
  });
47353
47377
  var selectedOption = selectedRoom === null || selectedRoom === void 0 ? void 0 : selectedRoom.option;
47354
- console.log('selectedRoom and selectedOption for line', line, selectedRoom, selectedOption);
47355
47378
  roomIndex++;
47356
47379
  if (!selectedOption) {
47357
47380
  return line;
@@ -47424,6 +47447,25 @@ var SearchResultsContainer = function () {
47424
47447
  },
47425
47448
  [filtersOpen]
47426
47449
  );
47450
+ var getOrCreateTransactionId = function () {
47451
+ return __awaiter(void 0, void 0, void 0, function () {
47452
+ var _a;
47453
+ return __generator(this, function (_b) {
47454
+ switch (_b.label) {
47455
+ case 0:
47456
+ if ((_a = context === null || context === void 0 ? void 0 : context.packagingEntry) === null || _a === void 0 ? void 0 : _a.transactionId) {
47457
+ return [2 /*return*/, context.packagingEntry.transactionId];
47458
+ }
47459
+ if (transactionId) {
47460
+ return [2 /*return*/, transactionId];
47461
+ }
47462
+ return [4 /*yield*/, runStartTransaction()];
47463
+ case 1:
47464
+ return [2 /*return*/, _b.sent()];
47465
+ }
47466
+ });
47467
+ });
47468
+ };
47427
47469
  var runSearch = function () {
47428
47470
  return __awaiter(void 0, void 0, void 0, function () {
47429
47471
  var config, seed, searchRequest, packageSearchResults, enrichedFilters, initialFilteredResults, err_1;
@@ -47446,7 +47488,6 @@ var SearchResultsContainer = function () {
47446
47488
  return [4 /*yield*/, build.search(config, searchRequest)];
47447
47489
  case 1:
47448
47490
  packageSearchResults = _b.sent();
47449
- console.log('Search results', packageSearchResults);
47450
47491
  enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47451
47492
  if (!initialFiltersSet) {
47452
47493
  dispatch(resetFilters(enrichedFilters));
@@ -47506,11 +47547,11 @@ var SearchResultsContainer = function () {
47506
47547
  var runHotelSearch = function (currentTransactionId, seed) {
47507
47548
  return __awaiter(void 0, void 0, void 0, function () {
47508
47549
  var config, searchRequest, packageAccoSearchResults, enrichedFilters, initialFilteredResults, err_3;
47509
- var _a;
47510
- return __generator(this, function (_b) {
47511
- switch (_b.label) {
47550
+ var _a, _b, _c;
47551
+ return __generator(this, function (_d) {
47552
+ switch (_d.label) {
47512
47553
  case 0:
47513
- _b.trys.push([0, 2, , 3]);
47554
+ _d.trys.push([0, 2, , 3]);
47514
47555
  if (!context) return [2 /*return*/];
47515
47556
  dispatch(setIsLoading(true));
47516
47557
  config = {
@@ -47520,10 +47561,9 @@ var SearchResultsContainer = function () {
47520
47561
  searchRequest = buildPackagingAccommodationRequestFromSeed(seed, currentTransactionId);
47521
47562
  searchRequest.portalId = context.portalId;
47522
47563
  searchRequest.agentId = context.agentId;
47523
- console.log('Packaging accommodation search request', searchRequest);
47524
47564
  return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47525
47565
  case 1:
47526
- packageAccoSearchResults = _b.sent();
47566
+ packageAccoSearchResults = _d.sent();
47527
47567
  enrichedFilters = enrichFiltersWithPackageAccoResults(
47528
47568
  packageAccoSearchResults,
47529
47569
  context.filters,
@@ -47537,11 +47577,19 @@ var SearchResultsContainer = function () {
47537
47577
  dispatch(setPackagingAccoResults(packageAccoSearchResults));
47538
47578
  initialFilteredResults = applyFiltersToPackageAccoResults(packageAccoSearchResults, filters, null);
47539
47579
  dispatch(setFilteredPackagingAccoResults(initialFilteredResults));
47580
+ if (initialFilteredResults.length > 0) {
47581
+ skipInitialPackagingAccoDetailsRef.current = true;
47582
+ dispatch(
47583
+ setSelectedPackagingAccoResult(
47584
+ (_c = (_b = first(initialFilteredResults)) === null || _b === void 0 ? void 0 : _b.code) !== null && _c !== void 0 ? _c : null
47585
+ )
47586
+ );
47587
+ }
47540
47588
  dispatch(setIsLoading(false));
47541
47589
  return [3 /*break*/, 3];
47542
47590
  case 2:
47543
- err_3 = _b.sent();
47544
- console.error('Search failed', err_3);
47591
+ err_3 = _d.sent();
47592
+ console.error('HotelSearch failed', err_3);
47545
47593
  dispatch(setIsLoading(false));
47546
47594
  return [3 /*break*/, 3];
47547
47595
  case 3:
@@ -47550,32 +47598,61 @@ var SearchResultsContainer = function () {
47550
47598
  });
47551
47599
  });
47552
47600
  };
47553
- var runAccommodationFlow = function (seed) {
47601
+ var runAccommodationFlow = function (seed, currentTransactionId) {
47554
47602
  return __awaiter(void 0, void 0, void 0, function () {
47555
- var currentTransactionId;
47556
- var _a;
47557
- return __generator(this, function (_b) {
47558
- switch (_b.label) {
47603
+ return __generator(this, function (_a) {
47604
+ switch (_a.label) {
47559
47605
  case 0:
47560
47606
  if (!context || context.showMockup) return [2 /*return*/];
47561
- currentTransactionId =
47562
- ((_a = context === null || context === void 0 ? void 0 : context.packagingEntry) === null || _a === void 0 ? void 0 : _a.transactionId) ||
47563
- transactionId;
47564
- console.log('Current transaction ID', currentTransactionId);
47565
- if (!!currentTransactionId) return [3 /*break*/, 2];
47566
- dispatch(setIsLoading(true));
47567
- return [4 /*yield*/, runStartTransaction()];
47607
+ return [4 /*yield*/, runHotelSearch(currentTransactionId, seed)];
47568
47608
  case 1:
47569
- currentTransactionId = _b.sent();
47570
- _b.label = 2;
47609
+ _a.sent();
47610
+ return [2 /*return*/];
47611
+ }
47612
+ });
47613
+ });
47614
+ };
47615
+ var runFlightSearch = function (currentTransactionId, seed) {
47616
+ return __awaiter(void 0, void 0, void 0, function () {
47617
+ var config, searchRequest, packageFlightSearchResults, err_4;
47618
+ return __generator(this, function (_a) {
47619
+ switch (_a.label) {
47620
+ case 0:
47621
+ _a.trys.push([0, 2, , 3]);
47622
+ if (!context) return [2 /*return*/];
47623
+ dispatch(setFlightsLoading(true));
47624
+ config = {
47625
+ host: context.tideConnection.host,
47626
+ apiKey: context.tideConnection.apiKey
47627
+ };
47628
+ searchRequest = buildPackagingFlightRequestFromSeed(seed, currentTransactionId);
47629
+ searchRequest.agentId = context.agentId;
47630
+ return [4 /*yield*/, build.searchPackagingFlights(config, searchRequest)];
47631
+ case 1:
47632
+ packageFlightSearchResults = _a.sent();
47633
+ dispatch(setPackagingFlightResults(packageFlightSearchResults));
47634
+ dispatch(setFlightsLoading(false));
47635
+ return [3 /*break*/, 3];
47571
47636
  case 2:
47572
- if (!currentTransactionId) {
47573
- dispatch(setIsLoading(false));
47574
- return [2 /*return*/];
47575
- }
47576
- return [4 /*yield*/, runHotelSearch(currentTransactionId, seed)];
47637
+ err_4 = _a.sent();
47638
+ console.error('FlightSearch failed', err_4);
47639
+ dispatch(setFlightsLoading(false));
47640
+ return [3 /*break*/, 3];
47577
47641
  case 3:
47578
- _b.sent();
47642
+ return [2 /*return*/];
47643
+ }
47644
+ });
47645
+ });
47646
+ };
47647
+ var runFlightFlow = function (seed, currentTransactionId) {
47648
+ return __awaiter(void 0, void 0, void 0, function () {
47649
+ return __generator(this, function (_a) {
47650
+ switch (_a.label) {
47651
+ case 0:
47652
+ if (!context || context.showMockup) return [2 /*return*/];
47653
+ return [4 /*yield*/, runFlightSearch(currentTransactionId, seed)];
47654
+ case 1:
47655
+ _a.sent();
47579
47656
  return [2 /*return*/];
47580
47657
  }
47581
47658
  });
@@ -47592,20 +47669,60 @@ var SearchResultsContainer = function () {
47592
47669
  runSearch();
47593
47670
  }
47594
47671
  if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
47595
- var seed = activeSearchSeed;
47596
- if (seed) {
47597
- runAccommodationFlow(seed);
47672
+ var seed_1 = activeSearchSeed;
47673
+ if (seed_1) {
47674
+ (function () {
47675
+ return __awaiter(void 0, void 0, void 0, function () {
47676
+ var transactionId;
47677
+ return __generator(this, function (_a) {
47678
+ switch (_a.label) {
47679
+ case 0:
47680
+ return [4 /*yield*/, getOrCreateTransactionId()];
47681
+ case 1:
47682
+ transactionId = _a.sent();
47683
+ if (!transactionId) return [2 /*return*/];
47684
+ return [4 /*yield*/, runAccommodationFlow(seed_1, transactionId)];
47685
+ case 2:
47686
+ _a.sent();
47687
+ return [2 /*return*/];
47688
+ }
47689
+ });
47690
+ });
47691
+ })();
47598
47692
  }
47599
47693
  }
47600
47694
  if (
47601
47695
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight &&
47602
47696
  context.searchConfiguration.enableManualPackaging &&
47603
- context.searchConfiguration.allowAccommodations &&
47604
47697
  !(context === null || context === void 0 ? void 0 : context.packagingEntry)
47605
47698
  ) {
47606
- var seed = activeSearchSeed;
47607
- if (seed) {
47608
- runAccommodationFlow(seed);
47699
+ var seed_2 = activeSearchSeed;
47700
+ if (seed_2) {
47701
+ (function () {
47702
+ return __awaiter(void 0, void 0, void 0, function () {
47703
+ var sharedTransactionId, tasks;
47704
+ return __generator(this, function (_a) {
47705
+ switch (_a.label) {
47706
+ case 0:
47707
+ return [4 /*yield*/, getOrCreateTransactionId()];
47708
+ case 1:
47709
+ sharedTransactionId = _a.sent();
47710
+ if (!sharedTransactionId) return [2 /*return*/];
47711
+ tasks = [];
47712
+ if (context.searchConfiguration.allowAccommodations) {
47713
+ tasks.push(runAccommodationFlow(seed_2, sharedTransactionId));
47714
+ }
47715
+ if (context.searchConfiguration.allowFlights) {
47716
+ tasks.push(runFlightFlow(seed_2, sharedTransactionId));
47717
+ }
47718
+ return [4 /*yield*/, Promise.all(tasks)];
47719
+ case 2:
47720
+ _a.sent();
47721
+ return [2 /*return*/];
47722
+ }
47723
+ });
47724
+ });
47725
+ })();
47609
47726
  }
47610
47727
  }
47611
47728
  },
@@ -47621,6 +47738,7 @@ var SearchResultsContainer = function () {
47621
47738
  );
47622
47739
  useEffect(
47623
47740
  function () {
47741
+ console.log('packaging entry from context', context === null || context === void 0 ? void 0 : context.packagingEntry);
47624
47742
  if (context === null || context === void 0 ? void 0 : context.packagingEntry) {
47625
47743
  console.log('original packaging entry from context', context.packagingEntry);
47626
47744
  dispatch(setEditablePackagingEntry(structuredClone(context.packagingEntry)));
@@ -47634,7 +47752,7 @@ var SearchResultsContainer = function () {
47634
47752
  function () {
47635
47753
  var fetchDetails = function () {
47636
47754
  return __awaiter(void 0, void 0, void 0, function () {
47637
- var config, selectedItem, requestRooms, seed, detailsRequest, detailsResponse, err_4;
47755
+ var config, selectedItem, requestRooms, seed, detailsRequest, detailsResponse, err_5;
47638
47756
  var _a;
47639
47757
  return __generator(this, function (_b) {
47640
47758
  switch (_b.label) {
@@ -47697,8 +47815,8 @@ var SearchResultsContainer = function () {
47697
47815
  setDetailsIsLoading(false);
47698
47816
  return [3 /*break*/, 4];
47699
47817
  case 3:
47700
- err_4 = _b.sent();
47701
- console.error('Failed to fetch package details', err_4);
47818
+ err_5 = _b.sent();
47819
+ console.error('Failed to fetch package details', err_5);
47702
47820
  setDetailsIsLoading(false);
47703
47821
  return [3 /*break*/, 4];
47704
47822
  case 4:
@@ -47723,12 +47841,16 @@ var SearchResultsContainer = function () {
47723
47841
  destinationIsAirport,
47724
47842
  detailSearchRequest,
47725
47843
  packageAccoSearchDetails,
47726
- err_5;
47844
+ err_6;
47727
47845
  var _a, _b, _c, _d, _e;
47728
47846
  return __generator(this, function (_f) {
47729
47847
  switch (_f.label) {
47730
47848
  case 0:
47731
47849
  if (!selectedPackagingAccoResultCode || !context) return [2 /*return*/];
47850
+ if (skipInitialPackagingAccoDetailsRef.current) {
47851
+ skipInitialPackagingAccoDetailsRef.current = false;
47852
+ return [2 /*return*/];
47853
+ }
47732
47854
  setDetailsIsLoading(true);
47733
47855
  if (
47734
47856
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
@@ -47807,13 +47929,12 @@ var SearchResultsContainer = function () {
47807
47929
  return [4 /*yield*/, build.searchPackagingAccommodations(config, detailSearchRequest)];
47808
47930
  case 2:
47809
47931
  packageAccoSearchDetails = _f.sent();
47810
- console.log('Packaging Acco Search details', packageAccoSearchDetails);
47811
47932
  dispatch(setPackagingAccoSearchDetails(packageAccoSearchDetails));
47812
47933
  setDetailsIsLoading(false);
47813
47934
  return [3 /*break*/, 4];
47814
47935
  case 3:
47815
- err_5 = _f.sent();
47816
- console.error('Failed to fetch package details', err_5);
47936
+ err_6 = _f.sent();
47937
+ console.error('Failed to fetch package details', err_6);
47817
47938
  setDetailsIsLoading(false);
47818
47939
  return [3 /*break*/, 4];
47819
47940
  case 4:
@@ -47850,75 +47971,15 @@ var SearchResultsContainer = function () {
47850
47971
  },
47851
47972
  [activeSearchSeed]
47852
47973
  );
47853
- var handleEditAccommodation = function (segments) {
47854
- return __awaiter(void 0, void 0, void 0, function () {
47855
- var sourceEntry, seed;
47856
- return __generator(this, function (_a) {
47857
- switch (_a.label) {
47858
- case 0:
47859
- sourceEntry =
47860
- editablePackagingEntry !== null && editablePackagingEntry !== void 0
47861
- ? editablePackagingEntry
47862
- : context === null || context === void 0
47863
- ? void 0
47864
- : context.packagingEntry;
47865
- if (!sourceEntry) return [2 /*return*/];
47866
- seed = buildSearchSeedFromAccommodationSegments(sourceEntry, segments);
47867
- if (!seed) return [2 /*return*/];
47868
- setDetailsIsLoading(true);
47869
- setSelectedAccommodationSeed(seed);
47870
- dispatch(setAccommodationFlyInStep('results'));
47871
- handleFlyInToggle(true);
47872
- return [4 /*yield*/, runAccommodationFlow(seed)];
47873
- case 1:
47874
- _a.sent();
47875
- setDetailsIsLoading(false);
47876
- return [2 /*return*/];
47877
- }
47878
- });
47879
- });
47880
- };
47881
- var buildSearchSeedFromAccommodationSegments = function (entry, segments) {
47882
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
47883
- if (!(segments === null || segments === void 0 ? void 0 : segments.length)) return null;
47884
- var sortedSegments = __spreadArray([], segments, true).sort(function (a, b) {
47885
- return new Date(a.from).getTime() - new Date(b.from).getTime();
47886
- });
47887
- var firstSegment = first(sortedSegments);
47888
- var lastSegment = last(sortedSegments);
47889
- if (!firstSegment || !lastSegment) return null;
47890
- return {
47891
- fromDate: toDateOnlyString(firstSegment.from),
47892
- toDate: toDateOnlyString(lastSegment.to),
47893
- country: (_b = (_a = firstSegment.country) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null,
47894
- region: (_d = (_c = firstSegment.region) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null,
47895
- oord: (_f = (_e = firstSegment.oord) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : null,
47896
- location: (_h = (_g = firstSegment.location) === null || _g === void 0 ? void 0 : _g.id) !== null && _h !== void 0 ? _h : null,
47897
- hotel: parseHotelId(firstSegment),
47898
- hotelCode: (_j = firstSegment.productCode) !== null && _j !== void 0 ? _j : null,
47899
- tagId: null,
47900
- destinationAirport: getDestinationAirportFromEntry((_k = entry.lines) !== null && _k !== void 0 ? _k : []),
47901
- departureAirport: getDepartureAirportFromEntry((_l = entry.lines) !== null && _l !== void 0 ? _l : []),
47902
- rooms: getRequestRoomsFromPackagingSegments(entry, sortedSegments)
47903
- };
47904
- };
47905
47974
  useEffect(
47906
47975
  function () {
47907
47976
  var fetchPriceDetails = function () {
47908
47977
  return __awaiter(void 0, void 0, void 0, function () {
47909
- var config, priceDetails, err_6;
47978
+ var config, priceDetails, err_7;
47910
47979
  return __generator(this, function (_a) {
47911
47980
  switch (_a.label) {
47912
47981
  case 0:
47913
- console.log(
47914
- 'Fetching price details for entry',
47915
- editablePackagingEntry !== null && editablePackagingEntry !== void 0
47916
- ? editablePackagingEntry
47917
- : context === null || context === void 0
47918
- ? void 0
47919
- : context.packagingEntry
47920
- );
47921
- if (!context || !editablePackagingEntry) return [2 /*return*/];
47982
+ if (!context || !editablePackagingEntry || isEmpty(editablePackagingEntry.lines)) return [2 /*return*/];
47922
47983
  setPricesAreLoading(true);
47923
47984
  _a.label = 1;
47924
47985
  case 1:
@@ -47934,8 +47995,8 @@ var SearchResultsContainer = function () {
47934
47995
  setPricesAreLoading(false);
47935
47996
  return [3 /*break*/, 4];
47936
47997
  case 3:
47937
- err_6 = _a.sent();
47938
- console.error('Error fetching price details', err_6);
47998
+ err_7 = _a.sent();
47999
+ console.error('Error fetching price details', err_7);
47939
48000
  setPricesAreLoading(false);
47940
48001
  return [3 /*break*/, 4];
47941
48002
  case 4:
@@ -47944,10 +48005,431 @@ var SearchResultsContainer = function () {
47944
48005
  });
47945
48006
  });
47946
48007
  };
48008
+ var fetchItinerary = function () {
48009
+ return __awaiter(void 0, void 0, void 0, function () {
48010
+ var config, itinerary_1, err_8;
48011
+ return __generator(this, function (_a) {
48012
+ switch (_a.label) {
48013
+ case 0:
48014
+ console.log('Fetching itinerary for entry', editablePackagingEntry);
48015
+ if (!context || !editablePackagingEntry || isEmpty(editablePackagingEntry.lines)) return [2 /*return*/];
48016
+ setItineraryIsLoading(true);
48017
+ _a.label = 1;
48018
+ case 1:
48019
+ _a.trys.push([1, 3, , 4]);
48020
+ config = {
48021
+ host: context.tideConnection.host,
48022
+ apiKey: context.tideConnection.apiKey
48023
+ };
48024
+ return [4 /*yield*/, build.getItinerary(config, editablePackagingEntry)];
48025
+ case 2:
48026
+ itinerary_1 = _a.sent();
48027
+ console.log('Fetched itinerary', itinerary_1);
48028
+ dispatch(setItinerary(itinerary_1));
48029
+ setItineraryIsLoading(false);
48030
+ return [3 /*break*/, 4];
48031
+ case 3:
48032
+ err_8 = _a.sent();
48033
+ console.error('Error fetching itinerary', err_8);
48034
+ setItineraryIsLoading(false);
48035
+ return [3 /*break*/, 4];
48036
+ case 4:
48037
+ return [2 /*return*/];
48038
+ }
48039
+ });
48040
+ });
48041
+ };
47947
48042
  fetchPriceDetails();
48043
+ fetchItinerary();
47948
48044
  },
47949
48045
  [editablePackagingEntry]
47950
48046
  );
48047
+ // Flight selection
48048
+ var _m = useState(null),
48049
+ selectedOutwardKey = _m[0],
48050
+ setSelectedOutwardKey = _m[1];
48051
+ var _o = useState(null),
48052
+ selectedReturnKey = _o[0],
48053
+ setSelectedReturnKey = _o[1];
48054
+ var uniqueOutwardFlights = React__default.useMemo(
48055
+ function () {
48056
+ var map = new Map();
48057
+ packagingFlightResults.forEach(function (flight) {
48058
+ var key = getFlightKey(flight.outward.segments);
48059
+ if (!map.has(key)) {
48060
+ map.set(key, flight);
48061
+ }
48062
+ });
48063
+ return Array.from(map.values());
48064
+ },
48065
+ [packagingFlightResults]
48066
+ );
48067
+ var _p = useState([]),
48068
+ uniqueReturnFlights = _p[0],
48069
+ setUniqueReturnFlights = _p[1];
48070
+ useEffect(
48071
+ function () {
48072
+ if (!selectedOutwardKey) {
48073
+ setUniqueReturnFlights([]);
48074
+ setSelectedReturnKey(null);
48075
+ return;
48076
+ }
48077
+ // Filter combinations that match selected outward fare
48078
+ var matchingCombinations = packagingFlightResults.filter(function (flight) {
48079
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48080
+ });
48081
+ var returnMap = new Map();
48082
+ matchingCombinations.forEach(function (flight) {
48083
+ var key = getFlightKey(flight.return.segments);
48084
+ if (!returnMap.has(key)) {
48085
+ returnMap.set(key, flight);
48086
+ }
48087
+ });
48088
+ var returns = Array.from(returnMap.values());
48089
+ setUniqueReturnFlights(returns);
48090
+ },
48091
+ [selectedOutwardKey, packagingFlightResults]
48092
+ );
48093
+ var selectedOutward = React__default.useMemo(
48094
+ function () {
48095
+ if (!selectedOutwardKey) return null;
48096
+ return (
48097
+ packagingFlightResults.find(function (flight) {
48098
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey;
48099
+ }) || null
48100
+ );
48101
+ },
48102
+ [packagingFlightResults, selectedOutwardKey]
48103
+ );
48104
+ var selectedReturn = React__default.useMemo(
48105
+ function () {
48106
+ if (!selectedReturnKey) return null;
48107
+ return (
48108
+ packagingFlightResults.find(function (flight) {
48109
+ return getFlightKey(flight.return.segments) === selectedReturnKey;
48110
+ }) || null
48111
+ );
48112
+ },
48113
+ [packagingFlightResults, selectedReturnKey]
48114
+ );
48115
+ var selectedCombinationFlight = React__default.useMemo(
48116
+ function () {
48117
+ if (!selectedOutwardKey || !selectedReturnKey) return undefined;
48118
+ return packagingFlightResults.find(function (flight) {
48119
+ return getFlightKey(flight.outward.segments) === selectedOutwardKey && getFlightKey(flight.return.segments) === selectedReturnKey;
48120
+ });
48121
+ },
48122
+ [packagingFlightResults, selectedOutwardKey, selectedReturnKey]
48123
+ );
48124
+ // TODO: get details for selected combination flight and show in fly-in
48125
+ // useEffect(() => {
48126
+ // if (!selectedCombinationFlight) return;
48127
+ // dispatch(setSelectedPackagingFlight(selectedCombinationFlight));
48128
+ // // onFlightSearch(selectedCombinationFlight); // Trigger search to update accommodation options based on selected flight
48129
+ // dispatch(setFlyInIsOpen(true));
48130
+ // }, [selectedCombinationFlight, dispatch]);
48131
+ useEffect(
48132
+ function () {
48133
+ var _a, _b, _c, _d;
48134
+ if (!context) return;
48135
+ var seed = activeSearchSeed;
48136
+ if (!seed) return;
48137
+ var nextEntry = buildOrUpdatePackagingEntryPartial({
48138
+ sourceEntry:
48139
+ (_a = editablePackagingEntry !== null && editablePackagingEntry !== void 0 ? editablePackagingEntry : context.packagingEntry) !== null &&
48140
+ _a !== void 0
48141
+ ? _a
48142
+ : null,
48143
+ selectedHotelCode: selectedPackagingAccoResultCode,
48144
+ accommodationResults: packagingAccoResults,
48145
+ selectedFlight: selectedCombinationFlight !== null && selectedCombinationFlight !== void 0 ? selectedCombinationFlight : null,
48146
+ seed: seed,
48147
+ transactionId:
48148
+ (_c =
48149
+ transactionId !== null && transactionId !== void 0
48150
+ ? transactionId
48151
+ : (_b = context.packagingEntry) === null || _b === void 0
48152
+ ? void 0
48153
+ : _b.transactionId) !== null && _c !== void 0
48154
+ ? _c
48155
+ : '',
48156
+ language: (_d = context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB'
48157
+ });
48158
+ console.log('Built next packaging entry', nextEntry);
48159
+ if (!nextEntry) return;
48160
+ dispatch(setEditablePackagingEntry(nextEntry));
48161
+ if (selectedCombinationFlight) {
48162
+ dispatch(setSelectedPackagingFlight(selectedCombinationFlight));
48163
+ }
48164
+ },
48165
+ [
48166
+ context,
48167
+ activeSearchSeed,
48168
+ selectedPackagingAccoResultCode,
48169
+ packagingAccoResults,
48170
+ packagingAccoSearchDetails,
48171
+ selectedCombinationFlight,
48172
+ transactionId,
48173
+ dispatch
48174
+ ]
48175
+ );
48176
+ var removeAccommodationLines = function (lines) {
48177
+ return lines.filter(function (line) {
48178
+ return line.serviceType !== ACCOMMODATION_SERVICE_TYPE;
48179
+ });
48180
+ };
48181
+ var removeFlightLines = function (lines) {
48182
+ return lines.filter(function (line) {
48183
+ return line.serviceType !== FLIGHT_SERVICE_TYPE;
48184
+ });
48185
+ };
48186
+ var buildAccommodationLinesFromSelection = function (selectedHotel, seed) {
48187
+ if (!selectedHotel) return [];
48188
+ var parentGuid = crypto.randomUUID();
48189
+ return selectedHotel.rooms
48190
+ .filter(function (room) {
48191
+ return room.options.some(function (o) {
48192
+ return o.isSelected;
48193
+ });
48194
+ })
48195
+ .map(function (room, index) {
48196
+ var _a, _b, _c, _d, _e;
48197
+ var option = room.options.find(function (o) {
48198
+ return o.isSelected;
48199
+ });
48200
+ var pax =
48201
+ (_b =
48202
+ (_a = seed.rooms) === null || _a === void 0
48203
+ ? void 0
48204
+ : _a.flatMap(function (room, roomIndex) {
48205
+ return room.pax.map(function (p, paxIndex) {
48206
+ return {
48207
+ paxId: p.id,
48208
+ room: roomIndex,
48209
+ order: paxIndex
48210
+ };
48211
+ });
48212
+ })) !== null && _b !== void 0
48213
+ ? _b
48214
+ : [];
48215
+ return {
48216
+ guid: (_c = option.guid) !== null && _c !== void 0 ? _c : crypto.randomUUID(),
48217
+ moment: '',
48218
+ parentGuid: index === 0 ? null : parentGuid,
48219
+ order: index,
48220
+ isChanged: true,
48221
+ from: selectedHotel.fromDate,
48222
+ to: selectedHotel.toDate,
48223
+ serviceType: ACCOMMODATION_SERVICE_TYPE,
48224
+ productName: selectedHotel.name,
48225
+ productCode: selectedHotel.code,
48226
+ accommodationName: option.accommodationName,
48227
+ accommodationCode: option.accommodationCode,
48228
+ regimeName: option.regimeName,
48229
+ regimeCode: option.regimeCode,
48230
+ country: selectedHotel.countryId ? { id: selectedHotel.countryId, name: selectedHotel.countryName, localizations: [] } : null,
48231
+ region: selectedHotel.regionId ? { id: selectedHotel.regionId, name: selectedHotel.regionName, localizations: [] } : null,
48232
+ oord: selectedHotel.oordId ? { id: selectedHotel.oordId, name: selectedHotel.oordName, localizations: [] } : null,
48233
+ location: selectedHotel.locationId ? { id: selectedHotel.locationId, name: selectedHotel.locationName, localizations: [] } : null,
48234
+ longitude: (_d = selectedHotel.longitude) !== null && _d !== void 0 ? _d : null,
48235
+ latitude: (_e = selectedHotel.latitude) !== null && _e !== void 0 ? _e : null,
48236
+ pax: pax,
48237
+ flightInformation: null
48238
+ };
48239
+ });
48240
+ };
48241
+ var toDateOnlyUtcString = function (value) {
48242
+ var date = new Date(value);
48243
+ return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())).toISOString();
48244
+ };
48245
+ var toTimeOnlyString = function (value) {
48246
+ var date = new Date(value);
48247
+ var hh = String(date.getUTCHours()).padStart(2, '0');
48248
+ var mm = String(date.getUTCMinutes()).padStart(2, '0');
48249
+ var ss = String(date.getUTCSeconds()).padStart(2, '0');
48250
+ return ''.concat(hh, ':').concat(mm, ':').concat(ss);
48251
+ };
48252
+ var mapFlightSegmentsToFlightLines = function (segments) {
48253
+ return segments.map(function (segment) {
48254
+ var _a;
48255
+ return {
48256
+ airlineCode: segment.marketingAirlineCode,
48257
+ airlineDescription: segment.marketingAirlineName,
48258
+ operatingAirlineCode: segment.operatingAirlineCode,
48259
+ operatingAirlineDescription: segment.operatingAirlineName,
48260
+ flightNumber: segment.flightNumber,
48261
+ operatingFlightNumber: (_a = segment.operatingFlightNumber) !== null && _a !== void 0 ? _a : null,
48262
+ departureDate: toDateOnlyUtcString(segment.departureDateTime),
48263
+ departureTime: toTimeOnlyString(segment.departureDateTime),
48264
+ departureAirportCode: segment.departureAirportCode,
48265
+ departureAirportDescription: segment.departureAirportName,
48266
+ arrivalDate: toDateOnlyUtcString(segment.arrivalDateTime),
48267
+ arrivalTime: toTimeOnlyString(segment.arrivalDateTime),
48268
+ arrivalAirportCode: segment.arrivalAirportCode,
48269
+ arrivalAirportDescription: segment.arrivalAirportName,
48270
+ durationInTicks: segment.durationInTicks
48271
+ };
48272
+ });
48273
+ };
48274
+ var buildFlightLabel = function (segments) {
48275
+ var firstSegment = first(segments);
48276
+ var lastSegment = last(segments);
48277
+ if (!firstSegment || !lastSegment) {
48278
+ return { productName: 'Flight', productCode: 'FLIGHT' };
48279
+ }
48280
+ return {
48281
+ productName: ''
48282
+ .concat(firstSegment.departureAirportName, ' - ')
48283
+ .concat(lastSegment.arrivalAirportName, ' (')
48284
+ .concat(firstSegment.marketingAirlineName, ')'),
48285
+ productCode: ''.concat(firstSegment.departureAirportCode, ' ').concat(lastSegment.arrivalAirportCode, '/').concat(firstSegment.marketingAirlineCode)
48286
+ };
48287
+ };
48288
+ var buildFlightLinesFromSelection = function (selectedFlight) {
48289
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
48290
+ if (!selectedFlight) return [];
48291
+ var outwardSegments = (_b = (_a = selectedFlight.outward) === null || _a === void 0 ? void 0 : _a.segments) !== null && _b !== void 0 ? _b : [];
48292
+ var returnSegments = (_d = (_c = selectedFlight.return) === null || _c === void 0 ? void 0 : _c.segments) !== null && _d !== void 0 ? _d : [];
48293
+ if (!outwardSegments.length || !returnSegments.length) return [];
48294
+ var outwardLabel = buildFlightLabel(outwardSegments);
48295
+ var returnLabel = buildFlightLabel(returnSegments);
48296
+ var outwardFirst = first(outwardSegments);
48297
+ var outwardLast = last(outwardSegments);
48298
+ var returnFirst = first(returnSegments);
48299
+ var returnLast = last(returnSegments);
48300
+ var outwardLine = {
48301
+ guid: selectedFlight.outwardGuid,
48302
+ parentGuid: null,
48303
+ order: 0,
48304
+ isChanged: true,
48305
+ from: (_e = outwardFirst === null || outwardFirst === void 0 ? void 0 : outwardFirst.departureDateTime.toString()) !== null && _e !== void 0 ? _e : '',
48306
+ to: (_f = outwardLast === null || outwardLast === void 0 ? void 0 : outwardLast.arrivalDateTime.toString()) !== null && _f !== void 0 ? _f : '',
48307
+ serviceType: FLIGHT_SERVICE_TYPE,
48308
+ productName: outwardLabel.productName,
48309
+ productCode: outwardLabel.productCode,
48310
+ accommodationName:
48311
+ (_g = outwardFirst === null || outwardFirst === void 0 ? void 0 : outwardFirst.metaData) === null || _g === void 0 ? void 0 : _g.farePriceClassName,
48312
+ accommodationCode:
48313
+ (_h = outwardFirst === null || outwardFirst === void 0 ? void 0 : outwardFirst.metaData) === null || _h === void 0 ? void 0 : _h.fareCode,
48314
+ regimeName: null,
48315
+ regimeCode: null,
48316
+ country: null,
48317
+ region: null,
48318
+ oord: null,
48319
+ location: null,
48320
+ longitude: null,
48321
+ latitude: null,
48322
+ // pax: allPaxAssignments,
48323
+ flightInformation: {
48324
+ pnr: '',
48325
+ flightLines: mapFlightSegmentsToFlightLines(outwardSegments)
48326
+ }
48327
+ };
48328
+ var returnLine = {
48329
+ guid: selectedFlight.returnGuid,
48330
+ parentGuid: selectedFlight.outwardGuid,
48331
+ order: 1,
48332
+ isChanged: true,
48333
+ from: (_j = returnFirst === null || returnFirst === void 0 ? void 0 : returnFirst.departureDateTime.toString()) !== null && _j !== void 0 ? _j : '',
48334
+ to: (_k = returnLast === null || returnLast === void 0 ? void 0 : returnLast.departureDateTime.toString()) !== null && _k !== void 0 ? _k : '',
48335
+ serviceType: FLIGHT_SERVICE_TYPE,
48336
+ productName: returnLabel.productName,
48337
+ productCode: returnLabel.productCode,
48338
+ accommodationName:
48339
+ (_l = returnFirst === null || returnFirst === void 0 ? void 0 : returnFirst.metaData) === null || _l === void 0 ? void 0 : _l.farePriceClassName,
48340
+ accommodationCode: (_m = returnFirst === null || returnFirst === void 0 ? void 0 : returnFirst.metaData) === null || _m === void 0 ? void 0 : _m.fareCode,
48341
+ regimeName: null,
48342
+ regimeCode: null,
48343
+ country: null,
48344
+ region: null,
48345
+ oord: null,
48346
+ location: null,
48347
+ longitude: null,
48348
+ latitude: null,
48349
+ // pax: allPaxAssignments,
48350
+ flightInformation: {
48351
+ pnr: '',
48352
+ flightLines: mapFlightSegmentsToFlightLines(returnSegments)
48353
+ }
48354
+ };
48355
+ return [outwardLine, returnLine];
48356
+ };
48357
+ var buildOrUpdatePackagingEntryPartial = function (_a) {
48358
+ var _b, _c;
48359
+ var sourceEntry = _a.sourceEntry,
48360
+ selectedHotelCode = _a.selectedHotelCode,
48361
+ accommodationResults = _a.accommodationResults,
48362
+ selectedFlight = _a.selectedFlight,
48363
+ seed = _a.seed,
48364
+ transactionId = _a.transactionId,
48365
+ language = _a.language;
48366
+ if (!((_b = seed === null || seed === void 0 ? void 0 : seed.rooms) === null || _b === void 0 ? void 0 : _b.length)) return null;
48367
+ var entry = buildBasePackagingEntry(sourceEntry, seed, transactionId, language);
48368
+ var nextLines = __spreadArray([], (_c = entry.lines) !== null && _c !== void 0 ? _c : [], true);
48369
+ var selectedHotel = selectedHotelCode
48370
+ ? accommodationResults.find(function (r) {
48371
+ return r.code === selectedHotelCode;
48372
+ })
48373
+ : null;
48374
+ console.log('Selected hotel for packaging entry', selectedHotel);
48375
+ // Update accommodation only when enough data exists
48376
+ if (selectedHotel) {
48377
+ var accommodationLines = buildAccommodationLinesFromSelection(selectedHotel, seed);
48378
+ if (accommodationLines.length) {
48379
+ nextLines = removeAccommodationLines(nextLines);
48380
+ nextLines = __spreadArray(__spreadArray([], nextLines, true), accommodationLines, true);
48381
+ }
48382
+ }
48383
+ // Update flights only when full selected combination exists
48384
+ if (selectedFlight) {
48385
+ var flightLines = buildFlightLinesFromSelection(selectedFlight);
48386
+ console.log('selectedFlight', selectedFlight);
48387
+ console.log('Built flight lines from selection', flightLines);
48388
+ if (flightLines.length) {
48389
+ nextLines = removeFlightLines(nextLines);
48390
+ nextLines = __spreadArray(__spreadArray([], nextLines, true), flightLines, true);
48391
+ }
48392
+ }
48393
+ nextLines = nextLines.map(function (line, index) {
48394
+ return __assign(__assign({}, line), { order: index });
48395
+ });
48396
+ return __assign(__assign({}, entry), { language: language, transactionId: transactionId, pax: entry.pax, lines: nextLines });
48397
+ };
48398
+ var buildBasePackagingEntry = function (sourceEntry, seed, transactionId, language) {
48399
+ var _a, _b;
48400
+ if (sourceEntry) {
48401
+ return structuredClone(sourceEntry);
48402
+ }
48403
+ var paxId = 1;
48404
+ var pax =
48405
+ (_b =
48406
+ (_a = seed.rooms) === null || _a === void 0
48407
+ ? void 0
48408
+ : _a.flatMap(function (room, roomIndex) {
48409
+ return room.pax.map(function (_, paxIndex) {
48410
+ return {
48411
+ id: paxId++,
48412
+ firstName: '',
48413
+ lastName: '',
48414
+ dateOfBirth: null,
48415
+ isMainBooker: roomIndex === 0 && paxIndex === 0
48416
+ };
48417
+ });
48418
+ })) !== null && _b !== void 0
48419
+ ? _b
48420
+ : [];
48421
+ return {
48422
+ language: language,
48423
+ transactionId: transactionId,
48424
+ dossierNumber: '',
48425
+ status: 0,
48426
+ bookingDate: null,
48427
+ price: 0,
48428
+ depositAmount: 0,
48429
+ pax: pax,
48430
+ lines: []
48431
+ };
48432
+ };
47951
48433
  return React__default.createElement(
47952
48434
  'div',
47953
48435
  { id: 'tide-booking', className: 'search__bg' },
@@ -48065,13 +48547,11 @@ var SearchResultsContainer = function () {
48065
48547
  'span',
48066
48548
  { className: 'search__result-row-text' },
48067
48549
  !isLoading &&
48068
- !context.packagingEntry &&
48550
+ context.searchConfiguration.qsmType !== build.PortalQsmType.AccommodationAndFlight &&
48069
48551
  React__default.createElement(
48070
48552
  React__default.Fragment,
48071
48553
  null,
48072
- ((context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48073
- context.searchConfiguration.enableManualPackaging) ||
48074
- context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation) &&
48554
+ context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation &&
48075
48555
  (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length) &&
48076
48556
  (filteredPackagingAccoResults === null || filteredPackagingAccoResults === void 0 ? void 0 : filteredPackagingAccoResults.length),
48077
48557
  context.searchConfiguration.qsmType !== build.PortalQsmType.Accommodation &&
@@ -48120,25 +48600,117 @@ var SearchResultsContainer = function () {
48120
48600
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48121
48601
  !context.packagingEntry &&
48122
48602
  context.showFlightResults &&
48123
- (bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.outwardFlights) &&
48124
- React__default.createElement(FlightResults, {
48125
- flights: bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.outwardFlights,
48126
- isDeparture: true
48127
- }),
48603
+ // bookingPackageDetails?.outwardFlights &&
48604
+ // <FlightResults flights={bookingPackageDetails?.outwardFlights} isDeparture={true} />
48605
+ React__default.createElement(
48606
+ React__default.Fragment,
48607
+ null,
48608
+ React__default.createElement(
48609
+ 'div',
48610
+ { className: 'search__results__label search__results__label--secondary' },
48611
+ React__default.createElement(
48612
+ 'div',
48613
+ { className: 'search__results__label__date' },
48614
+ React__default.createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
48615
+ ),
48616
+ React__default.createElement(
48617
+ 'div',
48618
+ { className: 'search__results__label__text' },
48619
+ React__default.createElement(
48620
+ 'h3',
48621
+ null,
48622
+ translations.SRP.SELECT,
48623
+ ' ',
48624
+ React__default.createElement('strong', null, ' ', translations.SRP.DEPARTURE)
48625
+ )
48626
+ )
48627
+ ),
48628
+ React__default.createElement(
48629
+ 'div',
48630
+ { className: 'search__results__cards search__results__cards--extended' },
48631
+ selectedOutwardKey && selectedOutward
48632
+ ? React__default.createElement(IndependentFlightOption, {
48633
+ key: 'flight-'.concat(selectedOutwardKey),
48634
+ item: selectedOutward.outward,
48635
+ guid: selectedOutward.outwardGuid,
48636
+ onSelect: function () {
48637
+ return setSelectedOutwardKey(null);
48638
+ },
48639
+ selectedGuid: selectedOutward.outwardGuid,
48640
+ isOutward: true
48641
+ })
48642
+ : uniqueOutwardFlights.map(function (result) {
48643
+ return React__default.createElement(IndependentFlightOption, {
48644
+ key: 'flight-'.concat(result.outwardGuid),
48645
+ item: result.outward,
48646
+ onSelect: function () {
48647
+ return setSelectedOutwardKey(getFlightKey(result.outward.segments));
48648
+ },
48649
+ guid: result.outwardGuid,
48650
+ isOutward: true
48651
+ });
48652
+ })
48653
+ )
48654
+ ),
48128
48655
  context.showHotelAccommodationResults &&
48129
48656
  !context.packagingEntry &&
48130
48657
  React__default.createElement(HotelAccommodationResults, { isLoading: isLoading }),
48131
48658
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48132
48659
  !context.packagingEntry &&
48133
48660
  context.showFlightResults &&
48134
- (bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.returnFlights) &&
48135
- React__default.createElement(FlightResults, {
48136
- flights: bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.returnFlights,
48137
- isDeparture: false
48138
- }),
48661
+ // bookingPackageDetails?.returnFlights &&
48662
+ // <FlightResults flights={bookingPackageDetails?.returnFlights} isDeparture={false} />
48663
+ React__default.createElement(
48664
+ React__default.Fragment,
48665
+ null,
48666
+ React__default.createElement(
48667
+ 'div',
48668
+ { className: 'search__results__label search__results__label--secondary' },
48669
+ React__default.createElement(
48670
+ 'div',
48671
+ { className: 'search__results__label__date' },
48672
+ React__default.createElement(Icon$1, { name: 'ui-flight', height: 16, fill: 'white' })
48673
+ ),
48674
+ React__default.createElement(
48675
+ 'div',
48676
+ { className: 'search__results__label__text' },
48677
+ React__default.createElement(
48678
+ 'h3',
48679
+ null,
48680
+ translations.SRP.SELECT,
48681
+ ' ',
48682
+ React__default.createElement('strong', null, ' ', translations.SRP.RETURN)
48683
+ )
48684
+ )
48685
+ ),
48686
+ React__default.createElement(
48687
+ 'div',
48688
+ { className: 'search__results__cards search__results__cards--extended' },
48689
+ selectedReturnKey && selectedReturn
48690
+ ? React__default.createElement(IndependentFlightOption, {
48691
+ key: 'flight-'.concat(selectedReturnKey),
48692
+ item: selectedReturn.return,
48693
+ guid: selectedReturn.outwardGuid,
48694
+ selectedGuid: selectedReturn.outwardGuid,
48695
+ isOutward: false
48696
+ })
48697
+ : uniqueReturnFlights.map(function (result) {
48698
+ return React__default.createElement(IndependentFlightOption, {
48699
+ key: 'flight-'.concat(result.outwardGuid),
48700
+ item: result.return,
48701
+ onSelect: function () {
48702
+ return setSelectedReturnKey(getFlightKey(result.return.segments));
48703
+ },
48704
+ guid: result.outwardGuid,
48705
+ isOutward: false
48706
+ });
48707
+ })
48708
+ )
48709
+ ),
48139
48710
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48140
48711
  context.packagingEntry &&
48141
- React__default.createElement('span', null, 'TODO: Show Full Itinerary here')
48712
+ itinerary &&
48713
+ React__default.createElement(FullItinerary, { isLoading: itineraryIsLoading })
48142
48714
  )
48143
48715
  ),
48144
48716
  React__default.createElement(FlyIn, {
@@ -55585,5 +56157,6 @@ export {
55585
56157
  PhotoGallery,
55586
56158
  QSM,
55587
56159
  SearchResults,
55588
- Slider
56160
+ Slider,
56161
+ Spinner
55589
56162
  };