@qite/tide-booking-component 1.4.97 → 1.4.99

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 (30) hide show
  1. package/build/build-cjs/index.js +1423 -975
  2. package/build/build-cjs/src/search-results/components/itinerary/index.d.ts +2 -0
  3. package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +9 -10
  4. package/build/build-cjs/src/search-results/types.d.ts +24 -1
  5. package/build/build-cjs/src/search-results/utils/packaging-utils.d.ts +7 -0
  6. package/build/build-cjs/src/search-results/utils/query-utils.d.ts +11 -0
  7. package/build/build-cjs/src/shared/components/flyin/accommodation-flyin.d.ts +1 -2
  8. package/build/build-cjs/src/shared/components/flyin/flyin.d.ts +4 -0
  9. package/build/build-cjs/src/shared/utils/localization-util.d.ts +1 -0
  10. package/build/build-esm/index.js +1419 -965
  11. package/build/build-esm/src/search-results/components/itinerary/index.d.ts +2 -0
  12. package/build/build-esm/src/search-results/store/search-results-slice.d.ts +9 -10
  13. package/build/build-esm/src/search-results/types.d.ts +24 -1
  14. package/build/build-esm/src/search-results/utils/packaging-utils.d.ts +7 -0
  15. package/build/build-esm/src/search-results/utils/query-utils.d.ts +11 -0
  16. package/build/build-esm/src/shared/components/flyin/accommodation-flyin.d.ts +1 -2
  17. package/build/build-esm/src/shared/components/flyin/flyin.d.ts +4 -0
  18. package/build/build-esm/src/shared/utils/localization-util.d.ts +1 -0
  19. package/package.json +2 -2
  20. package/src/qsm/components/search-input-group/index.tsx +0 -1
  21. package/src/search-results/components/itinerary/index.tsx +331 -234
  22. package/src/search-results/components/search-results-container/search-results-container.tsx +444 -383
  23. package/src/search-results/store/search-results-slice.ts +22 -10
  24. package/src/search-results/types.ts +26 -1
  25. package/src/search-results/utils/packaging-utils.ts +75 -0
  26. package/src/search-results/utils/query-utils.ts +152 -0
  27. package/src/shared/components/flyin/accommodation-flyin.tsx +10 -11
  28. package/src/shared/components/flyin/flyin.tsx +52 -4
  29. package/styles/components/_flyin.scss +25 -0
  30. package/styles/components/_search.scss +28 -1
@@ -13415,11 +13415,17 @@ PERFORMANCE OF THIS SOFTWARE.
13415
13415
  };
13416
13416
 
13417
13417
  var ENDPOINT = '/api/web/packaging';
13418
+ var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
13418
13419
  var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
13419
13420
  var ENDPOINT_ENTRY = function (magicLinkCode) {
13420
13421
  return ENDPOINT + '/entry/' + magicLinkCode;
13421
13422
  };
13422
13423
  // MANUAL PACKAGING SEARCH
