@zengenti/contensis-react-base 3.0.0-beta.5 → 3.0.0-beta.52
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/README.md +4 -4
- package/cjs/{App-3324f784.js → App-478e0b4c.js} +114 -114
- package/cjs/App-478e0b4c.js.map +1 -0
- package/cjs/{RouteLoader-c7957b14.js → RouteLoader-8df335cf.js} +46 -22
- package/cjs/RouteLoader-8df335cf.js.map +1 -0
- package/cjs/ToJs-09204afd.js +129 -0
- package/cjs/ToJs-09204afd.js.map +1 -0
- package/cjs/{actions-a24bf46e.js → actions-6b9ef168.js} +5 -4
- package/cjs/actions-6b9ef168.js.map +1 -0
- package/cjs/client.js +11 -9
- package/cjs/client.js.map +1 -1
- package/cjs/contensis-react-base.js +2888 -84
- package/cjs/contensis-react-base.js.map +1 -1
- package/cjs/{fromJSLeaveImmer-c00d597f.js → fromJSLeaveImmer-65d26804.js} +2 -16
- package/cjs/fromJSLeaveImmer-65d26804.js.map +1 -0
- package/cjs/{login-c810cc4c.js → login-d67b82aa.js} +92 -55
- package/cjs/login-d67b82aa.js.map +1 -0
- package/cjs/{reducers-fde41d6b.js → reducers-3a4f8971.js} +26 -25
- package/cjs/reducers-3a4f8971.js.map +1 -0
- package/cjs/redux.js +6 -5
- package/cjs/redux.js.map +1 -1
- package/cjs/routing.js +5 -4
- package/cjs/routing.js.map +1 -1
- package/cjs/search.js +295 -146
- package/cjs/search.js.map +1 -1
- package/cjs/{selectors-0ec95076.js → selectors-2c1b1183.js} +7 -3
- package/cjs/selectors-2c1b1183.js.map +1 -0
- package/cjs/user.js +21 -12
- package/cjs/user.js.map +1 -1
- package/cjs/util.js +15 -8
- package/cjs/util.js.map +1 -1
- package/cjs/{version-4f0f5fa6.js → version-951bc80c.js} +28 -20
- package/cjs/version-951bc80c.js.map +1 -0
- package/cjs/{version-085d203d.js → version-dcfdafd9.js} +5 -5
- package/cjs/{version-085d203d.js.map → version-dcfdafd9.js.map} +1 -1
- package/esm/{App-1b05ab11.js → App-36e24faa.js} +114 -114
- package/esm/App-36e24faa.js.map +1 -0
- package/esm/{RouteLoader-e5f0e8cb.js → RouteLoader-93c0d740.js} +46 -22
- package/esm/RouteLoader-93c0d740.js.map +1 -0
- package/esm/ToJs-2627ce21.js +99 -0
- package/esm/ToJs-2627ce21.js.map +1 -0
- package/esm/{actions-927d9698.js → actions-5437f43d.js} +5 -4
- package/esm/actions-5437f43d.js.map +1 -0
- package/esm/client.js +12 -10
- package/esm/client.js.map +1 -1
- package/esm/contensis-react-base.js +2889 -85
- package/esm/contensis-react-base.js.map +1 -1
- package/esm/{fromJSLeaveImmer-392af4e3.js → fromJSLeaveImmer-e2f0f331.js} +2 -16
- package/esm/fromJSLeaveImmer-e2f0f331.js.map +1 -0
- package/esm/{login-f8ba3aeb.js → login-f6dfbe1b.js} +92 -55
- package/esm/login-f6dfbe1b.js.map +1 -0
- package/esm/{reducers-d6c0edb1.js → reducers-8e5d6232.js} +26 -25
- package/esm/reducers-8e5d6232.js.map +1 -0
- package/esm/redux.js +8 -7
- package/esm/redux.js.map +1 -1
- package/esm/routing.js +5 -4
- package/esm/routing.js.map +1 -1
- package/esm/search.js +296 -147
- package/esm/search.js.map +1 -1
- package/esm/{selectors-b98d5c76.js → selectors-65f0f31c.js} +7 -4
- package/esm/selectors-65f0f31c.js.map +1 -0
- package/esm/user.js +23 -14
- package/esm/user.js.map +1 -1
- package/esm/util.js +15 -8
- package/esm/util.js.map +1 -1
- package/esm/version-696796d7.js +15 -0
- package/esm/{version-3833e8b5.js.map → version-696796d7.js.map} +1 -1
- package/esm/{version-16aa83eb.js → version-b2ca1dab.js} +27 -20
- package/esm/version-b2ca1dab.js.map +1 -0
- package/models/redux/appstate.d.ts +5 -10
- package/models/redux/selectors/navigation.d.ts +2 -1
- package/models/routing/redux/actions.d.ts +1 -1
- package/models/routing/redux/selectors.d.ts +1 -1
- package/models/routing/routes.d.ts +3 -2
- package/models/routing/util/expressions.d.ts +3 -2
- package/models/routing/util/queries.d.ts +1 -1
- package/models/search/containers/withListing.d.ts +1 -1
- package/models/search/containers/withSearch.d.ts +1 -1
- package/models/search/hooks/useListing.hook.d.ts +3 -0
- package/models/search/hooks/useMinilist.hook.d.ts +2 -9
- package/models/search/index.d.ts +1 -0
- package/models/search/models/Queries.d.ts +8 -5
- package/models/search/models/Search.d.ts +58 -26
- package/models/search/models/SearchActions.d.ts +4 -3
- package/models/search/models/SearchProps.d.ts +31 -4
- package/models/search/models/SearchState.d.ts +5 -1
- package/models/search/models/index.d.ts +2 -1
- package/models/search/redux/actions.d.ts +2 -1
- package/models/search/redux/reducers.d.ts +230 -314
- package/models/search/redux/sagas.d.ts +5 -5
- package/models/search/redux/selectors.d.ts +7 -12
- package/models/search/search/expressions.d.ts +2 -6
- package/models/search/transformations/entry-to-filteritem.mapper.d.ts +2 -1
- package/models/search/transformations/filter-to-filterexpression.mapper.d.ts +6 -0
- package/models/search/transformations/filters-to-filterexpressions.mapper.d.ts +3 -0
- package/models/search/transformations/index.d.ts +3 -0
- package/models/search/transformations/state-to-searchuri.d.ts +2 -13
- package/models/server/middleware/bundleManipulation.d.ts +2 -1
- package/models/server/util/headers.d.ts +3 -2
- package/models/user/components/Login.d.ts +1 -2
- package/models/user/components/LoginForm.d.ts +1 -2
- package/models/user/hocs/withLogin.d.ts +2 -2
- package/models/user/hooks/useChangePassword.d.ts +5 -5
- package/models/user/hooks/useForgotPassword.d.ts +6 -6
- package/models/user/hooks/useLogin.d.ts +9 -45
- package/models/user/hooks/useRegistration.d.ts +4 -4
- package/models/user/redux/reducers.d.ts +4 -5
- package/models/user/redux/sagas/login.d.ts +11 -8
- package/models/user/redux/selectors.d.ts +33 -71
- package/models/user/util/LoginHelper.class.d.ts +4 -3
- package/models/util/json-mapper.d.ts +9 -3
- package/models/util/merge.d.ts +1 -0
- package/package-lock.json +279 -521
- package/package.json +9 -5
- package/cjs/App-3324f784.js.map +0 -1
- package/cjs/RouteLoader-c7957b14.js.map +0 -1
- package/cjs/ToJs-a38fa20e.js +0 -230
- package/cjs/ToJs-a38fa20e.js.map +0 -1
- package/cjs/actions-a24bf46e.js.map +0 -1
- package/cjs/fromJSLeaveImmer-c00d597f.js.map +0 -1
- package/cjs/login-c810cc4c.js.map +0 -1
- package/cjs/reducers-fde41d6b.js.map +0 -1
- package/cjs/selectors-0ec95076.js.map +0 -1
- package/cjs/version-4f0f5fa6.js.map +0 -1
- package/esm/App-1b05ab11.js.map +0 -1
- package/esm/RouteLoader-e5f0e8cb.js.map +0 -1
- package/esm/ToJs-879a5a85.js +0 -199
- package/esm/ToJs-879a5a85.js.map +0 -1
- package/esm/actions-927d9698.js.map +0 -1
- package/esm/fromJSLeaveImmer-392af4e3.js.map +0 -1
- package/esm/login-f8ba3aeb.js.map +0 -1
- package/esm/reducers-d6c0edb1.js.map +0 -1
- package/esm/selectors-b98d5c76.js.map +0 -1
- package/esm/version-16aa83eb.js.map +0 -1
- package/esm/version-3833e8b5.js +0 -15
- package/models/search/transformations/filters-to-filterexpression.d.ts +0 -1
- package/models/search/transformations/filters-to-filterexpression.mapper.d.ts +0 -2
- package/models/server/features/caching/cacheHashing.d.ts +0 -1
package/esm/search.js
CHANGED
|
@@ -4,7 +4,7 @@ import mapJson, { jpath } from 'jsonpath-mapper';
|
|
|
4
4
|
import * as log from 'loglevel';
|
|
5
5
|
import { takeEvery, select, put, call, all } from '@redux-saga/core/effects';
|
|
6
6
|
import { Client } from 'contensis-delivery-api';
|
|
7
|
-
import
|
|
7
|
+
import { stringify, parse } from 'query-string';
|
|
8
8
|
import { Op, OrderBy, Query } from 'contensis-core-api';
|
|
9
9
|
import merge from 'deepmerge';
|
|
10
10
|
import { createSelector } from 'reselect';
|
|
@@ -150,11 +150,12 @@ const updateSearchTerm$1 = term => {
|
|
|
150
150
|
term
|
|
151
151
|
};
|
|
152
152
|
};
|
|
153
|
-
const updateSelectedFilters = (filter, key) => {
|
|
153
|
+
const updateSelectedFilters = (filter, key, isUnknownItem = false) => {
|
|
154
154
|
return {
|
|
155
155
|
type: UPDATE_SELECTED_FILTERS,
|
|
156
156
|
filter,
|
|
157
|
-
key
|
|
157
|
+
key,
|
|
158
|
+
isUnknownItem
|
|
158
159
|
};
|
|
159
160
|
};
|
|
160
161
|
const updateSortOrder$1 = (orderBy, facet) => {
|
|
@@ -218,7 +219,7 @@ const getImmutableOrJS = (state, stateKey, fallbackValue, returnType = globalThi
|
|
|
218
219
|
};
|
|
219
220
|
|
|
220
221
|
const getSearchContext = state => getImmutableOrJS(state, ['search', 'context'], Context$1.facets);
|
|
221
|
-
const getCurrent = (state, context = Context$1.facets) => context === Context$1.facets ? getCurrentFacet(state) : getCurrentListing(state);
|
|
222
|
+
const getCurrent$1 = (state, context = Context$1.facets) => context === Context$1.facets ? getCurrentFacet(state) : getCurrentListing(state);
|
|
222
223
|
const getCurrentFacet = state => getImmutableOrJS(state, ['search', 'currentFacet']);
|
|
223
224
|
const getCurrentListing = state => getImmutableOrJS(state, ['search', 'currentListing']);
|
|
224
225
|
const getCurrentTab = state => getImmutableOrJS(state, ['search', Context$1.facets, getCurrentFacet(state), 'tabId'], 0);
|
|
@@ -237,14 +238,14 @@ const getFacet = (state, facetName = '', context = Context$1.facets, returnType)
|
|
|
237
238
|
const currentFacet = facetName || getCurrentFacet(state);
|
|
238
239
|
return getImmutableOrJS(state, ['search', context, currentFacet], {}, returnType);
|
|
239
240
|
};
|
|
240
|
-
const getListing = (state, listing = '') => {
|
|
241
|
+
const getListing$1 = (state, listing = '') => {
|
|
241
242
|
const currentListing = listing || getCurrentListing(state);
|
|
242
243
|
return getImmutableOrJS(state, ['search', Context$1.listings, currentListing], {});
|
|
243
244
|
};
|
|
244
245
|
const getFilters = (state, facet, context = Context$1.facets, returnType) => {
|
|
245
|
-
return getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'filters'], {}, returnType);
|
|
246
|
+
return getImmutableOrJS(state, ['search', context, facet || getCurrent$1(state, context), 'filters'], {}, returnType);
|
|
246
247
|
};
|
|
247
|
-
const getRenderableFilters = (state, facet = '', context = Context$1.facets) => Object.fromEntries(Object.entries(getFilters(state, facet, context, 'js')).filter(([, f = {}]) => typeof f.renderable !== 'boolean' ? true : f.renderable));
|
|
248
|
+
const getRenderableFilters$1 = (state, facet = '', context = Context$1.facets) => Object.fromEntries(Object.entries(getFilters(state, facet, context, 'js')).filter(([, f = {}]) => typeof f.renderable !== 'boolean' ? true : f.renderable));
|
|
248
249
|
const getFiltersToLoad = (state, facet, context = Context$1.facets, returnType) => {
|
|
249
250
|
const filters = getFilters(state, facet, context, returnType);
|
|
250
251
|
const loadedFilters = Object.entries(filters).map(([key, f = {}]) => [key, (f.items || []).filter(i => {
|
|
@@ -260,51 +261,51 @@ const getSelectedFilters = (state, facet = '', context = Context$1.facets, retur
|
|
|
260
261
|
const selectedFilters = Object.fromEntries(Object.entries(filters).map(([key, filter = {}]) => [key, (filter.items || []).filter(item => !!(item.isSelected || false)).map(item => {
|
|
261
262
|
const key = (item === null || item === void 0 ? void 0 : item.key) || '';
|
|
262
263
|
const isIsoDate = isoDateRegex.test(key);
|
|
263
|
-
return isIsoDate ? key : key.toLowerCase();
|
|
264
|
+
return isIsoDate ? key : typeof key.toLowerCase !== 'undefined' ? key.toLowerCase() : key;
|
|
264
265
|
})]));
|
|
265
266
|
const fromJS = makeFromJS(returnType);
|
|
266
267
|
return fromJS(selectedFilters);
|
|
267
268
|
};
|
|
268
269
|
const getResults = (state, current = '', context = Context$1.facets, returnType) => {
|
|
269
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'results'], [], returnType);
|
|
270
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'results'], [], returnType);
|
|
270
271
|
};
|
|
271
272
|
const getIsInternalPaging = (state, current, context = Context$1.facets) => {
|
|
272
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams', 'internalPaging'], false);
|
|
273
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'queryParams', 'internalPaging'], false);
|
|
273
274
|
};
|
|
274
275
|
const getIsLoaded = (state, context = Context$1.facets, facet) => {
|
|
275
|
-
return !!getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'queryDuration'], 0);
|
|
276
|
+
return !!getImmutableOrJS(state, ['search', context, facet || getCurrent$1(state, context), 'queryDuration'], 0);
|
|
276
277
|
};
|
|
277
|
-
const getIsLoading = (state, context = Context$1.facets, facet) => {
|
|
278
|
-
return getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'entries', 'isLoading']);
|
|
278
|
+
const getIsLoading$1 = (state, context = Context$1.facets, facet) => {
|
|
279
|
+
return getImmutableOrJS(state, ['search', context, facet || getCurrent$1(state, context), 'entries', 'isLoading']);
|
|
279
280
|
};
|
|
280
281
|
const getIsSsr = state => getImmutableOrJS(state, ['search', 'config', 'ssr'], false);
|
|
281
|
-
const getFeaturedResults = (state, current = '', context = Context$1.facets) => {
|
|
282
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'featuredResults'], []);
|
|
282
|
+
const getFeaturedResults$1 = (state, current = '', context = Context$1.facets, returnType) => {
|
|
283
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'featuredResults'], [], returnType);
|
|
283
284
|
};
|
|
284
285
|
const getPaging = (state, current = '', context = Context$1.facets, returnType) => {
|
|
285
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo'], {}, returnType);
|
|
286
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo'], {}, returnType);
|
|
286
287
|
};
|
|
287
|
-
const getPageIndex = (state, current = '', context = Context$1.facets) => {
|
|
288
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pageIndex']);
|
|
288
|
+
const getPageIndex$1 = (state, current = '', context = Context$1.facets) => {
|
|
289
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'pageIndex']);
|
|
289
290
|
};
|
|
290
291
|
const getPrevPageIndex = (state, current = '', context = Context$1.facets) => {
|
|
291
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'prevPageIndex']);
|
|
292
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'prevPageIndex']);
|
|
292
293
|
};
|
|
293
|
-
const getPageIsLoading = (state, current = '', context = Context$1.facets) => {
|
|
294
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'isLoading']);
|
|
294
|
+
const getPageIsLoading$1 = (state, current = '', context = Context$1.facets) => {
|
|
295
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'isLoading']);
|
|
295
296
|
};
|
|
296
297
|
const getPagesLoaded = (state, current = '', context = Context$1.facets) => {
|
|
297
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pagesLoaded'], [], 'js');
|
|
298
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'pagesLoaded'], [], 'js');
|
|
298
299
|
};
|
|
299
300
|
const getTotalCount = (state, current = '', context = Context$1.facets) => {
|
|
300
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'totalCount']);
|
|
301
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'totalCount']);
|
|
301
302
|
};
|
|
302
|
-
const getSearchTerm = state => getImmutableOrJS(state, ['search', 'term']);
|
|
303
|
+
const getSearchTerm$1 = state => getImmutableOrJS(state, ['search', 'term']);
|
|
303
304
|
const getSearchTabs = (state, returnType) => getImmutableOrJS(state, ['search', 'tabs'], [], returnType);
|
|
304
305
|
const getQueryParams = (state, current = '', context = Context$1.facets) => {
|
|
305
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams'], {}, 'js');
|
|
306
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'queryParams'], {}, 'js');
|
|
306
307
|
};
|
|
307
|
-
const getQueryParameter = ({
|
|
308
|
+
const getQueryParameter$1 = ({
|
|
308
309
|
state,
|
|
309
310
|
facet,
|
|
310
311
|
context = Context$1.facets
|
|
@@ -312,10 +313,10 @@ const getQueryParameter = ({
|
|
|
312
313
|
return getImmutableOrJS(getQueryParams(state, facet, context), key, ifnull, 'js');
|
|
313
314
|
};
|
|
314
315
|
const getCustomApi = (state, current, context = Context$1.facets, returnType) => {
|
|
315
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'customApi'], null, returnType);
|
|
316
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'customApi'], null, returnType);
|
|
316
317
|
};
|
|
317
318
|
const getCustomEnv = (state, current, context = Context$1.facets) => {
|
|
318
|
-
return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'env']);
|
|
319
|
+
return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'env']);
|
|
319
320
|
};
|
|
320
321
|
const getTabsAndFacets = (state, returnType) => {
|
|
321
322
|
const tabs = getSearchTabs(state, 'js');
|
|
@@ -361,69 +362,70 @@ const selectFacets = {
|
|
|
361
362
|
getFacetTitles,
|
|
362
363
|
getFacets,
|
|
363
364
|
getFacetsTotalCount,
|
|
364
|
-
getFeaturedResults,
|
|
365
|
+
getFeaturedResults: getFeaturedResults$1,
|
|
365
366
|
getFilters,
|
|
366
367
|
getFiltersToLoad,
|
|
367
368
|
getIsLoaded,
|
|
368
|
-
getIsLoading,
|
|
369
|
-
getPageIndex,
|
|
370
|
-
getPageIsLoading,
|
|
369
|
+
getIsLoading: getIsLoading$1,
|
|
370
|
+
getPageIndex: getPageIndex$1,
|
|
371
|
+
getPageIsLoading: getPageIsLoading$1,
|
|
371
372
|
getPagesLoaded,
|
|
372
373
|
getPaging,
|
|
373
374
|
getQueryParams: (state, facet) => getQueryParams(state, facet, Context$1.facets),
|
|
374
375
|
getQueryParameter: ({
|
|
375
376
|
state,
|
|
376
377
|
facet
|
|
377
|
-
}, key, ifnull) => getQueryParameter({
|
|
378
|
+
}, key, ifnull) => getQueryParameter$1({
|
|
378
379
|
state,
|
|
379
380
|
facet,
|
|
380
381
|
context: Context$1.facets
|
|
381
382
|
}, key, ifnull),
|
|
382
|
-
getRenderableFilters,
|
|
383
|
+
getRenderableFilters: getRenderableFilters$1,
|
|
383
384
|
getResults,
|
|
384
385
|
getTabFacets,
|
|
385
386
|
getTabsAndFacets,
|
|
386
387
|
getTotalCount,
|
|
387
388
|
getSearchTabs,
|
|
388
|
-
getSearchTerm,
|
|
389
|
+
getSearchTerm: getSearchTerm$1,
|
|
389
390
|
getSearchTotalCount,
|
|
390
391
|
getSelectedFilters
|
|
391
392
|
}; // An exported copy of the relevant selectors pre-scoped to a listing context
|
|
392
393
|
|
|
393
394
|
const selectListing = {
|
|
394
395
|
getCurrent: getCurrentListing,
|
|
395
|
-
getFeaturedResults: (state, listing = '') => getFeaturedResults(state, listing, Context$1.listings),
|
|
396
|
-
getFilters: (state, listing = '') => getFilters(state, listing, Context$1.listings),
|
|
396
|
+
getFeaturedResults: (state, listing = '') => getFeaturedResults$1(state, listing, Context$1.listings, 'js'),
|
|
397
|
+
getFilters: (state, listing = '') => getFilters(state, listing, Context$1.listings, 'js'),
|
|
397
398
|
getFiltersToLoad: (state, listing = '') => getFiltersToLoad(state, listing, Context$1.listings),
|
|
398
|
-
getListing,
|
|
399
|
+
getListing: getListing$1,
|
|
399
400
|
getIsLoaded: state => getIsLoaded(state, Context$1.listings),
|
|
400
|
-
getIsLoading: state => getIsLoading(state, Context$1.listings),
|
|
401
|
-
getPageIndex: (state, listing = '') => getPageIndex(state, listing, Context$1.listings),
|
|
402
|
-
getPaging: (state, listing = '') => getPaging(state, listing, Context$1.listings),
|
|
403
|
-
getPageIsLoading: (state, listing = '') => getPageIsLoading(state, listing, Context$1.listings),
|
|
401
|
+
getIsLoading: state => getIsLoading$1(state, Context$1.listings),
|
|
402
|
+
getPageIndex: (state, listing = '') => getPageIndex$1(state, listing, Context$1.listings),
|
|
403
|
+
getPaging: (state, listing = '') => getPaging(state, listing, Context$1.listings, 'js'),
|
|
404
|
+
getPageIsLoading: (state, listing = '') => getPageIsLoading$1(state, listing, Context$1.listings),
|
|
404
405
|
getPagesLoaded: (state, listing = '') => getPagesLoaded(state, listing, Context$1.listings),
|
|
405
406
|
getQueryParams: (state, listing = '') => getQueryParams(state, listing, Context$1.listings),
|
|
406
407
|
getQueryParameter: ({
|
|
407
408
|
state,
|
|
408
409
|
facet
|
|
409
|
-
}, key, ifnull) => getQueryParameter({
|
|
410
|
+
}, key, ifnull) => getQueryParameter$1({
|
|
410
411
|
state,
|
|
411
412
|
facet,
|
|
412
413
|
context: Context$1.listings
|
|
413
414
|
}, key, ifnull),
|
|
414
|
-
getRenderableFilters: (state, listing = '') => getRenderableFilters(state, listing, Context$1.listings),
|
|
415
|
-
getResults: (state, listing = '') => getResults(state, listing, Context$1.listings),
|
|
416
|
-
getSearchTerm,
|
|
415
|
+
getRenderableFilters: (state, listing = '') => getRenderableFilters$1(state, listing, Context$1.listings),
|
|
416
|
+
getResults: (state, listing = '') => getResults(state, listing, Context$1.listings, 'js'),
|
|
417
|
+
getSearchTerm: getSearchTerm$1,
|
|
417
418
|
getTotalCount: (state, listing = '') => getTotalCount(state, listing, Context$1.listings),
|
|
418
|
-
getSelectedFilters: (state, listing = '') => getSelectedFilters(state, listing, Context$1.listings)
|
|
419
|
+
getSelectedFilters: (state, listing = '') => getSelectedFilters(state, listing, Context$1.listings, 'js')
|
|
419
420
|
};
|
|
420
421
|
const selectCurrentPath = state => getImmutableOrJS(state, ['routing', 'currentPath']);
|
|
422
|
+
const selectCurrentProject = state => getImmutableOrJS(state, ['routing', 'currentProject']);
|
|
421
423
|
const selectVersionStatus = state => getImmutableOrJS(state, ['version', 'contensisVersionStatus']);
|
|
422
424
|
|
|
423
425
|
var selectors = /*#__PURE__*/Object.freeze({
|
|
424
426
|
__proto__: null,
|
|
425
427
|
getSearchContext: getSearchContext,
|
|
426
|
-
getCurrent: getCurrent,
|
|
428
|
+
getCurrent: getCurrent$1,
|
|
427
429
|
getCurrentFacet: getCurrentFacet,
|
|
428
430
|
getCurrentListing: getCurrentListing,
|
|
429
431
|
getCurrentTab: getCurrentTab,
|
|
@@ -431,27 +433,27 @@ var selectors = /*#__PURE__*/Object.freeze({
|
|
|
431
433
|
getTabFacets: getTabFacets,
|
|
432
434
|
getFacetTitles: getFacetTitles,
|
|
433
435
|
getFacet: getFacet,
|
|
434
|
-
getListing: getListing,
|
|
436
|
+
getListing: getListing$1,
|
|
435
437
|
getFilters: getFilters,
|
|
436
|
-
getRenderableFilters: getRenderableFilters,
|
|
438
|
+
getRenderableFilters: getRenderableFilters$1,
|
|
437
439
|
getFiltersToLoad: getFiltersToLoad,
|
|
438
440
|
getSelectedFilters: getSelectedFilters,
|
|
439
441
|
getResults: getResults,
|
|
440
442
|
getIsInternalPaging: getIsInternalPaging,
|
|
441
443
|
getIsLoaded: getIsLoaded,
|
|
442
|
-
getIsLoading: getIsLoading,
|
|
444
|
+
getIsLoading: getIsLoading$1,
|
|
443
445
|
getIsSsr: getIsSsr,
|
|
444
|
-
getFeaturedResults: getFeaturedResults,
|
|
446
|
+
getFeaturedResults: getFeaturedResults$1,
|
|
445
447
|
getPaging: getPaging,
|
|
446
|
-
getPageIndex: getPageIndex,
|
|
448
|
+
getPageIndex: getPageIndex$1,
|
|
447
449
|
getPrevPageIndex: getPrevPageIndex,
|
|
448
|
-
getPageIsLoading: getPageIsLoading,
|
|
450
|
+
getPageIsLoading: getPageIsLoading$1,
|
|
449
451
|
getPagesLoaded: getPagesLoaded,
|
|
450
452
|
getTotalCount: getTotalCount,
|
|
451
|
-
getSearchTerm: getSearchTerm,
|
|
453
|
+
getSearchTerm: getSearchTerm$1,
|
|
452
454
|
getSearchTabs: getSearchTabs,
|
|
453
455
|
getQueryParams: getQueryParams,
|
|
454
|
-
getQueryParameter: getQueryParameter,
|
|
456
|
+
getQueryParameter: getQueryParameter$1,
|
|
455
457
|
getCustomApi: getCustomApi,
|
|
456
458
|
getCustomEnv: getCustomEnv,
|
|
457
459
|
getTabsAndFacets: getTabsAndFacets,
|
|
@@ -460,12 +462,12 @@ var selectors = /*#__PURE__*/Object.freeze({
|
|
|
460
462
|
selectFacets: selectFacets,
|
|
461
463
|
selectListing: selectListing,
|
|
462
464
|
selectCurrentPath: selectCurrentPath,
|
|
465
|
+
selectCurrentProject: selectCurrentProject,
|
|
463
466
|
selectVersionStatus: selectVersionStatus
|
|
464
467
|
});
|
|
465
468
|
|
|
466
469
|
// eslint-disable-next-line import/default
|
|
467
470
|
|
|
468
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
469
471
|
const withSearch = mappers => SearchComponent => {
|
|
470
472
|
const Wrapper = props => {
|
|
471
473
|
return /*#__PURE__*/React.createElement(SearchComponent, props);
|
|
@@ -476,22 +478,23 @@ const withSearch = mappers => SearchComponent => {
|
|
|
476
478
|
const mapStateToProps = state => {
|
|
477
479
|
return {
|
|
478
480
|
currentFacet: getCurrentFacet(state),
|
|
479
|
-
currentPageIndex: getPageIndex(state),
|
|
481
|
+
currentPageIndex: getPageIndex$1(state),
|
|
480
482
|
currentTabIndex: getCurrentTab(state),
|
|
481
483
|
facet: getFacet(state),
|
|
482
484
|
facets: getTabFacets(state),
|
|
483
485
|
facetsTotalCount: getFacetsTotalCount(state),
|
|
484
486
|
facetTitles: getFacetTitles(state),
|
|
485
|
-
featuredResults: getFeaturedResults(state),
|
|
486
|
-
filters: getRenderableFilters(state),
|
|
487
|
-
isLoading: getIsLoading(state),
|
|
487
|
+
featuredResults: getFeaturedResults$1(state),
|
|
488
|
+
filters: getRenderableFilters$1(state),
|
|
489
|
+
isLoading: getIsLoading$1(state),
|
|
488
490
|
paging: getPaging(state),
|
|
489
|
-
pageIsLoading: getPageIsLoading(state),
|
|
491
|
+
pageIsLoading: getPageIsLoading$1(state),
|
|
490
492
|
results: getResults(state),
|
|
491
493
|
resultsInfo: (mappers === null || mappers === void 0 ? void 0 : mappers.resultsInfo) && mappers.resultsInfo(state),
|
|
492
|
-
searchTerm: getSearchTerm(state),
|
|
494
|
+
searchTerm: getSearchTerm$1(state),
|
|
493
495
|
searchTotalCount: getSearchTotalCount(state),
|
|
494
|
-
|
|
496
|
+
selectedFilters: getSelectedFilters(state),
|
|
497
|
+
sortOrder: getQueryParameter$1({
|
|
495
498
|
state
|
|
496
499
|
}, 'dynamicOrderBy', []),
|
|
497
500
|
tabsAndFacets: getTabsAndFacets(state),
|
|
@@ -505,7 +508,7 @@ const withSearch = mappers => SearchComponent => {
|
|
|
505
508
|
updateCurrentTab: id => withMappers(updateCurrentTab$1(id), mappers),
|
|
506
509
|
updatePageIndex: pageIndex => withMappers(updatePageIndex$1(pageIndex), mappers),
|
|
507
510
|
updateSearchTerm: term => withMappers(updateSearchTerm$1(term), mappers),
|
|
508
|
-
updateSelectedFilters: (filter, key) => withMappers(updateSelectedFilters(filter, key), mappers),
|
|
511
|
+
updateSelectedFilters: (filter, key, isUnknownItem = false) => withMappers(updateSelectedFilters(filter, key, isUnknownItem), mappers),
|
|
509
512
|
updateSortOrder: orderBy => withMappers(updateSortOrder$1(orderBy), mappers)
|
|
510
513
|
};
|
|
511
514
|
const connector = connect(mapStateToProps, mapDispatchToProps);
|
|
@@ -545,6 +548,7 @@ const withListing = mappers => ListingComponent => {
|
|
|
545
548
|
results: getResults(state),
|
|
546
549
|
resultsInfo: mappers && typeof mappers.resultsInfo === 'function' && mappers.resultsInfo(state),
|
|
547
550
|
searchTerm: getSearchTerm(state),
|
|
551
|
+
selectedFilters: getSelectedFilters(state),
|
|
548
552
|
sortOrder: getQueryParameter({
|
|
549
553
|
state
|
|
550
554
|
}, 'dynamicOrderBy', [])
|
|
@@ -556,7 +560,7 @@ const withListing = mappers => ListingComponent => {
|
|
|
556
560
|
updateCurrentFacet: facet => withMappers(updateCurrentFacet$1(facet), mappers),
|
|
557
561
|
updatePageIndex: pageIndex => withMappers(updatePageIndex$1(pageIndex), mappers),
|
|
558
562
|
updateSearchTerm: term => withMappers(updateSearchTerm$1(term), mappers),
|
|
559
|
-
updateSelectedFilters: (filter, key) => withMappers(updateSelectedFilters(filter, key), mappers),
|
|
563
|
+
updateSelectedFilters: (filter, key, isUnknownItem = false) => withMappers(updateSelectedFilters(filter, key, isUnknownItem), mappers),
|
|
560
564
|
updateSortOrder: orderBy => withMappers(updateSortOrder$1(orderBy), mappers)
|
|
561
565
|
};
|
|
562
566
|
return connect(mapStateToProps, mapDispatchToProps)(toJS$1(Wrapper));
|
|
@@ -768,7 +772,7 @@ const extractQuotedPhrases = searchTerm => {
|
|
|
768
772
|
return (searchTerm.match(pattern) || []).map(match => match.replace(/"/g, ''));
|
|
769
773
|
};
|
|
770
774
|
const buildUrl = (route, params) => {
|
|
771
|
-
const qs =
|
|
775
|
+
const qs = stringify(params);
|
|
772
776
|
const path = qs ? `${route}?${qs}` : route;
|
|
773
777
|
return path;
|
|
774
778
|
};
|
|
@@ -844,12 +848,12 @@ const Fields = {
|
|
|
844
848
|
};
|
|
845
849
|
|
|
846
850
|
const fieldExpression = (field, value, operator = 'equalTo', weight) => {
|
|
847
|
-
if (!field || !value) return [];
|
|
851
|
+
if (!field || !value || Array.isArray(value) && value.length === 0) return [];
|
|
848
852
|
if (Array.isArray(field)) // If an array of fieldIds have been provided, call self for each fieldId
|
|
849
853
|
// to generate expressions that are combined with an 'or' operator
|
|
850
854
|
return [Op.or(...field.map(fieldId => fieldExpression(fieldId, value, operator, weight)).flat())];
|
|
851
855
|
if (operator === 'between') return between(field, value);
|
|
852
|
-
if (Array.isArray(value)) return equalToOrIn(field, value, operator);else return !weight ?
|
|
856
|
+
if (Array.isArray(value)) return equalToOrIn(field, value, operator);else return !weight ? equalToOrIn(field, value, operator) : [equalToOrIn(field, value, operator)[0].weight(weight)];
|
|
853
857
|
};
|
|
854
858
|
const contentTypeIdExpression = (contentTypeIds, webpageTemplates, assetTypes) => {
|
|
855
859
|
const expressions = [];
|
|
@@ -873,8 +877,17 @@ const contentTypeIdExpression = (contentTypeIds, webpageTemplates, assetTypes) =
|
|
|
873
877
|
const filterExpressions = filters => {
|
|
874
878
|
if (!filters) return [];
|
|
875
879
|
const expressions = [];
|
|
876
|
-
filters.map(
|
|
877
|
-
|
|
880
|
+
filters.map(selectedFilter => {
|
|
881
|
+
if (selectedFilter.logicOperator === 'and') // using 'and' logic operator we loop through each filter
|
|
882
|
+
// and loop through all values to add an expression for each filter value
|
|
883
|
+
selectedFilter.values.forEach(value => expressions.push(...fieldExpression(selectedFilter.key, value, selectedFilter.fieldOperator || 'equalTo')));else if (selectedFilter.logicOperator === 'not') {
|
|
884
|
+
const fieldExpressions = fieldExpression(selectedFilter.key, selectedFilter.values, selectedFilter.fieldOperator || 'in');
|
|
885
|
+
fieldExpressions.forEach(expr => {
|
|
886
|
+
expressions.push(Op.not(expr));
|
|
887
|
+
});
|
|
888
|
+
} // using 'or' logic operator we loop over each filter
|
|
889
|
+
// and simply add the array of values to an expression with an 'in' operator
|
|
890
|
+
else expressions.push(...fieldExpression(selectedFilter.key, selectedFilter.values, selectedFilter.fieldOperator || 'in'));
|
|
878
891
|
});
|
|
879
892
|
return expressions;
|
|
880
893
|
};
|
|
@@ -891,8 +904,8 @@ const dataFormatExpression = (contentTypeIds, dataFormat = DataFormats.entry) =>
|
|
|
891
904
|
const withExpr = fieldExpression(Fields.sys.contentTypeId, withContentTypeIds)[0];
|
|
892
905
|
const notExpr = Op.not(fieldExpression(Fields.sys.contentTypeId, notContentTypeIds)[0]);
|
|
893
906
|
andExpr.add(dataFormatExpr);
|
|
894
|
-
if (withContentTypeIds.length > 0) andExpr.add(withExpr);
|
|
895
|
-
if (notContentTypeIds.length > 0) andExpr.add(notExpr);
|
|
907
|
+
if (withContentTypeIds.length > 0 && withExpr) andExpr.add(withExpr);
|
|
908
|
+
if (notContentTypeIds.length > 0 && notExpr) andExpr.add(notExpr);
|
|
896
909
|
return [andExpr];
|
|
897
910
|
}
|
|
898
911
|
|
|
@@ -948,19 +961,48 @@ const equalToOrIn = (field, value, operator = 'equalTo') => {
|
|
|
948
961
|
if (value.length === 0) return [];
|
|
949
962
|
|
|
950
963
|
if (Array.isArray(value)) {
|
|
951
|
-
if (
|
|
952
|
-
return [Op.
|
|
964
|
+
if (operator === 'equalTo' || operator === 'in') return [Op.in(field, ...value)];
|
|
965
|
+
return [Op.or(...value.map(innerValue => {
|
|
966
|
+
switch (operator) {
|
|
967
|
+
case 'between':
|
|
968
|
+
case 'distanceWithin':
|
|
969
|
+
// Not implemented
|
|
970
|
+
return Op.equalTo(field, innerValue);
|
|
971
|
+
|
|
972
|
+
case 'exists':
|
|
973
|
+
return Op.exists(field, innerValue);
|
|
974
|
+
|
|
975
|
+
case 'freeText':
|
|
976
|
+
// TODO: Potentially needs further implementation of new options
|
|
977
|
+
return Op[operator](field, innerValue, false, undefined);
|
|
978
|
+
|
|
979
|
+
default:
|
|
980
|
+
return Op[operator](field, innerValue);
|
|
981
|
+
}
|
|
982
|
+
}))];
|
|
953
983
|
}
|
|
954
984
|
|
|
955
|
-
|
|
985
|
+
switch (operator) {
|
|
986
|
+
case 'between':
|
|
987
|
+
case 'distanceWithin':
|
|
988
|
+
// Not implemented
|
|
989
|
+
return [Op.equalTo(field, value)];
|
|
990
|
+
|
|
991
|
+
case 'freeText':
|
|
992
|
+
// TODO: Potentially needs further implementation of new options
|
|
993
|
+
return [Op[operator](field, value, false, undefined)];
|
|
994
|
+
|
|
995
|
+
default:
|
|
996
|
+
return [Op[operator](field, value)];
|
|
997
|
+
}
|
|
956
998
|
};
|
|
957
999
|
|
|
958
1000
|
const between = (field, value) => {
|
|
959
1001
|
const handle = betweenValue => {
|
|
960
|
-
const valArr = betweenValue.split('
|
|
1002
|
+
const valArr = betweenValue.split('--');
|
|
961
1003
|
|
|
962
1004
|
if (valArr.length > 1) {
|
|
963
|
-
const [minimum, maximum
|
|
1005
|
+
const [minimum, maximum] = valArr;
|
|
964
1006
|
return Op.between(field, minimum, maximum);
|
|
965
1007
|
} else {
|
|
966
1008
|
// eslint-disable-next-line no-console
|
|
@@ -970,10 +1012,9 @@ const between = (field, value) => {
|
|
|
970
1012
|
};
|
|
971
1013
|
|
|
972
1014
|
if (value.length === 0) return [];
|
|
973
|
-
if (Array.isArray(value)) return [Op.or(...value.map(handle).filter(bc => bc !== false))];
|
|
974
|
-
|
|
1015
|
+
if (Array.isArray(value)) return [Op.or(...value.map(handle).filter(bc => bc !== false))];
|
|
975
1016
|
const op = handle(value);
|
|
976
|
-
return op ? [op] : [];
|
|
1017
|
+
return op ? [op] : [];
|
|
977
1018
|
};
|
|
978
1019
|
/**
|
|
979
1020
|
* Accept HTTP style objects and map them to
|
|
@@ -1016,7 +1057,7 @@ const customWhereExpressions = where => {
|
|
|
1016
1057
|
// the second property inside the clause
|
|
1017
1058
|
|
|
1018
1059
|
if (notIdx === 1) {
|
|
1019
|
-
expression = Op.not(Op[innerOperator](innerField, innerValue));
|
|
1060
|
+
expression = innerOperator === 'between' ? Op.not(Op[innerOperator](innerField, innerValue[0], innerValue[1])) : Op.not(Op[innerOperator](innerField, innerValue));
|
|
1020
1061
|
}
|
|
1021
1062
|
});
|
|
1022
1063
|
}
|
|
@@ -1028,8 +1069,9 @@ const customWhereExpressions = where => {
|
|
|
1028
1069
|
|
|
1029
1070
|
if (idx === 1 && // operator !== 'and' &&
|
|
1030
1071
|
// operator !== 'or' &&
|
|
1031
|
-
operator !== 'between' &&
|
|
1032
|
-
|
|
1072
|
+
// operator !== 'between' &&
|
|
1073
|
+
operator !== 'distanceWithin') {
|
|
1074
|
+
expression = operator === 'freeText' || operator === 'contains' ? Op[operator](field, value) : operator === 'in' ? Op[operator](field, ...value) : operator === 'exists' ? Op[operator](field, value) : operator === 'between' ? Op[operator](field, value[0], value[1]) : Op[operator](field, value);
|
|
1033
1075
|
if (typeof weight === 'number') expression = expression.weight(weight);
|
|
1034
1076
|
}
|
|
1035
1077
|
});
|
|
@@ -1159,20 +1201,16 @@ const searchUriTemplate = {
|
|
|
1159
1201
|
|
|
1160
1202
|
const stateFilters = term ? {} : Object.fromEntries(Object.entries(getSelectedFilters(state, facet, searchContext, 'js')).map(([key, f]) => [key, f === null || f === void 0 ? void 0 : f.join(',')]));
|
|
1161
1203
|
const currentSearch = !term && getImmutableOrJS(state, ['routing', 'location', 'search']);
|
|
1162
|
-
const currentQs = removeEmptyAttributes(
|
|
1204
|
+
const currentQs = removeEmptyAttributes(parse(currentSearch));
|
|
1163
1205
|
if (orderBy) currentQs.orderBy = orderBy;
|
|
1164
|
-
const searchTerm = getSearchTerm(state); //
|
|
1165
|
-
// to build the new Qs.
|
|
1206
|
+
const searchTerm = getSearchTerm$1(state); // Merge the stateFilters with any current qs to build the new qs
|
|
1166
1207
|
|
|
1167
1208
|
const mergedSearch = removeEmptyAttributes({ ...merge(currentQs, stateFilters),
|
|
1168
1209
|
term: searchTerm
|
|
1169
1210
|
});
|
|
1170
|
-
return
|
|
1211
|
+
return stringify(mergedSearch);
|
|
1171
1212
|
},
|
|
1172
|
-
hash:
|
|
1173
|
-
$path: 'state',
|
|
1174
|
-
$formatting: state => getImmutableOrJS(state, ['routing', 'location', 'hash'], '').replace('#', '')
|
|
1175
|
-
}
|
|
1213
|
+
hash: state => getImmutableOrJS(state, ['routing', 'location', 'hash'], '').replace('#', '')
|
|
1176
1214
|
};
|
|
1177
1215
|
|
|
1178
1216
|
const mapStateToSearchUri = params => mapJson(params, searchUriTemplate);
|
|
@@ -1317,14 +1355,15 @@ const filterTemplate = {
|
|
|
1317
1355
|
const filterExpressionMapper = {
|
|
1318
1356
|
// Expression type: so we can identify how to build the query
|
|
1319
1357
|
expressionType: ({
|
|
1320
|
-
|
|
1321
|
-
}) =>
|
|
1358
|
+
contentTypeId
|
|
1359
|
+
}) => contentTypeId ? FilterExpressionTypes.contentType : FilterExpressionTypes.field,
|
|
1322
1360
|
// Key: so we can target the query to a specific field
|
|
1323
|
-
key: '
|
|
1361
|
+
key: 'fieldId',
|
|
1324
1362
|
// Value: so we can filter a specific field by an array of values
|
|
1325
1363
|
// e.g. taxonomy key or contentTypeId array
|
|
1326
|
-
|
|
1327
|
-
|
|
1364
|
+
values: 'selectedValues',
|
|
1365
|
+
fieldOperator: 'fieldOperator',
|
|
1366
|
+
logicOperator: 'logicOperator'
|
|
1328
1367
|
};
|
|
1329
1368
|
|
|
1330
1369
|
const mapFilterToFilterExpression = filter => mapJson(filter, filterExpressionMapper);
|
|
@@ -1334,18 +1373,15 @@ const mapFiltersToFilterExpression = (filters, selectedFilters) => {
|
|
|
1334
1373
|
const filterExpressions = []; // Iterate through the keys in selectedFilters and locate
|
|
1335
1374
|
// the items that are selected and queryable
|
|
1336
1375
|
|
|
1337
|
-
Object.entries(selectedFilters).map(([fkey,
|
|
1376
|
+
Object.entries(selectedFilters).map(([fkey, selectedValues]) => {
|
|
1338
1377
|
const filter = filters[fkey];
|
|
1339
1378
|
|
|
1340
|
-
if (
|
|
1341
|
-
|
|
1379
|
+
if (selectedValues && filter) {
|
|
1380
|
+
// Where we have a value for a selectedFilter
|
|
1342
1381
|
// and a filter is found for the current key
|
|
1343
1382
|
// map the filter to a filterExpression object
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
filter,
|
|
1347
|
-
selectedItems,
|
|
1348
|
-
selectedValue
|
|
1383
|
+
const expr = mapFilterToFilterExpression({ ...filter,
|
|
1384
|
+
selectedValues
|
|
1349
1385
|
});
|
|
1350
1386
|
filterExpressions.push(expr);
|
|
1351
1387
|
}
|
|
@@ -1354,10 +1390,10 @@ const mapFiltersToFilterExpression = (filters, selectedFilters) => {
|
|
|
1354
1390
|
};
|
|
1355
1391
|
|
|
1356
1392
|
const queryParamsTemplate = {
|
|
1357
|
-
assetTypes: root => getQueryParameter(root, 'assetTypes', []),
|
|
1358
|
-
contentTypeIds: root => getQueryParameter(root, 'contentTypeIds', []),
|
|
1359
|
-
customWhere: root => getQueryParameter(root, 'customWhere', []),
|
|
1360
|
-
dynamicOrderBy: root => getQueryParameter(root, 'dynamicOrderBy', []),
|
|
1393
|
+
assetTypes: root => getQueryParameter$1(root, 'assetTypes', []),
|
|
1394
|
+
contentTypeIds: root => getQueryParameter$1(root, 'contentTypeIds', []),
|
|
1395
|
+
customWhere: root => getQueryParameter$1(root, 'customWhere', []),
|
|
1396
|
+
dynamicOrderBy: root => getQueryParameter$1(root, 'dynamicOrderBy', []),
|
|
1361
1397
|
env: ({
|
|
1362
1398
|
state,
|
|
1363
1399
|
facet,
|
|
@@ -1372,8 +1408,8 @@ const queryParamsTemplate = {
|
|
|
1372
1408
|
if (excludeIds) return Array.isArray(excludeIds) ? excludeIds : excludeIds.split(',').map(id => id.trim());
|
|
1373
1409
|
return null;
|
|
1374
1410
|
},
|
|
1375
|
-
featuredResults: root => getQueryParameter(root, 'featuredResults', null),
|
|
1376
|
-
fields: root => getQueryParameter(root, 'fields', []),
|
|
1411
|
+
featuredResults: root => getQueryParameter$1(root, 'featuredResults', null),
|
|
1412
|
+
fields: root => getQueryParameter$1(root, 'fields', []),
|
|
1377
1413
|
filters: ({
|
|
1378
1414
|
state,
|
|
1379
1415
|
facet,
|
|
@@ -1385,28 +1421,28 @@ const queryParamsTemplate = {
|
|
|
1385
1421
|
const filterParams = mapFiltersToFilterExpression(stateFilters, selectedFilters);
|
|
1386
1422
|
return filterParams;
|
|
1387
1423
|
},
|
|
1388
|
-
includeInSearchFields: root => getQueryParameter(root, 'includeInSearch', []),
|
|
1424
|
+
includeInSearchFields: root => getQueryParameter$1(root, 'includeInSearch', []),
|
|
1389
1425
|
internalPageIndex: ({
|
|
1390
1426
|
action,
|
|
1391
1427
|
state
|
|
1392
|
-
}) => getPageIndex(state, '', action.context),
|
|
1393
|
-
internalPaging: root => getQueryParameter(root, 'internalPaging', false),
|
|
1428
|
+
}) => getPageIndex$1(state, '', action.context),
|
|
1429
|
+
internalPaging: root => getQueryParameter$1(root, 'internalPaging', false),
|
|
1394
1430
|
languages: ({
|
|
1395
1431
|
action
|
|
1396
1432
|
}) => action.defaultLang ? [action.defaultLang] : [],
|
|
1397
|
-
linkDepth: root => getQueryParameter(root, 'linkDepth', 0),
|
|
1398
|
-
loadMorePaging: root => getQueryParameter(root, 'loadMorePaging', false),
|
|
1399
|
-
orderBy: root => getQueryParameter(root, 'orderBy', []),
|
|
1433
|
+
linkDepth: root => getQueryParameter$1(root, 'linkDepth', 0),
|
|
1434
|
+
loadMorePaging: root => getQueryParameter$1(root, 'loadMorePaging', false),
|
|
1435
|
+
orderBy: root => getQueryParameter$1(root, 'orderBy', []),
|
|
1400
1436
|
pageIndex: root => {
|
|
1401
1437
|
const {
|
|
1402
1438
|
action,
|
|
1403
1439
|
state
|
|
1404
1440
|
} = root;
|
|
1405
|
-
if (getQueryParameter(root, 'internalPaging', false)) return 0;
|
|
1441
|
+
if (getQueryParameter$1(root, 'internalPaging', false)) return 0;
|
|
1406
1442
|
if (action.type === UPDATE_PAGE_INDEX) return action.params.pageIndex;
|
|
1407
|
-
return !action.preload ? getPageIndex(state,
|
|
1443
|
+
return !action.preload ? getPageIndex$1(state, action.facet, action.context) : 0;
|
|
1408
1444
|
},
|
|
1409
|
-
pageSize: root => getQueryParameter(root, 'pageSize'),
|
|
1445
|
+
pageSize: root => getQueryParameter$1(root, 'pageSize'),
|
|
1410
1446
|
pagesLoaded: ({
|
|
1411
1447
|
state,
|
|
1412
1448
|
facet,
|
|
@@ -1424,9 +1460,9 @@ const queryParamsTemplate = {
|
|
|
1424
1460
|
}) => {
|
|
1425
1461
|
var _getFacet;
|
|
1426
1462
|
|
|
1427
|
-
return (_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId;
|
|
1463
|
+
return ((_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId) || selectCurrentProject(state);
|
|
1428
1464
|
},
|
|
1429
|
-
searchTerm: root => root.context !== Context$1.minilist || getQueryParameter(root, 'useSearchTerm', false) ? getSearchTerm(root.state) : '',
|
|
1465
|
+
searchTerm: root => root.context !== Context$1.minilist || getQueryParameter$1(root, 'useSearchTerm', false) ? getSearchTerm$1(root.state) : '',
|
|
1430
1466
|
selectedFilters: ({
|
|
1431
1467
|
state,
|
|
1432
1468
|
facet,
|
|
@@ -1436,11 +1472,11 @@ const queryParamsTemplate = {
|
|
|
1436
1472
|
state
|
|
1437
1473
|
}) => selectVersionStatus(state),
|
|
1438
1474
|
weightedSearchFields: root => {
|
|
1439
|
-
const wsf = getQueryParameter(root, 'weightedSearchFields', []);
|
|
1475
|
+
const wsf = getQueryParameter$1(root, 'weightedSearchFields', []);
|
|
1440
1476
|
const deduped = wsf.filter((v, i, a) => a.findIndex(t => t.fieldId === v.fieldId) === i);
|
|
1441
1477
|
return deduped; // return wsf;
|
|
1442
1478
|
},
|
|
1443
|
-
webpageTemplates: root => getQueryParameter(root, 'webpageTemplates', [])
|
|
1479
|
+
webpageTemplates: root => getQueryParameter$1(root, 'webpageTemplates', [])
|
|
1444
1480
|
};
|
|
1445
1481
|
|
|
1446
1482
|
const mapStateToQueryParams = sourceJson => mapJson(sourceJson, queryParamsTemplate);
|
|
@@ -1486,8 +1522,8 @@ const runSearch = (action, state, queryParams) => {
|
|
|
1486
1522
|
const facetIsLoaded = defaultLang ? false : getIsLoaded(state, context, facet);
|
|
1487
1523
|
const stateParams = { ...getQueryParams(ogState, facet, context)
|
|
1488
1524
|
};
|
|
1489
|
-
stateParams.pageIndex = getPageIndex(ogState, facet, context);
|
|
1490
|
-
stateParams.searchTerm = getSearchTerm(ogState);
|
|
1525
|
+
stateParams.pageIndex = getPageIndex$1(ogState, facet, context);
|
|
1526
|
+
stateParams.searchTerm = getSearchTerm$1(ogState);
|
|
1491
1527
|
|
|
1492
1528
|
if (context === Context$1.facets && ssr || // context === Context.minilist ||
|
|
1493
1529
|
preload || !facetIsLoaded || filterParamsChanged(action) || defaultLang) {
|
|
@@ -1538,9 +1574,10 @@ const filterParamsChanged = (action, state) => {
|
|
|
1538
1574
|
const debugExecuteSearch = (action, state) => {
|
|
1539
1575
|
const [queryParams, runSearch] = generateQueryParams(action, state);
|
|
1540
1576
|
console.log('runSearch', runSearch, 'action', action, 'filterParamsChanged', filterParamsChanged(action, state), 'getIsLoaded(state, context, facet)', getIsLoaded(state, action.context, action.facet));
|
|
1541
|
-
const stateParams = getQueryParams(action.ogState || state, action.facet, action.context)
|
|
1542
|
-
|
|
1543
|
-
|
|
1577
|
+
const stateParams = { ...getQueryParams(action.ogState || state, action.facet, action.context),
|
|
1578
|
+
pageIndex: getPageIndex$1(action.ogState || state, action.facet, action.context),
|
|
1579
|
+
searchTerm: getSearchTerm$1(action.ogState || state)
|
|
1580
|
+
};
|
|
1544
1581
|
console.log(stateParams, queryParams);
|
|
1545
1582
|
console.log('getSelectedFilters', getSelectedFilters(action.ogState || state, action.facet, action.context, 'js'), 'params', action.params);
|
|
1546
1583
|
};
|
|
@@ -1605,14 +1642,20 @@ function* setRouteFilters(action) {
|
|
|
1605
1642
|
ssr,
|
|
1606
1643
|
debug
|
|
1607
1644
|
};
|
|
1608
|
-
yield put(nextAction); //
|
|
1645
|
+
yield put(nextAction); // keep track of this state ref for comparing changes to params later
|
|
1646
|
+
|
|
1647
|
+
const ogState = {
|
|
1648
|
+
search: state.search
|
|
1649
|
+
}; // Using call instead of triggering from the put
|
|
1609
1650
|
// to allow this exported saga to continue during SSR
|
|
1610
1651
|
|
|
1611
1652
|
yield call(ensureSearch, { ...nextAction,
|
|
1612
|
-
ogState
|
|
1653
|
+
ogState
|
|
1613
1654
|
});
|
|
1614
1655
|
}
|
|
1615
1656
|
function* doSearch(action) {
|
|
1657
|
+
var _action$params;
|
|
1658
|
+
|
|
1616
1659
|
const state = toJS(yield select());
|
|
1617
1660
|
|
|
1618
1661
|
if (action.config) {
|
|
@@ -1625,12 +1668,20 @@ function* doSearch(action) {
|
|
|
1625
1668
|
|
|
1626
1669
|
const nextAction = { ...action,
|
|
1627
1670
|
type: SET_SEARCH_FILTERS,
|
|
1628
|
-
ssr: getIsSsr(state)
|
|
1671
|
+
ssr: getIsSsr(state),
|
|
1672
|
+
facet: action.facet || ((_action$params = action.params) === null || _action$params === void 0 ? void 0 : _action$params.facet)
|
|
1629
1673
|
};
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1674
|
+
|
|
1675
|
+
if (nextAction.facet && (action.config || Object.keys(getFacet(state, nextAction.facet, action.context, 'js')).length > 0)) {
|
|
1676
|
+
yield put(nextAction); // keep track of this state ref for comparing changes to params later
|
|
1677
|
+
|
|
1678
|
+
const ogState = {
|
|
1679
|
+
search: state.search
|
|
1680
|
+
};
|
|
1681
|
+
yield call(ensureSearch, { ...nextAction,
|
|
1682
|
+
ogState
|
|
1683
|
+
});
|
|
1684
|
+
}
|
|
1634
1685
|
}
|
|
1635
1686
|
|
|
1636
1687
|
function* loadFilters(action) {
|
|
@@ -1728,7 +1779,9 @@ function* ensureSearch(action) {
|
|
|
1728
1779
|
try {
|
|
1729
1780
|
const state = yield select();
|
|
1730
1781
|
const nextAction = { ...action,
|
|
1731
|
-
ogState: action.ogState ||
|
|
1782
|
+
ogState: action.ogState || {
|
|
1783
|
+
search: state.search
|
|
1784
|
+
}
|
|
1732
1785
|
};
|
|
1733
1786
|
const [queryParams, runSearch] = generateQueryParams(nextAction, state);
|
|
1734
1787
|
if (debug && (debug === true || debug.executeSearch)) debugExecuteSearch(nextAction, state);
|
|
@@ -1868,7 +1921,7 @@ function* updateCurrentFacet(action) {
|
|
|
1868
1921
|
facet,
|
|
1869
1922
|
mappers
|
|
1870
1923
|
} = action;
|
|
1871
|
-
const pageIndex = yield select(getPageIndex, facet);
|
|
1924
|
+
const pageIndex = yield select(getPageIndex$1, facet);
|
|
1872
1925
|
const uri = yield buildUri({
|
|
1873
1926
|
facet,
|
|
1874
1927
|
pageIndex
|
|
@@ -1926,7 +1979,7 @@ function* buildUri({
|
|
|
1926
1979
|
term
|
|
1927
1980
|
}, mappers) {
|
|
1928
1981
|
const state = yield select();
|
|
1929
|
-
const mapUri = mappers
|
|
1982
|
+
const mapUri = (mappers === null || mappers === void 0 ? void 0 : mappers.navigate) || mapStateToSearchUri;
|
|
1930
1983
|
const uri = mapUri({
|
|
1931
1984
|
state,
|
|
1932
1985
|
facet,
|
|
@@ -1938,13 +1991,98 @@ function* buildUri({
|
|
|
1938
1991
|
return `${uri.path}${uri.search && `?${uri.search}` || ''}${uri.hash && `#${uri.hash}` || ''}`;
|
|
1939
1992
|
}
|
|
1940
1993
|
|
|
1994
|
+
var defaultMappers = {
|
|
1995
|
+
results: entries => entries,
|
|
1996
|
+
navigate: mapStateToSearchUri
|
|
1997
|
+
};
|
|
1998
|
+
|
|
1999
|
+
const {
|
|
2000
|
+
getCurrent,
|
|
2001
|
+
getFeaturedResults,
|
|
2002
|
+
getIsLoading,
|
|
2003
|
+
getListing,
|
|
2004
|
+
getPageIndex,
|
|
2005
|
+
getPageIsLoading,
|
|
2006
|
+
getQueryParameter,
|
|
2007
|
+
getRenderableFilters,
|
|
2008
|
+
getSearchTerm
|
|
2009
|
+
} = selectListing;
|
|
2010
|
+
|
|
2011
|
+
const makeSelectListingProps = () => createSelector(state => state, (_, mappers) => mappers, (state, mappers) => ({
|
|
2012
|
+
currentListing: getCurrent(state),
|
|
2013
|
+
currentPageIndex: getPageIndex(state),
|
|
2014
|
+
listing: getListing(state),
|
|
2015
|
+
featured: getFeaturedResults(state),
|
|
2016
|
+
filters: getRenderableFilters(state),
|
|
2017
|
+
isLoading: getIsLoading(state),
|
|
2018
|
+
pageIsLoading: getPageIsLoading(state),
|
|
2019
|
+
paging: getPaging(state, '', Context$1.listings, 'js'),
|
|
2020
|
+
results: getResults(state, '', Context$1.listings, 'js'),
|
|
2021
|
+
resultsInfo: mappers && typeof mappers.resultsInfo === 'function' && mappers.resultsInfo(state),
|
|
2022
|
+
searchTerm: getSearchTerm(state),
|
|
2023
|
+
selectedFilters: getSelectedFilters(state, '', Context$1.listings, 'js'),
|
|
2024
|
+
sortOrder: getQueryParameter({
|
|
2025
|
+
state
|
|
2026
|
+
}, 'dynamicOrderBy', [])
|
|
2027
|
+
}));
|
|
2028
|
+
|
|
2029
|
+
const useListing = ({
|
|
2030
|
+
mappers
|
|
2031
|
+
} = {
|
|
2032
|
+
id: ''
|
|
2033
|
+
}) => {
|
|
2034
|
+
const dispatch = useDispatch();
|
|
2035
|
+
const m = mappers || defaultMappers;
|
|
2036
|
+
const selectListingProps = useMemo(makeSelectListingProps, [m]);
|
|
2037
|
+
const dispatchProps = {
|
|
2038
|
+
clearFilters: () => dispatch(withMappers(clearFilters$1(), m)),
|
|
2039
|
+
updateCurrentFacet: facet => dispatch(withMappers(updateCurrentFacet$1(facet), m)),
|
|
2040
|
+
updatePageIndex: pageIndex => dispatch(withMappers(updatePageIndex$1(pageIndex), m)),
|
|
2041
|
+
updateSearchTerm: term => dispatch(withMappers(updateSearchTerm$1(term), m)),
|
|
2042
|
+
updateSelectedFilters: (filter, key, isUnknownItem = false) => dispatch(withMappers(updateSelectedFilters(filter, key, isUnknownItem), m)),
|
|
2043
|
+
updateSortOrder: orderBy => dispatch(withMappers(updateSortOrder$1(orderBy), m))
|
|
2044
|
+
};
|
|
2045
|
+
const {
|
|
2046
|
+
currentListing,
|
|
2047
|
+
currentPageIndex,
|
|
2048
|
+
featured,
|
|
2049
|
+
filters,
|
|
2050
|
+
isLoading,
|
|
2051
|
+
listing,
|
|
2052
|
+
paging,
|
|
2053
|
+
pageIsLoading,
|
|
2054
|
+
results,
|
|
2055
|
+
resultsInfo,
|
|
2056
|
+
searchTerm,
|
|
2057
|
+
selectedFilters,
|
|
2058
|
+
sortOrder
|
|
2059
|
+
} = useSelector(state => selectListingProps(state, m));
|
|
2060
|
+
return {
|
|
2061
|
+
currentListing,
|
|
2062
|
+
currentPageIndex,
|
|
2063
|
+
featured,
|
|
2064
|
+
filters,
|
|
2065
|
+
isLoading,
|
|
2066
|
+
listing,
|
|
2067
|
+
pageIsLoading,
|
|
2068
|
+
paging,
|
|
2069
|
+
results,
|
|
2070
|
+
resultsInfo,
|
|
2071
|
+
searchTerm,
|
|
2072
|
+
selectedFilters,
|
|
2073
|
+
sortOrder,
|
|
2074
|
+
title: listing.title,
|
|
2075
|
+
...dispatchProps
|
|
2076
|
+
};
|
|
2077
|
+
};
|
|
2078
|
+
|
|
1941
2079
|
const makeSelectMinilistProps = () => createSelector(state => state, (_, id) => id, (state, id) => ({
|
|
1942
2080
|
facet: getFacet(state, id, Context$1.minilist, 'js'),
|
|
1943
2081
|
filters: getFilters(state, id, Context$1.minilist, 'js'),
|
|
1944
|
-
isLoading: getIsLoading(state, Context$1.minilist, id),
|
|
2082
|
+
isLoading: getIsLoading$1(state, Context$1.minilist, id),
|
|
1945
2083
|
pagingInfo: getPaging(state, id, Context$1.minilist, 'js'),
|
|
1946
2084
|
results: getResults(state, id, Context$1.minilist, 'js'),
|
|
1947
|
-
searchTerm: getSearchTerm(state)
|
|
2085
|
+
searchTerm: getSearchTerm$1(state)
|
|
1948
2086
|
}));
|
|
1949
2087
|
|
|
1950
2088
|
const useMinilist = ({
|
|
@@ -1995,7 +2133,7 @@ const useMinilist = ({
|
|
|
1995
2133
|
return {
|
|
1996
2134
|
filters,
|
|
1997
2135
|
isLoading,
|
|
1998
|
-
pagingInfo,
|
|
2136
|
+
paging: pagingInfo,
|
|
1999
2137
|
results,
|
|
2000
2138
|
searchTerm,
|
|
2001
2139
|
title: facet.title
|
|
@@ -2179,7 +2317,10 @@ const generateFiltersState = ({
|
|
|
2179
2317
|
// the search results during SSR without needing to fetch the filters first
|
|
2180
2318
|
|
|
2181
2319
|
|
|
2182
|
-
Object.entries(filterParams).map(([paramName = '', paramValue]) =>
|
|
2320
|
+
Object.entries(filterParams).map(([paramName = '', paramValue]) => {
|
|
2321
|
+
if (typeof paramValue === 'string') return paramValue.split(',').map(pVal => filters = addFilterItem(filters, paramName, pVal));
|
|
2322
|
+
if (typeof paramValue === 'boolean') filters = addFilterItem(filters, paramName, paramValue);
|
|
2323
|
+
});
|
|
2183
2324
|
return Object.fromEntries(filters);
|
|
2184
2325
|
};
|
|
2185
2326
|
|
|
@@ -2208,7 +2349,7 @@ var reducers = (config => {
|
|
|
2208
2349
|
case APPLY_CONFIG:
|
|
2209
2350
|
{
|
|
2210
2351
|
state = addConfigToState(state, action);
|
|
2211
|
-
return;
|
|
2352
|
+
return state;
|
|
2212
2353
|
}
|
|
2213
2354
|
|
|
2214
2355
|
case CLEAR_FILTERS:
|
|
@@ -2392,13 +2533,22 @@ var reducers = (config => {
|
|
|
2392
2533
|
{
|
|
2393
2534
|
const {
|
|
2394
2535
|
filter,
|
|
2395
|
-
key
|
|
2536
|
+
key,
|
|
2537
|
+
isUnknownItem
|
|
2396
2538
|
} = action;
|
|
2397
2539
|
const isSingleSelect = state[context][current].filters[filter].isSingleSelect || false;
|
|
2398
2540
|
const isGrouped = state[context][current].filters[filter].isGrouped || false;
|
|
2399
2541
|
const currentItems = state[context][current].filters[filter].items;
|
|
2400
2542
|
if (isGrouped) state[context] = resetFacets(state, context);
|
|
2401
2543
|
state[context][current] = resetFacet(state[context][current]);
|
|
2544
|
+
|
|
2545
|
+
if (isUnknownItem && (currentItems === null || currentItems === void 0 ? void 0 : currentItems.findIndex(item => (item === null || item === void 0 ? void 0 : item.key) === key)) === -1) {
|
|
2546
|
+
currentItems === null || currentItems === void 0 ? void 0 : currentItems.push({
|
|
2547
|
+
key,
|
|
2548
|
+
isSelected: false
|
|
2549
|
+
});
|
|
2550
|
+
}
|
|
2551
|
+
|
|
2402
2552
|
state[context][current].filters[filter].items = currentItems === null || currentItems === void 0 ? void 0 : currentItems.map(item => {
|
|
2403
2553
|
if (item.key === key) {
|
|
2404
2554
|
return { ...item,
|
|
@@ -2432,12 +2582,11 @@ var reducers = (config => {
|
|
|
2432
2582
|
}, initState);
|
|
2433
2583
|
});
|
|
2434
2584
|
|
|
2435
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
2436
2585
|
const Context = {
|
|
2437
2586
|
facets: 'facets',
|
|
2438
2587
|
listings: 'listings',
|
|
2439
2588
|
minilist: 'minilist'
|
|
2440
2589
|
};
|
|
2441
2590
|
|
|
2442
|
-
export { Context, actions, doSearch, queries, reducers as reducer, searchSagas as sagas, schema, selectors, setRouteFilters, types, useMinilist, withListing, withSearch };
|
|
2591
|
+
export { Context, actions, doSearch, queries, reducers as reducer, searchSagas as sagas, schema, selectors, setRouteFilters, types, useListing, useMinilist, withListing, withSearch };
|
|
2443
2592
|
//# sourceMappingURL=search.js.map
|