@qite/tide-booking-component 1.4.71 → 1.4.73
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 +166 -136
- package/build/build-cjs/src/qsm/components/search-input/index.d.ts +1 -0
- package/build/build-esm/index.js +162 -132
- package/build/build-esm/src/qsm/components/search-input/index.d.ts +1 -0
- package/package.json +2 -2
- package/src/qsm/components/QSMContainer/qsm-container.tsx +17 -11
- package/src/qsm/components/search-input/index.tsx +16 -4
- package/src/qsm/components/search-input-group/index.tsx +9 -2
- package/src/search-results/components/search-results-container/flight-search-results.tsx +66 -65
- package/src/search-results/components/search-results-container/search-results-container.tsx +1 -1
- package/styles/booking-search-results.scss +2 -1
package/build/build-cjs/index.js
CHANGED
|
@@ -12915,6 +12915,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12915
12915
|
var ENDPOINT_PORTAL = function (portalId) {
|
|
12916
12916
|
return ENDPOINT$4 + '/portal/' + portalId;
|
|
12917
12917
|
};
|
|
12918
|
+
var ENDPOINT_AIRPORT = '/api/web/entity/airport';
|
|
12918
12919
|
/**
|
|
12919
12920
|
* api/search/countries
|
|
12920
12921
|
* Gets all Countries
|
|
@@ -12927,6 +12928,13 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12927
12928
|
var apiKey = config.apiKey;
|
|
12928
12929
|
return get(url, apiKey, config.token, signal, true);
|
|
12929
12930
|
};
|
|
12931
|
+
var searchCountries = function (config, searchTerm, signal) {
|
|
12932
|
+
var apiKey = config.apiKey;
|
|
12933
|
+
var safeSearch = searchTerm.replace(/'/g, "''");
|
|
12934
|
+
var filter = "$skip=0&$top=20&$orderby=name%20asc&$filter=contains(name,'" + safeSearch.toLowerCase() + "')";
|
|
12935
|
+
var url = '' + config.host + ENDPOINT_COUNTRIES + '?' + filter;
|
|
12936
|
+
return get(url, apiKey, config.token, signal, true);
|
|
12937
|
+
};
|
|
12930
12938
|
var searchRegions = function (config, searchTerm, signal) {
|
|
12931
12939
|
var apiKey = config.apiKey;
|
|
12932
12940
|
var safeSearch = searchTerm.replace(/'/g, "''");
|
|
@@ -12953,6 +12961,11 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12953
12961
|
var apiKey = config.apiKey;
|
|
12954
12962
|
return get(url, apiKey, config.token, signal, true);
|
|
12955
12963
|
};
|
|
12964
|
+
var getAirports = function (config, signal) {
|
|
12965
|
+
var url = '' + config.host + ENDPOINT_AIRPORT;
|
|
12966
|
+
var apiKey = config.apiKey;
|
|
12967
|
+
return get(url, apiKey, config.token, signal, true);
|
|
12968
|
+
};
|
|
12956
12969
|
|
|
12957
12970
|
var createParams = function (filter, all, gridColumns, mode, forceToLower) {
|
|
12958
12971
|
var params = {};
|
|
@@ -13332,6 +13345,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13332
13345
|
exports.forgotPassword = forgotPassword;
|
|
13333
13346
|
exports.generateBookingAccommodations = generateBookingAccommodations;
|
|
13334
13347
|
exports.getAffiliates = getAffiliates;
|
|
13348
|
+
exports.getAirports = getAirports;
|
|
13335
13349
|
exports.getAllotment = getAllotment;
|
|
13336
13350
|
exports.getAllotmentAvailability = getAllotmentAvailability;
|
|
13337
13351
|
exports.getAllotmentList = getAllotmentList;
|
|
@@ -13356,6 +13370,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13356
13370
|
exports.print = print;
|
|
13357
13371
|
exports.resetPassword = resetPassword;
|
|
13358
13372
|
exports.search = search;
|
|
13373
|
+
exports.searchCountries = searchCountries;
|
|
13359
13374
|
exports.searchElastic = searchElastic;
|
|
13360
13375
|
exports.searchFlightPool = searchFlightPool;
|
|
13361
13376
|
exports.searchLocations = searchLocations;
|
|
@@ -31080,6 +31095,24 @@ var Icon$2 = function (_a) {
|
|
|
31080
31095
|
}
|
|
31081
31096
|
};
|
|
31082
31097
|
|
|
31098
|
+
var SearchResultsConfigurationContext = React__default['default'].createContext(undefined);
|
|
31099
|
+
|
|
31100
|
+
var Spinner = function () {
|
|
31101
|
+
var _a;
|
|
31102
|
+
var context = React.useContext(SearchResultsConfigurationContext);
|
|
31103
|
+
var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
|
|
31104
|
+
return React__default['default'].createElement(
|
|
31105
|
+
'div',
|
|
31106
|
+
{ className: 'spinner__container' },
|
|
31107
|
+
React__default['default'].createElement('span', { className: 'spinner__icon' }),
|
|
31108
|
+
React__default['default'].createElement(
|
|
31109
|
+
'span',
|
|
31110
|
+
{ className: 'spinner__label' },
|
|
31111
|
+
translations === null || translations === void 0 ? void 0 : translations.SRP.LOADING
|
|
31112
|
+
)
|
|
31113
|
+
);
|
|
31114
|
+
};
|
|
31115
|
+
|
|
31083
31116
|
var SearchInput = function (_a) {
|
|
31084
31117
|
var searchResults = _a.searchResults,
|
|
31085
31118
|
onOptionSelect = _a.onOptionSelect,
|
|
@@ -31087,7 +31120,8 @@ var SearchInput = function (_a) {
|
|
|
31087
31120
|
_a.label;
|
|
31088
31121
|
var isSecondInput = _a.isSecondInput,
|
|
31089
31122
|
isDoubleInput = _a.isDoubleInput,
|
|
31090
|
-
isDisabled = _a.isDisabled
|
|
31123
|
+
isDisabled = _a.isDisabled,
|
|
31124
|
+
isLoading = _a.isLoading;
|
|
31091
31125
|
if (isDisabled) {
|
|
31092
31126
|
return null;
|
|
31093
31127
|
}
|
|
@@ -31106,9 +31140,9 @@ var SearchInput = function (_a) {
|
|
|
31106
31140
|
})
|
|
31107
31141
|
);
|
|
31108
31142
|
};
|
|
31109
|
-
if (searchResults.length === 0) {
|
|
31110
|
-
|
|
31111
|
-
}
|
|
31143
|
+
// if (searchResults.length === 0) {
|
|
31144
|
+
// return null;
|
|
31145
|
+
// }
|
|
31112
31146
|
return React__default['default'].createElement(
|
|
31113
31147
|
'div',
|
|
31114
31148
|
{
|
|
@@ -31116,6 +31150,7 @@ var SearchInput = function (_a) {
|
|
|
31116
31150
|
.concat(isSecondInput ? ' qsm__double-input-options--second-input' : '')
|
|
31117
31151
|
.concat(isDoubleInput ? ' qsm__double-input-options--splittable' : '')
|
|
31118
31152
|
},
|
|
31153
|
+
isLoading && React__default['default'].createElement(Spinner, null),
|
|
31119
31154
|
searchResults.map(function (option, index) {
|
|
31120
31155
|
return React__default['default'].createElement(
|
|
31121
31156
|
'div',
|
|
@@ -32443,6 +32478,9 @@ var SearchInputGroup = function (_a) {
|
|
|
32443
32478
|
placeholder = fieldConfig.placeholder,
|
|
32444
32479
|
options = fieldConfig.options,
|
|
32445
32480
|
autoComplete = fieldConfig.autoComplete;
|
|
32481
|
+
var _j = React.useState(false),
|
|
32482
|
+
isLoading = _j[0],
|
|
32483
|
+
setIsLoading = _j[1];
|
|
32446
32484
|
var selector = React.useMemo(
|
|
32447
32485
|
function () {
|
|
32448
32486
|
return function (state) {
|
|
@@ -32453,11 +32491,11 @@ var SearchInputGroup = function (_a) {
|
|
|
32453
32491
|
[fieldKey]
|
|
32454
32492
|
);
|
|
32455
32493
|
var value = reactRedux.useSelector(selector);
|
|
32456
|
-
var
|
|
32494
|
+
var _k = reactRedux.useSelector(function (state) {
|
|
32457
32495
|
return state.qsm;
|
|
32458
32496
|
}),
|
|
32459
|
-
searchResults =
|
|
32460
|
-
activeSearchField =
|
|
32497
|
+
searchResults = _k.searchResults,
|
|
32498
|
+
activeSearchField = _k.activeSearchField;
|
|
32461
32499
|
var selectedOption = options.find(function (option) {
|
|
32462
32500
|
return option.value === value;
|
|
32463
32501
|
});
|
|
@@ -32485,6 +32523,7 @@ var SearchInputGroup = function (_a) {
|
|
|
32485
32523
|
// if field has custom onChange (API search)
|
|
32486
32524
|
if (fieldConfig.onChange) {
|
|
32487
32525
|
fieldConfig.onChange(input);
|
|
32526
|
+
setIsLoading(true);
|
|
32488
32527
|
return;
|
|
32489
32528
|
}
|
|
32490
32529
|
// fallback to local filtering
|
|
@@ -32492,6 +32531,13 @@ var SearchInputGroup = function (_a) {
|
|
|
32492
32531
|
},
|
|
32493
32532
|
[dispatch, fieldKey, small, match, fieldConfig]
|
|
32494
32533
|
);
|
|
32534
|
+
React.useEffect(
|
|
32535
|
+
function () {
|
|
32536
|
+
console.log('options updated, resetting loading state');
|
|
32537
|
+
setIsLoading(false);
|
|
32538
|
+
},
|
|
32539
|
+
[options]
|
|
32540
|
+
);
|
|
32495
32541
|
React.useEffect(
|
|
32496
32542
|
function () {
|
|
32497
32543
|
if (!value || activeSearchField !== fieldKey) return;
|
|
@@ -32609,7 +32655,8 @@ var SearchInputGroup = function (_a) {
|
|
|
32609
32655
|
label: label,
|
|
32610
32656
|
isSecondInput: isSecondInput,
|
|
32611
32657
|
isDoubleInput: isDoubleInput,
|
|
32612
|
-
isDisabled: isDisabled
|
|
32658
|
+
isDisabled: isDisabled,
|
|
32659
|
+
isLoading: isLoading
|
|
32613
32660
|
})
|
|
32614
32661
|
);
|
|
32615
32662
|
};
|
|
@@ -32982,6 +33029,10 @@ var QSMContainer = function () {
|
|
|
32982
33029
|
if (fromDate || toDate) return;
|
|
32983
33030
|
var startDate = dateFns.addMonths(new Date(), 1);
|
|
32984
33031
|
var endDate = dateFns.addDays(startDate, 7);
|
|
33032
|
+
if (qsmType === 'groupTour') {
|
|
33033
|
+
startDate = new Date();
|
|
33034
|
+
endDate = dateFns.addYears(startDate, 1);
|
|
33035
|
+
}
|
|
32985
33036
|
dispatch(setFromDate(startDate.toISOString()));
|
|
32986
33037
|
dispatch(setToDate(endDate.toISOString()));
|
|
32987
33038
|
},
|
|
@@ -33007,17 +33058,16 @@ var QSMContainer = function () {
|
|
|
33007
33058
|
};
|
|
33008
33059
|
var handleQsmTypeChange = function (value) {
|
|
33009
33060
|
dispatch(setSelectedQsmType(value));
|
|
33061
|
+
var startDate = dateFns.addMonths(new Date(), 1);
|
|
33062
|
+
var endDate = dateFns.addDays(startDate, 7);
|
|
33010
33063
|
if (value === 'groupTour') {
|
|
33011
|
-
|
|
33012
|
-
|
|
33013
|
-
toDate: dateFns.addYears(new Date(fromDate !== null && fromDate !== void 0 ? fromDate : Date.now()), 1)
|
|
33014
|
-
});
|
|
33015
|
-
} else {
|
|
33016
|
-
handleDateChange({
|
|
33017
|
-
fromDate: new Date(fromDate !== null && fromDate !== void 0 ? fromDate : Date.now()),
|
|
33018
|
-
toDate: dateFns.addDays(new Date(fromDate !== null && fromDate !== void 0 ? fromDate : Date.now()), 7)
|
|
33019
|
-
});
|
|
33064
|
+
startDate = new Date();
|
|
33065
|
+
endDate = dateFns.addYears(startDate, 1);
|
|
33020
33066
|
}
|
|
33067
|
+
handleDateChange({
|
|
33068
|
+
fromDate: startDate,
|
|
33069
|
+
toDate: endDate
|
|
33070
|
+
});
|
|
33021
33071
|
};
|
|
33022
33072
|
var handleSubmit = function () {
|
|
33023
33073
|
if (!onSubmit) return;
|
|
@@ -33475,8 +33525,6 @@ var QSM = function (_a) {
|
|
|
33475
33525
|
);
|
|
33476
33526
|
};
|
|
33477
33527
|
|
|
33478
|
-
var SearchResultsConfigurationContext = React__default['default'].createContext(undefined);
|
|
33479
|
-
|
|
33480
33528
|
var _a;
|
|
33481
33529
|
var initialState$1 = {
|
|
33482
33530
|
results: [],
|
|
@@ -34613,22 +34661,6 @@ var Icon$1 = function (_a) {
|
|
|
34613
34661
|
}
|
|
34614
34662
|
};
|
|
34615
34663
|
|
|
34616
|
-
var Spinner = function () {
|
|
34617
|
-
var _a;
|
|
34618
|
-
var context = React.useContext(SearchResultsConfigurationContext);
|
|
34619
|
-
var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
|
|
34620
|
-
return React__default['default'].createElement(
|
|
34621
|
-
'div',
|
|
34622
|
-
{ className: 'spinner__container' },
|
|
34623
|
-
React__default['default'].createElement('span', { className: 'spinner__icon' }),
|
|
34624
|
-
React__default['default'].createElement(
|
|
34625
|
-
'span',
|
|
34626
|
-
{ className: 'spinner__label' },
|
|
34627
|
-
translations === null || translations === void 0 ? void 0 : translations.SRP.LOADING
|
|
34628
|
-
)
|
|
34629
|
-
);
|
|
34630
|
-
};
|
|
34631
|
-
|
|
34632
34664
|
var getDepartureTime = function (flight) {
|
|
34633
34665
|
var _a, _b;
|
|
34634
34666
|
if (lodash.isEmpty(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) return '';
|
|
@@ -40917,33 +40949,96 @@ var FlightResultsContainer = function (_a) {
|
|
|
40917
40949
|
React__default['default'].createElement(
|
|
40918
40950
|
'div',
|
|
40919
40951
|
{ className: 'search__results' },
|
|
40920
|
-
|
|
40921
|
-
|
|
40922
|
-
|
|
40923
|
-
|
|
40924
|
-
|
|
40925
|
-
|
|
40952
|
+
React__default['default'].createElement(
|
|
40953
|
+
React__default['default'].Fragment,
|
|
40954
|
+
null,
|
|
40955
|
+
isMobile &&
|
|
40956
|
+
React__default['default'].createElement(
|
|
40957
|
+
'div',
|
|
40958
|
+
{ className: 'search__result-row' },
|
|
40959
|
+
React__default['default'].createElement(
|
|
40960
|
+
'div',
|
|
40961
|
+
{ className: 'search__results__actions' },
|
|
40962
|
+
(context === null || context === void 0 ? void 0 : context.showFilters) &&
|
|
40963
|
+
React__default['default'].createElement(
|
|
40964
|
+
'div',
|
|
40965
|
+
{
|
|
40966
|
+
className: 'cta cta--filter',
|
|
40967
|
+
onClick: function () {
|
|
40968
|
+
return setFiltersOpen(true);
|
|
40969
|
+
}
|
|
40970
|
+
},
|
|
40971
|
+
React__default['default'].createElement(Icon$1, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
|
|
40972
|
+
translations.SRP.FILTERS
|
|
40973
|
+
)
|
|
40974
|
+
),
|
|
40975
|
+
sortByTypes &&
|
|
40976
|
+
sortByTypes.length > 0 &&
|
|
40977
|
+
React__default['default'].createElement(ItemPicker, {
|
|
40978
|
+
items: sortByTypes,
|
|
40979
|
+
selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
|
|
40980
|
+
selectedSortByType: selectedSortByType || undefined,
|
|
40981
|
+
label: translations.SRP.SORTBY,
|
|
40982
|
+
placeholder: translations.SRP.SORTBY,
|
|
40983
|
+
classModifier: 'travel-class-picker__items',
|
|
40984
|
+
valueFormatter: function (value, direction) {
|
|
40985
|
+
return getSortingName(translations, findSortByType(value, direction !== null && direction !== void 0 ? direction : 'asc'));
|
|
40986
|
+
},
|
|
40987
|
+
onPick: handleSortChange
|
|
40988
|
+
})
|
|
40989
|
+
),
|
|
40990
|
+
React__default['default'].createElement(
|
|
40991
|
+
'div',
|
|
40992
|
+
{ className: 'search__result-row' },
|
|
40993
|
+
React__default['default'].createElement(
|
|
40994
|
+
'span',
|
|
40995
|
+
{ className: 'search__result-row-text' },
|
|
40996
|
+
!flightsLoading &&
|
|
40997
|
+
React__default['default'].createElement(
|
|
40998
|
+
React__default['default'].Fragment,
|
|
40999
|
+
null,
|
|
41000
|
+
(results === null || results === void 0 ? void 0 : results.length) &&
|
|
41001
|
+
React__default['default'].createElement(React__default['default'].Fragment, null, results.length, ' ', translations.SRP.TOTAL_RESULTS_LABEL)
|
|
41002
|
+
)
|
|
41003
|
+
),
|
|
41004
|
+
!isMobile &&
|
|
41005
|
+
React__default['default'].createElement(
|
|
41006
|
+
React__default['default'].Fragment,
|
|
41007
|
+
null,
|
|
40926
41008
|
React__default['default'].createElement(
|
|
40927
41009
|
'div',
|
|
40928
|
-
{ className: 'search__result-row' },
|
|
41010
|
+
{ className: 'search__result-row-filter' },
|
|
41011
|
+
React__default['default'].createElement(ItemPicker, {
|
|
41012
|
+
items: selectionTypes,
|
|
41013
|
+
selection:
|
|
41014
|
+
((_c = selectionTypes.find(function (type) {
|
|
41015
|
+
return type.code === flightSelectionType;
|
|
41016
|
+
})) === null || _c === void 0
|
|
41017
|
+
? void 0
|
|
41018
|
+
: _c.label) || undefined,
|
|
41019
|
+
label: 'Selection Type',
|
|
41020
|
+
placeholder: 'Selection Type',
|
|
41021
|
+
classModifier: 'travel-class-picker__items',
|
|
41022
|
+
valueFormatter: function (value) {
|
|
41023
|
+
return value;
|
|
41024
|
+
},
|
|
41025
|
+
onPick: function (value) {
|
|
41026
|
+
var _a;
|
|
41027
|
+
return setFlightSelectionType(
|
|
41028
|
+
((_a = selectionTypes.find(function (type) {
|
|
41029
|
+
return type.label === value;
|
|
41030
|
+
})) === null || _a === void 0
|
|
41031
|
+
? void 0
|
|
41032
|
+
: _a.code) || 'independent'
|
|
41033
|
+
);
|
|
41034
|
+
}
|
|
41035
|
+
})
|
|
41036
|
+
),
|
|
41037
|
+
sortByTypes &&
|
|
41038
|
+
sortByTypes.length > 0 &&
|
|
40929
41039
|
React__default['default'].createElement(
|
|
40930
41040
|
'div',
|
|
40931
|
-
{ className: '
|
|
40932
|
-
(context === null || context === void 0 ? void 0 : context.showFilters) &&
|
|
40933
|
-
React__default['default'].createElement(
|
|
40934
|
-
'div',
|
|
40935
|
-
{
|
|
40936
|
-
className: 'cta cta--filter',
|
|
40937
|
-
onClick: function () {
|
|
40938
|
-
return setFiltersOpen(true);
|
|
40939
|
-
}
|
|
40940
|
-
},
|
|
40941
|
-
React__default['default'].createElement(Icon$1, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
|
|
40942
|
-
translations.SRP.FILTERS
|
|
40943
|
-
)
|
|
40944
|
-
),
|
|
40945
|
-
sortByTypes &&
|
|
40946
|
-
sortByTypes.length > 0 &&
|
|
41041
|
+
{ className: 'search__result-row-filter' },
|
|
40947
41042
|
React__default['default'].createElement(ItemPicker, {
|
|
40948
41043
|
items: sortByTypes,
|
|
40949
41044
|
selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
|
|
@@ -40956,85 +41051,20 @@ var FlightResultsContainer = function (_a) {
|
|
|
40956
41051
|
},
|
|
40957
41052
|
onPick: handleSortChange
|
|
40958
41053
|
})
|
|
40959
|
-
),
|
|
40960
|
-
React__default['default'].createElement(
|
|
40961
|
-
'div',
|
|
40962
|
-
{ className: 'search__result-row' },
|
|
40963
|
-
React__default['default'].createElement(
|
|
40964
|
-
'span',
|
|
40965
|
-
{ className: 'search__result-row-text' },
|
|
40966
|
-
!flightsLoading &&
|
|
40967
|
-
React__default['default'].createElement(
|
|
40968
|
-
React__default['default'].Fragment,
|
|
40969
|
-
null,
|
|
40970
|
-
(results === null || results === void 0 ? void 0 : results.length) && results.length,
|
|
40971
|
-
' ',
|
|
40972
|
-
translations.SRP.TOTAL_RESULTS_LABEL
|
|
40973
|
-
)
|
|
40974
|
-
),
|
|
40975
|
-
!isMobile &&
|
|
40976
|
-
React__default['default'].createElement(
|
|
40977
|
-
React__default['default'].Fragment,
|
|
40978
|
-
null,
|
|
40979
|
-
React__default['default'].createElement(
|
|
40980
|
-
'div',
|
|
40981
|
-
{ className: 'search__result-row-filter' },
|
|
40982
|
-
React__default['default'].createElement(ItemPicker, {
|
|
40983
|
-
items: selectionTypes,
|
|
40984
|
-
selection:
|
|
40985
|
-
((_c = selectionTypes.find(function (type) {
|
|
40986
|
-
return type.code === flightSelectionType;
|
|
40987
|
-
})) === null || _c === void 0
|
|
40988
|
-
? void 0
|
|
40989
|
-
: _c.label) || undefined,
|
|
40990
|
-
label: 'Selection Type',
|
|
40991
|
-
placeholder: 'Selection Type',
|
|
40992
|
-
classModifier: 'travel-class-picker__items',
|
|
40993
|
-
valueFormatter: function (value) {
|
|
40994
|
-
return value;
|
|
40995
|
-
},
|
|
40996
|
-
onPick: function (value) {
|
|
40997
|
-
var _a;
|
|
40998
|
-
return setFlightSelectionType(
|
|
40999
|
-
((_a = selectionTypes.find(function (type) {
|
|
41000
|
-
return type.label === value;
|
|
41001
|
-
})) === null || _a === void 0
|
|
41002
|
-
? void 0
|
|
41003
|
-
: _a.code) || 'independent'
|
|
41004
|
-
);
|
|
41005
|
-
}
|
|
41006
|
-
})
|
|
41007
|
-
),
|
|
41008
|
-
sortByTypes &&
|
|
41009
|
-
sortByTypes.length > 0 &&
|
|
41010
|
-
React__default['default'].createElement(
|
|
41011
|
-
'div',
|
|
41012
|
-
{ className: 'search__result-row-filter' },
|
|
41013
|
-
React__default['default'].createElement(ItemPicker, {
|
|
41014
|
-
items: sortByTypes,
|
|
41015
|
-
selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
|
|
41016
|
-
selectedSortByType: selectedSortByType || undefined,
|
|
41017
|
-
label: translations.SRP.SORTBY,
|
|
41018
|
-
placeholder: translations.SRP.SORTBY,
|
|
41019
|
-
classModifier: 'travel-class-picker__items',
|
|
41020
|
-
valueFormatter: function (value, direction) {
|
|
41021
|
-
return getSortingName(translations, findSortByType(value, direction !== null && direction !== void 0 ? direction : 'asc'));
|
|
41022
|
-
},
|
|
41023
|
-
onPick: handleSortChange
|
|
41024
|
-
})
|
|
41025
|
-
)
|
|
41026
41054
|
)
|
|
41027
|
-
),
|
|
41028
|
-
React__default['default'].createElement(
|
|
41029
|
-
'div',
|
|
41030
|
-
{ className: 'search__results__wrapper' },
|
|
41031
|
-
(context === null || context === void 0 ? void 0 : context.type) == 'flight' &&
|
|
41032
|
-
(context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
|
|
41033
|
-
results &&
|
|
41034
|
-
results.length > 0 &&
|
|
41035
|
-
React__default['default'].createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
|
|
41036
41055
|
)
|
|
41037
|
-
|
|
41056
|
+
),
|
|
41057
|
+
React__default['default'].createElement(
|
|
41058
|
+
'div',
|
|
41059
|
+
{ className: 'search__results__wrapper' },
|
|
41060
|
+
flightsLoading && React__default['default'].createElement(Spinner, null),
|
|
41061
|
+
(context === null || context === void 0 ? void 0 : context.type) == 'flight' &&
|
|
41062
|
+
(context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
|
|
41063
|
+
results &&
|
|
41064
|
+
results.length > 0 &&
|
|
41065
|
+
React__default['default'].createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
|
|
41066
|
+
)
|
|
41067
|
+
)
|
|
41038
41068
|
)
|
|
41039
41069
|
);
|
|
41040
41070
|
};
|
|
@@ -41746,7 +41776,7 @@ var SearchResultsContainer = function () {
|
|
|
41746
41776
|
var room = { index: i, pax: [] };
|
|
41747
41777
|
lodash.range(0, x.adults).forEach(function () {
|
|
41748
41778
|
room.pax.push({
|
|
41749
|
-
age:
|
|
41779
|
+
age: 30
|
|
41750
41780
|
});
|
|
41751
41781
|
});
|
|
41752
41782
|
x.childAges.forEach(function (x) {
|
package/build/build-esm/index.js
CHANGED
|
@@ -12946,6 +12946,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12946
12946
|
var ENDPOINT_PORTAL = function (portalId) {
|
|
12947
12947
|
return ENDPOINT$4 + '/portal/' + portalId;
|
|
12948
12948
|
};
|
|
12949
|
+
var ENDPOINT_AIRPORT = '/api/web/entity/airport';
|
|
12949
12950
|
/**
|
|
12950
12951
|
* api/search/countries
|
|
12951
12952
|
* Gets all Countries
|
|
@@ -12958,6 +12959,13 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12958
12959
|
var apiKey = config.apiKey;
|
|
12959
12960
|
return get(url, apiKey, config.token, signal, true);
|
|
12960
12961
|
};
|
|
12962
|
+
var searchCountries = function (config, searchTerm, signal) {
|
|
12963
|
+
var apiKey = config.apiKey;
|
|
12964
|
+
var safeSearch = searchTerm.replace(/'/g, "''");
|
|
12965
|
+
var filter = "$skip=0&$top=20&$orderby=name%20asc&$filter=contains(name,'" + safeSearch.toLowerCase() + "')";
|
|
12966
|
+
var url = '' + config.host + ENDPOINT_COUNTRIES + '?' + filter;
|
|
12967
|
+
return get(url, apiKey, config.token, signal, true);
|
|
12968
|
+
};
|
|
12961
12969
|
var searchRegions = function (config, searchTerm, signal) {
|
|
12962
12970
|
var apiKey = config.apiKey;
|
|
12963
12971
|
var safeSearch = searchTerm.replace(/'/g, "''");
|
|
@@ -12984,6 +12992,11 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
12984
12992
|
var apiKey = config.apiKey;
|
|
12985
12993
|
return get(url, apiKey, config.token, signal, true);
|
|
12986
12994
|
};
|
|
12995
|
+
var getAirports = function (config, signal) {
|
|
12996
|
+
var url = '' + config.host + ENDPOINT_AIRPORT;
|
|
12997
|
+
var apiKey = config.apiKey;
|
|
12998
|
+
return get(url, apiKey, config.token, signal, true);
|
|
12999
|
+
};
|
|
12987
13000
|
|
|
12988
13001
|
var createParams = function (filter, all, gridColumns, mode, forceToLower) {
|
|
12989
13002
|
var params = {};
|
|
@@ -13363,6 +13376,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13363
13376
|
exports.forgotPassword = forgotPassword;
|
|
13364
13377
|
exports.generateBookingAccommodations = generateBookingAccommodations;
|
|
13365
13378
|
exports.getAffiliates = getAffiliates;
|
|
13379
|
+
exports.getAirports = getAirports;
|
|
13366
13380
|
exports.getAllotment = getAllotment;
|
|
13367
13381
|
exports.getAllotmentAvailability = getAllotmentAvailability;
|
|
13368
13382
|
exports.getAllotmentList = getAllotmentList;
|
|
@@ -13387,6 +13401,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
13387
13401
|
exports.print = print;
|
|
13388
13402
|
exports.resetPassword = resetPassword;
|
|
13389
13403
|
exports.search = search;
|
|
13404
|
+
exports.searchCountries = searchCountries;
|
|
13390
13405
|
exports.searchElastic = searchElastic;
|
|
13391
13406
|
exports.searchFlightPool = searchFlightPool;
|
|
13392
13407
|
exports.searchLocations = searchLocations;
|
|
@@ -30965,6 +30980,20 @@ var Icon$2 = function (_a) {
|
|
|
30965
30980
|
}
|
|
30966
30981
|
};
|
|
30967
30982
|
|
|
30983
|
+
var SearchResultsConfigurationContext = React__default.createContext(undefined);
|
|
30984
|
+
|
|
30985
|
+
var Spinner = function () {
|
|
30986
|
+
var _a;
|
|
30987
|
+
var context = useContext(SearchResultsConfigurationContext);
|
|
30988
|
+
var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
|
|
30989
|
+
return React__default.createElement(
|
|
30990
|
+
'div',
|
|
30991
|
+
{ className: 'spinner__container' },
|
|
30992
|
+
React__default.createElement('span', { className: 'spinner__icon' }),
|
|
30993
|
+
React__default.createElement('span', { className: 'spinner__label' }, translations === null || translations === void 0 ? void 0 : translations.SRP.LOADING)
|
|
30994
|
+
);
|
|
30995
|
+
};
|
|
30996
|
+
|
|
30968
30997
|
var SearchInput = function (_a) {
|
|
30969
30998
|
var searchResults = _a.searchResults,
|
|
30970
30999
|
onOptionSelect = _a.onOptionSelect,
|
|
@@ -30972,7 +31001,8 @@ var SearchInput = function (_a) {
|
|
|
30972
31001
|
_a.label;
|
|
30973
31002
|
var isSecondInput = _a.isSecondInput,
|
|
30974
31003
|
isDoubleInput = _a.isDoubleInput,
|
|
30975
|
-
isDisabled = _a.isDisabled
|
|
31004
|
+
isDisabled = _a.isDisabled,
|
|
31005
|
+
isLoading = _a.isLoading;
|
|
30976
31006
|
if (isDisabled) {
|
|
30977
31007
|
return null;
|
|
30978
31008
|
}
|
|
@@ -30991,9 +31021,9 @@ var SearchInput = function (_a) {
|
|
|
30991
31021
|
})
|
|
30992
31022
|
);
|
|
30993
31023
|
};
|
|
30994
|
-
if (searchResults.length === 0) {
|
|
30995
|
-
|
|
30996
|
-
}
|
|
31024
|
+
// if (searchResults.length === 0) {
|
|
31025
|
+
// return null;
|
|
31026
|
+
// }
|
|
30997
31027
|
return React__default.createElement(
|
|
30998
31028
|
'div',
|
|
30999
31029
|
{
|
|
@@ -31001,6 +31031,7 @@ var SearchInput = function (_a) {
|
|
|
31001
31031
|
.concat(isSecondInput ? ' qsm__double-input-options--second-input' : '')
|
|
31002
31032
|
.concat(isDoubleInput ? ' qsm__double-input-options--splittable' : '')
|
|
31003
31033
|
},
|
|
31034
|
+
isLoading && React__default.createElement(Spinner, null),
|
|
31004
31035
|
searchResults.map(function (option, index) {
|
|
31005
31036
|
return React__default.createElement(
|
|
31006
31037
|
'div',
|
|
@@ -32312,6 +32343,9 @@ var SearchInputGroup = function (_a) {
|
|
|
32312
32343
|
placeholder = fieldConfig.placeholder,
|
|
32313
32344
|
options = fieldConfig.options,
|
|
32314
32345
|
autoComplete = fieldConfig.autoComplete;
|
|
32346
|
+
var _j = useState(false),
|
|
32347
|
+
isLoading = _j[0],
|
|
32348
|
+
setIsLoading = _j[1];
|
|
32315
32349
|
var selector = useMemo(
|
|
32316
32350
|
function () {
|
|
32317
32351
|
return function (state) {
|
|
@@ -32322,11 +32356,11 @@ var SearchInputGroup = function (_a) {
|
|
|
32322
32356
|
[fieldKey]
|
|
32323
32357
|
);
|
|
32324
32358
|
var value = useSelector(selector);
|
|
32325
|
-
var
|
|
32359
|
+
var _k = useSelector(function (state) {
|
|
32326
32360
|
return state.qsm;
|
|
32327
32361
|
}),
|
|
32328
|
-
searchResults =
|
|
32329
|
-
activeSearchField =
|
|
32362
|
+
searchResults = _k.searchResults,
|
|
32363
|
+
activeSearchField = _k.activeSearchField;
|
|
32330
32364
|
var selectedOption = options.find(function (option) {
|
|
32331
32365
|
return option.value === value;
|
|
32332
32366
|
});
|
|
@@ -32354,6 +32388,7 @@ var SearchInputGroup = function (_a) {
|
|
|
32354
32388
|
// if field has custom onChange (API search)
|
|
32355
32389
|
if (fieldConfig.onChange) {
|
|
32356
32390
|
fieldConfig.onChange(input);
|
|
32391
|
+
setIsLoading(true);
|
|
32357
32392
|
return;
|
|
32358
32393
|
}
|
|
32359
32394
|
// fallback to local filtering
|
|
@@ -32361,6 +32396,13 @@ var SearchInputGroup = function (_a) {
|
|
|
32361
32396
|
},
|
|
32362
32397
|
[dispatch, fieldKey, small, match, fieldConfig]
|
|
32363
32398
|
);
|
|
32399
|
+
useEffect(
|
|
32400
|
+
function () {
|
|
32401
|
+
console.log('options updated, resetting loading state');
|
|
32402
|
+
setIsLoading(false);
|
|
32403
|
+
},
|
|
32404
|
+
[options]
|
|
32405
|
+
);
|
|
32364
32406
|
useEffect(
|
|
32365
32407
|
function () {
|
|
32366
32408
|
if (!value || activeSearchField !== fieldKey) return;
|
|
@@ -32478,7 +32520,8 @@ var SearchInputGroup = function (_a) {
|
|
|
32478
32520
|
label: label,
|
|
32479
32521
|
isSecondInput: isSecondInput,
|
|
32480
32522
|
isDoubleInput: isDoubleInput,
|
|
32481
|
-
isDisabled: isDisabled
|
|
32523
|
+
isDisabled: isDisabled,
|
|
32524
|
+
isLoading: isLoading
|
|
32482
32525
|
})
|
|
32483
32526
|
);
|
|
32484
32527
|
};
|
|
@@ -32851,6 +32894,10 @@ var QSMContainer = function () {
|
|
|
32851
32894
|
if (fromDate || toDate) return;
|
|
32852
32895
|
var startDate = addMonths(new Date(), 1);
|
|
32853
32896
|
var endDate = addDays(startDate, 7);
|
|
32897
|
+
if (qsmType === 'groupTour') {
|
|
32898
|
+
startDate = new Date();
|
|
32899
|
+
endDate = addYears(startDate, 1);
|
|
32900
|
+
}
|
|
32854
32901
|
dispatch(setFromDate(startDate.toISOString()));
|
|
32855
32902
|
dispatch(setToDate(endDate.toISOString()));
|
|
32856
32903
|
},
|
|
@@ -32876,17 +32923,16 @@ var QSMContainer = function () {
|
|
|
32876
32923
|
};
|
|
32877
32924
|
var handleQsmTypeChange = function (value) {
|
|
32878
32925
|
dispatch(setSelectedQsmType(value));
|
|
32926
|
+
var startDate = addMonths(new Date(), 1);
|
|
32927
|
+
var endDate = addDays(startDate, 7);
|
|
32879
32928
|
if (value === 'groupTour') {
|
|
32880
|
-
|
|
32881
|
-
|
|
32882
|
-
toDate: addYears(new Date(fromDate !== null && fromDate !== void 0 ? fromDate : Date.now()), 1)
|
|
32883
|
-
});
|
|
32884
|
-
} else {
|
|
32885
|
-
handleDateChange({
|
|
32886
|
-
fromDate: new Date(fromDate !== null && fromDate !== void 0 ? fromDate : Date.now()),
|
|
32887
|
-
toDate: addDays(new Date(fromDate !== null && fromDate !== void 0 ? fromDate : Date.now()), 7)
|
|
32888
|
-
});
|
|
32929
|
+
startDate = new Date();
|
|
32930
|
+
endDate = addYears(startDate, 1);
|
|
32889
32931
|
}
|
|
32932
|
+
handleDateChange({
|
|
32933
|
+
fromDate: startDate,
|
|
32934
|
+
toDate: endDate
|
|
32935
|
+
});
|
|
32890
32936
|
};
|
|
32891
32937
|
var handleSubmit = function () {
|
|
32892
32938
|
if (!onSubmit) return;
|
|
@@ -33301,8 +33347,6 @@ var QSM = function (_a) {
|
|
|
33301
33347
|
);
|
|
33302
33348
|
};
|
|
33303
33349
|
|
|
33304
|
-
var SearchResultsConfigurationContext = React__default.createContext(undefined);
|
|
33305
|
-
|
|
33306
33350
|
var _a;
|
|
33307
33351
|
var initialState$1 = {
|
|
33308
33352
|
results: [],
|
|
@@ -34437,18 +34481,6 @@ var Icon$1 = function (_a) {
|
|
|
34437
34481
|
}
|
|
34438
34482
|
};
|
|
34439
34483
|
|
|
34440
|
-
var Spinner = function () {
|
|
34441
|
-
var _a;
|
|
34442
|
-
var context = useContext(SearchResultsConfigurationContext);
|
|
34443
|
-
var translations = getTranslations((_a = context === null || context === void 0 ? void 0 : context.languageCode) !== null && _a !== void 0 ? _a : 'en-GB');
|
|
34444
|
-
return React__default.createElement(
|
|
34445
|
-
'div',
|
|
34446
|
-
{ className: 'spinner__container' },
|
|
34447
|
-
React__default.createElement('span', { className: 'spinner__icon' }),
|
|
34448
|
-
React__default.createElement('span', { className: 'spinner__label' }, translations === null || translations === void 0 ? void 0 : translations.SRP.LOADING)
|
|
34449
|
-
);
|
|
34450
|
-
};
|
|
34451
|
-
|
|
34452
34484
|
var getDepartureTime = function (flight) {
|
|
34453
34485
|
var _a, _b;
|
|
34454
34486
|
if (isEmpty(flight === null || flight === void 0 ? void 0 : flight.metaDatas)) return '';
|
|
@@ -40622,33 +40654,96 @@ var FlightResultsContainer = function (_a) {
|
|
|
40622
40654
|
React__default.createElement(
|
|
40623
40655
|
'div',
|
|
40624
40656
|
{ className: 'search__results' },
|
|
40625
|
-
|
|
40626
|
-
|
|
40627
|
-
|
|
40628
|
-
|
|
40629
|
-
|
|
40630
|
-
|
|
40657
|
+
React__default.createElement(
|
|
40658
|
+
React__default.Fragment,
|
|
40659
|
+
null,
|
|
40660
|
+
isMobile &&
|
|
40661
|
+
React__default.createElement(
|
|
40662
|
+
'div',
|
|
40663
|
+
{ className: 'search__result-row' },
|
|
40664
|
+
React__default.createElement(
|
|
40665
|
+
'div',
|
|
40666
|
+
{ className: 'search__results__actions' },
|
|
40667
|
+
(context === null || context === void 0 ? void 0 : context.showFilters) &&
|
|
40668
|
+
React__default.createElement(
|
|
40669
|
+
'div',
|
|
40670
|
+
{
|
|
40671
|
+
className: 'cta cta--filter',
|
|
40672
|
+
onClick: function () {
|
|
40673
|
+
return setFiltersOpen(true);
|
|
40674
|
+
}
|
|
40675
|
+
},
|
|
40676
|
+
React__default.createElement(Icon$1, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
|
|
40677
|
+
translations.SRP.FILTERS
|
|
40678
|
+
)
|
|
40679
|
+
),
|
|
40680
|
+
sortByTypes &&
|
|
40681
|
+
sortByTypes.length > 0 &&
|
|
40682
|
+
React__default.createElement(ItemPicker, {
|
|
40683
|
+
items: sortByTypes,
|
|
40684
|
+
selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
|
|
40685
|
+
selectedSortByType: selectedSortByType || undefined,
|
|
40686
|
+
label: translations.SRP.SORTBY,
|
|
40687
|
+
placeholder: translations.SRP.SORTBY,
|
|
40688
|
+
classModifier: 'travel-class-picker__items',
|
|
40689
|
+
valueFormatter: function (value, direction) {
|
|
40690
|
+
return getSortingName(translations, findSortByType(value, direction !== null && direction !== void 0 ? direction : 'asc'));
|
|
40691
|
+
},
|
|
40692
|
+
onPick: handleSortChange
|
|
40693
|
+
})
|
|
40694
|
+
),
|
|
40695
|
+
React__default.createElement(
|
|
40696
|
+
'div',
|
|
40697
|
+
{ className: 'search__result-row' },
|
|
40698
|
+
React__default.createElement(
|
|
40699
|
+
'span',
|
|
40700
|
+
{ className: 'search__result-row-text' },
|
|
40701
|
+
!flightsLoading &&
|
|
40702
|
+
React__default.createElement(
|
|
40703
|
+
React__default.Fragment,
|
|
40704
|
+
null,
|
|
40705
|
+
(results === null || results === void 0 ? void 0 : results.length) &&
|
|
40706
|
+
React__default.createElement(React__default.Fragment, null, results.length, ' ', translations.SRP.TOTAL_RESULTS_LABEL)
|
|
40707
|
+
)
|
|
40708
|
+
),
|
|
40709
|
+
!isMobile &&
|
|
40710
|
+
React__default.createElement(
|
|
40711
|
+
React__default.Fragment,
|
|
40712
|
+
null,
|
|
40631
40713
|
React__default.createElement(
|
|
40632
40714
|
'div',
|
|
40633
|
-
{ className: 'search__result-row' },
|
|
40715
|
+
{ className: 'search__result-row-filter' },
|
|
40716
|
+
React__default.createElement(ItemPicker, {
|
|
40717
|
+
items: selectionTypes,
|
|
40718
|
+
selection:
|
|
40719
|
+
((_c = selectionTypes.find(function (type) {
|
|
40720
|
+
return type.code === flightSelectionType;
|
|
40721
|
+
})) === null || _c === void 0
|
|
40722
|
+
? void 0
|
|
40723
|
+
: _c.label) || undefined,
|
|
40724
|
+
label: 'Selection Type',
|
|
40725
|
+
placeholder: 'Selection Type',
|
|
40726
|
+
classModifier: 'travel-class-picker__items',
|
|
40727
|
+
valueFormatter: function (value) {
|
|
40728
|
+
return value;
|
|
40729
|
+
},
|
|
40730
|
+
onPick: function (value) {
|
|
40731
|
+
var _a;
|
|
40732
|
+
return setFlightSelectionType(
|
|
40733
|
+
((_a = selectionTypes.find(function (type) {
|
|
40734
|
+
return type.label === value;
|
|
40735
|
+
})) === null || _a === void 0
|
|
40736
|
+
? void 0
|
|
40737
|
+
: _a.code) || 'independent'
|
|
40738
|
+
);
|
|
40739
|
+
}
|
|
40740
|
+
})
|
|
40741
|
+
),
|
|
40742
|
+
sortByTypes &&
|
|
40743
|
+
sortByTypes.length > 0 &&
|
|
40634
40744
|
React__default.createElement(
|
|
40635
40745
|
'div',
|
|
40636
|
-
{ className: '
|
|
40637
|
-
(context === null || context === void 0 ? void 0 : context.showFilters) &&
|
|
40638
|
-
React__default.createElement(
|
|
40639
|
-
'div',
|
|
40640
|
-
{
|
|
40641
|
-
className: 'cta cta--filter',
|
|
40642
|
-
onClick: function () {
|
|
40643
|
-
return setFiltersOpen(true);
|
|
40644
|
-
}
|
|
40645
|
-
},
|
|
40646
|
-
React__default.createElement(Icon$1, { name: 'ui-filter', className: 'mobile-filters-button__icon', height: 16 }),
|
|
40647
|
-
translations.SRP.FILTERS
|
|
40648
|
-
)
|
|
40649
|
-
),
|
|
40650
|
-
sortByTypes &&
|
|
40651
|
-
sortByTypes.length > 0 &&
|
|
40746
|
+
{ className: 'search__result-row-filter' },
|
|
40652
40747
|
React__default.createElement(ItemPicker, {
|
|
40653
40748
|
items: sortByTypes,
|
|
40654
40749
|
selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
|
|
@@ -40661,85 +40756,20 @@ var FlightResultsContainer = function (_a) {
|
|
|
40661
40756
|
},
|
|
40662
40757
|
onPick: handleSortChange
|
|
40663
40758
|
})
|
|
40664
|
-
),
|
|
40665
|
-
React__default.createElement(
|
|
40666
|
-
'div',
|
|
40667
|
-
{ className: 'search__result-row' },
|
|
40668
|
-
React__default.createElement(
|
|
40669
|
-
'span',
|
|
40670
|
-
{ className: 'search__result-row-text' },
|
|
40671
|
-
!flightsLoading &&
|
|
40672
|
-
React__default.createElement(
|
|
40673
|
-
React__default.Fragment,
|
|
40674
|
-
null,
|
|
40675
|
-
(results === null || results === void 0 ? void 0 : results.length) && results.length,
|
|
40676
|
-
' ',
|
|
40677
|
-
translations.SRP.TOTAL_RESULTS_LABEL
|
|
40678
|
-
)
|
|
40679
|
-
),
|
|
40680
|
-
!isMobile &&
|
|
40681
|
-
React__default.createElement(
|
|
40682
|
-
React__default.Fragment,
|
|
40683
|
-
null,
|
|
40684
|
-
React__default.createElement(
|
|
40685
|
-
'div',
|
|
40686
|
-
{ className: 'search__result-row-filter' },
|
|
40687
|
-
React__default.createElement(ItemPicker, {
|
|
40688
|
-
items: selectionTypes,
|
|
40689
|
-
selection:
|
|
40690
|
-
((_c = selectionTypes.find(function (type) {
|
|
40691
|
-
return type.code === flightSelectionType;
|
|
40692
|
-
})) === null || _c === void 0
|
|
40693
|
-
? void 0
|
|
40694
|
-
: _c.label) || undefined,
|
|
40695
|
-
label: 'Selection Type',
|
|
40696
|
-
placeholder: 'Selection Type',
|
|
40697
|
-
classModifier: 'travel-class-picker__items',
|
|
40698
|
-
valueFormatter: function (value) {
|
|
40699
|
-
return value;
|
|
40700
|
-
},
|
|
40701
|
-
onPick: function (value) {
|
|
40702
|
-
var _a;
|
|
40703
|
-
return setFlightSelectionType(
|
|
40704
|
-
((_a = selectionTypes.find(function (type) {
|
|
40705
|
-
return type.label === value;
|
|
40706
|
-
})) === null || _a === void 0
|
|
40707
|
-
? void 0
|
|
40708
|
-
: _a.code) || 'independent'
|
|
40709
|
-
);
|
|
40710
|
-
}
|
|
40711
|
-
})
|
|
40712
|
-
),
|
|
40713
|
-
sortByTypes &&
|
|
40714
|
-
sortByTypes.length > 0 &&
|
|
40715
|
-
React__default.createElement(
|
|
40716
|
-
'div',
|
|
40717
|
-
{ className: 'search__result-row-filter' },
|
|
40718
|
-
React__default.createElement(ItemPicker, {
|
|
40719
|
-
items: sortByTypes,
|
|
40720
|
-
selection: (selectedSortByType === null || selectedSortByType === void 0 ? void 0 : selectedSortByType.label) || undefined,
|
|
40721
|
-
selectedSortByType: selectedSortByType || undefined,
|
|
40722
|
-
label: translations.SRP.SORTBY,
|
|
40723
|
-
placeholder: translations.SRP.SORTBY,
|
|
40724
|
-
classModifier: 'travel-class-picker__items',
|
|
40725
|
-
valueFormatter: function (value, direction) {
|
|
40726
|
-
return getSortingName(translations, findSortByType(value, direction !== null && direction !== void 0 ? direction : 'asc'));
|
|
40727
|
-
},
|
|
40728
|
-
onPick: handleSortChange
|
|
40729
|
-
})
|
|
40730
|
-
)
|
|
40731
40759
|
)
|
|
40732
|
-
),
|
|
40733
|
-
React__default.createElement(
|
|
40734
|
-
'div',
|
|
40735
|
-
{ className: 'search__results__wrapper' },
|
|
40736
|
-
(context === null || context === void 0 ? void 0 : context.type) == 'flight' &&
|
|
40737
|
-
(context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
|
|
40738
|
-
results &&
|
|
40739
|
-
results.length > 0 &&
|
|
40740
|
-
React__default.createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
|
|
40741
40760
|
)
|
|
40742
|
-
|
|
40761
|
+
),
|
|
40762
|
+
React__default.createElement(
|
|
40763
|
+
'div',
|
|
40764
|
+
{ className: 'search__results__wrapper' },
|
|
40765
|
+
flightsLoading && React__default.createElement(Spinner, null),
|
|
40766
|
+
(context === null || context === void 0 ? void 0 : context.type) == 'flight' &&
|
|
40767
|
+
(context === null || context === void 0 ? void 0 : context.showFlightAccommodationResults) &&
|
|
40768
|
+
results &&
|
|
40769
|
+
results.length > 0 &&
|
|
40770
|
+
React__default.createElement(FlightSelection, { searchResults: results, flightSelectionType: flightSelectionType })
|
|
40771
|
+
)
|
|
40772
|
+
)
|
|
40743
40773
|
)
|
|
40744
40774
|
);
|
|
40745
40775
|
};
|
|
@@ -41451,7 +41481,7 @@ var SearchResultsContainer = function () {
|
|
|
41451
41481
|
var room = { index: i, pax: [] };
|
|
41452
41482
|
range(0, x.adults).forEach(function () {
|
|
41453
41483
|
room.pax.push({
|
|
41454
|
-
age:
|
|
41484
|
+
age: 30
|
|
41455
41485
|
});
|
|
41456
41486
|
});
|
|
41457
41487
|
x.childAges.forEach(function (x) {
|
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.73",
|
|
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.144",
|
|
33
33
|
"@reduxjs/toolkit": "^2.8.2",
|
|
34
34
|
"@rollup/plugin-commonjs": "^19.0.1",
|
|
35
35
|
"@rollup/plugin-json": "^4.1.0",
|
|
@@ -47,8 +47,13 @@ const QSMContainer: React.FC = () => {
|
|
|
47
47
|
useEffect(() => {
|
|
48
48
|
if (fromDate || toDate) return;
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
let startDate = addMonths(new Date(), 1);
|
|
51
|
+
let endDate = addDays(startDate, 7);
|
|
52
|
+
|
|
53
|
+
if (qsmType === 'groupTour') {
|
|
54
|
+
startDate = new Date();
|
|
55
|
+
endDate = addYears(startDate, 1);
|
|
56
|
+
}
|
|
52
57
|
|
|
53
58
|
dispatch(setFromDate(startDate.toISOString()));
|
|
54
59
|
dispatch(setToDate(endDate.toISOString()));
|
|
@@ -75,17 +80,18 @@ const QSMContainer: React.FC = () => {
|
|
|
75
80
|
const handleQsmTypeChange = (value: SRPType) => {
|
|
76
81
|
dispatch(setSelectedQsmType(value));
|
|
77
82
|
|
|
83
|
+
let startDate = addMonths(new Date(), 1);
|
|
84
|
+
let endDate = addDays(startDate, 7);
|
|
85
|
+
|
|
78
86
|
if (value === 'groupTour') {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
toDate: addYears(new Date(fromDate ?? Date.now()), 1)
|
|
82
|
-
});
|
|
83
|
-
} else {
|
|
84
|
-
handleDateChange({
|
|
85
|
-
fromDate: new Date(fromDate ?? Date.now()),
|
|
86
|
-
toDate: addDays(new Date(fromDate ?? Date.now()), 7)
|
|
87
|
-
});
|
|
87
|
+
startDate = new Date();
|
|
88
|
+
endDate = addYears(startDate, 1);
|
|
88
89
|
}
|
|
90
|
+
|
|
91
|
+
handleDateChange({
|
|
92
|
+
fromDate: startDate,
|
|
93
|
+
toDate: endDate
|
|
94
|
+
});
|
|
89
95
|
};
|
|
90
96
|
|
|
91
97
|
const handleSubmit = () => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Icon from '../icon';
|
|
3
3
|
import { TypeaheadOption } from '../../types';
|
|
4
|
+
import Spinner from '../../../search-results/components/spinner/spinner';
|
|
4
5
|
|
|
5
6
|
interface SearchInputProps {
|
|
6
7
|
onChange: (input: string) => void;
|
|
@@ -11,9 +12,19 @@ interface SearchInputProps {
|
|
|
11
12
|
isSecondInput?: boolean;
|
|
12
13
|
isDoubleInput?: boolean;
|
|
13
14
|
isDisabled?: boolean;
|
|
15
|
+
isLoading?: boolean;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
const SearchInput: React.FC<SearchInputProps> = ({
|
|
18
|
+
const SearchInput: React.FC<SearchInputProps> = ({
|
|
19
|
+
searchResults,
|
|
20
|
+
onOptionSelect,
|
|
21
|
+
highlightTarget,
|
|
22
|
+
label,
|
|
23
|
+
isSecondInput,
|
|
24
|
+
isDoubleInput,
|
|
25
|
+
isDisabled,
|
|
26
|
+
isLoading
|
|
27
|
+
}) => {
|
|
17
28
|
if (isDisabled) {
|
|
18
29
|
return null;
|
|
19
30
|
}
|
|
@@ -38,15 +49,16 @@ const SearchInput: React.FC<SearchInputProps> = ({ searchResults, onOptionSelect
|
|
|
38
49
|
);
|
|
39
50
|
};
|
|
40
51
|
|
|
41
|
-
if (searchResults.length === 0) {
|
|
42
|
-
|
|
43
|
-
}
|
|
52
|
+
// if (searchResults.length === 0) {
|
|
53
|
+
// return null;
|
|
54
|
+
// }
|
|
44
55
|
|
|
45
56
|
return (
|
|
46
57
|
<div
|
|
47
58
|
className={`qsm__double-input-options${isSecondInput ? ' qsm__double-input-options--second-input' : ''}${
|
|
48
59
|
isDoubleInput ? ' qsm__double-input-options--splittable' : ''
|
|
49
60
|
}`}>
|
|
61
|
+
{isLoading && <Spinner />}
|
|
50
62
|
{searchResults.map((option, index) => (
|
|
51
63
|
<div
|
|
52
64
|
key={index}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useRef, useMemo, useCallback } from 'react';
|
|
1
|
+
import React, { useEffect, useRef, useMemo, useCallback, useState } from 'react';
|
|
2
2
|
import { useDispatch, useSelector } from 'react-redux';
|
|
3
3
|
import { QSMRootState } from '../../store/qsm-store';
|
|
4
4
|
import { setFieldValue, setSearchResults, setActiveSearchField, setMobileFilterType, setActiveSearchFieldProps } from '../../store/qsm-slice';
|
|
@@ -32,8 +32,8 @@ const SearchInputGroup: React.FC<Props> = ({
|
|
|
32
32
|
if (!fieldConfig) {
|
|
33
33
|
return null;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
35
|
const { fieldKey, label, placeholder, options, autoComplete } = fieldConfig;
|
|
36
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
37
37
|
|
|
38
38
|
const selector = useMemo(() => (state: QSMRootState) => ((state.qsm as any)[fieldKey] ?? '') as string, [fieldKey]);
|
|
39
39
|
const value = useSelector(selector);
|
|
@@ -66,6 +66,7 @@ const SearchInputGroup: React.FC<Props> = ({
|
|
|
66
66
|
// if field has custom onChange (API search)
|
|
67
67
|
if (fieldConfig.onChange) {
|
|
68
68
|
fieldConfig.onChange(input);
|
|
69
|
+
setIsLoading(true);
|
|
69
70
|
return;
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -75,6 +76,11 @@ const SearchInputGroup: React.FC<Props> = ({
|
|
|
75
76
|
[dispatch, fieldKey, small, match, fieldConfig]
|
|
76
77
|
);
|
|
77
78
|
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
console.log('options updated, resetting loading state');
|
|
81
|
+
setIsLoading(false);
|
|
82
|
+
}, [options]);
|
|
83
|
+
|
|
78
84
|
useEffect(() => {
|
|
79
85
|
if (!value || activeSearchField !== fieldKey) return;
|
|
80
86
|
|
|
@@ -183,6 +189,7 @@ const SearchInputGroup: React.FC<Props> = ({
|
|
|
183
189
|
isSecondInput={isSecondInput}
|
|
184
190
|
isDoubleInput={isDoubleInput}
|
|
185
191
|
isDisabled={isDisabled}
|
|
192
|
+
isLoading={isLoading}
|
|
186
193
|
/>
|
|
187
194
|
)}
|
|
188
195
|
</label>
|
|
@@ -57,81 +57,82 @@ const FlightResultsContainer: React.FC<FlightResultsContainerProps> = ({ isMobil
|
|
|
57
57
|
{context?.showFilters && <FlightFilters isOpen={filtersOpen} handleSetIsOpen={() => setFiltersOpen(!filtersOpen)} isLoading={flightsLoading} />}
|
|
58
58
|
{/* ---------------- Results ---------------- */}
|
|
59
59
|
<div className="search__results">
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
<Icon name="ui-filter" className="mobile-filters-button__icon" height={16} />
|
|
70
|
-
{translations.SRP.FILTERS}
|
|
71
|
-
</div>
|
|
72
|
-
)}
|
|
73
|
-
</div>
|
|
74
|
-
{sortByTypes && sortByTypes.length > 0 && (
|
|
75
|
-
<ItemPicker
|
|
76
|
-
items={sortByTypes}
|
|
77
|
-
selection={selectedSortByType?.label || undefined}
|
|
78
|
-
selectedSortByType={selectedSortByType || undefined}
|
|
79
|
-
label={translations.SRP.SORTBY}
|
|
80
|
-
placeholder={translations.SRP.SORTBY}
|
|
81
|
-
classModifier="travel-class-picker__items"
|
|
82
|
-
valueFormatter={(value, direction) => getSortingName(translations, findSortByType(value, direction ?? 'asc'))}
|
|
83
|
-
onPick={handleSortChange}
|
|
84
|
-
/>
|
|
60
|
+
<>
|
|
61
|
+
{isMobile && (
|
|
62
|
+
<div className="search__result-row">
|
|
63
|
+
<div className="search__results__actions">
|
|
64
|
+
{context?.showFilters && (
|
|
65
|
+
<div className="cta cta--filter" onClick={() => setFiltersOpen(true)}>
|
|
66
|
+
<Icon name="ui-filter" className="mobile-filters-button__icon" height={16} />
|
|
67
|
+
{translations.SRP.FILTERS}
|
|
68
|
+
</div>
|
|
85
69
|
)}
|
|
86
70
|
</div>
|
|
87
|
-
|
|
71
|
+
{sortByTypes && sortByTypes.length > 0 && (
|
|
72
|
+
<ItemPicker
|
|
73
|
+
items={sortByTypes}
|
|
74
|
+
selection={selectedSortByType?.label || undefined}
|
|
75
|
+
selectedSortByType={selectedSortByType || undefined}
|
|
76
|
+
label={translations.SRP.SORTBY}
|
|
77
|
+
placeholder={translations.SRP.SORTBY}
|
|
78
|
+
classModifier="travel-class-picker__items"
|
|
79
|
+
valueFormatter={(value, direction) => getSortingName(translations, findSortByType(value, direction ?? 'asc'))}
|
|
80
|
+
onPick={handleSortChange}
|
|
81
|
+
/>
|
|
82
|
+
)}
|
|
83
|
+
</div>
|
|
84
|
+
)}
|
|
88
85
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
<>
|
|
93
|
-
{results?.length && results.length} {translations.SRP.TOTAL_RESULTS_LABEL}
|
|
94
|
-
</>
|
|
95
|
-
)}
|
|
96
|
-
</span>
|
|
97
|
-
{!isMobile && (
|
|
86
|
+
<div className="search__result-row">
|
|
87
|
+
<span className="search__result-row-text">
|
|
88
|
+
{!flightsLoading && (
|
|
98
89
|
<>
|
|
90
|
+
{results?.length && (
|
|
91
|
+
<>
|
|
92
|
+
{results.length} {translations.SRP.TOTAL_RESULTS_LABEL}
|
|
93
|
+
</>
|
|
94
|
+
)}
|
|
95
|
+
</>
|
|
96
|
+
)}
|
|
97
|
+
</span>
|
|
98
|
+
{!isMobile && (
|
|
99
|
+
<>
|
|
100
|
+
<div className="search__result-row-filter">
|
|
101
|
+
<ItemPicker
|
|
102
|
+
items={selectionTypes}
|
|
103
|
+
selection={selectionTypes.find((type) => type.code === flightSelectionType)?.label || undefined}
|
|
104
|
+
label="Selection Type"
|
|
105
|
+
placeholder="Selection Type"
|
|
106
|
+
classModifier="travel-class-picker__items"
|
|
107
|
+
valueFormatter={(value) => value}
|
|
108
|
+
onPick={(value) => setFlightSelectionType(selectionTypes.find((type) => type.label === value)?.code || 'independent')}
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
111
|
+
{sortByTypes && sortByTypes.length > 0 && (
|
|
99
112
|
<div className="search__result-row-filter">
|
|
100
113
|
<ItemPicker
|
|
101
|
-
items={
|
|
102
|
-
selection={
|
|
103
|
-
|
|
104
|
-
|
|
114
|
+
items={sortByTypes}
|
|
115
|
+
selection={selectedSortByType?.label || undefined}
|
|
116
|
+
selectedSortByType={selectedSortByType || undefined}
|
|
117
|
+
label={translations.SRP.SORTBY}
|
|
118
|
+
placeholder={translations.SRP.SORTBY}
|
|
105
119
|
classModifier="travel-class-picker__items"
|
|
106
|
-
valueFormatter={(value) => value}
|
|
107
|
-
onPick={
|
|
120
|
+
valueFormatter={(value, direction) => getSortingName(translations, findSortByType(value, direction ?? 'asc'))}
|
|
121
|
+
onPick={handleSortChange}
|
|
108
122
|
/>
|
|
109
123
|
</div>
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
selection={selectedSortByType?.label || undefined}
|
|
115
|
-
selectedSortByType={selectedSortByType || undefined}
|
|
116
|
-
label={translations.SRP.SORTBY}
|
|
117
|
-
placeholder={translations.SRP.SORTBY}
|
|
118
|
-
classModifier="travel-class-picker__items"
|
|
119
|
-
valueFormatter={(value, direction) => getSortingName(translations, findSortByType(value, direction ?? 'asc'))}
|
|
120
|
-
onPick={handleSortChange}
|
|
121
|
-
/>
|
|
122
|
-
</div>
|
|
123
|
-
)}
|
|
124
|
-
</>
|
|
125
|
-
)}
|
|
126
|
-
</div>
|
|
124
|
+
)}
|
|
125
|
+
</>
|
|
126
|
+
)}
|
|
127
|
+
</div>
|
|
127
128
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
129
|
+
<div className="search__results__wrapper">
|
|
130
|
+
{flightsLoading && <Spinner />}
|
|
131
|
+
{context?.type == 'flight' && context?.showFlightAccommodationResults && results && results.length > 0 && (
|
|
132
|
+
<FlightSelection searchResults={results} flightSelectionType={flightSelectionType} />
|
|
133
|
+
)}
|
|
134
|
+
</div>
|
|
135
|
+
</>
|
|
135
136
|
</div>
|
|
136
137
|
</>
|
|
137
138
|
);
|
|
@@ -270,7 +270,7 @@ const SearchResultsContainer: React.FC = () => {
|
|
|
270
270
|
var room = { index: i, pax: [] } as BookingPackageRequestRoom;
|
|
271
271
|
range(0, x.adults).forEach(() => {
|
|
272
272
|
room.pax.push({
|
|
273
|
-
age:
|
|
273
|
+
age: 30
|
|
274
274
|
} as BookingPackagePax);
|
|
275
275
|
});
|
|
276
276
|
x.childAges.forEach((x) => {
|