13424
+ var startTransaction = function (config, signal) {
13425
+ var apiKey = config.apiKey;
13426
+ var url = '' + config.host + ENDPOINT_START_TRANSACTION;
13427
+ return get(url, apiKey, config.token, signal, true);
13428
+ };
13423
13429
  var searchPackagingAccommodations = function (config, request, signal) {
13424
13430
  var url = '' + config.host + ENDPOINT_ACCOMMODATIONS;
13425
13431
  var apiKey = config.apiKey;
@@ -13507,6 +13513,7 @@ PERFORMANCE OF THIS SOFTWARE.
13507
13513
  exports.searchWithErrorMapping = searchWithErrorMapping;
13508
13514
  exports.setCustomEntryStatus = setCustomEntryStatus;
13509
13515
  exports.setEntryStatus = setEntryStatus;
13516
+ exports.startTransaction = startTransaction;
13510
13517
  exports.tourCodes = tourCodes;
13511
13518
  exports.transportDates = transportDates;
13512
13519
  exports.update = update;
@@ -32836,7 +32843,6 @@ var SearchInputGroup = function (_a) {
32836
32843
  );
32837
32844
  React.useEffect(
32838
32845
  function () {
32839
- console.log('options updated, resetting loading state');
32840
32846
  setIsLoading(false);
32841
32847
  },
32842
32848
  [options]
@@ -33798,13 +33804,15 @@ var initialState$1 = {
33798
33804
  selectedFlight: null,
33799
33805
  selectedFlightDetails: null,
33800
33806
  bookingPackageDetails: null,
33801
- entry: null,
33802
33807
  isLoading: false,
33803
33808
  filters: [],
33804
33809
  selectedSortType: null,
33805
33810
  activeTab: 'compact',
33806
33811
  currentPage: 1,
33807
- flyInIsOpen: false
33812
+ flyInIsOpen: false,
33813
+ editablePackagingEntry: null,
33814
+ transactionId: null,
33815
+ accommodationFlyInStep: 'details'
33808
33816
  };
33809
33817
  var searchResultsSlice = toolkit.createSlice({
33810
33818
  name: 'searchResults',
@@ -33840,9 +33848,6 @@ var searchResultsSlice = toolkit.createSlice({
33840
33848
  setBookingPackageDetails: function (state, action) {
33841
33849
  state.bookingPackageDetails = action.payload.details;
33842
33850
  },
33843
- setEntry: function (state, action) {
33844
- state.entry = action.payload.entry;
33845
- },
33846
33851
  selectFlight: function (state, action) {
33847
33852
  if (!state.bookingPackageDetails) return;
33848
33853
  var _a = action.payload,
@@ -33891,6 +33896,15 @@ var searchResultsSlice = toolkit.createSlice({
33891
33896
  },
33892
33897
  setFlyInIsOpen: function (state, action) {
33893
33898
  state.flyInIsOpen = action.payload;
33899
+ },
33900
+ setEditablePackagingEntry: function (state, action) {
33901
+ state.editablePackagingEntry = action.payload;
33902
+ },
33903
+ setTransactionId: function (state, action) {
33904
+ state.transactionId = action.payload;
33905
+ },
33906
+ setAccommodationFlyInStep: function (state, action) {
33907
+ state.accommodationFlyInStep = action.payload;
33894
33908
  }
33895
33909
  }
33896
33910
  });
@@ -33904,7 +33918,6 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33904
33918
  setSelectedFlight = _a.setSelectedFlight,
33905
33919
  setSelectedFlightDetails = _a.setSelectedFlightDetails,
33906
33920
  setBookingPackageDetails = _a.setBookingPackageDetails,
33907
- setEntry = _a.setEntry,
33908
33921
  selectFlight = _a.selectFlight,
33909
33922
  setIsLoading = _a.setIsLoading,
33910
33923
  setFilters = _a.setFilters,
@@ -33913,7 +33926,10 @@ var setResults = ((_a = searchResultsSlice.actions), _a.setResults),
33913
33926
  setActiveTab = _a.setActiveTab;
33914
33927
  _a.setCurrentPage;
33915
33928
  _a.resetSearchState;
33916
- var setFlyInIsOpen = _a.setFlyInIsOpen;
33929
+ var setFlyInIsOpen = _a.setFlyInIsOpen,
33930
+ setEditablePackagingEntry = _a.setEditablePackagingEntry,
33931
+ setTransactionId = _a.setTransactionId,
33932
+ setAccommodationFlyInStep = _a.setAccommodationFlyInStep;
33917
33933
  var searchResultsReducer = searchResultsSlice.reducer;
33918
33934
 
33919
33935
  var ItemPicker = function (_a) {
@@ -34942,492 +34958,715 @@ var Icon$1 = function (_a) {
34942
34958
  }
34943
34959
  };
34944
34960
 
34945
- var getDepartureTime = function (flight) {
34946
- var _a, _b;
34947
- if (lodash.isEmpty(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) return '';
34948
- try {
34949
- var config = (_a = lodash.first(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) === null || _a === void 0 ? void 0 : _a.configuration;
34950
- if (!config) return '';
34951
- var parsed = JSON.parse(config);
34952
- var line = lodash.first(parsed === null || parsed === void 0 ? void 0 : parsed.FlightLines);
34953
- return (_b = line === null || line === void 0 ? void 0 : line.DepartureTime) !== null && _b !== void 0 ? _b : '';
34954
- } catch (_c) {
34955
- return '';
34961
+ var GROUP_TOUR_SERVICE_TYPE = 1;
34962
+ var ACCOMMODATION_SERVICE_TYPE = 3;
34963
+ var FLIGHT_SERVICE_TYPE = 7;
34964
+ var toDateOnlyString = function (value) {
34965
+ var date = value instanceof Date ? value : new Date(value);
34966
+ return date.toISOString().split('T')[0];
34967
+ };
34968
+ var getAgeAtReferenceDate = function (dateOfBirth, referenceDate) {
34969
+ var dob = dateOfBirth instanceof Date ? dateOfBirth : new Date(dateOfBirth);
34970
+ var ref = referenceDate instanceof Date ? referenceDate : new Date(referenceDate);
34971
+ var age = ref.getFullYear() - dob.getFullYear();
34972
+ var monthDiff = ref.getMonth() - dob.getMonth();
34973
+ if (monthDiff < 0 || (monthDiff === 0 && ref.getDate() < dob.getDate())) {
34974
+ age--;
34956
34975
  }
34976
+ return age;
34957
34977
  };
34958
- var getArrivalTime = function (flight) {
34959
- var _a, _b;
34960
- if (lodash.isEmpty(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) return '';
34961
- try {
34962
- var config = (_a = lodash.first(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) === null || _a === void 0 ? void 0 : _a.configuration;
34963
- if (!config) return '';
34964
- var parsed = JSON.parse(config);
34965
- var line = lodash.last(parsed === null || parsed === void 0 ? void 0 : parsed.FlightLines);
34966
- return (_b = line === null || line === void 0 ? void 0 : line.ArrivalTime) !== null && _b !== void 0 ? _b : '';
34967
- } catch (_c) {
34968
- return '';
34978
+ var getFlightLines$1 = function (lines) {
34979
+ return __spreadArray([], lines, true)
34980
+ .filter(function (line) {
34981
+ return line.serviceType === FLIGHT_SERVICE_TYPE;
34982
+ })
34983
+ .sort(function (a, b) {
34984
+ return new Date(a.from).getTime() - new Date(b.from).getTime();
34985
+ });
34986
+ };
34987
+ var getDepartureAirportFromEntry = function (lines) {
34988
+ var _a, _b, _c;
34989
+ var firstFlight = getFlightLines$1(lines)[0];
34990
+ var firstSegment =
34991
+ (_b =
34992
+ (_a = firstFlight === null || firstFlight === void 0 ? void 0 : firstFlight.flightInformation) === null || _a === void 0 ? void 0 : _a.flightLines) ===
34993
+ null || _b === void 0
34994
+ ? void 0
34995
+ : _b[0];
34996
+ return (_c = firstSegment === null || firstSegment === void 0 ? void 0 : firstSegment.departureAirportCode) !== null && _c !== void 0 ? _c : null;
34997
+ };
34998
+ var getDestinationAirportFromEntry = function (lines) {
34999
+ var _a, _b, _c;
35000
+ var outboundFlight = getFlightLines$1(lines)[0];
35001
+ var flightSegments =
35002
+ (_a = outboundFlight === null || outboundFlight === void 0 ? void 0 : outboundFlight.flightInformation) === null || _a === void 0 ? void 0 : _a.flightLines;
35003
+ if (!(flightSegments === null || flightSegments === void 0 ? void 0 : flightSegments.length)) return null;
35004
+ return (_c = (_b = flightSegments[flightSegments.length - 1]) === null || _b === void 0 ? void 0 : _b.arrivalAirportCode) !== null && _c !== void 0
35005
+ ? _c
35006
+ : null;
35007
+ };
35008
+ var mapPackagingPaxToBookingPax = function (pax, fallbackId, referenceDate) {
35009
+ var _a, _b, _c, _d, _e, _f;
35010
+ return {
35011
+ id: (_a = pax === null || pax === void 0 ? void 0 : pax.id) !== null && _a !== void 0 ? _a : fallbackId,
35012
+ guid:
35013
+ (_c = (_b = pax === null || pax === void 0 ? void 0 : pax.id) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0
35014
+ ? _c
35015
+ : fallbackId.toString(),
35016
+ firstName: (_d = pax === null || pax === void 0 ? void 0 : pax.firstName) !== null && _d !== void 0 ? _d : '',
35017
+ lastName: (_e = pax === null || pax === void 0 ? void 0 : pax.lastName) !== null && _e !== void 0 ? _e : '',
35018
+ dateOfBirth: (_f = pax === null || pax === void 0 ? void 0 : pax.dateOfBirth) !== null && _f !== void 0 ? _f : undefined,
35019
+ age: (pax === null || pax === void 0 ? void 0 : pax.dateOfBirth) ? getAgeAtReferenceDate(pax.dateOfBirth, referenceDate) : undefined,
35020
+ isMainBooker: pax === null || pax === void 0 ? void 0 : pax.isMainBooker,
35021
+ email: ''
35022
+ };
35023
+ };
35024
+ var getRequestRoomsFromPackagingEntry = function (entry) {
35025
+ var _a, _b, _c, _d;
35026
+ var accommodationLines = ((_a = entry.lines) !== null && _a !== void 0 ? _a : []).filter(function (line) {
35027
+ var _a;
35028
+ return line.serviceType === ACCOMMODATION_SERVICE_TYPE && ((_a = line.pax) === null || _a === void 0 ? void 0 : _a.length) > 0;
35029
+ });
35030
+ var paxById = new Map(
35031
+ ((_b = entry.pax) !== null && _b !== void 0 ? _b : []).map(function (p) {
35032
+ return [p.id, p];
35033
+ })
35034
+ );
35035
+ if (!accommodationLines.length) {
35036
+ return [
35037
+ {
35038
+ index: 0,
35039
+ pax: ((_c = entry.pax) !== null && _c !== void 0 ? _c : []).map(function (p) {
35040
+ return mapPackagingPaxToBookingPax(p, p.id, new Date().toISOString());
35041
+ })
35042
+ }
35043
+ ];
35044
+ }
35045
+ var roomGroups = [];
35046
+ accommodationLines.forEach(function (line) {
35047
+ var groupedByRoom = new Map();
35048
+ line.pax.forEach(function (linePax) {
35049
+ var _a;
35050
+ var roomIndexWithinLine = Number((_a = linePax.room) !== null && _a !== void 0 ? _a : 0);
35051
+ var paxId = Number(linePax.paxId);
35052
+ var pax = mapPackagingPaxToBookingPax(paxById.get(paxId), paxId, line.from);
35053
+ if (!groupedByRoom.has(roomIndexWithinLine)) {
35054
+ groupedByRoom.set(roomIndexWithinLine, []);
35055
+ }
35056
+ groupedByRoom.get(roomIndexWithinLine).push(pax);
35057
+ });
35058
+ var sortedGroups = Array.from(groupedByRoom.entries())
35059
+ .sort(function (_a, _b) {
35060
+ var a = _a[0];
35061
+ var b = _b[0];
35062
+ return a - b;
35063
+ })
35064
+ .map(function (_a) {
35065
+ var pax = _a[1];
35066
+ return pax;
35067
+ });
35068
+ roomGroups.push.apply(roomGroups, sortedGroups);
35069
+ });
35070
+ if (!roomGroups.length) {
35071
+ return [
35072
+ {
35073
+ index: 0,
35074
+ pax: ((_d = entry.pax) !== null && _d !== void 0 ? _d : []).map(function (p) {
35075
+ return mapPackagingPaxToBookingPax(p, p.id, accommodationLines[0].from);
35076
+ })
35077
+ }
35078
+ ];
34969
35079
  }
35080
+ return roomGroups.map(function (pax, index) {
35081
+ return {
35082
+ index: index,
35083
+ pax: pax
35084
+ };
35085
+ });
34970
35086
  };
34971
- var getDuration = function (flight) {
34972
- var _a;
34973
- if (lodash.isEmpty(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) return '';
34974
- try {
34975
- var config = (_a = lodash.first(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) === null || _a === void 0 ? void 0 : _a.configuration;
34976
- if (!config) return '';
34977
- var parsed = JSON.parse(config);
34978
- var ticks = parsed === null || parsed === void 0 ? void 0 : parsed.DurationInTicks;
34979
- if (!ticks) return '';
34980
- var seconds = ticks / 10000000;
34981
- var hours = Math.floor(seconds / 3600);
34982
- var minutes = Math.floor((seconds % 3600) / 60);
34983
- return ''.concat(hours, 'h ').concat(minutes.toString().padStart(2, '0'), 'm');
34984
- } catch (_b) {
34985
- return '';
35087
+ var parseHotelId = function (line) {
35088
+ if (!(line === null || line === void 0 ? void 0 : line.productCode)) return null;
35089
+ var parsed = Number(line.productCode);
35090
+ return Number.isNaN(parsed) ? null : parsed;
35091
+ };
35092
+ var getPackagingRequestRoomsFromBookingRooms = function (rooms) {
35093
+ if (!(rooms === null || rooms === void 0 ? void 0 : rooms.length)) {
35094
+ var room_1 = { index: 0, travellers: [] };
35095
+ lodash.range(0, 2).forEach(function () {
35096
+ room_1.travellers.push({
35097
+ age: 30
35098
+ });
35099
+ });
35100
+ return [room_1];
34986
35101
  }
35102
+ return rooms.map(function (x, i) {
35103
+ var _a;
35104
+ var room = { index: (_a = x.index) !== null && _a !== void 0 ? _a : i, travellers: [] };
35105
+ x.pax.forEach(function (p) {
35106
+ var _a;
35107
+ room.travellers.push({
35108
+ age: (_a = p.age) !== null && _a !== void 0 ? _a : 30
35109
+ });
35110
+ });
35111
+ return room;
35112
+ });
35113
+ };
35114
+
35115
+ var getFlightLines = function (flight) {
35116
+ var _a, _b;
35117
+ return (_b = (_a = flight === null || flight === void 0 ? void 0 : flight.flightInformation) === null || _a === void 0 ? void 0 : _a.flightLines) !== null &&
35118
+ _b !== void 0
35119
+ ? _b
35120
+ : [];
35121
+ };
35122
+ var getDepartureTime = function (flight) {
35123
+ var firstLine = lodash.first(getFlightLines(flight));
35124
+ if (!(firstLine === null || firstLine === void 0 ? void 0 : firstLine.departureTime)) return '';
35125
+ return firstLine.departureTime.slice(0, 5);
35126
+ };
35127
+ var getArrivalTime = function (flight) {
35128
+ var lastLine = lodash.last(getFlightLines(flight));
35129
+ if (!(lastLine === null || lastLine === void 0 ? void 0 : lastLine.arrivalTime)) return '';
35130
+ return lastLine.arrivalTime.slice(0, 5);
35131
+ };
35132
+ var getDuration = function (flight) {
35133
+ var lines = getFlightLines(flight);
35134
+ if (!lines.length) return '';
35135
+ var totalTicks =
35136
+ lines.reduce(function (sum, line) {
35137
+ var _a;
35138
+ return sum + ((_a = line.durationInTicks) !== null && _a !== void 0 ? _a : 0);
35139
+ }, 0) || 0;
35140
+ if (!totalTicks) return '';
35141
+ var seconds = totalTicks / 10000000;
35142
+ var hours = Math.floor(seconds / 3600);
35143
+ var minutes = Math.floor((seconds % 3600) / 60);
35144
+ return ''.concat(hours, 'h ').concat(minutes.toString().padStart(2, '0'), 'm');
34987
35145
  };
34988
35146
  var numberOfNights = function (segment) {
34989
- return dateFns.differenceInCalendarDays(new Date(segment.endDate), new Date(segment.startDate));
35147
+ return dateFns.differenceInCalendarDays(new Date(segment.to), new Date(segment.from));
35148
+ };
35149
+ var getSegmentIcon = function (segment) {
35150
+ switch (segment.serviceType) {
35151
+ case 3:
35152
+ return React__default['default'].createElement(
35153
+ 'div',
35154
+ { className: 'search__filter__itinerary__segment-badge search__filter__itinerary__segment-badge--secondary' },
35155
+ React__default['default'].createElement(Icon$1, { name: 'ui-bed', width: 15, height: 15 })
35156
+ );
35157
+ case 4:
35158
+ return React__default['default'].createElement(
35159
+ 'div',
35160
+ { className: 'search__filter__itinerary__segment-badge search__filter__itinerary__segment-badge--secondary' },
35161
+ React__default['default'].createElement(Icon$1, { name: 'ui-ticket', width: 15, height: 15 })
35162
+ );
35163
+ case 11:
35164
+ return React__default['default'].createElement(
35165
+ 'div',
35166
+ { className: 'search__filter__itinerary__segment-badge search__filter__itinerary__segment-badge--secondary' },
35167
+ React__default['default'].createElement(Icon$1, { name: 'ui-ship', width: 15, height: 15 })
35168
+ );
35169
+ case 13:
35170
+ case 17:
35171
+ case 22:
35172
+ return React__default['default'].createElement(
35173
+ 'div',
35174
+ { className: 'search__filter__itinerary__transport-badge' },
35175
+ React__default['default'].createElement(Icon$1, { name: 'ui-car', width: 15, height: 15 })
35176
+ );
35177
+ default:
35178
+ return React__default['default'].createElement(
35179
+ 'div',
35180
+ { className: 'search__filter__itinerary__segment-badge' },
35181
+ React__default['default'].createElement(Icon$1, { name: 'ui-location', width: 15, height: 15 })
35182
+ );
35183
+ }
35184
+ };
35185
+ var canEdit = function (segment) {
35186
+ if (segment.serviceType === ACCOMMODATION_SERVICE_TYPE) {
35187
+ return true;
35188
+ }
35189
+ return false;
35190
+ };
35191
+ var getSegmentTitle = function (segment) {
35192
+ var _a;
35193
+ return (_a = segment.productName) !== null && _a !== void 0 ? _a : segment.accommodationName;
34990
35194
  };
34991
35195
  var Itinerary = function (_a) {
34992
- var _b;
35196
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
34993
35197
  var isOpen = _a.isOpen,
34994
- handleSetIsOpen = _a.handleSetIsOpen,
34995
- isLoading = _a.isLoading;
35198
+ handleSetIsOpen = _a.handleSetIsOpen;
35199
+ _a.isLoading;
35200
+ var onEditAccommodation = _a.onEditAccommodation;
34996
35201
  var context = React.useContext(SearchResultsConfigurationContext);
34997
35202
  var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
34998
- var entry = reactRedux.useSelector(function (state) {
35203
+ var editablePackagingEntry = reactRedux.useSelector(function (state) {
34999
35204
  return state.searchResults;
35000
- }).entry;
35001
- if (isLoading || !entry) {
35205
+ }).editablePackagingEntry;
35206
+ var packagingEntry =
35207
+ editablePackagingEntry !== null && editablePackagingEntry !== void 0
35208
+ ? editablePackagingEntry
35209
+ : context === null || context === void 0
35210
+ ? void 0
35211
+ : context.packagingEntry;
35212
+ var sortedLines = React.useMemo(
35213
+ function () {
35214
+ var _a;
35215
+ return __spreadArray(
35216
+ [],
35217
+ (_a = packagingEntry === null || packagingEntry === void 0 ? void 0 : packagingEntry.lines) !== null && _a !== void 0 ? _a : [],
35218
+ true
35219
+ ).sort(function (a, b) {
35220
+ var _a, _b;
35221
+ var orderA = (_a = a.order) !== null && _a !== void 0 ? _a : Infinity;
35222
+ var orderB = (_b = b.order) !== null && _b !== void 0 ? _b : Infinity;
35223
+ // First sort by order
35224
+ if (orderA !== orderB) {
35225
+ return orderA - orderB;
35226
+ }
35227
+ // Fallback to date
35228
+ return new Date(a.from).getTime() - new Date(b.from).getTime();
35229
+ });
35230
+ },
35231
+ [packagingEntry]
35232
+ );
35233
+ if (!packagingEntry) {
35002
35234
  return null;
35003
35235
  }
35004
- var firstEntryLine = lodash.first(entry === null || entry === void 0 ? void 0 : entry.items);
35005
- var lastEntryLine = lodash.last(entry === null || entry === void 0 ? void 0 : entry.items);
35006
- var country = firstEntryLine === null || firstEntryLine === void 0 ? void 0 : firstEntryLine.countryName;
35007
- var location = firstEntryLine === null || firstEntryLine === void 0 ? void 0 : firstEntryLine.locationName;
35008
- var outboundFlight =
35009
- entry === null || entry === void 0
35010
- ? void 0
35011
- : entry.items.find(function (item) {
35012
- return item.productType === 7 && !item.isReturnFlight;
35013
- });
35014
- var returnFlight =
35015
- entry === null || entry === void 0
35236
+ var firstEntryLine = lodash.first(sortedLines);
35237
+ var lastEntryLine = lodash.last(sortedLines);
35238
+ var accommodationLine =
35239
+ (_c = sortedLines.find(function (line) {
35240
+ return line.serviceType === ACCOMMODATION_SERVICE_TYPE;
35241
+ })) !== null && _c !== void 0
35242
+ ? _c
35243
+ : firstEntryLine;
35244
+ var country =
35245
+ (_e =
35246
+ (_d = accommodationLine === null || accommodationLine === void 0 ? void 0 : accommodationLine.country) === null || _d === void 0 ? void 0 : _d.name) !==
35247
+ null && _e !== void 0
35248
+ ? _e
35249
+ : (_f = firstEntryLine === null || firstEntryLine === void 0 ? void 0 : firstEntryLine.country) === null || _f === void 0
35016
35250
  ? void 0
35017
- : entry.items.find(function (item) {
35018
- return item.productType === 7 && item.isReturnFlight;
35019
- });
35020
- var otherSegments =
35021
- entry === null || entry === void 0
35251
+ : _f.name;
35252
+ var location =
35253
+ (_m =
35254
+ (_k =
35255
+ (_h =
35256
+ (_g = accommodationLine === null || accommodationLine === void 0 ? void 0 : accommodationLine.location) === null || _g === void 0
35257
+ ? void 0
35258
+ : _g.name) !== null && _h !== void 0
35259
+ ? _h
35260
+ : (_j = accommodationLine === null || accommodationLine === void 0 ? void 0 : accommodationLine.oord) === null || _j === void 0
35261
+ ? void 0
35262
+ : _j.name) !== null && _k !== void 0
35263
+ ? _k
35264
+ : (_l = accommodationLine === null || accommodationLine === void 0 ? void 0 : accommodationLine.region) === null || _l === void 0
35265
+ ? void 0
35266
+ : _l.name) !== null && _m !== void 0
35267
+ ? _m
35268
+ : (_o = firstEntryLine === null || firstEntryLine === void 0 ? void 0 : firstEntryLine.location) === null || _o === void 0
35022
35269
  ? void 0
35023
- : entry.items.filter(function (item) {
35024
- return item.productType !== 7;
35025
- });
35270
+ : _o.name;
35271
+ var flightSegments = sortedLines.filter(function (item) {
35272
+ return item.serviceType === FLIGHT_SERVICE_TYPE;
35273
+ });
35274
+ var outboundFlight = lodash.first(flightSegments);
35275
+ var returnFlight = flightSegments.length > 1 ? lodash.last(flightSegments) : undefined;
35276
+ var otherSegments = sortedLines.filter(function (item) {
35277
+ return item.serviceType !== FLIGHT_SERVICE_TYPE;
35278
+ });
35279
+ var grouped = lodash.groupBy(otherSegments, function (segment) {
35280
+ return ''.concat(segment.productCode, '-').concat(segment.from, '-').concat(segment.to);
35281
+ });
35282
+ var groupedOtherSegments = Object.entries(grouped).map(function (_a) {
35283
+ var key = _a[0],
35284
+ segments = _a[1];
35285
+ return {
35286
+ key: key,
35287
+ segments: segments
35288
+ };
35289
+ });
35290
+ console.log('otherSegments', otherSegments);
35291
+ console.log('groupedOtherSegments', groupedOtherSegments);
35292
+ var numberOfPax = ((_p = packagingEntry.pax) === null || _p === void 0 ? void 0 : _p.length) || 1;
35293
+ var totalPrice = packagingEntry.price || 0;
35294
+ var pricePerPerson = totalPrice / numberOfPax;
35026
35295
  return React__default['default'].createElement(
35027
- React__default['default'].Fragment,
35028
- null,
35296
+ 'div',
35297
+ { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
35298
+ React__default['default'].createElement('div', { className: 'search__filters--background', onClick: handleSetIsOpen }),
35299
+ React__default['default'].createElement(
35300
+ 'button',
35301
+ { className: 'search__filters--close', onClick: handleSetIsOpen },
35302
+ React__default['default'].createElement(Icon$1, { name: 'ui-close', height: 24 })
35303
+ ),
35029
35304
  React__default['default'].createElement(
35030
35305
  'div',
35031
- { className: 'search__filters--modal '.concat(isOpen ? 'is-open' : '') },
35032
- React__default['default'].createElement('div', {
35033
- className: 'search__filters--background',
35034
- onClick: function () {
35035
- return handleSetIsOpen();
35036
- }
35037
- }),
35306
+ { className: 'search__filters' },
35038
35307
  React__default['default'].createElement(
35039
- 'button',
35040
- {
35041
- className: 'search__filters--close',
35042
- onClick: function () {
35043
- return handleSetIsOpen();
35044
- }
35045
- },
35046
- React__default['default'].createElement(Icon$1, { name: 'ui-close', height: 24 })
35308
+ 'div',
35309
+ { className: 'search__filter-row search__filter__header' },
35310
+ React__default['default'].createElement(
35311
+ 'div',
35312
+ { className: 'search__filter-row-flex-title' },
35313
+ React__default['default'].createElement('p', { className: 'search__filter-small-title' }, translations.SRP.ITINERARY_TITLE)
35314
+ )
35047
35315
  ),
35048
35316
  React__default['default'].createElement(
35049
- 'div',
35050
- { className: 'search__filters' },
35317
+ React__default['default'].Fragment,
35318
+ null,
35319
+ React__default['default'].createElement(
35320
+ 'div',
35321
+ { className: 'search__filter-group' },
35322
+ (context === null || context === void 0 ? void 0 : context.destinationImage) &&
35323
+ React__default['default'].createElement(
35324
+ 'div',
35325
+ { className: 'search__filter__image__wrapper' },
35326
+ React__default['default'].createElement('img', {
35327
+ src: context.destinationImage.url,
35328
+ alt: context.destinationImage.alt,
35329
+ className: 'search__filter__image'
35330
+ }),
35331
+ (packagingEntry === null || packagingEntry === void 0 ? void 0 : packagingEntry.dossierNumber) &&
35332
+ React__default['default'].createElement(
35333
+ 'span',
35334
+ { className: 'search__filter__image__text' },
35335
+ translations.SRP.DOSSIER_NUMBER,
35336
+ ': ',
35337
+ packagingEntry.dossierNumber
35338
+ ),
35339
+ React__default['default'].createElement(
35340
+ 'h4',
35341
+ { className: 'search__filter__image__title' },
35342
+ (location || '') + (location && country ? ' - ' : '') + (country || '')
35343
+ )
35344
+ )
35345
+ ),
35051
35346
  React__default['default'].createElement(
35052
35347
  'div',
35053
- { className: 'search__filter-row search__filter__header' },
35348
+ { className: 'search__filter__prices' },
35054
35349
  React__default['default'].createElement(
35055
35350
  'div',
35056
- { className: 'search__filter-row-flex-title' },
35057
- React__default['default'].createElement('p', { className: 'search__filter-small-title' }, translations.SRP.ITINERARY_TITLE)
35058
- )
35059
- ),
35060
- isLoading
35061
- ? React__default['default'].createElement(Spinner, null)
35062
- : React__default['default'].createElement(
35063
- React__default['default'].Fragment,
35351
+ { className: 'search__filter__prices__wrapper' },
35352
+ React__default['default'].createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$2(pricePerPerson, 'EUR')),
35353
+ React__default['default'].createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
35354
+ React__default['default'].createElement(
35355
+ 'p',
35064
35356
  null,
35357
+ React__default['default'].createElement('strong', null, '(', formatPrice$2(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
35358
+ )
35359
+ ),
35360
+ React__default['default'].createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
35361
+ ),
35362
+ React__default['default'].createElement(
35363
+ 'div',
35364
+ { className: 'search__filter__itinerary' },
35365
+ React__default['default'].createElement('p', null, translations.SRP.DAY_BY_DAY),
35366
+ firstEntryLine &&
35367
+ React__default['default'].createElement(
35368
+ 'div',
35369
+ { className: 'search__filter__itinerary__country' },
35065
35370
  React__default['default'].createElement(
35066
35371
  'div',
35067
- { className: 'search__filter-group' },
35068
- (context === null || context === void 0 ? void 0 : context.destinationImage) &&
35069
- React__default['default'].createElement(
35070
- 'div',
35071
- { className: 'search__filter__image__wrapper' },
35072
- React__default['default'].createElement('img', {
35073
- src: context.destinationImage.url,
35074
- alt: context.destinationImage.alt,
35075
- className: 'search__filter__image'
35076
- }),
35077
- (entry === null || entry === void 0 ? void 0 : entry.number) &&
35078
- React__default['default'].createElement(
35079
- 'span',
35080
- { className: 'search__filter__image__text' },
35081
- translations.SRP.DOSSIER_NUMBER,
35082
- ': ',
35083
- entry === null || entry === void 0 ? void 0 : entry.number
35084
- ),
35085
- React__default['default'].createElement(
35086
- 'h4',
35087
- { className: 'search__filter__image__title' },
35088
- (location || '') + (location && country ? ' - ' : '') + (country || '')
35089
- )
35090
- )
35372
+ { className: 'search__filter__itinerary__country-icon' },
35373
+ React__default['default'].createElement(Icon$1, { name: 'ui-flag', width: 17.5, height: 20 })
35091
35374
  ),
35092
35375
  React__default['default'].createElement(
35093
35376
  'div',
35094
- { className: 'search__filter__prices' },
35377
+ { className: 'search__filter__itinerary__country-content' },
35378
+ React__default['default'].createElement(
35379
+ 'p',
35380
+ null,
35381
+ dateFns.format(new Date(firstEntryLine.from), 'EEE. d MMM yyyy'),
35382
+ ' - ',
35383
+ React__default['default'].createElement('strong', null, translations.SRP.START)
35384
+ )
35385
+ )
35386
+ ),
35387
+ outboundFlight &&
35388
+ React__default['default'].createElement(
35389
+ 'div',
35390
+ { className: 'search__filter__itinerary__transport' },
35391
+ React__default['default'].createElement(
35392
+ 'div',
35393
+ { className: 'search__filter__itinerary__transport-timeline' },
35394
+ React__default['default'].createElement('div', { className: 'search__filter__itinerary__transport-timeline-line' })
35395
+ ),
35396
+ React__default['default'].createElement(
35397
+ 'div',
35398
+ { className: 'search__filter__itinerary__transport-item' },
35095
35399
  React__default['default'].createElement(
35096
35400
  'div',
35097
- { className: 'search__filter__prices__wrapper' },
35401
+ { className: 'search__filter__itinerary__transport-date' },
35098
35402
  React__default['default'].createElement(
35099
- 'h3',
35100
- { className: 'search__filter__prices--amount' },
35101
- formatPrice$2(
35102
- ((entry === null || entry === void 0 ? void 0 : entry.sellingPrice) || 0) /
35103
- ((entry === null || entry === void 0 ? void 0 : entry.numberOfPax) || 1),
35104
- (entry === null || entry === void 0 ? void 0 : entry.currencyCode) || 'EUR'
35403
+ 'p',
35404
+ { className: 'search__filter__itinerary__transport-date-date' },
35405
+ React__default['default'].createElement('strong', null, dateFns.format(new Date(outboundFlight.from), 'd'))
35406
+ ),
35407
+ React__default['default'].createElement('p', null, dateFns.format(new Date(outboundFlight.from), 'MMM'))
35408
+ ),
35409
+ React__default['default'].createElement(
35410
+ 'div',
35411
+ { className: 'search__filter__itinerary__transport-badge' },
35412
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane', height: 15 })
35413
+ ),
35414
+ React__default['default'].createElement(
35415
+ 'div',
35416
+ { className: 'search__filter__itinerary__transport-details' },
35417
+ React__default['default'].createElement('h6', null, outboundFlight.productName),
35418
+ React__default['default'].createElement(
35419
+ 'p',
35420
+ { className: 'search__filter__itinerary__transport-details-plane' },
35421
+ React__default['default'].createElement(
35422
+ 'span',
35423
+ null,
35424
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', height: 14 }),
35425
+ ' ',
35426
+ React__default['default'].createElement('strong', null, getDepartureTime(outboundFlight))
35427
+ ),
35428
+ ' ',
35429
+ '-',
35430
+ ' ',
35431
+ React__default['default'].createElement(
35432
+ 'span',
35433
+ null,
35434
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', height: 14 }),
35435
+ ' ',
35436
+ React__default['default'].createElement('strong', null, getArrivalTime(outboundFlight))
35105
35437
  )
35106
35438
  ),
35107
- React__default['default'].createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
35108
35439
  React__default['default'].createElement(
35109
35440
  'p',
35110
- null,
35441
+ { className: 'search__filter__itinerary__transport-details-time' },
35111
35442
  React__default['default'].createElement(
35112
- 'strong',
35443
+ 'span',
35113
35444
  null,
35114
- '(',
35115
- formatPrice$2(
35116
- (entry === null || entry === void 0 ? void 0 : entry.sellingPrice) || 0,
35117
- (entry === null || entry === void 0 ? void 0 : entry.currencyCode) || 'EUR'
35118
- ),
35445
+ React__default['default'].createElement(Icon$1, { name: 'ui-clock', height: 20 }),
35119
35446
  ' ',
35120
- translations.SRP.TOTAL,
35121
- ')'
35447
+ getDuration(outboundFlight)
35122
35448
  )
35123
35449
  )
35124
- ),
35125
- React__default['default'].createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
35126
- ),
35127
- React__default['default'].createElement(
35450
+ )
35451
+ )
35452
+ ),
35453
+ !lodash.isEmpty(groupedOtherSegments) &&
35454
+ groupedOtherSegments.map(function (group) {
35455
+ var _a, _b, _c, _d, _e, _f, _g, _h;
35456
+ var firstSegment = lodash.first(group.segments);
35457
+ if (!firstSegment) return null;
35458
+ return React__default['default'].createElement(
35128
35459
  'div',
35129
- { className: 'search__filter__itinerary' },
35130
- React__default['default'].createElement('p', null, translations.SRP.DAY_BY_DAY),
35460
+ { className: 'search__filter__itinerary__segments' },
35131
35461
  React__default['default'].createElement(
35132
35462
  'div',
35133
- { className: 'search__filter__itinerary__country' },
35463
+ { className: 'search__filter__itinerary__segments__wrapper', key: group.key },
35134
35464
  React__default['default'].createElement(
35135
35465
  'div',
35136
- { className: 'search__filter__itinerary__country-icon' },
35137
- React__default['default'].createElement(Icon$1, { name: 'ui-flag', width: 17.5, height: 20 })
35466
+ { className: 'search__filter__itinerary__segments-timeline' },
35467
+ React__default['default'].createElement('div', { className: 'search__filter__itinerary__segments-timeline-line' })
35138
35468
  ),
35139
35469
  React__default['default'].createElement(
35140
35470
  'div',
35141
- { className: 'search__filter__itinerary__country-content' },
35142
- React__default['default'].createElement(
35143
- 'p',
35144
- null,
35145
- dateFns.format(
35146
- new Date((firstEntryLine === null || firstEntryLine === void 0 ? void 0 : firstEntryLine.startDate) || ''),
35147
- 'EEE. d MMM yyyy'
35148
- ),
35149
- ' - ',
35150
- React__default['default'].createElement('strong', null, translations.SRP.START)
35151
- )
35152
- )
35153
- ),
35154
- outboundFlight &&
35155
- React__default['default'].createElement(
35156
- 'div',
35157
- { className: 'search__filter__itinerary__transport' },
35471
+ { className: 'search__filter__itinerary__segment' },
35158
35472
  React__default['default'].createElement(
35159
35473
  'div',
35160
- { className: 'search__filter__itinerary__transport-timeline' },
35161
- React__default['default'].createElement('div', { className: 'search__filter__itinerary__transport-timeline-line' })
35162
- ),
35163
- React__default['default'].createElement(
35164
- 'div',
35165
- { className: 'search__filter__itinerary__transport-item' },
35474
+ { className: 'search__filter__itinerary__segment-item search__filter__itinerary__segment-item--start' },
35166
35475
  React__default['default'].createElement(
35167
35476
  'div',
35168
35477
  { className: 'search__filter__itinerary__transport-date' },
35169
35478
  React__default['default'].createElement(
35170
35479
  'p',
35171
35480
  { className: 'search__filter__itinerary__transport-date-date' },
35172
- React__default['default'].createElement(
35173
- 'strong',
35174
- null,
35175
- dateFns.format(new Date((outboundFlight === null || outboundFlight === void 0 ? void 0 : outboundFlight.startDate) || ''), 'd')
35176
- )
35481
+ React__default['default'].createElement('strong', null, dateFns.format(new Date(firstSegment.from), 'd'))
35177
35482
  ),
35178
- React__default['default'].createElement(
35179
- 'p',
35180
- null,
35181
- dateFns.format(new Date((outboundFlight === null || outboundFlight === void 0 ? void 0 : outboundFlight.startDate) || ''), 'MMM')
35182
- )
35483
+ React__default['default'].createElement('p', null, dateFns.format(new Date(firstSegment.from), 'MMM'))
35183
35484
  ),
35184
35485
  React__default['default'].createElement(
35185
35486
  'div',
35186
- { className: 'search__filter__itinerary__transport-badge' },
35187
- React__default['default'].createElement(Icon$1, { name: 'ui-plane', height: 15 })
35487
+ { className: 'search__filter__itinerary__segment-badge' },
35488
+ React__default['default'].createElement(Icon$1, { name: 'ui-location', width: 15, height: 15 })
35188
35489
  ),
35189
35490
  React__default['default'].createElement(
35190
35491
  'div',
35191
- { className: 'search__filter__itinerary__transport-details' },
35192
- React__default['default'].createElement('h6', null, outboundFlight.productName),
35492
+ { className: 'search__filter__itinerary__segment-details' },
35193
35493
  React__default['default'].createElement(
35194
- 'p',
35195
- { className: 'search__filter__itinerary__transport-details-plane' },
35196
- React__default['default'].createElement(
35197
- 'span',
35198
- null,
35199
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', height: 14 }),
35200
- ' ',
35201
- React__default['default'].createElement('strong', null, getDepartureTime(outboundFlight))
35202
- ),
35203
- ' ',
35204
- '-',
35205
- ' ',
35206
- React__default['default'].createElement(
35207
- 'span',
35208
- null,
35209
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', height: 14 }),
35210
- ' ',
35211
- React__default['default'].createElement('strong', null, getArrivalTime(outboundFlight))
35212
- )
35494
+ 'h6',
35495
+ null,
35496
+ ((_a = firstSegment.location) === null || _a === void 0 ? void 0 : _a.name) ||
35497
+ ((_b = firstSegment.oord) === null || _b === void 0 ? void 0 : _b.name) ||
35498
+ ((_c = firstSegment.region) === null || _c === void 0 ? void 0 : _c.name),
35499
+ (((_d = firstSegment.location) === null || _d === void 0 ? void 0 : _d.name) ||
35500
+ ((_e = firstSegment.oord) === null || _e === void 0 ? void 0 : _e.name) ||
35501
+ ((_f = firstSegment.region) === null || _f === void 0 ? void 0 : _f.name)) &&
35502
+ ((_g = firstSegment.country) === null || _g === void 0 ? void 0 : _g.name)
35503
+ ? ', '
35504
+ : '',
35505
+ (_h = firstSegment.country) === null || _h === void 0 ? void 0 : _h.name
35213
35506
  ),
35214
35507
  React__default['default'].createElement(
35215
35508
  'p',
35216
- { className: 'search__filter__itinerary__transport-details-time' },
35217
- React__default['default'].createElement(
35218
- 'span',
35219
- null,
35220
- React__default['default'].createElement(Icon$1, { name: 'ui-clock', height: 20 }),
35221
- ' ',
35222
- getDuration(outboundFlight)
35223
- )
35509
+ { className: 'search__filter__itinerary__segment-details-text' },
35510
+ dateFns.format(new Date(firstSegment.from), 'EEE. d MMM yyyy'),
35511
+ '> ',
35512
+ dateFns.format(new Date(firstSegment.to), 'EEE. d MMM yyyy')
35224
35513
  )
35225
35514
  )
35226
35515
  )
35227
35516
  ),
35228
- !lodash.isEmpty(otherSegments) &&
35229
- React__default['default'].createElement(
35230
- 'div',
35231
- { className: 'search__filter__itinerary__segments' },
35232
- otherSegments === null || otherSegments === void 0
35233
- ? void 0
35234
- : otherSegments.map(function (segment, index) {
35235
- return React__default['default'].createElement(
35236
- 'div',
35237
- { className: 'search__filter__itinerary__segments__wrapper', key: 'segment-'.concat(index) },
35238
- React__default['default'].createElement(
35239
- 'div',
35240
- { className: 'search__filter__itinerary__segments-timeline' },
35241
- React__default['default'].createElement('div', { className: 'search__filter__itinerary__segments-timeline-line' })
35242
- ),
35243
- React__default['default'].createElement(
35244
- 'div',
35245
- { className: 'search__filter__itinerary__segment' },
35246
- React__default['default'].createElement(
35247
- 'div',
35248
- { className: 'search__filter__itinerary__segment-item search__filter__itinerary__segment-item--start' },
35249
- React__default['default'].createElement(
35250
- 'div',
35251
- { className: 'search__filter__itinerary__transport-date' },
35252
- React__default['default'].createElement(
35253
- 'p',
35254
- { className: 'search__filter__itinerary__transport-date-date' },
35255
- React__default['default'].createElement(
35256
- 'strong',
35257
- null,
35258
- dateFns.format(new Date((segment === null || segment === void 0 ? void 0 : segment.startDate) || ''), 'd')
35259
- )
35260
- ),
35261
- React__default['default'].createElement(
35262
- 'p',
35263
- null,
35264
- dateFns.format(new Date((segment === null || segment === void 0 ? void 0 : segment.startDate) || ''), 'MMM')
35265
- )
35266
- ),
35267
- React__default['default'].createElement(
35268
- 'div',
35269
- { className: 'search__filter__itinerary__segment-badge' },
35270
- React__default['default'].createElement(Icon$1, { name: 'ui-location', width: 15, height: 15 })
35271
- ),
35272
- React__default['default'].createElement(
35273
- 'div',
35274
- { className: 'search__filter__itinerary__segment-details' },
35275
- React__default['default'].createElement(
35276
- 'h6',
35277
- null,
35278
- segment === null || segment === void 0 ? void 0 : segment.locationName,
35279
- ', ',
35280
- segment === null || segment === void 0 ? void 0 : segment.countryName
35281
- ),
35282
- React__default['default'].createElement(
35283
- 'p',
35284
- { className: 'search__filter__itinerary__segment-details-text' },
35285
- dateFns.format(new Date((segment === null || segment === void 0 ? void 0 : segment.startDate) || ''), 'EEE. d MMM yyyy'),
35286
- '> ',
35287
- dateFns.format(new Date((segment === null || segment === void 0 ? void 0 : segment.endDate) || ''), 'EEE. d MMM yyyy')
35288
- )
35289
- )
35290
- )
35291
- ),
35292
- React__default['default'].createElement(
35293
- 'div',
35294
- { className: 'search__filter__itinerary__segment' },
35295
- React__default['default'].createElement(
35296
- 'div',
35297
- { className: 'search__filter__itinerary__segment-item' },
35298
- segment.productType === 3 &&
35299
- React__default['default'].createElement(
35300
- 'div',
35301
- { className: 'search__filter__itinerary__segment-date search__filter__itinerary__segment-nights' },
35302
- React__default['default'].createElement(
35303
- 'p',
35304
- { className: 'search__filter__itinerary__segment-date-date' },
35305
- React__default['default'].createElement('strong', null, numberOfNights(segment))
35306
- ),
35307
- React__default['default'].createElement(Icon$1, { name: 'ui-moon', width: 16, height: 16 })
35308
- ),
35309
- React__default['default'].createElement(
35310
- 'div',
35311
- { className: 'search__filter__itinerary__segment-badge search__filter__itinerary__segment-badge--secondary' },
35312
- segment.productType === 3 && React__default['default'].createElement(Icon$1, { name: 'ui-bed', width: 15, height: 15 }),
35313
- segment.productType === 4 && React__default['default'].createElement(Icon$1, { name: 'ui-ticket', width: 15, height: 15 }),
35314
- (segment.productType === 17 || segment.productType === 22) &&
35315
- React__default['default'].createElement(Icon$1, { name: 'ui-car', width: 15, height: 15 }),
35316
- segment.productType === 11 && React__default['default'].createElement(Icon$1, { name: 'ui-ship', width: 15, height: 15 })
35317
- ),
35318
- React__default['default'].createElement(
35319
- 'div',
35320
- { className: 'search__filter__itinerary__segment-details' },
35321
- React__default['default'].createElement('h6', null, segment === null || segment === void 0 ? void 0 : segment.productName)
35322
- )
35323
- )
35324
- )
35325
- );
35326
- })
35327
- ),
35328
- returnFlight &&
35329
35517
  React__default['default'].createElement(
35330
35518
  'div',
35331
- { className: 'search__filter__itinerary__transport' },
35519
+ { className: 'search__filter__itinerary__segment' },
35332
35520
  React__default['default'].createElement(
35333
35521
  'div',
35334
- { className: 'search__filter__itinerary__transport-timeline' },
35335
- React__default['default'].createElement('div', { className: 'search__filter__itinerary__transport-timeline-line' })
35336
- ),
35337
- React__default['default'].createElement(
35338
- 'div',
35339
- { className: 'search__filter__itinerary__transport-item' },
35522
+ {
35523
+ className: 'search__filter__itinerary__segment-item '.concat(
35524
+ canEdit(firstSegment) ? 'search__filter__itinerary__segment-item--editable' : ''
35525
+ ),
35526
+ onClick: function () {
35527
+ if (canEdit(firstSegment) && onEditAccommodation) {
35528
+ onEditAccommodation(group.segments);
35529
+ }
35530
+ }
35531
+ },
35340
35532
  React__default['default'].createElement(
35341
35533
  'div',
35342
- { className: 'search__filter__itinerary__transport-date' },
35343
- React__default['default'].createElement(
35344
- 'p',
35345
- { className: 'search__filter__itinerary__transport-date-date' },
35534
+ { className: 'search__filter__itinerary__segment-date search__filter__itinerary__segment-nights' },
35535
+ firstSegment.serviceType === ACCOMMODATION_SERVICE_TYPE &&
35346
35536
  React__default['default'].createElement(
35347
- 'strong',
35537
+ React__default['default'].Fragment,
35348
35538
  null,
35349
- dateFns.format(new Date((returnFlight === null || returnFlight === void 0 ? void 0 : returnFlight.startDate) || ''), 'd')
35539
+ React__default['default'].createElement(
35540
+ 'p',
35541
+ { className: 'search__filter__itinerary__segment-date-date' },
35542
+ React__default['default'].createElement('strong', null, numberOfNights(firstSegment))
35543
+ ),
35544
+ React__default['default'].createElement(Icon$1, { name: 'ui-moon', width: 16, height: 16 })
35350
35545
  )
35351
- ),
35352
- React__default['default'].createElement(
35353
- 'p',
35354
- null,
35355
- dateFns.format(new Date((returnFlight === null || returnFlight === void 0 ? void 0 : returnFlight.startDate) || ''), 'MMM')
35356
- )
35357
35546
  ),
35547
+ getSegmentIcon(firstSegment),
35358
35548
  React__default['default'].createElement(
35359
35549
  'div',
35360
- { className: 'search__filter__itinerary__transport-badge' },
35361
- React__default['default'].createElement(Icon$1, { name: 'ui-plane', height: 15 })
35362
- ),
35363
- React__default['default'].createElement(
35364
- 'div',
35365
- { className: 'search__filter__itinerary__transport-details' },
35366
- React__default['default'].createElement(
35367
- 'h6',
35368
- null,
35369
- returnFlight === null || returnFlight === void 0 ? void 0 : returnFlight.productName
35370
- ),
35371
- React__default['default'].createElement(
35372
- 'p',
35373
- { className: 'search__filter__itinerary__transport-details-plane' },
35374
- React__default['default'].createElement(
35375
- 'span',
35376
- null,
35377
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', height: 14 }),
35378
- ' ',
35379
- React__default['default'].createElement('strong', null, getDepartureTime(returnFlight))
35380
- ),
35381
- ' ',
35382
- '-',
35383
- ' ',
35384
- React__default['default'].createElement(
35385
- 'span',
35386
- null,
35387
- React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', height: 14 }),
35388
- ' ',
35389
- React__default['default'].createElement('strong', null, getArrivalTime(returnFlight))
35390
- )
35391
- ),
35392
- React__default['default'].createElement(
35393
- 'p',
35394
- { className: 'search__filter__itinerary__transport-details-time' },
35395
- React__default['default'].createElement(
35396
- 'span',
35397
- null,
35398
- React__default['default'].createElement(Icon$1, { name: 'ui-clock', height: 20 }),
35399
- ' ',
35400
- getDuration(returnFlight)
35401
- )
35402
- )
35550
+ { className: 'search__filter__itinerary__segment-details' },
35551
+ React__default['default'].createElement('h6', null, getSegmentTitle(firstSegment)),
35552
+ firstSegment.serviceType === ACCOMMODATION_SERVICE_TYPE &&
35553
+ group.segments.map(function (segment, index) {
35554
+ return React__default['default'].createElement(
35555
+ React__default['default'].Fragment,
35556
+ { key: segment.guid },
35557
+ React__default['default'].createElement('strong', null, translations.SHARED.ROOM, '\u00A0', index + 1),
35558
+ segment.productName &&
35559
+ segment.accommodationName &&
35560
+ React__default['default'].createElement(
35561
+ 'div',
35562
+ { className: 'search__filter__itinerary__segment-details__room' },
35563
+ React__default['default'].createElement(Icon$1, { name: 'ui-bed', width: 12, height: 12 }),
35564
+ segment.accommodationName
35565
+ ),
35566
+ segment.regimeName &&
35567
+ React__default['default'].createElement(
35568
+ 'div',
35569
+ { className: 'search__filter__itinerary__segment-details__room' },
35570
+ React__default['default'].createElement(Icon$1, { name: 'ui-utensils', width: 12, height: 12 }),
35571
+ segment.regimeName
35572
+ )
35573
+ );
35574
+ })
35403
35575
  )
35404
35576
  )
35577
+ )
35578
+ )
35579
+ );
35580
+ }),
35581
+ returnFlight &&
35582
+ returnFlight !== outboundFlight &&
35583
+ React__default['default'].createElement(
35584
+ 'div',
35585
+ { className: 'search__filter__itinerary__transport' },
35586
+ React__default['default'].createElement(
35587
+ 'div',
35588
+ { className: 'search__filter__itinerary__transport-timeline' },
35589
+ React__default['default'].createElement('div', { className: 'search__filter__itinerary__transport-timeline-line' })
35590
+ ),
35591
+ React__default['default'].createElement(
35592
+ 'div',
35593
+ { className: 'search__filter__itinerary__transport-item' },
35594
+ React__default['default'].createElement(
35595
+ 'div',
35596
+ { className: 'search__filter__itinerary__transport-date' },
35597
+ React__default['default'].createElement(
35598
+ 'p',
35599
+ { className: 'search__filter__itinerary__transport-date-date' },
35600
+ React__default['default'].createElement('strong', null, dateFns.format(new Date(returnFlight.from), 'd'))
35405
35601
  ),
35602
+ React__default['default'].createElement('p', null, dateFns.format(new Date(returnFlight.from), 'MMM'))
35603
+ ),
35604
+ React__default['default'].createElement(
35605
+ 'div',
35606
+ { className: 'search__filter__itinerary__transport-badge' },
35607
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane', height: 15 })
35608
+ ),
35406
35609
  React__default['default'].createElement(
35407
35610
  'div',
35408
- { className: 'search__filter__itinerary__country' },
35611
+ { className: 'search__filter__itinerary__transport-details' },
35612
+ React__default['default'].createElement('h6', null, returnFlight.productName),
35409
35613
  React__default['default'].createElement(
35410
- 'div',
35411
- { className: 'search__filter__itinerary__country-icon' },
35412
- React__default['default'].createElement(Icon$1, { name: 'ui-flag', width: 17.5, height: 20 })
35614
+ 'p',
35615
+ { className: 'search__filter__itinerary__transport-details-plane' },
35616
+ React__default['default'].createElement(
35617
+ 'span',
35618
+ null,
35619
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-depart', height: 14 }),
35620
+ ' ',
35621
+ React__default['default'].createElement('strong', null, getDepartureTime(returnFlight))
35622
+ ),
35623
+ ' ',
35624
+ '-',
35625
+ ' ',
35626
+ React__default['default'].createElement(
35627
+ 'span',
35628
+ null,
35629
+ React__default['default'].createElement(Icon$1, { name: 'ui-plane-arrive', height: 14 }),
35630
+ ' ',
35631
+ React__default['default'].createElement('strong', null, getArrivalTime(returnFlight))
35632
+ )
35413
35633
  ),
35414
35634
  React__default['default'].createElement(
35415
- 'div',
35416
- { className: 'search__filter__itinerary__country-content' },
35635
+ 'p',
35636
+ { className: 'search__filter__itinerary__transport-details-time' },
35417
35637
  React__default['default'].createElement(
35418
- 'p',
35638
+ 'span',
35419
35639
  null,
35420
- dateFns.format(
35421
- new Date((lastEntryLine === null || lastEntryLine === void 0 ? void 0 : lastEntryLine.startDate) || ''),
35422
- 'EEE. d MMM yyyy'
35423
- ),
35424
- ' - ',
35425
- React__default['default'].createElement('strong', null, translations.SRP.END)
35640
+ React__default['default'].createElement(Icon$1, { name: 'ui-clock', height: 20 }),
35641
+ ' ',
35642
+ getDuration(returnFlight)
35426
35643
  )
35427
35644
  )
35428
35645
  )
35429
35646
  )
35647
+ ),
35648
+ lastEntryLine &&
35649
+ React__default['default'].createElement(
35650
+ 'div',
35651
+ { className: 'search__filter__itinerary__country' },
35652
+ React__default['default'].createElement(
35653
+ 'div',
35654
+ { className: 'search__filter__itinerary__country-icon' },
35655
+ React__default['default'].createElement(Icon$1, { name: 'ui-flag', width: 17.5, height: 20 })
35656
+ ),
35657
+ React__default['default'].createElement(
35658
+ 'div',
35659
+ { className: 'search__filter__itinerary__country-content' },
35660
+ React__default['default'].createElement(
35661
+ 'p',
35662
+ null,
35663
+ dateFns.format(new Date(lastEntryLine.to), 'EEE. d MMM yyyy'),
35664
+ ' - ',
35665
+ React__default['default'].createElement('strong', null, translations.SRP.END)
35666
+ )
35667
+ )
35430
35668
  )
35669
+ )
35431
35670
  )
35432
35671
  )
35433
35672
  );
@@ -38197,19 +38436,27 @@ var formatPrice$1 = function (price, currencyCode) {
38197
38436
  }).format(price);
38198
38437
  };
38199
38438
  var AccommodationFlyIn = function (_a) {
38200
- var _b;
38201
- _a.isLoading;
38202
- var isOpen = _a.isOpen,
38203
- setIsOpen = _a.setIsOpen;
38439
+ var _b, _c;
38440
+ var isLoading = _a.isLoading,
38441
+ handleConfirm = _a.handleConfirm;
38204
38442
  var dispatch = reactRedux.useDispatch();
38205
38443
  var context = React.useContext(SearchResultsConfigurationContext);
38206
- var language = (_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB';
38444
+ if (isLoading) {
38445
+ return React__default['default'].createElement(
38446
+ React__default['default'].Fragment,
38447
+ null,
38448
+ (_b = context === null || context === void 0 ? void 0 : context.customSpinner) !== null && _b !== void 0
38449
+ ? _b
38450
+ : React__default['default'].createElement(Spinner, null)
38451
+ );
38452
+ }
38453
+ var language = (_c = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _c !== void 0 ? _c : 'en-GB';
38207
38454
  var translations = getTranslations(language);
38208
- var _c = reactRedux.useSelector(function (state) {
38455
+ var _d = reactRedux.useSelector(function (state) {
38209
38456
  return state.searchResults;
38210
38457
  }),
38211
- packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
38212
- selectedPackagingAccoResultCode = _c.selectedPackagingAccoResultCode;
38458
+ packagingAccoSearchDetails = _d.packagingAccoSearchDetails,
38459
+ selectedPackagingAccoResultCode = _d.selectedPackagingAccoResultCode;
38213
38460
  var selectedPackagingAccoSearchDetails = React.useMemo(
38214
38461
  function () {
38215
38462
  return packagingAccoSearchDetails === null || packagingAccoSearchDetails === void 0
@@ -38300,11 +38547,6 @@ var AccommodationFlyIn = function (_a) {
38300
38547
  });
38301
38548
  dispatch(setPackagingAccoSearchDetails(updatedPackagingAccoSearchDetails));
38302
38549
  };
38303
- var handleConfirm = function () {
38304
- if (isOpen) {
38305
- setIsOpen(false);
38306
- }
38307
- };
38308
38550
  if (!selectedPackagingAccoSearchDetails) {
38309
38551
  return null;
38310
38552
  }
@@ -38464,7 +38706,13 @@ var AccommodationFlyIn = function (_a) {
38464
38706
  React__default['default'].createElement(
38465
38707
  'div',
38466
38708
  { className: 'flyin__button-wrapper' },
38467
- React__default['default'].createElement('button', { className: 'cta cta--select', onClick: handleConfirm }, translations.PRODUCT.BOOK_NOW)
38709
+ React__default['default'].createElement(
38710
+ 'button',
38711
+ { className: 'cta cta--select', onClick: handleConfirm },
38712
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) == build.PortalQsmType.AccommodationAndFlight
38713
+ ? translations.QSM.CONFIRM
38714
+ : translations.PRODUCT.BOOK_NOW
38715
+ )
38468
38716
  )
38469
38717
  )
38470
38718
  );
@@ -38951,97 +39199,6 @@ var GroupTourFlyIn = function (_a) {
38951
39199
  );
38952
39200
  };
38953
39201
 
38954
- var FlyIn = function (_a) {
38955
- var title = _a.title,
38956
- srpType = _a.srpType,
38957
- isOpen = _a.isOpen,
38958
- setIsOpen = _a.setIsOpen,
38959
- _b = _a.className,
38960
- className = _b === void 0 ? '' : _b,
38961
- onPanelRef = _a.onPanelRef,
38962
- detailsLoading = _a.detailsLoading;
38963
- var dispatch = reactRedux.useDispatch();
38964
- var onCancelSearch = useFlightSearch().onCancelSearch;
38965
- var panelRef = React.useRef(null);
38966
- // expose DOM node if needed
38967
- React.useEffect(
38968
- function () {
38969
- onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
38970
- return function () {
38971
- return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
38972
- };
38973
- },
38974
- [onPanelRef]
38975
- );
38976
- React.useEffect(
38977
- function () {
38978
- // click outside detection
38979
- var handleClickOutside = function (event) {
38980
- if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
38981
- handleClose();
38982
- }
38983
- };
38984
- document.addEventListener('mousedown', handleClickOutside);
38985
- return function () {
38986
- return document.removeEventListener('mousedown', handleClickOutside);
38987
- };
38988
- },
38989
- [isOpen, setIsOpen]
38990
- );
38991
- // body scroll lock
38992
- React.useEffect(
38993
- function () {
38994
- document.body.style.overflow = isOpen ? 'hidden' : '';
38995
- return function () {
38996
- document.body.style.overflow = '';
38997
- };
38998
- },
38999
- [isOpen]
39000
- );
39001
- var handleClose = function () {
39002
- if (isOpen && panelRef.current) {
39003
- if (srpType === build.PortalQsmType.Flight) {
39004
- dispatch(setSelectedFlight(null));
39005
- dispatch(setSelectedFlightDetails(null));
39006
- onCancelSearch();
39007
- }
39008
- setIsOpen(false);
39009
- }
39010
- };
39011
- return React__default['default'].createElement(
39012
- 'div',
39013
- { className: 'flyin '.concat(isOpen ? 'flyin--active' : '', ' ').concat(className) },
39014
- React__default['default'].createElement(
39015
- 'div',
39016
- { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
39017
- React__default['default'].createElement(
39018
- 'div',
39019
- { className: 'flyin__content' },
39020
- React__default['default'].createElement(
39021
- 'div',
39022
- { className: 'flyin__content-title-row' },
39023
- React__default['default'].createElement('h3', { className: 'flyin__content-title' }, title),
39024
- React__default['default'].createElement(
39025
- 'span',
39026
- {
39027
- className: 'flyin__close',
39028
- onClick: function () {
39029
- return handleClose();
39030
- }
39031
- },
39032
- React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
39033
- )
39034
- )
39035
- ),
39036
- srpType === build.PortalQsmType.Flight && React__default['default'].createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
39037
- srpType === build.PortalQsmType.Accommodation &&
39038
- React__default['default'].createElement(AccommodationFlyIn, { isLoading: true, isOpen: isOpen, setIsOpen: setIsOpen }),
39039
- srpType === build.PortalQsmType.GroupTour &&
39040
- React__default['default'].createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
39041
- )
39042
- );
39043
- };
39044
-
39045
39202
  var he$1 = { exports: {} };
39046
39203
 
39047
39204
  /*! https://mths.be/he v1.2.0 by @mathias | MIT license */
@@ -43520,6 +43677,132 @@ var HotelAccommodationResults = function (_a) {
43520
43677
  );
43521
43678
  };
43522
43679
 
43680
+ var FlyIn = function (_a) {
43681
+ var title = _a.title,
43682
+ srpType = _a.srpType,
43683
+ isOpen = _a.isOpen,
43684
+ setIsOpen = _a.setIsOpen,
43685
+ _b = _a.className,
43686
+ className = _b === void 0 ? '' : _b,
43687
+ onPanelRef = _a.onPanelRef,
43688
+ detailsLoading = _a.detailsLoading,
43689
+ accommodationStep = _a.accommodationStep,
43690
+ isPackageEditFlow = _a.isPackageEditFlow,
43691
+ handleConfirm = _a.handleConfirm;
43692
+ var dispatch = reactRedux.useDispatch();
43693
+ var onCancelSearch = useFlightSearch().onCancelSearch;
43694
+ var panelRef = React.useRef(null);
43695
+ // expose DOM node if needed
43696
+ React.useEffect(
43697
+ function () {
43698
+ onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(panelRef.current);
43699
+ return function () {
43700
+ return onPanelRef === null || onPanelRef === void 0 ? void 0 : onPanelRef(null);
43701
+ };
43702
+ },
43703
+ [onPanelRef]
43704
+ );
43705
+ React.useEffect(
43706
+ function () {
43707
+ // click outside detection
43708
+ var handleClickOutside = function (event) {
43709
+ if (isOpen && panelRef.current && !panelRef.current.contains(event.target)) {
43710
+ handleClose();
43711
+ }
43712
+ };
43713
+ document.addEventListener('mousedown', handleClickOutside);
43714
+ return function () {
43715
+ return document.removeEventListener('mousedown', handleClickOutside);
43716
+ };
43717
+ },
43718
+ [isOpen, setIsOpen]
43719
+ );
43720
+ // body scroll lock
43721
+ React.useEffect(
43722
+ function () {
43723
+ document.body.style.overflow = isOpen ? 'hidden' : '';
43724
+ return function () {
43725
+ document.body.style.overflow = '';
43726
+ };
43727
+ },
43728
+ [isOpen]
43729
+ );
43730
+ var handleClose = function () {
43731
+ if (isOpen && panelRef.current) {
43732
+ if (srpType === build.PortalQsmType.Flight) {
43733
+ dispatch(setSelectedFlight(null));
43734
+ dispatch(setSelectedFlightDetails(null));
43735
+ onCancelSearch();
43736
+ } else {
43737
+ dispatch(setSelectedSearchResult(null));
43738
+ dispatch(setSelectedPackagingAccoResult(null));
43739
+ }
43740
+ dispatch(setAccommodationFlyInStep('details'));
43741
+ setIsOpen(false);
43742
+ }
43743
+ };
43744
+ var handleGoBack = function () {
43745
+ dispatch(setAccommodationFlyInStep('results'));
43746
+ };
43747
+ return React__default['default'].createElement(
43748
+ 'div',
43749
+ {
43750
+ className: 'flyin '
43751
+ .concat(isOpen ? 'flyin--active' : '', ' ')
43752
+ .concat(className, ' ')
43753
+ .concat(isPackageEditFlow ? 'flyin--large' : '')
43754
+ },
43755
+ React__default['default'].createElement(
43756
+ 'div',
43757
+ { className: 'flyin__panel '.concat(isOpen ? 'flyin__panel--active' : ''), ref: panelRef },
43758
+ React__default['default'].createElement(
43759
+ 'div',
43760
+ { className: 'flyin__content' },
43761
+ React__default['default'].createElement(
43762
+ 'div',
43763
+ { className: 'flyin__content-title-row' },
43764
+ React__default['default'].createElement('h3', { className: 'flyin__content-title' }, title),
43765
+ React__default['default'].createElement(
43766
+ 'span',
43767
+ {
43768
+ className: 'flyin__close',
43769
+ onClick: function () {
43770
+ return handleClose();
43771
+ }
43772
+ },
43773
+ React__default['default'].createElement(Icon, { name: 'ui-close', width: 30, height: 30, 'aria-hidden': 'true' })
43774
+ )
43775
+ ),
43776
+ isPackageEditFlow &&
43777
+ accommodationStep === 'details' &&
43778
+ React__default['default'].createElement(
43779
+ 'div',
43780
+ { className: 'flyin__content-title-row' },
43781
+ React__default['default'].createElement(
43782
+ 'div',
43783
+ { onClick: handleGoBack, className: 'flyin__content-title__back' },
43784
+ React__default['default'].createElement(Icon, { name: 'ui-chevron', width: 14, height: 14, 'aria-hidden': 'true' }),
43785
+ 'Go Back'
43786
+ )
43787
+ )
43788
+ ),
43789
+ srpType === build.PortalQsmType.Flight && React__default['default'].createElement(FlightsFlyIn, { isOpen: isOpen, setIsOpen: setIsOpen }),
43790
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43791
+ accommodationStep === 'results' &&
43792
+ React__default['default'].createElement(
43793
+ 'div',
43794
+ { className: 'flyin__content' },
43795
+ React__default['default'].createElement(HotelAccommodationResults, { isLoading: detailsLoading })
43796
+ ),
43797
+ (srpType === build.PortalQsmType.Accommodation || srpType === build.PortalQsmType.AccommodationAndFlight) &&
43798
+ accommodationStep === 'details' &&
43799
+ React__default['default'].createElement(AccommodationFlyIn, { isLoading: detailsLoading, handleConfirm: handleConfirm }),
43800
+ srpType === build.PortalQsmType.GroupTour &&
43801
+ React__default['default'].createElement(GroupTourFlyIn, { isLoading: detailsLoading, isOpen: isOpen, setIsOpen: setIsOpen })
43802
+ )
43803
+ );
43804
+ };
43805
+
43523
43806
  var RoundTripResults = function () {
43524
43807
  var activeTab = reactRedux.useSelector(function (state) {
43525
43808
  return state.searchResults;
@@ -46935,42 +47218,140 @@ var applyFiltersToPackageAccoResults = function (results, filters, sortBy) {
46935
47218
  });
46936
47219
  };
46937
47220
 
46938
- var SearchResultsContainer = function () {
47221
+ var getSelectedOptionsPerRoom = function (details) {
47222
+ var _a;
47223
+ var firstResult = details[0];
47224
+ if (!((_a = firstResult === null || firstResult === void 0 ? void 0 : firstResult.rooms) === null || _a === void 0 ? void 0 : _a.length)) return [];
47225
+ return firstResult.rooms.map(function (room, roomIndex) {
47226
+ var _a;
47227
+ var selectedOption =
47228
+ (_a = room.options.find(function (option) {
47229
+ return option.isSelected;
47230
+ })) !== null && _a !== void 0
47231
+ ? _a
47232
+ : room.options[0];
47233
+ return {
47234
+ roomIndex: roomIndex,
47235
+ option: selectedOption !== null && selectedOption !== void 0 ? selectedOption : null
47236
+ };
47237
+ });
47238
+ };
47239
+ var getRoomIndexFromLine = function (line) {
47240
+ var _a, _b;
47241
+ if (!((_a = line.pax) === null || _a === void 0 ? void 0 : _a.length)) return 0;
47242
+ var firstPax = __spreadArray([], line.pax, true).sort(function (a, b) {
47243
+ return a.order - b.order;
47244
+ })[0];
47245
+ return (_b = firstPax === null || firstPax === void 0 ? void 0 : firstPax.room) !== null && _b !== void 0 ? _b : 0;
47246
+ };
47247
+ var getRequestRoomsFromPackagingSegments = function (entry, segments) {
46939
47248
  var _a;
47249
+ var accommodationLines = __spreadArray([], segments !== null && segments !== void 0 ? segments : [], true)
47250
+ .filter(function (line) {
47251
+ var _a;
47252
+ return line.serviceType === ACCOMMODATION_SERVICE_TYPE && ((_a = line.pax) === null || _a === void 0 ? void 0 : _a.length) > 0;
47253
+ })
47254
+ .sort(function (a, b) {
47255
+ return a.order - b.order;
47256
+ });
47257
+ var paxById = new Map(
47258
+ ((_a = entry.pax) !== null && _a !== void 0 ? _a : []).map(function (p) {
47259
+ return [p.id, p];
47260
+ })
47261
+ );
47262
+ if (!accommodationLines.length) {
47263
+ return [];
47264
+ }
47265
+ var roomGroups = [];
47266
+ accommodationLines.forEach(function (line) {
47267
+ var groupedByRoom = new Map();
47268
+ line.pax.forEach(function (linePax) {
47269
+ var _a, _b, _c, _d, _e, _f, _g;
47270
+ var roomIndexWithinLine = Number((_a = linePax.room) !== null && _a !== void 0 ? _a : 0);
47271
+ var paxId = Number(linePax.paxId);
47272
+ var paxSource = paxById.get(paxId);
47273
+ var pax = {
47274
+ id: (_b = paxSource === null || paxSource === void 0 ? void 0 : paxSource.id) !== null && _b !== void 0 ? _b : paxId,
47275
+ guid:
47276
+ (_d = (_c = paxSource === null || paxSource === void 0 ? void 0 : paxSource.id) === null || _c === void 0 ? void 0 : _c.toString()) !== null &&
47277
+ _d !== void 0
47278
+ ? _d
47279
+ : paxId.toString(),
47280
+ firstName: (_e = paxSource === null || paxSource === void 0 ? void 0 : paxSource.firstName) !== null && _e !== void 0 ? _e : '',
47281
+ lastName: (_f = paxSource === null || paxSource === void 0 ? void 0 : paxSource.lastName) !== null && _f !== void 0 ? _f : '',
47282
+ dateOfBirth: (_g = paxSource === null || paxSource === void 0 ? void 0 : paxSource.dateOfBirth) !== null && _g !== void 0 ? _g : undefined,
47283
+ age: (paxSource === null || paxSource === void 0 ? void 0 : paxSource.dateOfBirth) ? undefined : 30,
47284
+ isMainBooker: paxSource === null || paxSource === void 0 ? void 0 : paxSource.isMainBooker,
47285
+ email: ''
47286
+ };
47287
+ if (!groupedByRoom.has(roomIndexWithinLine)) {
47288
+ groupedByRoom.set(roomIndexWithinLine, []);
47289
+ }
47290
+ groupedByRoom.get(roomIndexWithinLine).push(pax);
47291
+ });
47292
+ var sortedGroups = Array.from(groupedByRoom.entries())
47293
+ .sort(function (_a, _b) {
47294
+ var a = _a[0];
47295
+ var b = _b[0];
47296
+ return a - b;
47297
+ })
47298
+ .map(function (_a) {
47299
+ var pax = _a[1];
47300
+ return pax;
47301
+ });
47302
+ roomGroups.push.apply(roomGroups, sortedGroups);
47303
+ });
47304
+ return roomGroups.map(function (pax, index) {
47305
+ return {
47306
+ index: index,
47307
+ pax: pax
47308
+ };
47309
+ });
47310
+ };
47311
+
47312
+ var SearchResultsContainer = function () {
47313
+ var _a, _b;
47314
+ var currentSearch = typeof window !== 'undefined' ? window.location.search : '';
46940
47315
  var dispatch = reactRedux.useDispatch();
46941
47316
  var context = React.useContext(SearchResultsConfigurationContext);
46942
47317
  var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
46943
- var _b = reactRedux.useSelector(function (state) {
47318
+ var _c = reactRedux.useSelector(function (state) {
46944
47319
  return state.searchResults;
46945
47320
  }),
46946
- results = _b.results,
46947
- filteredResults = _b.filteredResults,
46948
- packagingAccoResults = _b.packagingAccoResults,
46949
- filteredPackagingAccoResults = _b.filteredPackagingAccoResults,
46950
- bookingPackageDetails = _b.bookingPackageDetails,
46951
- entry = _b.entry,
46952
- isLoading = _b.isLoading,
46953
- filters = _b.filters,
46954
- selectedSortType = _b.selectedSortType,
46955
- selectedSearchResult = _b.selectedSearchResult,
46956
- selectedPackagingAccoResultCode = _b.selectedPackagingAccoResultCode,
46957
- flyInIsOpen = _b.flyInIsOpen;
47321
+ results = _c.results,
47322
+ filteredResults = _c.filteredResults,
47323
+ packagingAccoResults = _c.packagingAccoResults,
47324
+ filteredPackagingAccoResults = _c.filteredPackagingAccoResults,
47325
+ bookingPackageDetails = _c.bookingPackageDetails,
47326
+ isLoading = _c.isLoading,
47327
+ filters = _c.filters,
47328
+ selectedSortType = _c.selectedSortType,
47329
+ selectedSearchResult = _c.selectedSearchResult,
47330
+ selectedPackagingAccoResultCode = _c.selectedPackagingAccoResultCode,
47331
+ flyInIsOpen = _c.flyInIsOpen,
47332
+ packagingAccoSearchDetails = _c.packagingAccoSearchDetails,
47333
+ editablePackagingEntry = _c.editablePackagingEntry,
47334
+ transactionId = _c.transactionId,
47335
+ accommodationFlyInStep = _c.accommodationFlyInStep;
46958
47336
  var isMobile = useMediaQuery('(max-width: 1200px)');
46959
- var _c = React.useState(false),
46960
- initialFiltersSet = _c[0],
46961
- setInitialFiltersSet = _c[1];
46962
- var _d = React.useState([]),
46963
- initialFilters = _d[0],
46964
- setInitialFilters = _d[1];
46965
- var _e = React.useState(false),
46966
- filtersOpen = _e[0],
46967
- setFiltersOpen = _e[1];
47337
+ var _d = React.useState(false),
47338
+ initialFiltersSet = _d[0],
47339
+ setInitialFiltersSet = _d[1];
47340
+ var _e = React.useState([]),
47341
+ initialFilters = _e[0],
47342
+ setInitialFilters = _e[1];
46968
47343
  var _f = React.useState(false),
46969
- detailsIsLoading = _f[0],
46970
- setDetailsIsLoading = _f[1];
47344
+ filtersOpen = _f[0],
47345
+ setFiltersOpen = _f[1];
46971
47346
  var _g = React.useState(false),
46972
- itineraryOpen = _g[0],
46973
- setItineraryOpen = _g[1];
47347
+ detailsIsLoading = _g[0],
47348
+ setDetailsIsLoading = _g[1];
47349
+ var _h = React.useState(false),
47350
+ itineraryOpen = _h[0],
47351
+ setItineraryOpen = _h[1];
47352
+ var _j = React.useState(null),
47353
+ selectedAccommodationSeed = _j[0],
47354
+ setSelectedAccommodationSeed = _j[1];
46974
47355
  var panelRef = React.useRef(null);
46975
47356
  var sortByTypes = [
46976
47357
  { direction: 'asc', label: 'default' },
@@ -46986,33 +47367,44 @@ var SearchResultsContainer = function () {
46986
47367
  dispatch(setSortType(newSortByType));
46987
47368
  }
46988
47369
  };
46989
- var buildSearchFromEntry = function (entry) {
47370
+ var getRequestRooms = function (rooms) {
47371
+ if (!rooms) {
47372
+ // Fall back to 2 adults
47373
+ var room = { index: 0, pax: [] };
47374
+ lodash.range(0, 2).forEach(function () {
47375
+ room.pax.push({
47376
+ age: 30
47377
+ });
47378
+ });
47379
+ return [room];
47380
+ }
47381
+ var requestRooms =
47382
+ rooms === null || rooms === void 0
47383
+ ? void 0
47384
+ : rooms.map(function (x, i) {
47385
+ var room = { index: i, pax: [] };
47386
+ lodash.range(0, x.adults).forEach(function () {
47387
+ room.pax.push({
47388
+ age: 30
47389
+ });
47390
+ });
47391
+ x.childAges.forEach(function (x) {
47392
+ room.pax.push({
47393
+ age: x
47394
+ });
47395
+ });
47396
+ return room;
47397
+ });
47398
+ return requestRooms;
47399
+ };
47400
+ var buildSearchFromSeed = function (seed) {
46990
47401
  var _a;
46991
- var from = new Date(
46992
- Math.min.apply(
46993
- Math,
46994
- entry.items.map(function (i) {
46995
- return i.startDate.getTime();
46996
- })
46997
- )
46998
- ).toISOString();
46999
- var to = new Date(
47000
- Math.max.apply(
47001
- Math,
47002
- entry.items.map(function (i) {
47003
- return i.endDate.getTime();
47004
- })
47005
- )
47006
- ).toISOString();
47007
- var rooms = entry.rooms;
47008
- var hotelItem = entry.items.find(function (i) {
47009
- return i.productType === 3;
47010
- });
47011
- var country = hotelItem ? hotelItem.countryId : null;
47012
- var region = hotelItem ? hotelItem.regionId : null;
47013
- var oord = hotelItem ? hotelItem.oordId : null;
47014
- var city = hotelItem ? hotelItem.locationId : null;
47015
- var hotel = hotelItem ? hotelItem.productCode : null;
47402
+ var country = seed.country;
47403
+ var region = seed.region;
47404
+ var oord = seed.oord;
47405
+ var city = seed.location;
47406
+ var hotel = seed.hotel;
47407
+ var tagId = seed.tagId;
47016
47408
  if (typeof window !== 'undefined') {
47017
47409
  window.scrollTo(0, 0);
47018
47410
  }
@@ -47034,83 +47426,7 @@ var SearchResultsContainer = function () {
47034
47426
  destinationId = city;
47035
47427
  destinationIsLocation = true;
47036
47428
  }
47037
- var searchRequest = {
47038
- officeId: 1,
47039
- agentId: context === null || context === void 0 ? void 0 : context.agentId,
47040
- payload: {
47041
- catalogueIds: (_a = context.tideConnection.catalogueIds) !== null && _a !== void 0 ? _a : [],
47042
- serviceType:
47043
- context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation ||
47044
- context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight
47045
- ? 3
47046
- : context.searchConfiguration.qsmType === build.PortalQsmType.Flight
47047
- ? 7
47048
- : context.searchConfiguration.qsmType === build.PortalQsmType.RoundTrip
47049
- ? 1
47050
- : 0,
47051
- searchType: 0,
47052
- destination: {
47053
- id: Number(destinationId),
47054
- isCountry: destinationIsCountry,
47055
- isRegion: destinationIsRegion,
47056
- isOord: destinationIsOord,
47057
- isLocation: destinationIsLocation
47058
- },
47059
- rooms: getRequestRoomsFromEntry(rooms),
47060
- fromDate: from,
47061
- toDate: to,
47062
- earliestFromOffset: 0,
47063
- latestToOffset: 0,
47064
- includeFlights: true,
47065
- regimeCodes:
47066
- entry.items.map(function (i) {
47067
- return i.regimeCode;
47068
- }) || [],
47069
- useExactDates: true,
47070
- onlyCachedResults: false,
47071
- includeAllAllotments: true,
47072
- productCodes: hotel ? [hotel] : []
47073
- }
47074
- };
47075
- return searchRequest;
47076
- };
47077
- var buildSearchFromQueryParams = function (params) {
47078
- var _a;
47079
- var from = getDateFromParams(params, 'fromDate');
47080
- var to = getDateFromParams(params, 'toDate');
47081
- var rooms = getRoomsFromParams(params, 'rooms');
47082
- var country = getNumberFromParams(params, 'country');
47083
- var region = getNumberFromParams(params, 'region');
47084
- var oord = getNumberFromParams(params, 'oord');
47085
- var city = getNumberFromParams(params, 'location');
47086
- var hotel = getNumberFromParams(params, 'hotel');
47087
- var tagId = getNumberFromParams(params, 'tagId');
47088
- if (!from || !to) {
47089
- console.error('Missing fromDate or toDate in query params, using default values');
47090
- return null;
47091
- }
47092
- if (typeof window !== 'undefined') {
47093
- window.scrollTo(0, 0);
47094
- }
47095
- var destinationId = null;
47096
- var destinationIsCountry = false;
47097
- var destinationIsRegion = false;
47098
- var destinationIsOord = false;
47099
- var destinationIsLocation = false;
47100
- if (country) {
47101
- destinationId = country;
47102
- destinationIsCountry = true;
47103
- } else if (region) {
47104
- destinationId = region;
47105
- destinationIsRegion = true;
47106
- } else if (oord) {
47107
- destinationId = oord;
47108
- destinationIsOord = true;
47109
- } else if (city) {
47110
- destinationId = city;
47111
- destinationIsLocation = true;
47112
- }
47113
- var searchRequest = {
47429
+ return {
47114
47430
  officeId: 1,
47115
47431
  agentId: context === null || context === void 0 ? void 0 : context.agentId,
47116
47432
  payload: {
@@ -47118,11 +47434,11 @@ var SearchResultsContainer = function () {
47118
47434
  serviceType:
47119
47435
  context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation ||
47120
47436
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight
47121
- ? 3
47437
+ ? ACCOMMODATION_SERVICE_TYPE
47122
47438
  : context.searchConfiguration.qsmType === build.PortalQsmType.Flight
47123
- ? 7
47439
+ ? FLIGHT_SERVICE_TYPE
47124
47440
  : context.searchConfiguration.qsmType === build.PortalQsmType.RoundTrip
47125
- ? 1
47441
+ ? GROUP_TOUR_SERVICE_TYPE
47126
47442
  : undefined,
47127
47443
  searchType: context.searchConfiguration.qsmType === build.PortalQsmType.GroupTour ? 1 : 0,
47128
47444
  destination: {
@@ -47132,19 +47448,12 @@ var SearchResultsContainer = function () {
47132
47448
  isOord: destinationIsOord,
47133
47449
  isLocation: destinationIsLocation
47134
47450
  },
47135
- rooms: getRequestRooms(rooms),
47136
- fromDate: from,
47137
- toDate: to,
47451
+ rooms: seed.rooms,
47452
+ fromDate: seed.fromDate,
47453
+ toDate: seed.toDate,
47138
47454
  earliestFromOffset: 0,
47139
47455
  latestToOffset: 0,
47140
- includeFlights: context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight ? true : false,
47141
- // regimeCodes:
47142
- // filters
47143
- // .find((f) => f.property === 'regime')
47144
- // ?.options?.filter((o) => o.isChecked)
47145
- // .flatMap((o) => o.value.toString()) || [],
47146
- // minPrice: filters.find((f) => f.property === 'price')?.selectedMin,
47147
- // maxPrice: filters.find((f) => f.property === 'price')?.selectedMax,
47456
+ includeFlights: context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight,
47148
47457
  useExactDates: (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour ? false : true,
47149
47458
  onlyCachedResults: false,
47150
47459
  includeAllAllotments: true,
@@ -47152,82 +47461,16 @@ var SearchResultsContainer = function () {
47152
47461
  productTagIds: tagId ? [tagId] : []
47153
47462
  }
47154
47463
  };
47155
- console.log('Built search request from query params', searchRequest);
47156
- return searchRequest;
47157
47464
  };
47158
- var getRequestRoomsFromEntry = function (rooms) {
47159
- if (!rooms) {
47160
- // Fall back to 2 adults
47161
- var room = { index: 0, pax: [] };
47162
- lodash.range(0, 2).forEach(function () {
47163
- room.pax.push({
47164
- age: 30
47165
- });
47166
- });
47167
- return [room];
47168
- }
47169
- var requestRooms =
47170
- rooms === null || rooms === void 0
47171
- ? void 0
47172
- : rooms.map(function (x, i) {
47173
- var room = { index: i, pax: [] };
47174
- x.travellers.forEach(function (p) {
47175
- room.pax.push({
47176
- age: p.age,
47177
- dateOfBirth: p.dateOfBirth
47178
- });
47179
- });
47180
- return room;
47181
- });
47182
- return requestRooms;
47183
- };
47184
- var getRequestRooms = function (rooms) {
47185
- if (!rooms) {
47186
- // Fall back to 2 adults
47187
- var room = { index: 0, pax: [] };
47188
- lodash.range(0, 2).forEach(function () {
47189
- room.pax.push({
47190
- age: 30
47191
- });
47192
- });
47193
- return [room];
47194
- }
47195
- var requestRooms =
47196
- rooms === null || rooms === void 0
47197
- ? void 0
47198
- : rooms.map(function (x, i) {
47199
- var room = { index: i, pax: [] };
47200
- lodash.range(0, x.adults).forEach(function () {
47201
- room.pax.push({
47202
- age: 30
47203
- });
47204
- });
47205
- x.childAges.forEach(function (x) {
47206
- room.pax.push({
47207
- age: x
47208
- });
47209
- });
47210
- return room;
47211
- });
47212
- return requestRooms;
47213
- };
47214
- var buildPackagingAccommodationRequestFromQueryParams = function (params) {
47215
- var _a, _b;
47216
- var from = getDateFromParams(params, 'fromDate');
47217
- var to = getDateFromParams(params, 'toDate');
47218
- var rooms = getRoomsFromParams(params, 'rooms');
47219
- var country = getNumberFromParams(params, 'country');
47220
- var region = getNumberFromParams(params, 'region');
47221
- var oord = getNumberFromParams(params, 'oord');
47222
- var city = getNumberFromParams(params, 'location');
47223
- var hotel = getNumberFromParams(params, 'hotel');
47224
- var tagId = getNumberFromParams(params, 'tagId');
47225
- var agentId = getNumberFromParams(params, 'agentId');
47226
- var destinationAirport = getStringFromParams(params, 'destinationAirport');
47227
- if (!from || !to) {
47228
- console.error('Missing fromDate or toDate in query params, using default values');
47229
- return null;
47230
- }
47465
+ var buildPackagingAccommodationRequestFromSeed = function (seed, currentTransactionId) {
47466
+ var _a, _b, _c, _d;
47467
+ var country = seed.country;
47468
+ var region = seed.region;
47469
+ var oord = seed.oord;
47470
+ var city = seed.location;
47471
+ (_a = seed.hotelCode) !== null && _a !== void 0 ? _a : seed.hotel ? seed.hotel.toString() : '';
47472
+ var tagId = seed.tagId;
47473
+ var destinationAirport = seed.destinationAirport;
47231
47474
  if (typeof window !== 'undefined') {
47232
47475
  window.scrollTo(0, 0);
47233
47476
  }
@@ -47238,31 +47481,32 @@ var SearchResultsContainer = function () {
47238
47481
  var destinationIsLocation = false;
47239
47482
  var destinationCode = null;
47240
47483
  var destinationIsAirport = false;
47241
- if (country) {
47242
- destinationId = country;
47243
- destinationIsCountry = true;
47244
- } else if (region) {
47245
- destinationId = region;
47246
- destinationIsRegion = true;
47484
+ if (city) {
47485
+ destinationId = city;
47486
+ destinationIsLocation = true;
47247
47487
  } else if (oord) {
47248
47488
  destinationId = oord;
47249
47489
  destinationIsOord = true;
47250
- } else if (city) {
47251
- destinationId = city;
47252
- destinationIsLocation = true;
47490
+ } else if (region) {
47491
+ destinationId = region;
47492
+ destinationIsRegion = true;
47493
+ } else if (country) {
47494
+ destinationId = country;
47495
+ destinationIsCountry = true;
47253
47496
  } else if (destinationAirport) {
47254
47497
  destinationCode = destinationAirport;
47255
47498
  destinationIsAirport = true;
47256
47499
  }
47257
- var searchRequest = {
47500
+ return {
47501
+ transactionId: currentTransactionId,
47258
47502
  officeId: 1,
47259
- agentId: agentId !== null && agentId !== void 0 ? agentId : null,
47260
- catalogueId: (_a = context.searchConfiguration.defaultCatalogueId) !== null && _a !== void 0 ? _a : 0,
47503
+ agentId: (_b = context === null || context === void 0 ? void 0 : context.agentId) !== null && _b !== void 0 ? _b : null,
47504
+ catalogueId: (_c = context.searchConfiguration.defaultCatalogueId) !== null && _c !== void 0 ? _c : 0,
47261
47505
  searchConfigurationId: context.searchConfiguration.id,
47262
- language: (_b = context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB',
47263
- servicesType: 3, // accommodation
47264
- fromDate: from,
47265
- toDate: to,
47506
+ language: (_d = context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB',
47507
+ serviceType: ACCOMMODATION_SERVICE_TYPE,
47508
+ fromDate: seed.fromDate,
47509
+ toDate: seed.toDate,
47266
47510
  destination: {
47267
47511
  id: Number(destinationId),
47268
47512
  isCountry: destinationIsCountry,
@@ -47272,43 +47516,135 @@ var SearchResultsContainer = function () {
47272
47516
  isAirport: destinationIsAirport,
47273
47517
  code: destinationCode
47274
47518
  },
47275
- productCode: hotel ? hotel.toString() : '',
47276
- rooms: getPackagingRequestRooms(rooms),
47519
+ productCode: '',
47520
+ rooms: getPackagingRequestRoomsFromBookingRooms(seed.rooms),
47277
47521
  tagIds: tagId ? [tagId] : []
47278
47522
  };
47279
- console.log('Search request for packaging accommodation from query params', searchRequest);
47280
- return searchRequest;
47281
47523
  };
47282
- var getPackagingRequestRooms = function (rooms) {
47283
- if (!rooms) {
47284
- // Fall back to 2 adults
47285
- var room = { index: 0, travellers: [] };
47286
- lodash.range(0, 2).forEach(function () {
47287
- room.travellers.push({
47288
- age: 30
47289
- });
47290
- });
47291
- return [room];
47524
+ var buildSearchSeedFromQueryParams = function (params) {
47525
+ var from = getDateFromParams(params, 'fromDate');
47526
+ var to = getDateFromParams(params, 'toDate');
47527
+ var rooms = getRoomsFromParams(params, 'rooms');
47528
+ var country = getNumberFromParams(params, 'country');
47529
+ var region = getNumberFromParams(params, 'region');
47530
+ var oord = getNumberFromParams(params, 'oord');
47531
+ var city = getNumberFromParams(params, 'location');
47532
+ var hotel = getNumberFromParams(params, 'hotel');
47533
+ var tagId = getNumberFromParams(params, 'tagId');
47534
+ var destinationAirport = getStringFromParams(params, 'destinationAirport');
47535
+ var departureAirport = getStringFromParams(params, 'departureAirport');
47536
+ if (!from || !to) {
47537
+ return null;
47292
47538
  }
47293
- var requestRooms =
47294
- rooms === null || rooms === void 0
47539
+ return {
47540
+ fromDate: from,
47541
+ toDate: to,
47542
+ country: country,
47543
+ region: region,
47544
+ oord: oord,
47545
+ location: city,
47546
+ hotel: hotel,
47547
+ hotelCode: hotel ? hotel.toString() : null,
47548
+ tagId: tagId,
47549
+ destinationAirport: destinationAirport,
47550
+ departureAirport: departureAirport,
47551
+ rooms: getRequestRooms(rooms)
47552
+ };
47553
+ };
47554
+ var handleConfirmHotelSwap = function () {
47555
+ var updatedEntry = swapHotelInPackagingEntry();
47556
+ console.log('Updated entry after hotel swap', updatedEntry);
47557
+ if (!updatedEntry) return;
47558
+ dispatch(setEditablePackagingEntry(updatedEntry));
47559
+ handleFlyInToggle(false);
47560
+ };
47561
+ var swapHotelInPackagingEntry = function () {
47562
+ var sourceEntry =
47563
+ editablePackagingEntry !== null && editablePackagingEntry !== void 0
47564
+ ? editablePackagingEntry
47565
+ : context === null || context === void 0
47295
47566
  ? void 0
47296
- : rooms.map(function (x, i) {
47297
- var room = { index: i, travellers: [] };
47298
- lodash.range(0, x.adults).forEach(function () {
47299
- room.travellers.push({
47300
- age: 30
47301
- });
47302
- });
47303
- x.childAges.forEach(function (x) {
47304
- room.travellers.push({
47305
- age: x
47306
- });
47307
- });
47308
- return room;
47309
- });
47310
- return requestRooms;
47567
+ : context.packagingEntry;
47568
+ var details = packagingAccoSearchDetails;
47569
+ if (!sourceEntry || !(details === null || details === void 0 ? void 0 : details.length)) return null;
47570
+ var selectedOptionsPerRoom = getSelectedOptionsPerRoom(details);
47571
+ if (!selectedOptionsPerRoom.length) return null;
47572
+ var selectedHotel = details[0];
47573
+ var updatedLines = sourceEntry.lines.map(function (line) {
47574
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
47575
+ if (line.serviceType !== ACCOMMODATION_SERVICE_TYPE) {
47576
+ return line;
47577
+ }
47578
+ // TODO: fix roomIndex
47579
+ var roomIndex = getRoomIndexFromLine(line);
47580
+ console.log('Processing line', line, 'with room index', roomIndex);
47581
+ var selectedRoom = selectedOptionsPerRoom.find(function (x) {
47582
+ return x.roomIndex === roomIndex;
47583
+ });
47584
+ var selectedOption = selectedRoom === null || selectedRoom === void 0 ? void 0 : selectedRoom.option;
47585
+ if (!selectedOption) {
47586
+ return line;
47587
+ }
47588
+ return __assign(__assign({}, line), {
47589
+ guid: selectedOption.guid,
47590
+ productName: selectedHotel.name,
47591
+ productCode: selectedHotel.code,
47592
+ accommodationName: selectedOption.accommodationName,
47593
+ accommodationCode: selectedOption.accommodationCode,
47594
+ regimeName: selectedOption.regimeName,
47595
+ regimeCode: selectedOption.regimeCode,
47596
+ country: line.country
47597
+ ? __assign(__assign({}, line.country), {
47598
+ id: (_a = selectedHotel.countryId) !== null && _a !== void 0 ? _a : line.country.id,
47599
+ name: (_b = selectedHotel.countryName) !== null && _b !== void 0 ? _b : line.country.name
47600
+ })
47601
+ : selectedHotel.countryId
47602
+ ? { id: selectedHotel.countryId, name: selectedHotel.countryName, localizations: [] }
47603
+ : line.country,
47604
+ region: line.region
47605
+ ? __assign(__assign({}, line.region), {
47606
+ id: (_c = selectedHotel.regionId) !== null && _c !== void 0 ? _c : line.region.id,
47607
+ name: (_d = selectedHotel.regionName) !== null && _d !== void 0 ? _d : line.region.name
47608
+ })
47609
+ : selectedHotel.regionId
47610
+ ? { id: selectedHotel.regionId, name: selectedHotel.regionName, localizations: [] }
47611
+ : line.region,
47612
+ oord: line.oord
47613
+ ? __assign(__assign({}, line.oord), {
47614
+ id: (_e = selectedHotel.oordId) !== null && _e !== void 0 ? _e : line.oord.id,
47615
+ name: (_f = selectedHotel.oordName) !== null && _f !== void 0 ? _f : line.oord.name
47616
+ })
47617
+ : selectedHotel.oordId
47618
+ ? { id: selectedHotel.oordId, name: selectedHotel.oordName, localizations: [] }
47619
+ : line.oord,
47620
+ location: line.location
47621
+ ? __assign(__assign({}, line.location), {
47622
+ id: (_g = selectedHotel.locationId) !== null && _g !== void 0 ? _g : line.location.id,
47623
+ name: (_h = selectedHotel.locationName) !== null && _h !== void 0 ? _h : line.location.name
47624
+ })
47625
+ : selectedHotel.locationId
47626
+ ? { id: selectedHotel.locationId, name: selectedHotel.locationName, localizations: [] }
47627
+ : line.location,
47628
+ latitude: (_j = selectedHotel.latitude) !== null && _j !== void 0 ? _j : line.latitude,
47629
+ longitude: (_k = selectedHotel.longitude) !== null && _k !== void 0 ? _k : line.longitude,
47630
+ from: (_l = selectedHotel.fromDate) !== null && _l !== void 0 ? _l : line.from,
47631
+ to: (_m = selectedHotel.toDate) !== null && _m !== void 0 ? _m : line.to,
47632
+ isChanged: true
47633
+ });
47634
+ });
47635
+ return __assign(__assign({}, sourceEntry), { lines: updatedLines });
47311
47636
  };
47637
+ var activeSearchSeed = React__default['default'].useMemo(
47638
+ function () {
47639
+ if (selectedAccommodationSeed) {
47640
+ return selectedAccommodationSeed;
47641
+ }
47642
+ if (typeof window === 'undefined') return null;
47643
+ var params = new URLSearchParams(window.location.search);
47644
+ return buildSearchSeedFromQueryParams(params);
47645
+ },
47646
+ [selectedAccommodationSeed, currentSearch]
47647
+ );
47312
47648
  React.useEffect(
47313
47649
  function () {
47314
47650
  if (typeof document !== 'undefined') {
@@ -47317,189 +47653,232 @@ var SearchResultsContainer = function () {
47317
47653
  },
47318
47654
  [filtersOpen]
47319
47655
  );
47320
- // seperate Search
47321
- React.useEffect(
47322
- function () {
47323
- var runSearch = function () {
47324
- return __awaiter(void 0, void 0, void 0, function () {
47325
- var config, params, entryId, entryLight, searchRequest, rq, packageSearchResults, enrichedFilters, initialFilteredResults, matching, err_1;
47326
- var _a;
47327
- return __generator(this, function (_b) {
47328
- switch (_b.label) {
47329
- case 0:
47330
- dispatch(setIsLoading(true));
47331
- _b.label = 1;
47332
- case 1:
47333
- _b.trys.push([1, 6, , 7]);
47334
- if (!context) {
47335
- return [2 /*return*/];
47336
- }
47337
- config = {
47338
- host: context.tideConnection.host,
47339
- apiKey: context.tideConnection.apiKey
47340
- };
47341
- params = new URLSearchParams(location.search);
47342
- entryId = getStringFromParams(params, 'entryId');
47343
- entryLight = null;
47344
- searchRequest = void 0;
47345
- if (!entryId) return [3 /*break*/, 3];
47346
- return [4 /*yield*/, build.getEntryLight(config, entryId)];
47347
- case 2:
47348
- entryLight = _b.sent();
47349
- // populate itinerary store
47350
- dispatch(setEntry({ entry: entryLight }));
47351
- searchRequest = buildSearchFromEntry(entryLight);
47352
- return [3 /*break*/, 4];
47353
- case 3:
47354
- rq = buildSearchFromQueryParams(params);
47355
- if (!rq) {
47356
- throw new Error('Invalid search parameters');
47357
- }
47358
- searchRequest = rq;
47359
- _b.label = 4;
47360
- case 4:
47361
- return [4 /*yield*/, build.search(config, searchRequest)];
47362
- case 5:
47363
- packageSearchResults = _b.sent();
47364
- console.log('Search results', packageSearchResults);
47365
- enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47366
- if (!initialFiltersSet) {
47367
- dispatch(resetFilters(enrichedFilters));
47368
- setInitialFilters(enrichedFilters);
47369
- setInitialFiltersSet(true);
47370
- }
47371
- dispatch(setResults(packageSearchResults));
47372
- initialFilteredResults = applyFilters(packageSearchResults, filters, null);
47373
- dispatch(setFilteredResults(initialFilteredResults));
47374
- if ((packageSearchResults === null || packageSearchResults === void 0 ? void 0 : packageSearchResults.length) > 0) {
47375
- if (entryId) {
47376
- matching = packageSearchResults.find(function (r) {
47377
- return r.productId === (entry === null || entry === void 0 ? void 0 : entry.id);
47378
- });
47379
- if (matching) {
47380
- dispatch(setSelectedSearchResult(matching));
47381
- }
47382
- } else {
47383
- if (context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight) {
47384
- dispatch(setSelectedSearchResult(packageSearchResults[0]));
47385
- }
47386
- }
47387
- }
47388
- dispatch(setIsLoading(false));
47389
- return [3 /*break*/, 7];
47390
- case 6:
47391
- err_1 = _b.sent();
47392
- console.error('Search failed', err_1);
47393
- dispatch(setIsLoading(false));
47394
- return [3 /*break*/, 7];
47395
- case 7:
47396
- return [2 /*return*/];
47656
+ var runSearch = function () {
47657
+ return __awaiter(void 0, void 0, void 0, function () {
47658
+ var config, seed, searchRequest, packageSearchResults, enrichedFilters, initialFilteredResults, err_1;
47659
+ var _a;
47660
+ return __generator(this, function (_b) {
47661
+ switch (_b.label) {
47662
+ case 0:
47663
+ _b.trys.push([0, 2, 3, 4]);
47664
+ if (!context) return [2 /*return*/];
47665
+ dispatch(setIsLoading(true));
47666
+ config = {
47667
+ host: context.tideConnection.host,
47668
+ apiKey: context.tideConnection.apiKey
47669
+ };
47670
+ seed = activeSearchSeed;
47671
+ if (!seed) {
47672
+ throw new Error('Invalid search parameters');
47397
47673
  }
47398
- });
47399
- });
47400
- };
47401
- var runHotelSearch = function () {
47402
- return __awaiter(void 0, void 0, void 0, function () {
47403
- var config, params, searchRequest, rq, packageAccoSearchResults, enrichedFilters, initialFilteredResults, err_2;
47404
- var _a;
47405
- return __generator(this, function (_b) {
47406
- switch (_b.label) {
47407
- case 0:
47408
- dispatch(setIsLoading(true));
47409
- _b.label = 1;
47410
- case 1:
47411
- _b.trys.push([1, 3, , 4]);
47412
- if (!context) {
47413
- return [2 /*return*/];
47414
- }
47415
- config = {
47416
- host: context.tideConnection.host,
47417
- apiKey: context.tideConnection.apiKey
47418
- };
47419
- params = new URLSearchParams(location.search);
47420
- searchRequest = void 0;
47421
- rq = buildPackagingAccommodationRequestFromQueryParams(params);
47422
- if (!rq) {
47423
- throw new Error('Invalid search parameters');
47424
- }
47425
- searchRequest = rq;
47426
- searchRequest.portalId = context.portalId;
47427
- searchRequest.agentId = context.agentId;
47428
- return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47429
- case 2:
47430
- packageAccoSearchResults = _b.sent();
47431
- console.log('package Acco SearchResults', packageAccoSearchResults);
47432
- enrichedFilters = enrichFiltersWithPackageAccoResults(
47433
- packageAccoSearchResults,
47434
- context.filters,
47435
- (_a = context.tags) !== null && _a !== void 0 ? _a : []
47436
- );
47437
- if (!initialFiltersSet) {
47438
- dispatch(resetFilters(enrichedFilters));
47439
- setInitialFilters(enrichedFilters);
47440
- setInitialFiltersSet(true);
47441
- }
47442
- dispatch(setPackagingAccoResults(packageAccoSearchResults));
47443
- initialFilteredResults = applyFiltersToPackageAccoResults(packageAccoSearchResults, filters, null);
47444
- dispatch(setFilteredPackagingAccoResults(initialFilteredResults));
47445
- dispatch(setIsLoading(false));
47446
- return [3 /*break*/, 4];
47447
- case 3:
47448
- err_2 = _b.sent();
47449
- console.error('Search failed', err_2);
47450
- dispatch(setIsLoading(false));
47451
- return [3 /*break*/, 4];
47452
- case 4:
47453
- return [2 /*return*/];
47674
+ searchRequest = buildSearchFromSeed(seed);
47675
+ return [4 /*yield*/, build.search(config, searchRequest)];
47676
+ case 1:
47677
+ packageSearchResults = _b.sent();
47678
+ console.log('Search results', packageSearchResults);
47679
+ enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, (_a = context.tags) !== null && _a !== void 0 ? _a : []);
47680
+ if (!initialFiltersSet) {
47681
+ dispatch(resetFilters(enrichedFilters));
47682
+ setInitialFilters(enrichedFilters);
47683
+ setInitialFiltersSet(true);
47454
47684
  }
47455
- });
47456
- });
47457
- };
47458
- if (!(context === null || context === void 0 ? void 0 : context.showMockup)) {
47459
- if (
47460
- (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour ||
47461
- ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight &&
47462
- !context.searchConfiguration.enableManualPackaging)
47463
- ) {
47464
- runSearch();
47685
+ dispatch(setResults(packageSearchResults));
47686
+ initialFilteredResults = applyFilters(packageSearchResults, filters, null);
47687
+ dispatch(setFilteredResults(initialFilteredResults));
47688
+ if ((packageSearchResults === null || packageSearchResults === void 0 ? void 0 : packageSearchResults.length) > 0) {
47689
+ if (context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight) {
47690
+ dispatch(setSelectedSearchResult(packageSearchResults[0]));
47691
+ }
47692
+ }
47693
+ return [3 /*break*/, 4];
47694
+ case 2:
47695
+ err_1 = _b.sent();
47696
+ console.error('Search failed', err_1);
47697
+ return [3 /*break*/, 4];
47698
+ case 3:
47699
+ dispatch(setIsLoading(false));
47700
+ return [7 /*endfinally*/];
47701
+ case 4:
47702
+ return [2 /*return*/];
47465
47703
  }
47466
- if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
47467
- runHotelSearch();
47704
+ });
47705
+ });
47706
+ };
47707
+ var runStartTransaction = function () {
47708
+ return __awaiter(void 0, void 0, void 0, function () {
47709
+ var config, transaction, err_2;
47710
+ return __generator(this, function (_a) {
47711
+ switch (_a.label) {
47712
+ case 0:
47713
+ _a.trys.push([0, 2, , 3]);
47714
+ if (!context) return [2 /*return*/, null];
47715
+ config = {
47716
+ host: context.tideConnection.host,
47717
+ apiKey: context.tideConnection.apiKey
47718
+ };
47719
+ return [4 /*yield*/, build.startTransaction(config)];
47720
+ case 1:
47721
+ transaction = _a.sent();
47722
+ console.log('Transaction started', transaction);
47723
+ dispatch(setTransactionId(transaction.transactionId));
47724
+ return [2 /*return*/, transaction.transactionId];
47725
+ case 2:
47726
+ err_2 = _a.sent();
47727
+ console.error('Transaction failed', err_2);
47728
+ return [2 /*return*/, null];
47729
+ case 3:
47730
+ return [2 /*return*/];
47468
47731
  }
47469
- if (
47470
- (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight &&
47471
- context.searchConfiguration.enableManualPackaging
47472
- ) {
47473
- // Manual packaging flow.
47474
- if (context.searchConfiguration.allowAccommodations) {
47475
- runHotelSearch();
47476
- }
47732
+ });
47733
+ });
47734
+ };
47735
+ var runHotelSearch = function (currentTransactionId, seed) {
47736
+ return __awaiter(void 0, void 0, void 0, function () {
47737
+ var config, searchRequest, packageAccoSearchResults, enrichedFilters, initialFilteredResults, err_3;
47738
+ var _a;
47739
+ return __generator(this, function (_b) {
47740
+ switch (_b.label) {
47741
+ case 0:
47742
+ _b.trys.push([0, 2, , 3]);
47743
+ if (!context) return [2 /*return*/];
47744
+ dispatch(setIsLoading(true));
47745
+ config = {
47746
+ host: context.tideConnection.host,
47747
+ apiKey: context.tideConnection.apiKey
47748
+ };
47749
+ searchRequest = buildPackagingAccommodationRequestFromSeed(seed, currentTransactionId);
47750
+ searchRequest.portalId = context.portalId;
47751
+ searchRequest.agentId = context.agentId;
47752
+ console.log('Packaging accommodation search request', searchRequest);
47753
+ return [4 /*yield*/, build.searchPackagingAccommodations(config, searchRequest)];
47754
+ case 1:
47755
+ packageAccoSearchResults = _b.sent();
47756
+ enrichedFilters = enrichFiltersWithPackageAccoResults(
47757
+ packageAccoSearchResults,
47758
+ context.filters,
47759
+ (_a = context.tags) !== null && _a !== void 0 ? _a : []
47760
+ );
47761
+ if (!initialFiltersSet) {
47762
+ dispatch(resetFilters(enrichedFilters));
47763
+ setInitialFilters(enrichedFilters);
47764
+ setInitialFiltersSet(true);
47765
+ }
47766
+ dispatch(setPackagingAccoResults(packageAccoSearchResults));
47767
+ initialFilteredResults = applyFiltersToPackageAccoResults(packageAccoSearchResults, filters, null);
47768
+ dispatch(setFilteredPackagingAccoResults(initialFilteredResults));
47769
+ dispatch(setIsLoading(false));
47770
+ return [3 /*break*/, 3];
47771
+ case 2:
47772
+ err_3 = _b.sent();
47773
+ console.error('Search failed', err_3);
47774
+ dispatch(setIsLoading(false));
47775
+ return [3 /*break*/, 3];
47776
+ case 3:
47777
+ return [2 /*return*/];
47477
47778
  }
47779
+ });
47780
+ });
47781
+ };
47782
+ var runAccommodationFlow = function (seed) {
47783
+ return __awaiter(void 0, void 0, void 0, function () {
47784
+ var currentTransactionId;
47785
+ var _a;
47786
+ return __generator(this, function (_b) {
47787
+ switch (_b.label) {
47788
+ case 0:
47789
+ if (!context || context.showMockup) return [2 /*return*/];
47790
+ currentTransactionId =
47791
+ ((_a = context === null || context === void 0 ? void 0 : context.packagingEntry) === null || _a === void 0 ? void 0 : _a.transactionId) ||
47792
+ transactionId;
47793
+ console.log('Current transaction ID', currentTransactionId);
47794
+ if (!!currentTransactionId) return [3 /*break*/, 2];
47795
+ dispatch(setIsLoading(true));
47796
+ return [4 /*yield*/, runStartTransaction()];
47797
+ case 1:
47798
+ currentTransactionId = _b.sent();
47799
+ _b.label = 2;
47800
+ case 2:
47801
+ if (!currentTransactionId) {
47802
+ dispatch(setIsLoading(false));
47803
+ return [2 /*return*/];
47804
+ }
47805
+ return [4 /*yield*/, runHotelSearch(currentTransactionId, seed)];
47806
+ case 3:
47807
+ _b.sent();
47808
+ return [2 /*return*/];
47809
+ }
47810
+ });
47811
+ });
47812
+ };
47813
+ // separate Search
47814
+ React.useEffect(
47815
+ function () {
47816
+ if (
47817
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour ||
47818
+ ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight &&
47819
+ !context.searchConfiguration.enableManualPackaging)
47820
+ ) {
47821
+ runSearch();
47822
+ }
47823
+ if ((context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation) {
47824
+ var seed = activeSearchSeed;
47825
+ if (seed) {
47826
+ runAccommodationFlow(seed);
47827
+ }
47828
+ }
47829
+ if (
47830
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight &&
47831
+ context.searchConfiguration.enableManualPackaging &&
47832
+ context.searchConfiguration.allowAccommodations &&
47833
+ !(context === null || context === void 0 ? void 0 : context.packagingEntry)
47834
+ ) {
47835
+ var seed = activeSearchSeed;
47836
+ if (seed) {
47837
+ runAccommodationFlow(seed);
47838
+ }
47839
+ }
47840
+ },
47841
+ [
47842
+ location.search,
47843
+ context === null || context === void 0 ? void 0 : context.showMockup,
47844
+ context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType,
47845
+ context === null || context === void 0 ? void 0 : context.searchConfiguration.enableManualPackaging,
47846
+ context === null || context === void 0 ? void 0 : context.searchConfiguration.allowAccommodations,
47847
+ (_b = context === null || context === void 0 ? void 0 : context.packagingEntry) === null || _b === void 0 ? void 0 : _b.transactionId,
47848
+ activeSearchSeed
47849
+ ]
47850
+ );
47851
+ React.useEffect(
47852
+ function () {
47853
+ if (context === null || context === void 0 ? void 0 : context.packagingEntry) {
47854
+ console.log('original packaging entry from context', context.packagingEntry);
47855
+ dispatch(setEditablePackagingEntry(structuredClone(context.packagingEntry)));
47856
+ dispatch(setTransactionId(context.packagingEntry.transactionId));
47478
47857
  }
47479
47858
  },
47480
- [location.search]
47859
+ [context === null || context === void 0 ? void 0 : context.packagingEntry]
47481
47860
  );
47482
- // Seperate detailsCall
47861
+ // separate detailsCall
47483
47862
  React.useEffect(
47484
47863
  function () {
47485
47864
  var fetchDetails = function () {
47486
47865
  return __awaiter(void 0, void 0, void 0, function () {
47487
- var config, selectedItem, params, entryId, requestRooms, rooms, detailsRequest, detailsResponse, detailsResponse, err_3;
47488
- return __generator(this, function (_a) {
47489
- switch (_a.label) {
47866
+ var config, selectedItem, requestRooms, seed, detailsRequest, detailsResponse, err_4;
47867
+ var _a;
47868
+ return __generator(this, function (_b) {
47869
+ switch (_b.label) {
47490
47870
  case 0:
47491
- setDetailsIsLoading(true);
47492
- console.log('Fetching details for selected search result', selectedSearchResult);
47493
47871
  if (!selectedSearchResult || !context) return [2 /*return*/];
47872
+ setDetailsIsLoading(true);
47494
47873
  if (
47495
47874
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
47496
47875
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour
47497
47876
  ) {
47498
47877
  handleFlyInToggle(true);
47499
47878
  }
47500
- _a.label = 1;
47879
+ _b.label = 1;
47501
47880
  case 1:
47502
- _a.trys.push([1, 6, , 7]);
47881
+ _b.trys.push([1, 3, , 4]);
47503
47882
  config = {
47504
47883
  host: context.tideConnection.host,
47505
47884
  apiKey: context.tideConnection.apiKey
@@ -47511,14 +47890,14 @@ var SearchResultsContainer = function () {
47511
47890
  // TODO: handle this case better, show an error message to the user
47512
47891
  return [2 /*return*/];
47513
47892
  }
47514
- params = new URLSearchParams(location.search);
47515
- entryId = getStringFromParams(params, 'entryId');
47516
47893
  requestRooms = void 0;
47517
- if (entry && entryId) {
47518
- requestRooms = getRequestRoomsFromEntry(entry.rooms);
47894
+ if (context === null || context === void 0 ? void 0 : context.packagingEntry) {
47895
+ requestRooms = getRequestRoomsFromPackagingEntry(context.packagingEntry);
47519
47896
  } else {
47520
- rooms = getRoomsFromParams(params, 'rooms');
47521
- requestRooms = getRequestRooms(rooms);
47897
+ seed = activeSearchSeed;
47898
+ requestRooms = ((_a = seed === null || seed === void 0 ? void 0 : seed.rooms) === null || _a === void 0 ? void 0 : _a.length)
47899
+ ? seed.rooms
47900
+ : getRequestRooms(null);
47522
47901
  }
47523
47902
  detailsRequest = {
47524
47903
  officeId: 1,
@@ -47540,29 +47919,18 @@ var SearchResultsContainer = function () {
47540
47919
  },
47541
47920
  agentId: context.agentId
47542
47921
  };
47543
- if (!(entry && entryId)) return [3 /*break*/, 3];
47544
- requestRooms = getRequestRoomsFromEntry(entry.rooms);
47545
47922
  return [4 /*yield*/, build.details(config, detailsRequest)];
47546
47923
  case 2:
47547
- detailsResponse = _a.sent();
47548
- console.log('Details:', detailsResponse);
47549
- dispatch(setBookingPackageDetails({ details: detailsResponse === null || detailsResponse === void 0 ? void 0 : detailsResponse.payload }));
47550
- return [3 /*break*/, 5];
47551
- case 3:
47552
- return [4 /*yield*/, build.details(config, detailsRequest)];
47553
- case 4:
47554
- detailsResponse = _a.sent();
47924
+ detailsResponse = _b.sent();
47555
47925
  dispatch(setBookingPackageDetails({ details: detailsResponse === null || detailsResponse === void 0 ? void 0 : detailsResponse.payload }));
47556
47926
  setDetailsIsLoading(false);
47557
- _a.label = 5;
47558
- case 5:
47559
- return [3 /*break*/, 7];
47560
- case 6:
47561
- err_3 = _a.sent();
47562
- console.error('Failed to fetch package details', err_3);
47927
+ return [3 /*break*/, 4];
47928
+ case 3:
47929
+ err_4 = _b.sent();
47930
+ console.error('Failed to fetch package details', err_4);
47563
47931
  setDetailsIsLoading(false);
47564
- return [3 /*break*/, 7];
47565
- case 7:
47932
+ return [3 /*break*/, 4];
47933
+ case 4:
47566
47934
  return [2 /*return*/];
47567
47935
  }
47568
47936
  });
@@ -47572,8 +47940,7 @@ var SearchResultsContainer = function () {
47572
47940
  return __awaiter(void 0, void 0, void 0, function () {
47573
47941
  var config,
47574
47942
  selectedItem,
47575
- params,
47576
- rooms,
47943
+ seed,
47577
47944
  tagId,
47578
47945
  destinationAirport,
47579
47946
  destinationId,
@@ -47585,38 +47952,37 @@ var SearchResultsContainer = function () {
47585
47952
  destinationIsAirport,
47586
47953
  detailSearchRequest,
47587
47954
  packageAccoSearchDetails,
47588
- err_4;
47589
- var _a, _b;
47590
- return __generator(this, function (_c) {
47591
- switch (_c.label) {
47955
+ err_5;
47956
+ var _a, _b, _c, _d, _e;
47957
+ return __generator(this, function (_f) {
47958
+ switch (_f.label) {
47592
47959
  case 0:
47593
47960
  if (!selectedPackagingAccoResultCode || !context) return [2 /*return*/];
47961
+ setDetailsIsLoading(true);
47594
47962
  if (
47595
47963
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.Accommodation ||
47964
+ (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.AccommodationAndFlight ||
47596
47965
  (context === null || context === void 0 ? void 0 : context.searchConfiguration.qsmType) === build.PortalQsmType.GroupTour
47597
47966
  ) {
47598
47967
  handleFlyInToggle(true);
47599
47968
  }
47600
- _c.label = 1;
47969
+ _f.label = 1;
47601
47970
  case 1:
47602
- _c.trys.push([1, 3, , 4]);
47971
+ _f.trys.push([1, 3, , 4]);
47603
47972
  config = {
47604
47973
  host: context.tideConnection.host,
47605
47974
  apiKey: context.tideConnection.apiKey
47606
47975
  };
47607
- console.log('selectedPackagingAccoResultCode', selectedPackagingAccoResultCode);
47608
47976
  selectedItem = packagingAccoResults.find(function (r) {
47609
47977
  return r.code === selectedPackagingAccoResultCode;
47610
47978
  });
47611
- console.log('Selected packaging acco item', selectedItem);
47612
47979
  if (!selectedItem) {
47613
47980
  // TODO: handle this case better, show an error message to the user
47614
47981
  return [2 /*return*/];
47615
47982
  }
47616
- params = new URLSearchParams(location.search);
47617
- rooms = getRoomsFromParams(params, 'rooms');
47618
- tagId = getNumberFromParams(params, 'tagId');
47619
- destinationAirport = getStringFromParams(params, 'destinationAirport');
47983
+ seed = activeSearchSeed;
47984
+ tagId = (_a = seed === null || seed === void 0 ? void 0 : seed.tagId) !== null && _a !== void 0 ? _a : null;
47985
+ destinationAirport = (_b = seed === null || seed === void 0 ? void 0 : seed.destinationAirport) !== null && _b !== void 0 ? _b : null;
47620
47986
  destinationId = null;
47621
47987
  destinationIsCountry = false;
47622
47988
  destinationIsRegion = false;
@@ -47641,14 +48007,15 @@ var SearchResultsContainer = function () {
47641
48007
  destinationIsAirport = true;
47642
48008
  }
47643
48009
  detailSearchRequest = {
48010
+ transactionId: transactionId !== null && transactionId !== void 0 ? transactionId : '',
47644
48011
  officeId: 1,
47645
48012
  portalId: context.portalId,
47646
48013
  agentId: context.agentId,
47647
- catalogueId: (_a = context.searchConfiguration.defaultCatalogueId) !== null && _a !== void 0 ? _a : 0,
48014
+ catalogueId: (_c = context.searchConfiguration.defaultCatalogueId) !== null && _c !== void 0 ? _c : 0,
47648
48015
  searchConfigurationId: context.searchConfiguration.id,
47649
48016
  vendorConfigurationId: selectedItem.vendorId,
47650
- language: (_b = context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB',
47651
- serviceType: 3,
48017
+ language: (_d = context.languageCode) !== null && _d !== void 0 ? _d : 'en-GB',
48018
+ serviceType: ACCOMMODATION_SERVICE_TYPE,
47652
48019
  fromDate: selectedItem.fromDate,
47653
48020
  toDate: selectedItem.toDate,
47654
48021
  destination: {
@@ -47661,18 +48028,22 @@ var SearchResultsContainer = function () {
47661
48028
  code: destinationCode
47662
48029
  },
47663
48030
  productCode: selectedItem.code ? selectedItem.code : '',
47664
- rooms: getPackagingRequestRooms(rooms),
48031
+ rooms: getPackagingRequestRoomsFromBookingRooms(
48032
+ (_e = seed === null || seed === void 0 ? void 0 : seed.rooms) !== null && _e !== void 0 ? _e : null
48033
+ ),
47665
48034
  tagIds: tagId ? [tagId] : []
47666
48035
  };
47667
48036
  return [4 /*yield*/, build.searchPackagingAccommodations(config, detailSearchRequest)];
47668
48037
  case 2:
47669
- packageAccoSearchDetails = _c.sent();
48038
+ packageAccoSearchDetails = _f.sent();
47670
48039
  console.log('Packaging Acco Search details', packageAccoSearchDetails);
47671
48040
  dispatch(setPackagingAccoSearchDetails(packageAccoSearchDetails));
48041
+ setDetailsIsLoading(false);
47672
48042
  return [3 /*break*/, 4];
47673
48043
  case 3:
47674
- err_4 = _c.sent();
47675
- console.error('Failed to fetch package details', err_4);
48044
+ err_5 = _f.sent();
48045
+ console.error('Failed to fetch package details', err_5);
48046
+ setDetailsIsLoading(false);
47676
48047
  return [3 /*break*/, 4];
47677
48048
  case 4:
47678
48049
  return [2 /*return*/];
@@ -47686,6 +48057,7 @@ var SearchResultsContainer = function () {
47686
48057
  if (selectedPackagingAccoResultCode) {
47687
48058
  fetchPackagingAccoSearchDetails();
47688
48059
  }
48060
+ dispatch(setAccommodationFlyInStep('details'));
47689
48061
  },
47690
48062
  [selectedSearchResult, selectedPackagingAccoResultCode]
47691
48063
  );
@@ -47701,6 +48073,64 @@ var SearchResultsContainer = function () {
47701
48073
  },
47702
48074
  [filters, results, packagingAccoResults, selectedSortType]
47703
48075
  );
48076
+ React.useEffect(
48077
+ function () {
48078
+ setInitialFiltersSet(false);
48079
+ },
48080
+ [activeSearchSeed]
48081
+ );
48082
+ var handleEditAccommodation = function (segments) {
48083
+ return __awaiter(void 0, void 0, void 0, function () {
48084
+ var sourceEntry, seed;
48085
+ return __generator(this, function (_a) {
48086
+ switch (_a.label) {
48087
+ case 0:
48088
+ sourceEntry =
48089
+ editablePackagingEntry !== null && editablePackagingEntry !== void 0
48090
+ ? editablePackagingEntry
48091
+ : context === null || context === void 0
48092
+ ? void 0
48093
+ : context.packagingEntry;
48094
+ if (!sourceEntry) return [2 /*return*/];
48095
+ seed = buildSearchSeedFromAccommodationSegments(sourceEntry, segments);
48096
+ if (!seed) return [2 /*return*/];
48097
+ setDetailsIsLoading(true);
48098
+ setSelectedAccommodationSeed(seed);
48099
+ dispatch(setAccommodationFlyInStep('results'));
48100
+ handleFlyInToggle(true);
48101
+ return [4 /*yield*/, runAccommodationFlow(seed)];
48102
+ case 1:
48103
+ _a.sent();
48104
+ setDetailsIsLoading(false);
48105
+ return [2 /*return*/];
48106
+ }
48107
+ });
48108
+ });
48109
+ };
48110
+ var buildSearchSeedFromAccommodationSegments = function (entry, segments) {
48111
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
48112
+ if (!(segments === null || segments === void 0 ? void 0 : segments.length)) return null;
48113
+ var sortedSegments = __spreadArray([], segments, true).sort(function (a, b) {
48114
+ return new Date(a.from).getTime() - new Date(b.from).getTime();
48115
+ });
48116
+ var firstSegment = lodash.first(sortedSegments);
48117
+ var lastSegment = lodash.last(sortedSegments);
48118
+ if (!firstSegment || !lastSegment) return null;
48119
+ return {
48120
+ fromDate: toDateOnlyString(firstSegment.from),
48121
+ toDate: toDateOnlyString(lastSegment.to),
48122
+ country: (_b = (_a = firstSegment.country) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null,
48123
+ region: (_d = (_c = firstSegment.region) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null,
48124
+ oord: (_f = (_e = firstSegment.oord) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : null,
48125
+ location: (_h = (_g = firstSegment.location) === null || _g === void 0 ? void 0 : _g.id) !== null && _h !== void 0 ? _h : null,
48126
+ hotel: parseHotelId(firstSegment),
48127
+ hotelCode: (_j = firstSegment.productCode) !== null && _j !== void 0 ? _j : null,
48128
+ tagId: null,
48129
+ destinationAirport: getDestinationAirportFromEntry((_k = entry.lines) !== null && _k !== void 0 ? _k : []),
48130
+ departureAirport: getDepartureAirportFromEntry((_l = entry.lines) !== null && _l !== void 0 ? _l : []),
48131
+ rooms: getRequestRoomsFromPackagingSegments(entry, sortedSegments)
48132
+ };
48133
+ };
47704
48134
  return React__default['default'].createElement(
47705
48135
  'div',
47706
48136
  { id: 'tide-booking', className: 'search__bg' },
@@ -47752,7 +48182,8 @@ var SearchResultsContainer = function () {
47752
48182
  handleSetIsOpen: function () {
47753
48183
  return setItineraryOpen(!itineraryOpen);
47754
48184
  },
47755
- isLoading: isLoading
48185
+ isLoading: isLoading,
48186
+ onEditAccommodation: handleEditAccommodation
47756
48187
  }),
47757
48188
  React__default['default'].createElement(
47758
48189
  'div',
@@ -47817,6 +48248,7 @@ var SearchResultsContainer = function () {
47817
48248
  'span',
47818
48249
  { className: 'search__result-row-text' },
47819
48250
  !isLoading &&
48251
+ !context.packagingEntry &&
47820
48252
  React__default['default'].createElement(
47821
48253
  React__default['default'].Fragment,
47822
48254
  null,
@@ -47832,7 +48264,8 @@ var SearchResultsContainer = function () {
47832
48264
  translations.SRP.TOTAL_RESULTS_LABEL
47833
48265
  )
47834
48266
  ),
47835
- !isMobile &&
48267
+ !context.packagingEntry &&
48268
+ !isMobile &&
47836
48269
  sortByTypes &&
47837
48270
  sortByTypes.length > 0 &&
47838
48271
  React__default['default'].createElement(
@@ -47860,25 +48293,35 @@ var SearchResultsContainer = function () {
47860
48293
  React__default['default'].createElement(
47861
48294
  'div',
47862
48295
  { className: 'search__results__wrapper' },
47863
- context.showTabViews && React__default['default'].createElement(TabViews, null),
48296
+ context.showTabViews &&
48297
+ (context.searchConfiguration.qsmType === build.PortalQsmType.GroupTour ||
48298
+ context.searchConfiguration.qsmType === build.PortalQsmType.Accommodation) &&
48299
+ React__default['default'].createElement(TabViews, null),
47864
48300
  context.showRoundTripResults && context.showMockup && React__default['default'].createElement(RoundTripResults, null),
47865
48301
  context.searchConfiguration.qsmType === build.PortalQsmType.GroupTour &&
47866
48302
  React__default['default'].createElement(GroupTourResults, { isLoading: isLoading }),
47867
48303
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48304
+ !context.packagingEntry &&
47868
48305
  context.showFlightResults &&
47869
48306
  (bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.outwardFlights) &&
47870
48307
  React__default['default'].createElement(FlightResults, {
47871
48308
  flights: bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.outwardFlights,
47872
48309
  isDeparture: true
47873
48310
  }),
47874
- context.showHotelAccommodationResults && React__default['default'].createElement(HotelAccommodationResults, { isLoading: isLoading }),
48311
+ context.showHotelAccommodationResults &&
48312
+ !context.packagingEntry &&
48313
+ React__default['default'].createElement(HotelAccommodationResults, { isLoading: isLoading }),
47875
48314
  context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48315
+ !context.packagingEntry &&
47876
48316
  context.showFlightResults &&
47877
48317
  (bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.returnFlights) &&
47878
48318
  React__default['default'].createElement(FlightResults, {
47879
48319
  flights: bookingPackageDetails === null || bookingPackageDetails === void 0 ? void 0 : bookingPackageDetails.returnFlights,
47880
48320
  isDeparture: false
47881
- })
48321
+ }),
48322
+ context.searchConfiguration.qsmType === build.PortalQsmType.AccommodationAndFlight &&
48323
+ context.packagingEntry &&
48324
+ React__default['default'].createElement('span', null, 'TODO: Show Full Itinerary here')
47882
48325
  )
47883
48326
  ),
47884
48327
  React__default['default'].createElement(FlyIn, {
@@ -47886,10 +48329,15 @@ var SearchResultsContainer = function () {
47886
48329
  srpType: context.searchConfiguration.qsmType,
47887
48330
  isOpen: flyInIsOpen,
47888
48331
  setIsOpen: handleFlyInToggle,
48332
+ handleConfirm: function () {
48333
+ return handleConfirmHotelSwap();
48334
+ },
47889
48335
  onPanelRef: function (el) {
47890
48336
  return (panelRef.current = el);
47891
48337
  },
47892
- detailsLoading: detailsIsLoading
48338
+ detailsLoading: detailsIsLoading,
48339
+ accommodationStep: accommodationFlyInStep,
48340
+ isPackageEditFlow: !!context.packagingEntry
47893
48341
  })
47894
48342
  )
47895
48343
  )