@qite/tide-booking-component 1.4.99 → 1.4.100
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.
- package/build/build-cjs/index.js +103 -40
- package/build/build-cjs/src/search-results/store/search-results-slice.d.ts +4 -2
- package/build/build-esm/index.js +103 -40
- package/build/build-esm/src/search-results/store/search-results-slice.d.ts +4 -2
- package/package.json +2 -2
- package/src/search-results/components/itinerary/index.tsx +19 -12
- package/src/search-results/components/search-results-container/search-results-container.tsx +30 -12
- package/src/search-results/store/search-results-slice.ts +9 -3
package/build/build-cjs/index.js
CHANGED
|
@@ -12791,7 +12791,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12791
12791
|
return ENDPOINT$8 + '/details/' + transactionId + '/alternate-flights';
|
|
12792
12792
|
};
|
|
12793
12793
|
var ENDPOINT_BOOKABLE_DATES = ENDPOINT$8 + '/bookable-dates';
|
|
12794
|
-
var ENDPOINT_PRICE_DETAILS = ENDPOINT$8 + '/price-details';
|
|
12794
|
+
var ENDPOINT_PRICE_DETAILS$1 = ENDPOINT$8 + '/price-details';
|
|
12795
12795
|
var ENDPOINT_BOOK = ENDPOINT$8 + '/book';
|
|
12796
12796
|
var ENDPOINT_UPDATE = ENDPOINT$8 + '/update';
|
|
12797
12797
|
var ENDPOINT_AGENTS = ENDPOINT$8 + '/agents';
|
|
@@ -12891,7 +12891,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12891
12891
|
return post(url, apiKey, body, config.token, signal, true);
|
|
12892
12892
|
};
|
|
12893
12893
|
var priceDetails = function (config, request, signal, languageCode) {
|
|
12894
|
-
var url = '' + config.host + ENDPOINT_PRICE_DETAILS;
|
|
12894
|
+
var url = '' + config.host + ENDPOINT_PRICE_DETAILS$1;
|
|
12895
12895
|
var apiKey = config.apiKey;
|
|
12896
12896
|
var body = JSON.stringify(request);
|
|
12897
12897
|
return post(url, apiKey, body, config.token, signal, true, languageCode);
|
|
@@ -13417,6 +13417,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13417
13417
|
var ENDPOINT = '/api/web/packaging';
|
|
13418
13418
|
var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
|
|
13419
13419
|
var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
|
|
13420
|
+
var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
|
|
13420
13421
|
var ENDPOINT_ENTRY = function (magicLinkCode) {
|
|
13421
13422
|
return ENDPOINT + '/entry/' + magicLinkCode;
|
|
13422
13423
|
};
|
|
@@ -13437,6 +13438,12 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13437
13438
|
var url = '' + config.host + ENDPOINT_ENTRY(magicLinkCode);
|
|
13438
13439
|
return get(url, apiKey, config.token, signal, true);
|
|
13439
13440
|
};
|
|
13441
|
+
var getPriceDetails = function (config, request, signal) {
|
|
13442
|
+
var url = '' + config.host + ENDPOINT_PRICE_DETAILS;
|
|
13443
|
+
var apiKey = config.apiKey;
|
|
13444
|
+
var body = JSON.stringify(request);
|
|
13445
|
+
return post(url, apiKey, body, config.token, signal, true);
|
|
13446
|
+
};
|
|
13440
13447
|
|
|
13441
13448
|
exports.AllotmentType = AllotmentType;
|
|
13442
13449
|
exports.ContactForm = ContactForm;
|
|
@@ -13492,6 +13499,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13492
13499
|
exports.getLocations = getLocations;
|
|
13493
13500
|
exports.getMolliePayment = getMolliePayment;
|
|
13494
13501
|
exports.getPortal = getPortal;
|
|
13502
|
+
exports.getPriceDetails = getPriceDetails;
|
|
13495
13503
|
exports.getPrintActions = getPrintActions;
|
|
13496
13504
|
exports.getStyleSheet = getStyleSheet;
|
|
13497
13505
|
exports.getTranslationDictionary = getTranslationDictionary;
|
|
@@ -33812,7 +33820,8 @@ var initialState$1 = {
|
|
|
33812
33820
|
flyInIsOpen: false,
|
|
33813
33821
|
editablePackagingEntry: null,
|
|
33814
33822
|
transactionId: null,
|
|
33815
|
-
accommodationFlyInStep: 'details'
|
|
33823
|
+
accommodationFlyInStep: 'details',
|
|
33824
|
+
priceDetails: null
|
|
33816
33825
|
};
|
|
33817
33826
|
var searchResultsSlice = toolkit.createSlice({
|
|
33818
33827
|
name: 'searchResults',
|
|
@@ -33905,6 +33914,9 @@ var searchResultsSlice = toolkit.createSlice({
|
|
|
33905
33914
|
},
|
|
33906
33915
|
setAccommodationFlyInStep: function (state, action) {
|
|
33907
33916
|
state.accommodationFlyInStep = action.payload;
|
|
33917
|
+
},
|
|
33918
|
+
setPriceDetails: function (state, action) {
|
|
33919
|
+
state.priceDetails = action.payload;
|
|
33908
33920
|
}
|
|
33909
33921
|
}
|
|
33910
33922
|
});
|
|
@@ -33929,7 +33941,8 @@ _a.resetSearchState;
|
|
|
33929
33941
|
var setFlyInIsOpen = _a.setFlyInIsOpen,
|
|
33930
33942
|
setEditablePackagingEntry = _a.setEditablePackagingEntry,
|
|
33931
33943
|
setTransactionId = _a.setTransactionId,
|
|
33932
|
-
setAccommodationFlyInStep = _a.setAccommodationFlyInStep
|
|
33944
|
+
setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
|
|
33945
|
+
setPriceDetails = _a.setPriceDetails;
|
|
33933
33946
|
var searchResultsReducer = searchResultsSlice.reducer;
|
|
33934
33947
|
|
|
33935
33948
|
var ItemPicker = function (_a) {
|
|
@@ -35195,14 +35208,16 @@ var getSegmentTitle = function (segment) {
|
|
|
35195
35208
|
var Itinerary = function (_a) {
|
|
35196
35209
|
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
35197
35210
|
var isOpen = _a.isOpen,
|
|
35198
|
-
handleSetIsOpen = _a.handleSetIsOpen
|
|
35199
|
-
|
|
35200
|
-
|
|
35211
|
+
handleSetIsOpen = _a.handleSetIsOpen,
|
|
35212
|
+
isLoading = _a.isLoading,
|
|
35213
|
+
onEditAccommodation = _a.onEditAccommodation;
|
|
35201
35214
|
var context = React.useContext(SearchResultsConfigurationContext);
|
|
35202
35215
|
var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
|
|
35203
|
-
var
|
|
35204
|
-
|
|
35205
|
-
|
|
35216
|
+
var _q = reactRedux.useSelector(function (state) {
|
|
35217
|
+
return state.searchResults;
|
|
35218
|
+
}),
|
|
35219
|
+
editablePackagingEntry = _q.editablePackagingEntry,
|
|
35220
|
+
priceDetails = _q.priceDetails;
|
|
35206
35221
|
var packagingEntry =
|
|
35207
35222
|
editablePackagingEntry !== null && editablePackagingEntry !== void 0
|
|
35208
35223
|
? editablePackagingEntry
|
|
@@ -35290,7 +35305,7 @@ var Itinerary = function (_a) {
|
|
|
35290
35305
|
console.log('otherSegments', otherSegments);
|
|
35291
35306
|
console.log('groupedOtherSegments', groupedOtherSegments);
|
|
35292
35307
|
var numberOfPax = ((_p = packagingEntry.pax) === null || _p === void 0 ? void 0 : _p.length) || 1;
|
|
35293
|
-
var totalPrice = packagingEntry.price || 0;
|
|
35308
|
+
var totalPrice = (priceDetails === null || priceDetails === void 0 ? void 0 : priceDetails.total) || packagingEntry.price || 0;
|
|
35294
35309
|
var pricePerPerson = totalPrice / numberOfPax;
|
|
35295
35310
|
return React__default['default'].createElement(
|
|
35296
35311
|
'div',
|
|
@@ -35346,18 +35361,24 @@ var Itinerary = function (_a) {
|
|
|
35346
35361
|
React__default['default'].createElement(
|
|
35347
35362
|
'div',
|
|
35348
35363
|
{ className: 'search__filter__prices' },
|
|
35349
|
-
|
|
35350
|
-
'
|
|
35351
|
-
|
|
35352
|
-
|
|
35353
|
-
|
|
35354
|
-
|
|
35355
|
-
|
|
35356
|
-
|
|
35357
|
-
|
|
35358
|
-
|
|
35359
|
-
|
|
35360
|
-
|
|
35364
|
+
isLoading
|
|
35365
|
+
? React__default['default'].createElement(Spinner, null)
|
|
35366
|
+
: React__default['default'].createElement(
|
|
35367
|
+
React__default['default'].Fragment,
|
|
35368
|
+
null,
|
|
35369
|
+
React__default['default'].createElement(
|
|
35370
|
+
'div',
|
|
35371
|
+
{ className: 'search__filter__prices__wrapper' },
|
|
35372
|
+
React__default['default'].createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$2(pricePerPerson, 'EUR')),
|
|
35373
|
+
React__default['default'].createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
|
|
35374
|
+
React__default['default'].createElement(
|
|
35375
|
+
'p',
|
|
35376
|
+
null,
|
|
35377
|
+
React__default['default'].createElement('strong', null, '(', formatPrice$2(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
|
|
35378
|
+
)
|
|
35379
|
+
),
|
|
35380
|
+
React__default['default'].createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
|
|
35381
|
+
)
|
|
35361
35382
|
),
|
|
35362
35383
|
React__default['default'].createElement(
|
|
35363
35384
|
'div',
|
|
@@ -47236,14 +47257,6 @@ var getSelectedOptionsPerRoom = function (details) {
|
|
|
47236
47257
|
};
|
|
47237
47258
|
});
|
|
47238
47259
|
};
|
|
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
47260
|
var getRequestRoomsFromPackagingSegments = function (entry, segments) {
|
|
47248
47261
|
var _a;
|
|
47249
47262
|
var accommodationLines = __spreadArray([], segments !== null && segments !== void 0 ? segments : [], true)
|
|
@@ -47347,11 +47360,14 @@ var SearchResultsContainer = function () {
|
|
|
47347
47360
|
detailsIsLoading = _g[0],
|
|
47348
47361
|
setDetailsIsLoading = _g[1];
|
|
47349
47362
|
var _h = React.useState(false),
|
|
47350
|
-
|
|
47351
|
-
|
|
47352
|
-
var _j = React.useState(
|
|
47353
|
-
|
|
47354
|
-
|
|
47363
|
+
pricesAreLoading = _h[0],
|
|
47364
|
+
setPricesAreLoading = _h[1];
|
|
47365
|
+
var _j = React.useState(false),
|
|
47366
|
+
itineraryOpen = _j[0],
|
|
47367
|
+
setItineraryOpen = _j[1];
|
|
47368
|
+
var _k = React.useState(null),
|
|
47369
|
+
selectedAccommodationSeed = _k[0],
|
|
47370
|
+
setSelectedAccommodationSeed = _k[1];
|
|
47355
47371
|
var panelRef = React.useRef(null);
|
|
47356
47372
|
var sortByTypes = [
|
|
47357
47373
|
{ direction: 'asc', label: 'default' },
|
|
@@ -47568,20 +47584,21 @@ var SearchResultsContainer = function () {
|
|
|
47568
47584
|
var details = packagingAccoSearchDetails;
|
|
47569
47585
|
if (!sourceEntry || !(details === null || details === void 0 ? void 0 : details.length)) return null;
|
|
47570
47586
|
var selectedOptionsPerRoom = getSelectedOptionsPerRoom(details);
|
|
47587
|
+
console.log('Selected options per room', selectedOptionsPerRoom);
|
|
47571
47588
|
if (!selectedOptionsPerRoom.length) return null;
|
|
47572
47589
|
var selectedHotel = details[0];
|
|
47590
|
+
var roomIndex = 0;
|
|
47573
47591
|
var updatedLines = sourceEntry.lines.map(function (line) {
|
|
47574
47592
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
47575
47593
|
if (line.serviceType !== ACCOMMODATION_SERVICE_TYPE) {
|
|
47576
47594
|
return line;
|
|
47577
47595
|
}
|
|
47578
|
-
// TODO: fix roomIndex
|
|
47579
|
-
var roomIndex = getRoomIndexFromLine(line);
|
|
47580
|
-
console.log('Processing line', line, 'with room index', roomIndex);
|
|
47581
47596
|
var selectedRoom = selectedOptionsPerRoom.find(function (x) {
|
|
47582
47597
|
return x.roomIndex === roomIndex;
|
|
47583
47598
|
});
|
|
47584
47599
|
var selectedOption = selectedRoom === null || selectedRoom === void 0 ? void 0 : selectedRoom.option;
|
|
47600
|
+
console.log('selectedRoom and selectedOption for line', line, selectedRoom, selectedOption);
|
|
47601
|
+
roomIndex++;
|
|
47585
47602
|
if (!selectedOption) {
|
|
47586
47603
|
return line;
|
|
47587
47604
|
}
|
|
@@ -48131,6 +48148,52 @@ var SearchResultsContainer = function () {
|
|
|
48131
48148
|
rooms: getRequestRoomsFromPackagingSegments(entry, sortedSegments)
|
|
48132
48149
|
};
|
|
48133
48150
|
};
|
|
48151
|
+
React.useEffect(
|
|
48152
|
+
function () {
|
|
48153
|
+
var fetchPriceDetails = function () {
|
|
48154
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
48155
|
+
var config, priceDetails, err_6;
|
|
48156
|
+
return __generator(this, function (_a) {
|
|
48157
|
+
switch (_a.label) {
|
|
48158
|
+
case 0:
|
|
48159
|
+
console.log(
|
|
48160
|
+
'Fetching price details for entry',
|
|
48161
|
+
editablePackagingEntry !== null && editablePackagingEntry !== void 0
|
|
48162
|
+
? editablePackagingEntry
|
|
48163
|
+
: context === null || context === void 0
|
|
48164
|
+
? void 0
|
|
48165
|
+
: context.packagingEntry
|
|
48166
|
+
);
|
|
48167
|
+
if (!context || !editablePackagingEntry) return [2 /*return*/];
|
|
48168
|
+
setPricesAreLoading(true);
|
|
48169
|
+
_a.label = 1;
|
|
48170
|
+
case 1:
|
|
48171
|
+
_a.trys.push([1, 3, , 4]);
|
|
48172
|
+
config = {
|
|
48173
|
+
host: context.tideConnection.host,
|
|
48174
|
+
apiKey: context.tideConnection.apiKey
|
|
48175
|
+
};
|
|
48176
|
+
return [4 /*yield*/, build.getPriceDetails(config, editablePackagingEntry)];
|
|
48177
|
+
case 2:
|
|
48178
|
+
priceDetails = _a.sent();
|
|
48179
|
+
dispatch(setPriceDetails(priceDetails));
|
|
48180
|
+
setPricesAreLoading(false);
|
|
48181
|
+
return [3 /*break*/, 4];
|
|
48182
|
+
case 3:
|
|
48183
|
+
err_6 = _a.sent();
|
|
48184
|
+
console.error('Error fetching price details', err_6);
|
|
48185
|
+
setPricesAreLoading(false);
|
|
48186
|
+
return [3 /*break*/, 4];
|
|
48187
|
+
case 4:
|
|
48188
|
+
return [2 /*return*/];
|
|
48189
|
+
}
|
|
48190
|
+
});
|
|
48191
|
+
});
|
|
48192
|
+
};
|
|
48193
|
+
fetchPriceDetails();
|
|
48194
|
+
},
|
|
48195
|
+
[editablePackagingEntry]
|
|
48196
|
+
);
|
|
48134
48197
|
return React__default['default'].createElement(
|
|
48135
48198
|
'div',
|
|
48136
48199
|
{ id: 'tide-booking', className: 'search__bg' },
|
|
@@ -48182,7 +48245,7 @@ var SearchResultsContainer = function () {
|
|
|
48182
48245
|
handleSetIsOpen: function () {
|
|
48183
48246
|
return setItineraryOpen(!itineraryOpen);
|
|
48184
48247
|
},
|
|
48185
|
-
isLoading:
|
|
48248
|
+
isLoading: pricesAreLoading,
|
|
48186
48249
|
onEditAccommodation: handleEditAccommodation
|
|
48187
48250
|
}),
|
|
48188
48251
|
React__default['default'].createElement(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AccommodationFlyInStep, ExtendedFlightSearchResponseItem, Filter, SortByType } from '../types';
|
|
2
|
-
import { BookingPackage, BookingPackageItem, PackagingAccommodationResponse, PackagingEntry } from '@qite/tide-client/build/types';
|
|
2
|
+
import { BookingPackage, BookingPackageItem, BookingPriceDetails, PackagingAccommodationResponse, PackagingEntry } from '@qite/tide-client/build/types';
|
|
3
3
|
export interface SearchResultsState {
|
|
4
4
|
results: BookingPackageItem[];
|
|
5
5
|
filteredResults: BookingPackageItem[];
|
|
@@ -20,6 +20,7 @@ export interface SearchResultsState {
|
|
|
20
20
|
editablePackagingEntry: PackagingEntry | null;
|
|
21
21
|
transactionId: string | null;
|
|
22
22
|
accommodationFlyInStep: AccommodationFlyInStep;
|
|
23
|
+
priceDetails: BookingPriceDetails | null;
|
|
23
24
|
}
|
|
24
25
|
export declare const setResults: import('@reduxjs/toolkit').ActionCreatorWithPayload<BookingPackageItem[], 'searchResults/setResults'>,
|
|
25
26
|
setFilteredResults: import('@reduxjs/toolkit').ActionCreatorWithPayload<BookingPackageItem[], 'searchResults/setFilteredResults'>,
|
|
@@ -62,6 +63,7 @@ export declare const setResults: import('@reduxjs/toolkit').ActionCreatorWithPay
|
|
|
62
63
|
setFlyInIsOpen: import('@reduxjs/toolkit').ActionCreatorWithPayload<boolean, 'searchResults/setFlyInIsOpen'>,
|
|
63
64
|
setEditablePackagingEntry: import('@reduxjs/toolkit').ActionCreatorWithPayload<PackagingEntry | null, 'searchResults/setEditablePackagingEntry'>,
|
|
64
65
|
setTransactionId: import('@reduxjs/toolkit').ActionCreatorWithPayload<string | null, 'searchResults/setTransactionId'>,
|
|
65
|
-
setAccommodationFlyInStep: import('@reduxjs/toolkit').ActionCreatorWithPayload<AccommodationFlyInStep, 'searchResults/setAccommodationFlyInStep'
|
|
66
|
+
setAccommodationFlyInStep: import('@reduxjs/toolkit').ActionCreatorWithPayload<AccommodationFlyInStep, 'searchResults/setAccommodationFlyInStep'>,
|
|
67
|
+
setPriceDetails: import('@reduxjs/toolkit').ActionCreatorWithPayload<BookingPriceDetails | null, 'searchResults/setPriceDetails'>;
|
|
66
68
|
declare const _default: import('@reduxjs/toolkit').Reducer<SearchResultsState>;
|
|
67
69
|
export default _default;
|
package/build/build-esm/index.js
CHANGED
|
@@ -12823,7 +12823,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12823
12823
|
return ENDPOINT$8 + '/details/' + transactionId + '/alternate-flights';
|
|
12824
12824
|
};
|
|
12825
12825
|
var ENDPOINT_BOOKABLE_DATES = ENDPOINT$8 + '/bookable-dates';
|
|
12826
|
-
var ENDPOINT_PRICE_DETAILS = ENDPOINT$8 + '/price-details';
|
|
12826
|
+
var ENDPOINT_PRICE_DETAILS$1 = ENDPOINT$8 + '/price-details';
|
|
12827
12827
|
var ENDPOINT_BOOK = ENDPOINT$8 + '/book';
|
|
12828
12828
|
var ENDPOINT_UPDATE = ENDPOINT$8 + '/update';
|
|
12829
12829
|
var ENDPOINT_AGENTS = ENDPOINT$8 + '/agents';
|
|
@@ -12923,7 +12923,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12923
12923
|
return post(url, apiKey, body, config.token, signal, true);
|
|
12924
12924
|
};
|
|
12925
12925
|
var priceDetails = function (config, request, signal, languageCode) {
|
|
12926
|
-
var url = '' + config.host + ENDPOINT_PRICE_DETAILS;
|
|
12926
|
+
var url = '' + config.host + ENDPOINT_PRICE_DETAILS$1;
|
|
12927
12927
|
var apiKey = config.apiKey;
|
|
12928
12928
|
var body = JSON.stringify(request);
|
|
12929
12929
|
return post(url, apiKey, body, config.token, signal, true, languageCode);
|
|
@@ -13449,6 +13449,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13449
13449
|
var ENDPOINT = '/api/web/packaging';
|
|
13450
13450
|
var ENDPOINT_START_TRANSACTION = ENDPOINT + '/start';
|
|
13451
13451
|
var ENDPOINT_ACCOMMODATIONS = ENDPOINT + '/accommodations';
|
|
13452
|
+
var ENDPOINT_PRICE_DETAILS = ENDPOINT + '/price-details';
|
|
13452
13453
|
var ENDPOINT_ENTRY = function (magicLinkCode) {
|
|
13453
13454
|
return ENDPOINT + '/entry/' + magicLinkCode;
|
|
13454
13455
|
};
|
|
@@ -13469,6 +13470,12 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13469
13470
|
var url = '' + config.host + ENDPOINT_ENTRY(magicLinkCode);
|
|
13470
13471
|
return get(url, apiKey, config.token, signal, true);
|
|
13471
13472
|
};
|
|
13473
|
+
var getPriceDetails = function (config, request, signal) {
|
|
13474
|
+
var url = '' + config.host + ENDPOINT_PRICE_DETAILS;
|
|
13475
|
+
var apiKey = config.apiKey;
|
|
13476
|
+
var body = JSON.stringify(request);
|
|
13477
|
+
return post(url, apiKey, body, config.token, signal, true);
|
|
13478
|
+
};
|
|
13472
13479
|
|
|
13473
13480
|
exports.AllotmentType = AllotmentType;
|
|
13474
13481
|
exports.ContactForm = ContactForm;
|
|
@@ -13524,6 +13531,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13524
13531
|
exports.getLocations = getLocations;
|
|
13525
13532
|
exports.getMolliePayment = getMolliePayment;
|
|
13526
13533
|
exports.getPortal = getPortal;
|
|
13534
|
+
exports.getPriceDetails = getPriceDetails;
|
|
13527
13535
|
exports.getPrintActions = getPrintActions;
|
|
13528
13536
|
exports.getStyleSheet = getStyleSheet;
|
|
13529
13537
|
exports.getTranslationDictionary = getTranslationDictionary;
|
|
@@ -33671,7 +33679,8 @@ var initialState$1 = {
|
|
|
33671
33679
|
flyInIsOpen: false,
|
|
33672
33680
|
editablePackagingEntry: null,
|
|
33673
33681
|
transactionId: null,
|
|
33674
|
-
accommodationFlyInStep: 'details'
|
|
33682
|
+
accommodationFlyInStep: 'details',
|
|
33683
|
+
priceDetails: null
|
|
33675
33684
|
};
|
|
33676
33685
|
var searchResultsSlice = createSlice({
|
|
33677
33686
|
name: 'searchResults',
|
|
@@ -33764,6 +33773,9 @@ var searchResultsSlice = createSlice({
|
|
|
33764
33773
|
},
|
|
33765
33774
|
setAccommodationFlyInStep: function (state, action) {
|
|
33766
33775
|
state.accommodationFlyInStep = action.payload;
|
|
33776
|
+
},
|
|
33777
|
+
setPriceDetails: function (state, action) {
|
|
33778
|
+
state.priceDetails = action.payload;
|
|
33767
33779
|
}
|
|
33768
33780
|
}
|
|
33769
33781
|
});
|
|
@@ -33788,7 +33800,8 @@ _a.resetSearchState;
|
|
|
33788
33800
|
var setFlyInIsOpen = _a.setFlyInIsOpen,
|
|
33789
33801
|
setEditablePackagingEntry = _a.setEditablePackagingEntry,
|
|
33790
33802
|
setTransactionId = _a.setTransactionId,
|
|
33791
|
-
setAccommodationFlyInStep = _a.setAccommodationFlyInStep
|
|
33803
|
+
setAccommodationFlyInStep = _a.setAccommodationFlyInStep,
|
|
33804
|
+
setPriceDetails = _a.setPriceDetails;
|
|
33792
33805
|
var searchResultsReducer = searchResultsSlice.reducer;
|
|
33793
33806
|
|
|
33794
33807
|
var ItemPicker = function (_a) {
|
|
@@ -35052,14 +35065,16 @@ var getSegmentTitle = function (segment) {
|
|
|
35052
35065
|
var Itinerary = function (_a) {
|
|
35053
35066
|
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
35054
35067
|
var isOpen = _a.isOpen,
|
|
35055
|
-
handleSetIsOpen = _a.handleSetIsOpen
|
|
35056
|
-
|
|
35057
|
-
|
|
35068
|
+
handleSetIsOpen = _a.handleSetIsOpen,
|
|
35069
|
+
isLoading = _a.isLoading,
|
|
35070
|
+
onEditAccommodation = _a.onEditAccommodation;
|
|
35058
35071
|
var context = useContext(SearchResultsConfigurationContext);
|
|
35059
35072
|
var translations = getTranslations((_b = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _b !== void 0 ? _b : 'en-GB');
|
|
35060
|
-
var
|
|
35061
|
-
|
|
35062
|
-
|
|
35073
|
+
var _q = useSelector(function (state) {
|
|
35074
|
+
return state.searchResults;
|
|
35075
|
+
}),
|
|
35076
|
+
editablePackagingEntry = _q.editablePackagingEntry,
|
|
35077
|
+
priceDetails = _q.priceDetails;
|
|
35063
35078
|
var packagingEntry =
|
|
35064
35079
|
editablePackagingEntry !== null && editablePackagingEntry !== void 0
|
|
35065
35080
|
? editablePackagingEntry
|
|
@@ -35147,7 +35162,7 @@ var Itinerary = function (_a) {
|
|
|
35147
35162
|
console.log('otherSegments', otherSegments);
|
|
35148
35163
|
console.log('groupedOtherSegments', groupedOtherSegments);
|
|
35149
35164
|
var numberOfPax = ((_p = packagingEntry.pax) === null || _p === void 0 ? void 0 : _p.length) || 1;
|
|
35150
|
-
var totalPrice = packagingEntry.price || 0;
|
|
35165
|
+
var totalPrice = (priceDetails === null || priceDetails === void 0 ? void 0 : priceDetails.total) || packagingEntry.price || 0;
|
|
35151
35166
|
var pricePerPerson = totalPrice / numberOfPax;
|
|
35152
35167
|
return React__default.createElement(
|
|
35153
35168
|
'div',
|
|
@@ -35199,18 +35214,24 @@ var Itinerary = function (_a) {
|
|
|
35199
35214
|
React__default.createElement(
|
|
35200
35215
|
'div',
|
|
35201
35216
|
{ className: 'search__filter__prices' },
|
|
35202
|
-
|
|
35203
|
-
|
|
35204
|
-
|
|
35205
|
-
|
|
35206
|
-
|
|
35207
|
-
|
|
35208
|
-
|
|
35209
|
-
|
|
35210
|
-
|
|
35211
|
-
|
|
35212
|
-
|
|
35213
|
-
|
|
35217
|
+
isLoading
|
|
35218
|
+
? React__default.createElement(Spinner, null)
|
|
35219
|
+
: React__default.createElement(
|
|
35220
|
+
React__default.Fragment,
|
|
35221
|
+
null,
|
|
35222
|
+
React__default.createElement(
|
|
35223
|
+
'div',
|
|
35224
|
+
{ className: 'search__filter__prices__wrapper' },
|
|
35225
|
+
React__default.createElement('h3', { className: 'search__filter__prices--amount' }, formatPrice$2(pricePerPerson, 'EUR')),
|
|
35226
|
+
React__default.createElement('p', null, translations.SRP.PACKAGE_PRICE_PER_PERSON),
|
|
35227
|
+
React__default.createElement(
|
|
35228
|
+
'p',
|
|
35229
|
+
null,
|
|
35230
|
+
React__default.createElement('strong', null, '(', formatPrice$2(totalPrice, 'EUR'), ' ', translations.SRP.TOTAL, ')')
|
|
35231
|
+
)
|
|
35232
|
+
),
|
|
35233
|
+
React__default.createElement('button', { className: 'cta' }, translations.QSM.CONFIRM)
|
|
35234
|
+
)
|
|
35214
35235
|
),
|
|
35215
35236
|
React__default.createElement(
|
|
35216
35237
|
'div',
|
|
@@ -46990,14 +47011,6 @@ var getSelectedOptionsPerRoom = function (details) {
|
|
|
46990
47011
|
};
|
|
46991
47012
|
});
|
|
46992
47013
|
};
|
|
46993
|
-
var getRoomIndexFromLine = function (line) {
|
|
46994
|
-
var _a, _b;
|
|
46995
|
-
if (!((_a = line.pax) === null || _a === void 0 ? void 0 : _a.length)) return 0;
|
|
46996
|
-
var firstPax = __spreadArray([], line.pax, true).sort(function (a, b) {
|
|
46997
|
-
return a.order - b.order;
|
|
46998
|
-
})[0];
|
|
46999
|
-
return (_b = firstPax === null || firstPax === void 0 ? void 0 : firstPax.room) !== null && _b !== void 0 ? _b : 0;
|
|
47000
|
-
};
|
|
47001
47014
|
var getRequestRoomsFromPackagingSegments = function (entry, segments) {
|
|
47002
47015
|
var _a;
|
|
47003
47016
|
var accommodationLines = __spreadArray([], segments !== null && segments !== void 0 ? segments : [], true)
|
|
@@ -47101,11 +47114,14 @@ var SearchResultsContainer = function () {
|
|
|
47101
47114
|
detailsIsLoading = _g[0],
|
|
47102
47115
|
setDetailsIsLoading = _g[1];
|
|
47103
47116
|
var _h = useState(false),
|
|
47104
|
-
|
|
47105
|
-
|
|
47106
|
-
var _j = useState(
|
|
47107
|
-
|
|
47108
|
-
|
|
47117
|
+
pricesAreLoading = _h[0],
|
|
47118
|
+
setPricesAreLoading = _h[1];
|
|
47119
|
+
var _j = useState(false),
|
|
47120
|
+
itineraryOpen = _j[0],
|
|
47121
|
+
setItineraryOpen = _j[1];
|
|
47122
|
+
var _k = useState(null),
|
|
47123
|
+
selectedAccommodationSeed = _k[0],
|
|
47124
|
+
setSelectedAccommodationSeed = _k[1];
|
|
47109
47125
|
var panelRef = useRef(null);
|
|
47110
47126
|
var sortByTypes = [
|
|
47111
47127
|
{ direction: 'asc', label: 'default' },
|
|
@@ -47322,20 +47338,21 @@ var SearchResultsContainer = function () {
|
|
|
47322
47338
|
var details = packagingAccoSearchDetails;
|
|
47323
47339
|
if (!sourceEntry || !(details === null || details === void 0 ? void 0 : details.length)) return null;
|
|
47324
47340
|
var selectedOptionsPerRoom = getSelectedOptionsPerRoom(details);
|
|
47341
|
+
console.log('Selected options per room', selectedOptionsPerRoom);
|
|
47325
47342
|
if (!selectedOptionsPerRoom.length) return null;
|
|
47326
47343
|
var selectedHotel = details[0];
|
|
47344
|
+
var roomIndex = 0;
|
|
47327
47345
|
var updatedLines = sourceEntry.lines.map(function (line) {
|
|
47328
47346
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
47329
47347
|
if (line.serviceType !== ACCOMMODATION_SERVICE_TYPE) {
|
|
47330
47348
|
return line;
|
|
47331
47349
|
}
|
|
47332
|
-
// TODO: fix roomIndex
|
|
47333
|
-
var roomIndex = getRoomIndexFromLine(line);
|
|
47334
|
-
console.log('Processing line', line, 'with room index', roomIndex);
|
|
47335
47350
|
var selectedRoom = selectedOptionsPerRoom.find(function (x) {
|
|
47336
47351
|
return x.roomIndex === roomIndex;
|
|
47337
47352
|
});
|
|
47338
47353
|
var selectedOption = selectedRoom === null || selectedRoom === void 0 ? void 0 : selectedRoom.option;
|
|
47354
|
+
console.log('selectedRoom and selectedOption for line', line, selectedRoom, selectedOption);
|
|
47355
|
+
roomIndex++;
|
|
47339
47356
|
if (!selectedOption) {
|
|
47340
47357
|
return line;
|
|
47341
47358
|
}
|
|
@@ -47885,6 +47902,52 @@ var SearchResultsContainer = function () {
|
|
|
47885
47902
|
rooms: getRequestRoomsFromPackagingSegments(entry, sortedSegments)
|
|
47886
47903
|
};
|
|
47887
47904
|
};
|
|
47905
|
+
useEffect(
|
|
47906
|
+
function () {
|
|
47907
|
+
var fetchPriceDetails = function () {
|
|
47908
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
47909
|
+
var config, priceDetails, err_6;
|
|
47910
|
+
return __generator(this, function (_a) {
|
|
47911
|
+
switch (_a.label) {
|
|
47912
|
+
case 0:
|
|
47913
|
+
console.log(
|
|
47914
|
+
'Fetching price details for entry',
|
|
47915
|
+
editablePackagingEntry !== null && editablePackagingEntry !== void 0
|
|
47916
|
+
? editablePackagingEntry
|
|
47917
|
+
: context === null || context === void 0
|
|
47918
|
+
? void 0
|
|
47919
|
+
: context.packagingEntry
|
|
47920
|
+
);
|
|
47921
|
+
if (!context || !editablePackagingEntry) return [2 /*return*/];
|
|
47922
|
+
setPricesAreLoading(true);
|
|
47923
|
+
_a.label = 1;
|
|
47924
|
+
case 1:
|
|
47925
|
+
_a.trys.push([1, 3, , 4]);
|
|
47926
|
+
config = {
|
|
47927
|
+
host: context.tideConnection.host,
|
|
47928
|
+
apiKey: context.tideConnection.apiKey
|
|
47929
|
+
};
|
|
47930
|
+
return [4 /*yield*/, build.getPriceDetails(config, editablePackagingEntry)];
|
|
47931
|
+
case 2:
|
|
47932
|
+
priceDetails = _a.sent();
|
|
47933
|
+
dispatch(setPriceDetails(priceDetails));
|
|
47934
|
+
setPricesAreLoading(false);
|
|
47935
|
+
return [3 /*break*/, 4];
|
|
47936
|
+
case 3:
|
|
47937
|
+
err_6 = _a.sent();
|
|
47938
|
+
console.error('Error fetching price details', err_6);
|
|
47939
|
+
setPricesAreLoading(false);
|
|
47940
|
+
return [3 /*break*/, 4];
|
|
47941
|
+
case 4:
|
|
47942
|
+
return [2 /*return*/];
|
|
47943
|
+
}
|
|
47944
|
+
});
|
|
47945
|
+
});
|
|
47946
|
+
};
|
|
47947
|
+
fetchPriceDetails();
|
|
47948
|
+
},
|
|
47949
|
+
[editablePackagingEntry]
|
|
47950
|
+
);
|
|
47888
47951
|
return React__default.createElement(
|
|
47889
47952
|
'div',
|
|
47890
47953
|
{ id: 'tide-booking', className: 'search__bg' },
|
|
@@ -47936,7 +47999,7 @@ var SearchResultsContainer = function () {
|
|
|
47936
47999
|
handleSetIsOpen: function () {
|
|
47937
48000
|
return setItineraryOpen(!itineraryOpen);
|
|
47938
48001
|
},
|
|
47939
|
-
isLoading:
|
|
48002
|
+
isLoading: pricesAreLoading,
|
|
47940
48003
|
onEditAccommodation: handleEditAccommodation
|
|
47941
48004
|
}),
|
|
47942
48005
|
React__default.createElement(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AccommodationFlyInStep, ExtendedFlightSearchResponseItem, Filter, SortByType } from '../types';
|
|
2
|
-
import { BookingPackage, BookingPackageItem, PackagingAccommodationResponse, PackagingEntry } from '@qite/tide-client/build/types';
|
|
2
|
+
import { BookingPackage, BookingPackageItem, BookingPriceDetails, PackagingAccommodationResponse, PackagingEntry } from '@qite/tide-client/build/types';
|
|
3
3
|
export interface SearchResultsState {
|
|
4
4
|
results: BookingPackageItem[];
|
|
5
5
|
filteredResults: BookingPackageItem[];
|
|
@@ -20,6 +20,7 @@ export interface SearchResultsState {
|
|
|
20
20
|
editablePackagingEntry: PackagingEntry | null;
|
|
21
21
|
transactionId: string | null;
|
|
22
22
|
accommodationFlyInStep: AccommodationFlyInStep;
|
|
23
|
+
priceDetails: BookingPriceDetails | null;
|
|
23
24
|
}
|
|
24
25
|
export declare const setResults: import('@reduxjs/toolkit').ActionCreatorWithPayload<BookingPackageItem[], 'searchResults/setResults'>,
|
|
25
26
|
setFilteredResults: import('@reduxjs/toolkit').ActionCreatorWithPayload<BookingPackageItem[], 'searchResults/setFilteredResults'>,
|
|
@@ -62,6 +63,7 @@ export declare const setResults: import('@reduxjs/toolkit').ActionCreatorWithPay
|
|
|
62
63
|
setFlyInIsOpen: import('@reduxjs/toolkit').ActionCreatorWithPayload<boolean, 'searchResults/setFlyInIsOpen'>,
|
|
63
64
|
setEditablePackagingEntry: import('@reduxjs/toolkit').ActionCreatorWithPayload<PackagingEntry | null, 'searchResults/setEditablePackagingEntry'>,
|
|
64
65
|
setTransactionId: import('@reduxjs/toolkit').ActionCreatorWithPayload<string | null, 'searchResults/setTransactionId'>,
|
|
65
|
-
setAccommodationFlyInStep: import('@reduxjs/toolkit').ActionCreatorWithPayload<AccommodationFlyInStep, 'searchResults/setAccommodationFlyInStep'
|
|
66
|
+
setAccommodationFlyInStep: import('@reduxjs/toolkit').ActionCreatorWithPayload<AccommodationFlyInStep, 'searchResults/setAccommodationFlyInStep'>,
|
|
67
|
+
setPriceDetails: import('@reduxjs/toolkit').ActionCreatorWithPayload<BookingPriceDetails | null, 'searchResults/setPriceDetails'>;
|
|
66
68
|
declare const _default: import('@reduxjs/toolkit').Reducer<SearchResultsState>;
|
|
67
69
|
export default _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qite/tide-booking-component",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.100",
|
|
4
4
|
"description": "React Booking wizard & Booking product component for Tide",
|
|
5
5
|
"main": "build/build-cjs/index.js",
|
|
6
6
|
"types": "build/build-cjs/src/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@jsonurl/jsonurl": "^1.1.4",
|
|
31
31
|
"@popperjs/core": "^2.10.2",
|
|
32
|
-
"@qite/tide-client": "^1.1.
|
|
32
|
+
"@qite/tide-client": "^1.1.157",
|
|
33
33
|
"@reduxjs/toolkit": "^2.8.2",
|
|
34
34
|
"@rollup/plugin-commonjs": "^19.0.1",
|
|
35
35
|
"@rollup/plugin-json": "^4.1.0",
|
|
@@ -8,6 +8,7 @@ import { formatPrice, getTranslations } from '../../../shared/utils/localization
|
|
|
8
8
|
import { useSelector } from 'react-redux';
|
|
9
9
|
import { SearchResultsRootState } from '../../store/search-results-store';
|
|
10
10
|
import { ACCOMMODATION_SERVICE_TYPE, FLIGHT_SERVICE_TYPE } from '../../utils/query-utils';
|
|
11
|
+
import Spinner from '../spinner/spinner';
|
|
11
12
|
|
|
12
13
|
interface ItineraryProps {
|
|
13
14
|
isOpen: boolean;
|
|
@@ -104,7 +105,7 @@ const getSegmentTitle = (segment: PackagingEntryLine) => {
|
|
|
104
105
|
const Itinerary: React.FC<ItineraryProps> = ({ isOpen, handleSetIsOpen, isLoading, onEditAccommodation }) => {
|
|
105
106
|
const context = useContext(SearchResultsConfigurationContext);
|
|
106
107
|
const translations = getTranslations(context?.languageCode ?? 'en-GB');
|
|
107
|
-
const { editablePackagingEntry } = useSelector((state: SearchResultsRootState) => state.searchResults);
|
|
108
|
+
const { editablePackagingEntry, priceDetails } = useSelector((state: SearchResultsRootState) => state.searchResults);
|
|
108
109
|
|
|
109
110
|
const packagingEntry = editablePackagingEntry ?? context?.packagingEntry;
|
|
110
111
|
|
|
@@ -151,7 +152,7 @@ const Itinerary: React.FC<ItineraryProps> = ({ isOpen, handleSetIsOpen, isLoadin
|
|
|
151
152
|
console.log('groupedOtherSegments', groupedOtherSegments);
|
|
152
153
|
|
|
153
154
|
const numberOfPax = packagingEntry.pax?.length || 1;
|
|
154
|
-
const totalPrice = packagingEntry.price || 0;
|
|
155
|
+
const totalPrice = priceDetails?.total || packagingEntry.price || 0;
|
|
155
156
|
const pricePerPerson = totalPrice / numberOfPax;
|
|
156
157
|
|
|
157
158
|
return (
|
|
@@ -187,16 +188,22 @@ const Itinerary: React.FC<ItineraryProps> = ({ isOpen, handleSetIsOpen, isLoadin
|
|
|
187
188
|
</div>
|
|
188
189
|
|
|
189
190
|
<div className="search__filter__prices">
|
|
190
|
-
|
|
191
|
-
<
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
<
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
191
|
+
{isLoading ? (
|
|
192
|
+
<Spinner />
|
|
193
|
+
) : (
|
|
194
|
+
<>
|
|
195
|
+
<div className="search__filter__prices__wrapper">
|
|
196
|
+
<h3 className="search__filter__prices--amount">{formatPrice(pricePerPerson, 'EUR')}</h3>
|
|
197
|
+
<p>{translations.SRP.PACKAGE_PRICE_PER_PERSON}</p>
|
|
198
|
+
<p>
|
|
199
|
+
<strong>
|
|
200
|
+
({formatPrice(totalPrice, 'EUR')} {translations.SRP.TOTAL})
|
|
201
|
+
</strong>
|
|
202
|
+
</p>
|
|
203
|
+
</div>
|
|
204
|
+
<button className="cta">{translations.QSM.CONFIRM}</button>
|
|
205
|
+
</>
|
|
206
|
+
)}
|
|
200
207
|
</div>
|
|
201
208
|
|
|
202
209
|
<div className="search__filter__itinerary">
|
|
@@ -16,7 +16,8 @@ import {
|
|
|
16
16
|
setPackagingAccoSearchDetails,
|
|
17
17
|
setEditablePackagingEntry,
|
|
18
18
|
setTransactionId,
|
|
19
|
-
setAccommodationFlyInStep
|
|
19
|
+
setAccommodationFlyInStep,
|
|
20
|
+
setPriceDetails
|
|
20
21
|
} from '../../store/search-results-slice';
|
|
21
22
|
import { AccommodationFlyInStep, Filter, SearchSeed, SortByType } from '../../types';
|
|
22
23
|
import useMediaQuery from '../../../shared/utils/use-media-query-util';
|
|
@@ -37,7 +38,8 @@ import {
|
|
|
37
38
|
PortalQsmType,
|
|
38
39
|
PackagingEntry,
|
|
39
40
|
startTransaction,
|
|
40
|
-
PackagingEntryLine
|
|
41
|
+
PackagingEntryLine,
|
|
42
|
+
getPriceDetails
|
|
41
43
|
} from '@qite/tide-client';
|
|
42
44
|
import { getDateFromParams, getNumberFromParams, getRoomsFromParams, getStringFromParams } from '../../../shared/utils/query-string-util';
|
|
43
45
|
import { first, last, range } from 'lodash';
|
|
@@ -106,6 +108,7 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
106
108
|
const [filtersOpen, setFiltersOpen] = useState(false);
|
|
107
109
|
|
|
108
110
|
const [detailsIsLoading, setDetailsIsLoading] = useState(false);
|
|
111
|
+
const [pricesAreLoading, setPricesAreLoading] = useState(false);
|
|
109
112
|
|
|
110
113
|
const [itineraryOpen, setItineraryOpen] = useState(false);
|
|
111
114
|
|
|
@@ -326,7 +329,6 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
326
329
|
|
|
327
330
|
const handleConfirmHotelSwap = () => {
|
|
328
331
|
const updatedEntry = swapHotelInPackagingEntry();
|
|
329
|
-
console.log('Updated entry after hotel swap', updatedEntry);
|
|
330
332
|
if (!updatedEntry) return;
|
|
331
333
|
|
|
332
334
|
dispatch(setEditablePackagingEntry(updatedEntry));
|
|
@@ -344,16 +346,15 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
344
346
|
|
|
345
347
|
const selectedHotel = details[0];
|
|
346
348
|
|
|
349
|
+
let roomIndex = 0;
|
|
347
350
|
const updatedLines = sourceEntry.lines.map((line) => {
|
|
348
351
|
if (line.serviceType !== ACCOMMODATION_SERVICE_TYPE) {
|
|
349
352
|
return line;
|
|
350
353
|
}
|
|
351
354
|
|
|
352
|
-
// TODO: fix roomIndex
|
|
353
|
-
const roomIndex = getRoomIndexFromLine(line);
|
|
354
|
-
console.log('Processing line', line, 'with room index', roomIndex);
|
|
355
355
|
const selectedRoom = selectedOptionsPerRoom.find((x) => x.roomIndex === roomIndex);
|
|
356
356
|
const selectedOption = selectedRoom?.option;
|
|
357
|
+
roomIndex++;
|
|
357
358
|
|
|
358
359
|
if (!selectedOption) {
|
|
359
360
|
return line;
|
|
@@ -443,8 +444,6 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
443
444
|
const searchRequest = buildSearchFromSeed(seed);
|
|
444
445
|
const packageSearchResults = await search(config, searchRequest);
|
|
445
446
|
|
|
446
|
-
console.log('Search results', packageSearchResults);
|
|
447
|
-
|
|
448
447
|
const enrichedFilters = enrichFiltersWithResults(packageSearchResults, context.filters, context.tags ?? []);
|
|
449
448
|
if (!initialFiltersSet) {
|
|
450
449
|
dispatch(resetFilters(enrichedFilters));
|
|
@@ -503,7 +502,6 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
503
502
|
searchRequest.portalId = context.portalId;
|
|
504
503
|
searchRequest.agentId = context.agentId;
|
|
505
504
|
|
|
506
|
-
console.log('Packaging accommodation search request', searchRequest);
|
|
507
505
|
const packageAccoSearchResults = await searchPackagingAccommodations(config, searchRequest);
|
|
508
506
|
|
|
509
507
|
const enrichedFilters = enrichFiltersWithPackageAccoResults(packageAccoSearchResults, context.filters, context.tags ?? []);
|
|
@@ -528,7 +526,6 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
528
526
|
if (!context || context.showMockup) return;
|
|
529
527
|
|
|
530
528
|
let currentTransactionId = context?.packagingEntry?.transactionId || transactionId;
|
|
531
|
-
console.log('Current transaction ID', currentTransactionId);
|
|
532
529
|
if (!currentTransactionId) {
|
|
533
530
|
dispatch(setIsLoading(true));
|
|
534
531
|
currentTransactionId = await runStartTransaction();
|
|
@@ -726,7 +723,6 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
726
723
|
};
|
|
727
724
|
|
|
728
725
|
const packageAccoSearchDetails = await searchPackagingAccommodations(config, detailSearchRequest);
|
|
729
|
-
console.log('Packaging Acco Search details', packageAccoSearchDetails);
|
|
730
726
|
dispatch(setPackagingAccoSearchDetails(packageAccoSearchDetails));
|
|
731
727
|
setDetailsIsLoading(false);
|
|
732
728
|
} catch (err) {
|
|
@@ -801,6 +797,28 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
801
797
|
};
|
|
802
798
|
};
|
|
803
799
|
|
|
800
|
+
useEffect(() => {
|
|
801
|
+
const fetchPriceDetails = async () => {
|
|
802
|
+
if (!context || !editablePackagingEntry) return;
|
|
803
|
+
setPricesAreLoading(true);
|
|
804
|
+
try {
|
|
805
|
+
const config: TideClientConfig = {
|
|
806
|
+
host: context.tideConnection.host,
|
|
807
|
+
apiKey: context.tideConnection.apiKey
|
|
808
|
+
};
|
|
809
|
+
|
|
810
|
+
const priceDetails = await getPriceDetails(config, editablePackagingEntry);
|
|
811
|
+
dispatch(setPriceDetails(priceDetails));
|
|
812
|
+
setPricesAreLoading(false);
|
|
813
|
+
} catch (err) {
|
|
814
|
+
console.error('Error fetching price details', err);
|
|
815
|
+
setPricesAreLoading(false);
|
|
816
|
+
}
|
|
817
|
+
};
|
|
818
|
+
|
|
819
|
+
fetchPriceDetails();
|
|
820
|
+
}, [editablePackagingEntry]);
|
|
821
|
+
|
|
804
822
|
return (
|
|
805
823
|
<div id="tide-booking" className="search__bg">
|
|
806
824
|
{context && (
|
|
@@ -838,7 +856,7 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
838
856
|
<Itinerary
|
|
839
857
|
isOpen={itineraryOpen}
|
|
840
858
|
handleSetIsOpen={() => setItineraryOpen(!itineraryOpen)}
|
|
841
|
-
isLoading={
|
|
859
|
+
isLoading={pricesAreLoading}
|
|
842
860
|
onEditAccommodation={handleEditAccommodation}
|
|
843
861
|
/>
|
|
844
862
|
)}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
2
2
|
import { AccommodationFlyInStep, ExtendedFlightSearchResponseItem, Filter, SortByType } from '../types';
|
|
3
|
-
import { BookingPackage, BookingPackageItem, PackagingAccommodationResponse, PackagingEntry } from '@qite/tide-client/build/types';
|
|
3
|
+
import { BookingPackage, BookingPackageItem, BookingPriceDetails, PackagingAccommodationResponse, PackagingEntry } from '@qite/tide-client/build/types';
|
|
4
4
|
|
|
5
5
|
export interface SearchResultsState {
|
|
6
6
|
results: BookingPackageItem[];
|
|
@@ -22,6 +22,7 @@ export interface SearchResultsState {
|
|
|
22
22
|
editablePackagingEntry: PackagingEntry | null;
|
|
23
23
|
transactionId: string | null;
|
|
24
24
|
accommodationFlyInStep: AccommodationFlyInStep;
|
|
25
|
+
priceDetails: BookingPriceDetails | null;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
const initialState: SearchResultsState = {
|
|
@@ -43,7 +44,8 @@ const initialState: SearchResultsState = {
|
|
|
43
44
|
flyInIsOpen: false,
|
|
44
45
|
editablePackagingEntry: null,
|
|
45
46
|
transactionId: null,
|
|
46
|
-
accommodationFlyInStep: 'details'
|
|
47
|
+
accommodationFlyInStep: 'details',
|
|
48
|
+
priceDetails: null
|
|
47
49
|
};
|
|
48
50
|
|
|
49
51
|
const searchResultsSlice = createSlice({
|
|
@@ -138,6 +140,9 @@ const searchResultsSlice = createSlice({
|
|
|
138
140
|
},
|
|
139
141
|
setAccommodationFlyInStep(state, action: PayloadAction<AccommodationFlyInStep>) {
|
|
140
142
|
state.accommodationFlyInStep = action.payload;
|
|
143
|
+
},
|
|
144
|
+
setPriceDetails(state, action: PayloadAction<BookingPriceDetails | null>) {
|
|
145
|
+
state.priceDetails = action.payload;
|
|
141
146
|
}
|
|
142
147
|
}
|
|
143
148
|
});
|
|
@@ -164,7 +169,8 @@ export const {
|
|
|
164
169
|
setFlyInIsOpen,
|
|
165
170
|
setEditablePackagingEntry,
|
|
166
171
|
setTransactionId,
|
|
167
|
-
setAccommodationFlyInStep
|
|
172
|
+
setAccommodationFlyInStep,
|
|
173
|
+
setPriceDetails
|
|
168
174
|
} = searchResultsSlice.actions;
|
|
169
175
|
|
|
170
176
|
export default searchResultsSlice.reducer;
|