@zengenti/contensis-react-base 2.5.1-beta.4 → 3.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +8 -2
  2. package/cjs/{App-fbd91490.js → App-581b6653.js} +20 -19
  3. package/cjs/App-581b6653.js.map +1 -0
  4. package/cjs/{RouteLoader-f99cd734.js → RouteLoader-282c03ab.js} +5 -5
  5. package/cjs/RouteLoader-282c03ab.js.map +1 -0
  6. package/cjs/ToJs-87edc45d.js +230 -0
  7. package/cjs/ToJs-87edc45d.js.map +1 -0
  8. package/cjs/{actions-e9f69947.js → actions-12871aca.js} +9 -13
  9. package/cjs/actions-12871aca.js.map +1 -0
  10. package/cjs/client.js +47 -64
  11. package/cjs/client.js.map +1 -1
  12. package/cjs/contensis-react-base.js +54 -55
  13. package/cjs/contensis-react-base.js.map +1 -1
  14. package/cjs/forms.js +1 -1
  15. package/cjs/fromJSLeaveImmer-9b550c8e.js +40 -0
  16. package/cjs/fromJSLeaveImmer-9b550c8e.js.map +1 -0
  17. package/cjs/{login-4f274c6a.js → login-81d7f9ef.js} +11 -10
  18. package/cjs/login-81d7f9ef.js.map +1 -0
  19. package/cjs/{reducers-cb531715.js → reducers-fde41d6b.js} +76 -31
  20. package/cjs/reducers-fde41d6b.js.map +1 -0
  21. package/cjs/redux.js +11 -8
  22. package/cjs/redux.js.map +1 -1
  23. package/cjs/routing.js +5 -5
  24. package/cjs/search.js +409 -233
  25. package/cjs/search.js.map +1 -1
  26. package/cjs/selectors-ed26ed97.js +141 -0
  27. package/cjs/selectors-ed26ed97.js.map +1 -0
  28. package/cjs/user.js +14 -14
  29. package/cjs/user.js.map +1 -1
  30. package/cjs/util.js +24 -10
  31. package/cjs/util.js.map +1 -1
  32. package/cjs/version-0c190929.js +20 -0
  33. package/cjs/version-0c190929.js.map +1 -0
  34. package/cjs/{version-3a808c12.js → version-f061e409.js} +154 -76
  35. package/cjs/version-f061e409.js.map +1 -0
  36. package/esm/{App-fbef99b3.js → App-122f28a3.js} +20 -19
  37. package/esm/App-122f28a3.js.map +1 -0
  38. package/esm/{RouteLoader-281d47e1.js → RouteLoader-c2faac87.js} +5 -5
  39. package/esm/RouteLoader-c2faac87.js.map +1 -0
  40. package/esm/ToJs-52fee252.js +199 -0
  41. package/esm/ToJs-52fee252.js.map +1 -0
  42. package/esm/{actions-ddd9c623.js → actions-3cc39599.js} +4 -7
  43. package/esm/actions-3cc39599.js.map +1 -0
  44. package/esm/client.js +48 -65
  45. package/esm/client.js.map +1 -1
  46. package/esm/contensis-react-base.js +53 -53
  47. package/esm/contensis-react-base.js.map +1 -1
  48. package/esm/forms.js +1 -1
  49. package/esm/fromJSLeaveImmer-e44d1a91.js +38 -0
  50. package/esm/fromJSLeaveImmer-e44d1a91.js.map +1 -0
  51. package/esm/{login-1f9ad133.js → login-92db44d1.js} +11 -10
  52. package/esm/login-92db44d1.js.map +1 -0
  53. package/esm/{reducers-feab84fc.js → reducers-d6c0edb1.js} +77 -31
  54. package/esm/reducers-d6c0edb1.js.map +1 -0
  55. package/esm/redux.js +9 -8
  56. package/esm/redux.js.map +1 -1
  57. package/esm/routing.js +5 -5
  58. package/esm/search.js +409 -235
  59. package/esm/search.js.map +1 -1
  60. package/esm/selectors-82e71d8e.js +116 -0
  61. package/esm/selectors-82e71d8e.js.map +1 -0
  62. package/esm/user.js +10 -10
  63. package/esm/user.js.map +1 -1
  64. package/esm/util.js +24 -10
  65. package/esm/util.js.map +1 -1
  66. package/esm/version-59c8f9be.js +15 -0
  67. package/esm/version-59c8f9be.js.map +1 -0
  68. package/esm/{version-64906b26.js → version-cb9cd09d.js} +133 -76
  69. package/esm/version-cb9cd09d.js.map +1 -0
  70. package/models/app/pages/VersionInfo/components/VersionInfo.d.ts +1 -1
  71. package/models/config.d.ts +2 -0
  72. package/models/redux/appstate.d.ts +85 -0
  73. package/models/redux/index.d.ts +1 -0
  74. package/models/redux/reducers/navigation.d.ts +6 -2
  75. package/models/redux/reducers/version.d.ts +5 -2
  76. package/models/redux/store/store.d.ts +4 -1
  77. package/models/redux/util.d.ts +2 -0
  78. package/models/routing/components/RouteLoader.d.ts +20 -2
  79. package/models/routing/redux/reducers.d.ts +21 -3
  80. package/models/routing/redux/selectors.d.ts +29 -25
  81. package/models/routing/routes.d.ts +10 -2
  82. package/models/search/hooks/useMinilist.hook.d.ts +7 -20
  83. package/models/search/models/Search.d.ts +8 -1
  84. package/models/search/models/SearchActions.d.ts +3 -4
  85. package/models/search/models/SearchProps.d.ts +16 -2
  86. package/models/search/models/SearchState.d.ts +25 -9
  87. package/models/search/models/WithSearch.d.ts +61 -0
  88. package/models/search/redux/getIn.d.ts +3 -0
  89. package/models/search/redux/reducers.d.ts +346 -2
  90. package/models/search/redux/sagas.d.ts +2 -2
  91. package/models/search/redux/schema.d.ts +56 -8
  92. package/models/search/redux/selectors.d.ts +75 -66
  93. package/models/search/redux/util.d.ts +1 -1
  94. package/models/search/search/util.d.ts +2 -3
  95. package/models/user/components/Login.d.ts +10 -1
  96. package/models/user/containers/ChangePassword.container.d.ts +4 -1
  97. package/models/user/containers/ForgotPassword.container.d.ts +4 -1
  98. package/models/user/containers/Login.container.d.ts +4 -1
  99. package/models/user/containers/Registration.container.d.ts +4 -1
  100. package/models/user/hocs/withLogin.d.ts +9 -1
  101. package/models/user/hocs/withRegistration.d.ts +9 -1
  102. package/models/user/hooks/useChangePassword.d.ts +5 -5
  103. package/models/user/hooks/useForgotPassword.d.ts +6 -6
  104. package/models/user/hooks/useLogin.d.ts +45 -7
  105. package/models/user/hooks/useRegistration.d.ts +4 -4
  106. package/models/user/redux/reducers.d.ts +54 -3
  107. package/models/user/redux/selectors.d.ts +72 -27
  108. package/models/util/ToJs.d.ts +4 -1
  109. package/package-lock.json +1092 -21401
  110. package/package.json +9 -8
  111. package/cjs/App-fbd91490.js.map +0 -1
  112. package/cjs/RouteLoader-f99cd734.js.map +0 -1
  113. package/cjs/ToJs-d72e5b10.js +0 -167
  114. package/cjs/ToJs-d72e5b10.js.map +0 -1
  115. package/cjs/actions-e9f69947.js.map +0 -1
  116. package/cjs/login-4f274c6a.js.map +0 -1
  117. package/cjs/reducers-cb531715.js.map +0 -1
  118. package/cjs/selectors-1295124a.js +0 -139
  119. package/cjs/selectors-1295124a.js.map +0 -1
  120. package/cjs/version-2193b4a2.js +0 -24
  121. package/cjs/version-2193b4a2.js.map +0 -1
  122. package/cjs/version-3a808c12.js.map +0 -1
  123. package/esm/App-fbef99b3.js.map +0 -1
  124. package/esm/RouteLoader-281d47e1.js.map +0 -1
  125. package/esm/ToJs-6e7b247c.js +0 -136
  126. package/esm/ToJs-6e7b247c.js.map +0 -1
  127. package/esm/actions-ddd9c623.js.map +0 -1
  128. package/esm/login-1f9ad133.js.map +0 -1
  129. package/esm/reducers-feab84fc.js.map +0 -1
  130. package/esm/selectors-68799788.js +0 -117
  131. package/esm/selectors-68799788.js.map +0 -1
  132. package/esm/version-64906b26.js.map +0 -1
  133. package/esm/version-7fdbd2d5.js +0 -19
  134. package/esm/version-7fdbd2d5.js.map +0 -1
package/esm/search.js CHANGED
@@ -1,14 +1,17 @@
1
- import React, { useEffect } from 'react';
1
+ import React, { useMemo, useEffect } from 'react';
2
2
  import { connect, useDispatch, useSelector } from 'react-redux';
3
- import mapJson from 'jsonpath-mapper';
4
- import { OrderedMap, Map, List, Set, fromJS } from 'immutable';
3
+ import mapJson, { jpath } from 'jsonpath-mapper';
4
+ import { produce } from 'immer';
5
5
  import { takeEvery, select, put, call, all } from '@redux-saga/core/effects';
6
6
  import { Client } from 'contensis-delivery-api';
7
7
  import queryString from 'query-string';
8
8
  import { error } from 'loglevel';
9
+ import { createSelector } from 'reselect';
9
10
  import { Op, OrderBy, Query } from 'contensis-core-api';
11
+ import merge from 'deepmerge';
12
+ import equals from 'deep-equal';
10
13
 
11
- /* eslint-disable react/display-name */
14
+ /* eslint-disable import/default */
12
15
  const toJS = WrappedComponent => wrappedComponentProps => {
13
16
  const KEY = 0;
14
17
  const VALUE = 1;
@@ -185,132 +188,167 @@ let Context; // export type Context = 'facets' | 'listings' | 'minilist';
185
188
  Context["minilist"] = "minilist";
186
189
  })(Context || (Context = {}));
187
190
 
188
- const getSearchContext = state => state.getIn(['search', 'context'], Context.facets);
191
+ // or replace with a stub function for non-immutable gets
192
+
193
+ const makeFromJS = (returnType = globalThis.STATE_TYPE || 'immutable') => {
194
+ var _immutable, _immutable2;
195
+
196
+ return returnType === 'immutable' ? ((_immutable = globalThis.immutable) === null || _immutable === void 0 ? void 0 : _immutable.fromJSOrdered) || ((_immutable2 = globalThis.immutable) === null || _immutable2 === void 0 ? void 0 : _immutable2.fromJS) || (v => v) : v => v;
197
+ };
198
+
199
+ const getImmutableOrJS = (state, stateKey, fallbackValue, returnType = globalThis.STATE_TYPE || 'immutable') => {
200
+ // Find a fromJS function from global that is dynamically loaded in createStore
201
+ // or replace with a stub function for non-immutable gets
202
+ const fromJS = makeFromJS(returnType);
203
+
204
+ if (state && 'get' in state && typeof state.get === 'function' && 'getIn' in state && typeof state.getIn === 'function' && 'toJS' in state && typeof state.toJS === 'function') {
205
+ if (Array.isArray(stateKey)) return fromJS(state.getIn(stateKey, fallbackValue));
206
+ return fromJS(state.get(stateKey, fallbackValue));
207
+ }
208
+
209
+ if (Array.isArray(stateKey) && state && typeof state === 'object') {
210
+ const result = jpath(stateKey.join('.'), state);
211
+ if (typeof result === 'undefined') return fallbackValue;
212
+ return result;
213
+ }
214
+
215
+ const result = state && typeof state === 'object' ? state[stateKey] : undefined;
216
+ if (typeof result === 'undefined') return fallbackValue;
217
+ return result;
218
+ };
219
+
220
+ const getSearchContext = state => getImmutableOrJS(state, ['search', 'context'], Context.facets);
189
221
  const getCurrent = (state, context = Context.facets) => context === Context.facets ? getCurrentFacet(state) : getCurrentListing(state);
190
- const getCurrentFacet = state => state.getIn(['search', 'currentFacet']);
191
- const getCurrentListing = state => state.getIn(['search', 'currentListing']);
192
- const getCurrentTab = state => state.getIn(['search', Context.facets, getCurrentFacet(state), 'tabId'], 0);
193
- const getFacets = state => state.getIn(['search', Context.facets], OrderedMap());
194
- const getTabFacets = state => getFacets(state).filter((v, key) => getFacets(state).getIn([key, 'tabId'], 0) === getCurrentTab(state));
195
- const getFacetTitles = state => getFacets(state).map((facet = Map(), key) => ({
196
- key,
197
- title: facet.get('title'),
198
- totalCount: facet.getIn(['pagingInfo', 'totalCount'])
199
- })).toIndexedSeq().toArray();
200
- const getFacet = (state, facetName = '', context = Context.facets) => {
222
+ const getCurrentFacet = state => getImmutableOrJS(state, ['search', 'currentFacet']);
223
+ const getCurrentListing = state => getImmutableOrJS(state, ['search', 'currentListing']);
224
+ const getCurrentTab = state => getImmutableOrJS(state, ['search', Context.facets, getCurrentFacet(state), 'tabId'], 0);
225
+ const getFacets = (state, returnType) => getImmutableOrJS(state, ['search', Context.facets], {}, returnType);
226
+ const getTabFacets = state => Object.fromEntries(Object.entries(getFacets(state, 'js')).filter(([key]) => getImmutableOrJS(getFacets(state), [key, 'tabId'], 0) === getCurrentTab(state)));
227
+ const getFacetTitles = state => Object.entries(getFacets(state, 'js')).map(([key, facet = {}]) => {
228
+ var _facet$pagingInfo;
229
+
230
+ return {
231
+ key,
232
+ title: facet.title,
233
+ totalCount: (_facet$pagingInfo = facet.pagingInfo) === null || _facet$pagingInfo === void 0 ? void 0 : _facet$pagingInfo.totalCount
234
+ };
235
+ });
236
+ const getFacet = (state, facetName = '', context = Context.facets, returnType) => {
201
237
  const currentFacet = facetName || getCurrentFacet(state);
202
- return state.getIn(['search', context, currentFacet], Map());
238
+ return getImmutableOrJS(state, ['search', context, currentFacet], {}, returnType);
203
239
  };
204
240
  const getListing = (state, listing = '') => {
205
241
  const currentListing = listing || getCurrentListing(state);
206
- return state.getIn(['search', Context.listings, currentListing], Map());
242
+ return getImmutableOrJS(state, ['search', Context.listings, currentListing], {});
207
243
  };
208
- const getFilters = (state, facet, context = Context.facets) => {
209
- return state.getIn(['search', context, facet || getCurrent(state, context), 'filters'], Map());
244
+ const getFilters = (state, facet, context = Context.facets, returnType) => {
245
+ return getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'filters'], {}, returnType);
210
246
  };
211
- const getRenderableFilters = (state, facet = '', context = Context.facets) => getFilters(state, facet, context).filter((f = Map()) => f.get('renderable', true));
212
- const getFiltersToLoad = (state, facet, context = Context.facets) => {
213
- const filters = getFilters(state, facet, context);
214
- const loadedFilters = filters.map((f = Map()) => (f.get('items') || List()).filter(i => {
215
- const title = i === null || i === void 0 ? void 0 : i.get('title');
247
+ const getRenderableFilters = (state, facet = '', context = Context.facets) => Object.fromEntries(Object.entries(getFilters(state, facet, context, 'js')).filter(([, f = {}]) => typeof f.renderable !== 'boolean' ? true : f.renderable));
248
+ const getFiltersToLoad = (state, facet, context = Context.facets, returnType) => {
249
+ const filters = getFilters(state, facet, context, returnType);
250
+ const loadedFilters = Object.entries(filters).map(([key, f = {}]) => [key, (f.items || []).filter(i => {
251
+ const title = i === null || i === void 0 ? void 0 : i.title;
216
252
  return typeof title !== 'undefined' && !!title;
217
- }).size > 0 && f.get('isError', false) === false);
218
- return loadedFilters.map((isLoaded, filterKey) => !isLoaded ? filterKey : null).toList().filter(f => !!f);
253
+ }).length > 0 && (f.isError || false) === false]);
254
+ return loadedFilters.map(([filterKey, isLoaded]) => !isLoaded ? filterKey : null).filter(f => !!f);
219
255
  }; // We lowercase the filter key unless it's an ISO date string where the T must be uppercase
220
256
 
221
- const getSelectedFilters = (state, facet = '', context = Context.facets) => {
222
- const filters = getFilters(state, facet, context);
257
+ const getSelectedFilters = (state, facet = '', context = Context.facets, returnType) => {
258
+ const filters = getFilters(state, facet, context, 'js');
223
259
  const isoDateRegex = RegExp(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d/);
224
- const selectedFilters = filters.map((filter = Map()) => (filter.get('items') || List()).filter(item => !!(item !== null && item !== void 0 && item.get('isSelected', false))).map(item => {
225
- const key = item === null || item === void 0 ? void 0 : item.get('key', '');
260
+ const selectedFilters = Object.fromEntries(Object.entries(filters).map(([key, filter = {}]) => [key, (filter.items || []).filter(item => !!(item.isSelected || false)).map(item => {
261
+ const key = (item === null || item === void 0 ? void 0 : item.key) || '';
226
262
  const isIsoDate = isoDateRegex.test(key);
227
263
  return isIsoDate ? key : key.toLowerCase();
228
- }));
229
- return selectedFilters;
264
+ })]));
265
+ const fromJS = makeFromJS(returnType);
266
+ return fromJS(selectedFilters);
230
267
  };
231
- const getResults = (state, current = '', context = Context.facets) => {
232
- return state.getIn(['search', context, current || getCurrent(state, context), 'results'], List());
268
+ const getResults = (state, current = '', context = Context.facets, returnType) => {
269
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'results'], [], returnType);
233
270
  };
234
271
  const getIsInternalPaging = (state, current, context = Context.facets) => {
235
- return state.getIn(['search', context, current || getCurrent(state, context), 'queryParams', 'internalPaging'], false);
272
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams', 'internalPaging'], false);
236
273
  };
237
274
  const getIsLoaded = (state, context = Context.facets, facet) => {
238
- return !!state.getIn(['search', context, facet || getCurrent(state, context), 'queryDuration'], 0);
275
+ return !!getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'queryDuration'], 0);
239
276
  };
240
277
  const getIsLoading = (state, context = Context.facets, facet) => {
241
- return state.getIn(['search', context, facet || getCurrent(state, context), 'entries', 'isLoading']);
242
- };
243
- const getIsSsr = state => {
244
- return state.getIn(['search', 'config', 'ssr'], false);
278
+ return getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'entries', 'isLoading']);
245
279
  };
280
+ const getIsSsr = state => getImmutableOrJS(state, ['search', 'config', 'ssr'], false);
246
281
  const getFeaturedResults = (state, current = '', context = Context.facets) => {
247
- return state.getIn(['search', context, current || getCurrent(state, context), 'featuredResults'], List());
282
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'featuredResults'], []);
248
283
  };
249
- const getPaging = (state, current = '', context = Context.facets) => {
250
- return state.getIn(['search', context, current || getCurrent(state, context), 'pagingInfo'], Map());
284
+ const getPaging = (state, current = '', context = Context.facets, returnType) => {
285
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo'], {}, returnType);
251
286
  };
252
287
  const getPageIndex = (state, current = '', context = Context.facets) => {
253
- return state.getIn(['search', context, current || getCurrent(state, context), 'pagingInfo', 'pageIndex']);
288
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pageIndex']);
254
289
  };
255
290
  const getPrevPageIndex = (state, current = '', context = Context.facets) => {
256
- return state.getIn(['search', context, current || getCurrent(state, context), 'pagingInfo', 'prevPageIndex']);
291
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'prevPageIndex']);
257
292
  };
258
293
  const getPageIsLoading = (state, current = '', context = Context.facets) => {
259
- return state.getIn(['search', context, current || getCurrent(state, context), 'pagingInfo', 'isLoading']);
294
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'isLoading']);
260
295
  };
261
296
  const getPagesLoaded = (state, current = '', context = Context.facets) => {
262
- return state.getIn(['search', context, current || getCurrent(state, context), 'pagingInfo', 'pagesLoaded'], Set());
297
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pagesLoaded'], [], 'js');
263
298
  };
264
299
  const getTotalCount = (state, current = '', context = Context.facets) => {
265
- return state.getIn(['search', context, current || getCurrent(state, context), 'pagingInfo', 'totalCount']);
266
- };
267
- const getFacetAuthentication = (state, facet) => state.getIn(['search', Context.facets, facet, 'authentication']);
268
- const getFeaturedEntryIds = state => {
269
- const currentFacet = getCurrentFacet(state);
270
- const entryIds = state.getIn(['search', Context.facets, currentFacet, 'featuredEntries', 'items']).map(entry => entry.getIn(['sys', 'id']));
271
- return entryIds;
300
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'totalCount']);
272
301
  };
273
- const getSearchTerm = state => state.getIn(['search', 'term']);
274
- const getSearchTabs = state => state.getIn(['search', 'tabs']);
302
+ const getSearchTerm = state => getImmutableOrJS(state, ['search', 'term']);
303
+ const getSearchTabs = (state, returnType) => getImmutableOrJS(state, ['search', 'tabs'], [], returnType);
275
304
  const getQueryParams = (state, current = '', context = Context.facets) => {
276
- return state.getIn(['search', context, current || getCurrent(state, context), 'queryParams'], Map());
305
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams'], {}, 'js');
277
306
  };
278
307
  const getQueryParameter = ({
279
308
  state,
280
309
  facet,
281
310
  context = Context.facets
282
311
  }, key, ifnull = null) => {
283
- return getQueryParams(state, facet, context).get(key, ifnull) || ifnull;
312
+ return getImmutableOrJS(getQueryParams(state, facet, context), key, ifnull, 'js');
284
313
  };
285
- const getCustomApi = (state, current, context = Context.facets) => {
286
- return state.getIn(['search', context, current || getCurrent(state, context), 'customApi']);
314
+ const getCustomApi = (state, current, context = Context.facets, returnType) => {
315
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'customApi'], null, returnType);
287
316
  };
288
317
  const getCustomEnv = (state, current, context = Context.facets) => {
289
- return state.getIn(['search', context, current || getCurrent(state, context), 'env']);
318
+ return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'env']);
290
319
  };
291
- const getTabsAndFacets = state => {
292
- const tabs = getSearchTabs(state);
293
- const facets = getFacets(state);
294
- return (tabs || List()).map((tab = Map()) => {
295
- const fieldsToCount = tab.get('totalCount');
320
+ const getTabsAndFacets = (state, returnType) => {
321
+ const tabs = getSearchTabs(state, 'js');
322
+ const facets = getFacets(state, 'js');
323
+ const tabsAndFacets = (tabs || []).map((tab = {}) => {
324
+ const fieldsToCount = tab.totalCount;
296
325
  let countFields;
297
- if (typeof fieldsToCount === 'string') countFields = List([List([fieldsToCount])]);
298
- const thisTabFacets = facets.filter((v, key) => facets.getIn([key, 'tabId'], 0) === tab.get('id'));
299
- const thisTabTotal = thisTabFacets.map((facet = Map(), facetName) => {
300
- if (!countFields || countFields.find((f = List()) => f.first() === facetName)) return facet.getIn(['pagingInfo', 'totalCount']);
326
+ if (typeof fieldsToCount === 'string') countFields = [[fieldsToCount]];
327
+ const thisTabFacets = Object.entries(facets).filter(([key]) => getImmutableOrJS(facets, [key, 'tabId'], 0) === tab.id);
328
+ const thisTabTotal = thisTabFacets.map(([facetName, facet = {}]) => {
329
+ if (!countFields || countFields.find((f = []) => (f === null || f === void 0 ? void 0 : f[0]) === facetName)) return getImmutableOrJS(facet, ['pagingInfo', 'totalCount']);
301
330
  return 0;
302
331
  }).reduce((a, b) => a + b, 0);
303
- return tab.set(Context.facets, thisTabFacets).set('totalCount', thisTabTotal);
332
+ return { ...tab,
333
+ [Context.facets]: Object.fromEntries(thisTabFacets),
334
+ totalCount: thisTabTotal
335
+ };
304
336
  });
337
+ const fromJS = makeFromJS(returnType);
338
+ return fromJS(tabsAndFacets);
305
339
  };
306
340
  const getSearchTotalCount = state => {
307
- const tabsAndFacets = getTabsAndFacets(state);
308
- const wholeSearchTotal = tabsAndFacets.map((t = Map()) => t.get('totalCount')).reduce((a, b) => a + b, 0);
341
+ const tabsAndFacets = getTabsAndFacets(state, 'js');
342
+ const wholeSearchTotal = tabsAndFacets.map((t = {}) => t.totalCount).reduce((a, b) => a + b, 0);
309
343
  return wholeSearchTotal;
310
344
  };
311
345
  const getFacetsTotalCount = state => {
312
346
  const facets = getFacets(state);
313
- const wholeSearchTotal = facets.map((t = Map()) => t.getIn(['pagingInfo', 'totalCount'])).reduce((a, b) => a + b, 0);
347
+ const wholeSearchTotal = Object.entries(facets).map(([, t = {}]) => {
348
+ var _t$pagingInfo;
349
+
350
+ return ((_t$pagingInfo = t.pagingInfo) === null || _t$pagingInfo === void 0 ? void 0 : _t$pagingInfo.totalCount) || 0;
351
+ }).reduce((a, b) => a + b, 0);
314
352
  return wholeSearchTotal;
315
353
  }; // An exported copy of the relevant selectors scoped by default to a facets context
316
354
 
@@ -379,8 +417,8 @@ const selectListing = {
379
417
  getTotalCount: (state, listing = '') => getTotalCount(state, listing, Context.listings),
380
418
  getSelectedFilters: (state, listing = '') => getSelectedFilters(state, listing, Context.listings)
381
419
  };
382
- const selectCurrentPath = state => state.getIn(['routing', 'currentPath']);
383
- const selectVersionStatus = state => state.getIn(['version', 'contensisVersionStatus']);
420
+ const selectCurrentPath = state => getImmutableOrJS(state, ['routing', 'currentPath']);
421
+ const selectVersionStatus = state => getImmutableOrJS(state, ['version', 'contensisVersionStatus']);
384
422
 
385
423
  var selectors = /*#__PURE__*/Object.freeze({
386
424
  __proto__: null,
@@ -410,8 +448,6 @@ var selectors = /*#__PURE__*/Object.freeze({
410
448
  getPageIsLoading: getPageIsLoading,
411
449
  getPagesLoaded: getPagesLoaded,
412
450
  getTotalCount: getTotalCount,
413
- getFacetAuthentication: getFacetAuthentication,
414
- getFeaturedEntryIds: getFeaturedEntryIds,
415
451
  getSearchTerm: getSearchTerm,
416
452
  getSearchTabs: getSearchTabs,
417
453
  getQueryParams: getQueryParams,
@@ -427,6 +463,8 @@ var selectors = /*#__PURE__*/Object.freeze({
427
463
  selectVersionStatus: selectVersionStatus
428
464
  });
429
465
 
466
+ // eslint-disable-next-line import/default
467
+
430
468
  /* eslint-disable @typescript-eslint/naming-convention */
431
469
  const withSearch = mappers => SearchComponent => {
432
470
  const Wrapper = props => {
@@ -692,6 +730,7 @@ const now = () => {
692
730
  return window.performance.now();
693
731
  };
694
732
 
733
+ // eslint-disable-next-line import/default
695
734
  function fixFreeTextForElastic(s) {
696
735
  const illegalChars = ['>', '<', '=', '|', '!', '{', '}', '[', ']', '^', '~', '*', '?', ':', '\\', '/'];
697
736
  const illegalRegEx = new RegExp(illegalChars.map(c => '\\' + c).join('|'), 'g');
@@ -719,6 +758,7 @@ const getItemsFromResult = result => {
719
758
  if (payload) {
720
759
  if (Array.isArray(payload)) return payload;
721
760
  if (Array.isArray(payload.items)) return payload.items;
761
+ return payload;
722
762
  }
723
763
 
724
764
  return [];
@@ -733,7 +773,7 @@ const buildUrl = (route, params) => {
733
773
  return path;
734
774
  };
735
775
  const callCustomApi = async (customApi, filters) => {
736
- const apiUri = customApi.get('uri', '');
776
+ const apiUri = customApi.uri || '';
737
777
  let uri = buildUrl(apiUri, filters);
738
778
  if (!uri) throw new Error('uri is required to use customApi');
739
779
  if (typeof window == 'undefined' && uri.startsWith('/')) uri = `http://localhost:3001${uri}`;
@@ -1117,19 +1157,21 @@ const searchUriTemplate = {
1117
1157
  const searchContext = getSearchContext(state); // Lose stateFilters and currentSearch if a new
1118
1158
  // term is passed via an argument
1119
1159
 
1120
- const stateFilters = term ? List() : getSelectedFilters(state, facet, searchContext).map(f => f === null || f === void 0 ? void 0 : f.join(','));
1121
- const currentSearch = !term && state.getIn(['routing', 'location', 'search']);
1160
+ 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
+ const currentSearch = !term && getImmutableOrJS(state, ['routing', 'location', 'search']);
1122
1162
  const currentQs = removeEmptyAttributes(queryString.parse(currentSearch));
1123
1163
  if (orderBy) currentQs.orderBy = orderBy;
1124
1164
  const searchTerm = getSearchTerm(state); // Use Immutable's merge to merge the stateFilters with any current Qs
1125
1165
  // to build the new Qs.
1126
1166
 
1127
- const mergedSearch = removeEmptyAttributes(fromJS(currentQs).merge(stateFilters).set('term', searchTerm).toJS());
1167
+ const mergedSearch = removeEmptyAttributes({ ...merge(currentQs, stateFilters),
1168
+ term: searchTerm
1169
+ });
1128
1170
  return queryString.stringify(mergedSearch);
1129
1171
  },
1130
1172
  hash: {
1131
1173
  $path: 'state',
1132
- $formatting: state => state.getIn(['routing', 'location', 'hash'], '').replace('#', '')
1174
+ $formatting: state => getImmutableOrJS(state, ['routing', 'location', 'hash'], '').replace('#', '')
1133
1175
  }
1134
1176
  };
1135
1177
 
@@ -1186,9 +1228,13 @@ const facetTemplate = {
1186
1228
  pageIndex,
1187
1229
  pagesLoaded
1188
1230
  }) => {
1189
- const loaded = List(pagesLoaded || []);
1190
- const pages = isNaN(loaded.find(l => l === pageIndex)) ? loaded.push(pageIndex) : loaded;
1191
- return pages.toList().sort((a, b) => a - b);
1231
+ const loaded = [...(pagesLoaded || [])];
1232
+
1233
+ if (isNaN(loaded.find(l => l === pageIndex))) {
1234
+ loaded.push(pageIndex);
1235
+ }
1236
+
1237
+ return loaded.sort((a, b) => a - b);
1192
1238
  }
1193
1239
  },
1194
1240
  prevPageIndex: 'action.queryParams.prevPageIndex'
@@ -1217,14 +1263,14 @@ const facetTemplate = {
1217
1263
  _pagePosition: idx,
1218
1264
  ...r
1219
1265
  }));
1220
- const loadedPages = List(pagesLoaded); // if pageIndex is found in loadedPages, we have already loaded this page
1266
+ const loadedPages = pagesLoaded || []; // if pageIndex is found in loadedPages, we have already loaded this page
1221
1267
 
1222
1268
  if (!isNaN(loadedPages.find(l => l === pageIndex))) return prevResults; // Determine where we put the results depending on if we
1223
1269
  // are paging forwards, backwards, or doing a new search
1224
1270
 
1225
1271
  const firstResultSet = pageIndex > prevPageIndex ? prevResults || [] : nextResults;
1226
1272
  const secondResultSet = pageIndex > prevPageIndex ? nextResults : prevResults || [];
1227
- const onlyResultSet = loadedPages.size === 0 ? nextResults : false;
1273
+ const onlyResultSet = loadedPages.length === 0 ? nextResults : false;
1228
1274
  return onlyResultSet || [...firstResultSet, ...secondResultSet];
1229
1275
  }
1230
1276
  },
@@ -1308,10 +1354,10 @@ const mapFiltersToFilterExpression = (filters, selectedFilters) => {
1308
1354
  };
1309
1355
 
1310
1356
  const queryParamsTemplate = {
1311
- assetTypes: root => getQueryParameter(root, 'assetTypes', List()),
1312
- contentTypeIds: root => getQueryParameter(root, 'contentTypeIds', List()),
1313
- customWhere: root => getQueryParameter(root, 'customWhere', List()),
1314
- dynamicOrderBy: root => getQueryParameter(root, 'dynamicOrderBy', List()),
1357
+ assetTypes: root => getQueryParameter(root, 'assetTypes', []),
1358
+ contentTypeIds: root => getQueryParameter(root, 'contentTypeIds', []),
1359
+ customWhere: root => getQueryParameter(root, 'customWhere', []),
1360
+ dynamicOrderBy: root => getQueryParameter(root, 'dynamicOrderBy', []),
1315
1361
  env: ({
1316
1362
  state,
1317
1363
  facet,
@@ -1327,19 +1373,19 @@ const queryParamsTemplate = {
1327
1373
  return null;
1328
1374
  },
1329
1375
  featuredResults: root => getQueryParameter(root, 'featuredResults', null),
1330
- fields: root => getQueryParameter(root, 'fields', List()),
1376
+ fields: root => getQueryParameter(root, 'fields', []),
1331
1377
  filters: ({
1332
1378
  state,
1333
1379
  facet,
1334
1380
  context
1335
1381
  }) => {
1336
- const stateFilters = getFilters(state, facet, context).toJS();
1337
- const selectedFilters = getSelectedFilters(state, facet, context).toJS(); // Use another mapping function to map the filter parameters for the query
1382
+ const stateFilters = getFilters(state, facet, context, 'js');
1383
+ const selectedFilters = getSelectedFilters(state, facet, context, 'js'); // Use another mapping function to map the filter parameters for the query
1338
1384
 
1339
1385
  const filterParams = mapFiltersToFilterExpression(stateFilters, selectedFilters);
1340
1386
  return filterParams;
1341
1387
  },
1342
- includeInSearchFields: root => getQueryParameter(root, 'includeInSearch', List()),
1388
+ includeInSearchFields: root => getQueryParameter(root, 'includeInSearch', []),
1343
1389
  internalPageIndex: ({
1344
1390
  action,
1345
1391
  state
@@ -1350,7 +1396,7 @@ const queryParamsTemplate = {
1350
1396
  }) => action.defaultLang ? [action.defaultLang] : [],
1351
1397
  linkDepth: root => getQueryParameter(root, 'linkDepth', 0),
1352
1398
  loadMorePaging: root => getQueryParameter(root, 'loadMorePaging', false),
1353
- orderBy: root => getQueryParameter(root, 'orderBy', List()),
1399
+ orderBy: root => getQueryParameter(root, 'orderBy', []),
1354
1400
  pageIndex: root => {
1355
1401
  const {
1356
1402
  action,
@@ -1375,31 +1421,35 @@ const queryParamsTemplate = {
1375
1421
  state,
1376
1422
  facet,
1377
1423
  context
1378
- }) => getFacet(state, facet, context).get('projectId'),
1424
+ }) => {
1425
+ var _getFacet;
1426
+
1427
+ return (_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId;
1428
+ },
1379
1429
  searchTerm: root => root.context !== Context.minilist || getQueryParameter(root, 'useSearchTerm', false) ? getSearchTerm(root.state) : '',
1380
1430
  selectedFilters: ({
1381
1431
  state,
1382
1432
  facet,
1383
1433
  context
1384
- }) => getSelectedFilters(state, facet, context).map(f => f === null || f === void 0 ? void 0 : f.join(',')),
1434
+ }) => Object.fromEntries(Object.entries(getSelectedFilters(state, facet, context, 'js')).map(([key, f]) => [key, f === null || f === void 0 ? void 0 : f.join(',')])),
1385
1435
  versionStatus: ({
1386
1436
  state
1387
1437
  }) => selectVersionStatus(state),
1388
1438
  weightedSearchFields: root => {
1389
- const wsf = getQueryParameter(root, 'weightedSearchFields', List());
1390
- const deduped = wsf.groupBy((v = Map()) => v.get('fieldId')).map((v = Map()) => v.first()).toList();
1439
+ const wsf = getQueryParameter(root, 'weightedSearchFields', []);
1440
+ const deduped = wsf.filter((v, i, a) => a.findIndex(t => t.fieldId === v.fieldId) === i);
1391
1441
  return deduped; // return wsf;
1392
1442
  },
1393
- webpageTemplates: root => getQueryParameter(root, 'webpageTemplates', List())
1443
+ webpageTemplates: root => getQueryParameter(root, 'webpageTemplates', [])
1394
1444
  };
1395
1445
 
1396
- const mapStateToQueryParams = sourceJson => fromJS(mapJson(sourceJson, queryParamsTemplate)).toJS();
1446
+ const mapStateToQueryParams = sourceJson => mapJson(sourceJson, queryParamsTemplate);
1397
1447
 
1398
1448
  /**
1399
1449
  * 1, Generates all the parameters required to run the search query.
1400
1450
  * 2, Tells us if we should run the search.
1401
1451
  * @param {object} action
1402
- * @param {ImmutableMap} state
1452
+ * @param {AppState} state
1403
1453
  * @returns [queryParams, runSearch]
1404
1454
  */
1405
1455
  const generateQueryParams = (action, state) => {
@@ -1434,7 +1484,8 @@ const runSearch = (action, state, queryParams) => {
1434
1484
  } = action;
1435
1485
  let willRun = false;
1436
1486
  const facetIsLoaded = defaultLang ? false : getIsLoaded(state, context, facet);
1437
- const stateParams = getQueryParams(ogState, facet, context).toJS();
1487
+ const stateParams = { ...getQueryParams(ogState, facet, context)
1488
+ };
1438
1489
  stateParams.pageIndex = getPageIndex(ogState, facet, context);
1439
1490
  stateParams.searchTerm = getSearchTerm(ogState);
1440
1491
 
@@ -1475,7 +1526,7 @@ const filterParamsChanged = (action, state) => {
1475
1526
  params,
1476
1527
  ogState = state
1477
1528
  } = action;
1478
- const selectedFilters = getSelectedFilters(ogState, facet, context).toJS();
1529
+ const selectedFilters = getSelectedFilters(ogState, facet, context, 'js');
1479
1530
  const paramsChanged = Object.entries(selectedFilters).map(([filterKey, selectedValues]) => {
1480
1531
  const inboundValues = params && params[filterKey] && params[filterKey].split(',') || [];
1481
1532
  if (!areArraysEqualSets(selectedValues, inboundValues)) return true;
@@ -1487,11 +1538,11 @@ const filterParamsChanged = (action, state) => {
1487
1538
  const debugExecuteSearch = (action, state) => {
1488
1539
  const [queryParams, runSearch] = generateQueryParams(action, state);
1489
1540
  console.log('runSearch', runSearch, 'action', action, 'filterParamsChanged', filterParamsChanged(action, state), 'getIsLoaded(state, context, facet)', getIsLoaded(state, action.context, action.facet));
1490
- const stateParams = getQueryParams(action.ogState || state, action.facet, action.context).toJS();
1541
+ const stateParams = getQueryParams(action.ogState || state, action.facet, action.context);
1491
1542
  stateParams.pageIndex = getPageIndex(action.ogState || state, action.facet, action.context);
1492
1543
  stateParams.searchTerm = getSearchTerm(action.ogState || state);
1493
1544
  console.log(stateParams, queryParams);
1494
- console.log('getSelectedFilters', getSelectedFilters(action.ogState || state, action.facet, action.context).toJS(), 'params', action.params);
1545
+ console.log('getSelectedFilters', getSelectedFilters(action.ogState || state, action.facet, action.context, 'js'), 'params', action.params);
1495
1546
  };
1496
1547
 
1497
1548
  // Base mapping, fields that are the same across all mappings
@@ -1520,6 +1571,9 @@ const mapEntriesToFilterItems = entries => {
1520
1571
  };
1521
1572
 
1522
1573
  const searchSagas = [takeEvery(CLEAR_FILTERS, clearFilters$1), takeEvery(DO_SEARCH, doSearch), takeEvery(SET_ROUTE_FILTERS, loadFilters), takeEvery(SET_SEARCH_ENTRIES, preloadOtherFacets), takeEvery(UPDATE_CURRENT_FACET, updateCurrentFacet$1), takeEvery(UPDATE_CURRENT_TAB, updateCurrentTab$1), takeEvery(UPDATE_PAGE_INDEX, updatePageIndex$1), takeEvery(UPDATE_SEARCH_TERM, updateSearchTerm$1), takeEvery(UPDATE_SORT_ORDER, updateSortOrder$1), takeEvery(UPDATE_SELECTED_FILTERS, applySearchFilter)];
1574
+
1575
+ const toJS$1 = obj => obj && 'toJS' in obj && typeof obj.toJS === 'function' ? obj.toJS() : obj;
1576
+
1523
1577
  function* setRouteFilters(action) {
1524
1578
  const {
1525
1579
  mappers,
@@ -1529,14 +1583,16 @@ function* setRouteFilters(action) {
1529
1583
  debug
1530
1584
  } = action;
1531
1585
  const context = listingType ? Context.listings : Context.facets;
1532
- const state = yield select();
1586
+ const state = toJS$1(yield select());
1533
1587
  const ssr = getIsSsr(state); // Get current facet from params or state
1534
1588
 
1535
1589
  let currentFacet = params && params.facet || listingType; // Pick the default facet from initialState
1536
1590
 
1537
1591
  if (!currentFacet) {
1538
- const tabs = getSearchTabs(state);
1539
- currentFacet = tabs.getIn([0, 'defaultFacet'], '') || getFacets(state).keySeq().first();
1592
+ var _Object$keys;
1593
+
1594
+ const tabs = getSearchTabs(state, 'js');
1595
+ currentFacet = (tabs === null || tabs === void 0 ? void 0 : tabs[0].defaultFacet) || ((_Object$keys = Object.keys(getFacets(state, 'js'))) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0]) || '';
1540
1596
  }
1541
1597
 
1542
1598
  const nextAction = {
@@ -1557,7 +1613,7 @@ function* setRouteFilters(action) {
1557
1613
  });
1558
1614
  }
1559
1615
  function* doSearch(action) {
1560
- const state = yield select();
1616
+ const state = toJS$1(yield select());
1561
1617
 
1562
1618
  if (action.config) {
1563
1619
  // If the action contains a config object, we can add this to the
@@ -1583,30 +1639,30 @@ function* loadFilters(action) {
1583
1639
  context,
1584
1640
  mappers = {}
1585
1641
  } = action;
1586
- const filtersToLoad = yield select(getFiltersToLoad, facetKey, context);
1642
+ const filtersToLoad = yield select(getFiltersToLoad, facetKey, context, 'js');
1587
1643
 
1588
- if (filtersToLoad.size > 0) {
1644
+ if (filtersToLoad.length > 0) {
1589
1645
  yield put({
1590
1646
  type: LOAD_FILTERS,
1591
1647
  filtersToLoad,
1592
1648
  facetKey,
1593
1649
  context
1594
1650
  });
1595
- const selectedKeys = yield select(getSelectedFilters, facetKey, context);
1596
- const facet = yield select(getFacet, facetKey, context);
1597
- const filters = facet.get('filters', Map());
1598
- const projectId = facet.get('projectId', '');
1651
+ const selectedKeys = yield select(getSelectedFilters, facetKey, context, 'js');
1652
+ const facet = yield select(getFacet, facetKey, context, 'js');
1653
+ const filters = facet.filters || {};
1654
+ const projectId = facet.projectId;
1599
1655
  const filtersToLoadSagas = filters && filtersToLoad.map((filterKey = '') => {
1600
1656
  return call(loadFilter, {
1601
1657
  facetKey,
1602
1658
  filterKey,
1603
- filter: filters.get(filterKey),
1659
+ filter: filters[filterKey],
1604
1660
  projectId,
1605
- selectedKeys: selectedKeys.get(filterKey),
1661
+ selectedKeys: selectedKeys[filterKey],
1606
1662
  context,
1607
1663
  mapper: 'filterItems' in mappers && mappers.filterItems || mapEntriesToFilterItems
1608
1664
  });
1609
- }).toJS();
1665
+ });
1610
1666
  if (filtersToLoadSagas) yield all(filtersToLoadSagas);
1611
1667
  }
1612
1668
  }
@@ -1625,7 +1681,7 @@ function* loadFilter(action) {
1625
1681
  contentTypeId,
1626
1682
  customWhere,
1627
1683
  path
1628
- } = 'toJS' in filter ? filter.toJS() : filter;
1684
+ } = filter;
1629
1685
  const createStateFrom = {
1630
1686
  type: LOAD_FILTERS_COMPLETE,
1631
1687
  context,
@@ -1691,6 +1747,7 @@ function* ensureSearch(action) {
1691
1747
  });
1692
1748
  }
1693
1749
  } catch (error$1) {
1750
+ // eslint-disable-next-line import/namespace
1694
1751
  error(...['Error running search saga:', error$1, error$1.stack]);
1695
1752
  }
1696
1753
  }
@@ -1708,7 +1765,7 @@ function* executeSearch(action) {
1708
1765
  let result = {};
1709
1766
  let featuredResult;
1710
1767
  let featuredQuery;
1711
- const customApi = getCustomApi(state, facet, context);
1768
+ const customApi = getCustomApi(state, facet, context, 'js');
1712
1769
 
1713
1770
  if (customApi) {
1714
1771
  const apiParams = typeof mappers === 'object' && typeof mappers.customApi === 'function' && mappers.customApi(queryParams) || {};
@@ -1734,13 +1791,14 @@ function* executeSearch(action) {
1734
1791
  action,
1735
1792
  featuredResult,
1736
1793
  pageIndex: queryParams.internalPaging && queryParams.internalPageIndex || queryParams.pageIndex,
1737
- prevResults: getResults(state, facet, action.context),
1794
+ prevResults: getResults(state, facet, action.context, 'js'),
1738
1795
  result,
1739
1796
  state
1740
1797
  };
1741
1798
  const nextAction = mapJson(createStateFrom, facetTemplate);
1742
1799
  yield put(nextAction);
1743
1800
  } catch (error$1) {
1801
+ // eslint-disable-next-line import/namespace
1744
1802
  error(...['Error running search saga:', error$1, error$1.stack]);
1745
1803
  }
1746
1804
  }
@@ -1756,7 +1814,7 @@ function* preloadOtherFacets(action) {
1756
1814
  const currentFacet = getCurrentFacet(state);
1757
1815
 
1758
1816
  if (!preload && facet === currentFacet && context !== Context.listings) {
1759
- const allFacets = getFacets(state).toJS();
1817
+ const allFacets = getFacets(state, 'js');
1760
1818
  const otherFacets = Object.keys(allFacets).filter(f => f !== currentFacet);
1761
1819
  yield all(otherFacets.map((preloadFacet = '') => {
1762
1820
  const preloadAction = { ...action,
@@ -1781,19 +1839,19 @@ function* updateCurrentTab$1(action) {
1781
1839
  mappers
1782
1840
  } = action;
1783
1841
  const state = yield select();
1784
- const facets = getFacets(state);
1785
- const tabs = getSearchTabs(state);
1786
- let nextFacet = tabs.getIn([id, 'currentFacet']);
1842
+ const facets = getFacets(state, 'js');
1843
+ const tabs = getSearchTabs(state, 'js');
1844
+ let nextFacet = tabs === null || tabs === void 0 ? void 0 : tabs[id].currentFacet;
1787
1845
 
1788
1846
  if (!nextFacet) {
1789
- facets.map((facet = Map(), facetName) => {
1790
- if (facet.get('tabId') === id && tabs.getIn([id, 'defaultFacet']) === facetName) nextFacet = facetName;
1847
+ Object.entries(facets).map(([facetName, facet]) => {
1848
+ if (facet.tabId === id && (tabs === null || tabs === void 0 ? void 0 : tabs[id].defaultFacet) === facetName) nextFacet = facetName;
1791
1849
  });
1792
1850
  } // If the next Tab does not have a defaultFacet,
1793
1851
  // take the first facet for that tab
1794
1852
 
1795
1853
 
1796
- if (!nextFacet) nextFacet = facets.filter((f = Map()) => f.get('tabId') === id).keySeq().first();
1854
+ if (!nextFacet) nextFacet = Object.entries(facets).filter(([, f]) => f.tabId === id)[0][0];
1797
1855
  yield put(withMappers(updateCurrentFacet(nextFacet), mappers));
1798
1856
  }
1799
1857
 
@@ -1880,6 +1938,15 @@ function* buildUri({
1880
1938
  return `${uri.path}${uri.search && `?${uri.search}` || ''}${uri.hash && `#${uri.hash}` || ''}`;
1881
1939
  }
1882
1940
 
1941
+ const makeSelectMinilistProps = () => createSelector(state => state, (_, id) => id, (state, id) => ({
1942
+ facet: getFacet(state, id, Context.minilist, 'js'),
1943
+ filters: getFilters(state, id, Context.minilist, 'js'),
1944
+ isLoading: getIsLoading(state, Context.minilist, id),
1945
+ pagingInfo: getPaging(state, id, Context.minilist, 'js'),
1946
+ results: getResults(state, id, Context.minilist, 'js'),
1947
+ searchTerm: getSearchTerm(state)
1948
+ }));
1949
+
1883
1950
  const useMinilist = ({
1884
1951
  id,
1885
1952
  config,
@@ -1893,6 +1960,7 @@ const useMinilist = ({
1893
1960
  id: ''
1894
1961
  }) => {
1895
1962
  const dispatch = useDispatch();
1963
+ const selectMinilistProps = useMemo(makeSelectMinilistProps, [id]);
1896
1964
  const {
1897
1965
  facet,
1898
1966
  filters,
@@ -1900,14 +1968,15 @@ const useMinilist = ({
1900
1968
  pagingInfo,
1901
1969
  results,
1902
1970
  searchTerm
1903
- } = useSelector(state => ({
1904
- facet: getFacet(state, id, Context.minilist).toJS(),
1905
- filters: getFilters(state, id, Context.minilist).toJS(),
1906
- isLoading: getIsLoading(state, Context.minilist, id),
1907
- pagingInfo: getPaging(state, id, Context.minilist).toJS(),
1908
- results: getResults(state, id, Context.minilist).toJS(),
1909
- searchTerm: getSearchTerm(state)
1910
- }));
1971
+ } = useSelector(state => selectMinilistProps(state, id)); // useSelector((state: AppState) => ({
1972
+ // facet: getFacet(state, id, Context.minilist).toJS(),
1973
+ // filters: getFilters(state, id, Context.minilist).toJS(),
1974
+ // isLoading: getIsLoading(state, Context.minilist, id),
1975
+ // pagingInfo: getPaging(state, id, Context.minilist).toJS(),
1976
+ // results: getResults(state, id, Context.minilist).toJS(),
1977
+ // searchTerm: getSearchTerm(state),
1978
+ // }));
1979
+
1911
1980
  useEffect(() => {
1912
1981
  if (id && (mapper || mappers && mappers.results)) {
1913
1982
  dispatch(triggerSearch({
@@ -1933,68 +2002,72 @@ const useMinilist = ({
1933
2002
  };
1934
2003
  };
1935
2004
 
1936
- const entries = Map({
2005
+ const entries = {
1937
2006
  isLoading: false,
1938
2007
  isError: false,
1939
- items: List()
1940
- });
1941
- const pagingInfo = Map({
2008
+ items: []
2009
+ };
2010
+ const pagingInfo = {
1942
2011
  isLoading: false,
1943
2012
  pageCount: 0,
1944
2013
  pageIndex: 0,
1945
2014
  pageSize: 0,
1946
- pagesLoaded: List(),
2015
+ pagesLoaded: [],
1947
2016
  prevPageIndex: 0,
1948
2017
  totalCount: 0
1949
- });
1950
- const searchFacet = OrderedMap({
2018
+ };
2019
+ const searchFacet = {
1951
2020
  title: null,
1952
2021
  featuredEntries: entries,
1953
- featuredResults: List(),
2022
+ featuredResults: [],
1954
2023
  entries,
1955
- results: List(),
1956
- queryParams: Map(),
1957
- filters: Map(),
2024
+ results: [],
2025
+ queryParams: {},
2026
+ filters: {},
1958
2027
  queryDuration: 0,
1959
2028
  pagingInfo,
1960
2029
  projectId: ''
1961
- });
1962
- const searchTab = Map({
2030
+ };
2031
+ const searchTab = {
1963
2032
  currentFacet: undefined,
1964
- facets: OrderedMap(),
2033
+ facets: {},
1965
2034
  id: 0,
1966
2035
  label: undefined,
1967
2036
  totalCount: ''
1968
- });
1969
- const filtering = Map({
2037
+ };
2038
+ const filtering = {
1970
2039
  isLoading: false,
1971
2040
  isError: false,
1972
2041
  isGrouped: false,
1973
2042
  title: undefined,
1974
2043
  contentTypeId: undefined,
1975
- customWhere: List(),
2044
+ customWhere: [],
1976
2045
  fieldId: undefined,
1977
- items: List()
1978
- });
1979
- const filterItem = Map({
2046
+ items: []
2047
+ };
2048
+ const filterItem = {
1980
2049
  key: '',
1981
2050
  type: undefined,
1982
2051
  title: undefined,
1983
2052
  path: undefined,
1984
2053
  isSelected: false
1985
- });
1986
- const config = Map({
2054
+ };
2055
+ const config = {
1987
2056
  isLoaded: false,
1988
2057
  isError: false
1989
- });
2058
+ };
1990
2059
  const searchState = {
2060
+ context: 'facets',
1991
2061
  currentFacet: '',
2062
+ currentListing: '',
2063
+ facets: {},
2064
+ listings: {},
2065
+ minilist: {},
1992
2066
  term: '',
1993
- facets: OrderedMap(),
1994
- tabs: List(),
2067
+ tabs: [],
1995
2068
  config
1996
2069
  };
1997
- const initialState = OrderedMap(searchState);
2070
+ const initialState = searchState;
1998
2071
 
1999
2072
  var schema = /*#__PURE__*/Object.freeze({
2000
2073
  __proto__: null,
@@ -2007,8 +2080,6 @@ var schema = /*#__PURE__*/Object.freeze({
2007
2080
  initialState: initialState
2008
2081
  });
2009
2082
 
2010
- // eslint-disable no-console
2011
-
2012
2083
  const addConfigToState = (state, action) => {
2013
2084
  const {
2014
2085
  context,
@@ -2017,26 +2088,27 @@ const addConfigToState = (state, action) => {
2017
2088
  } = action; // Adding or changing the config of a single facet, listing or minilist
2018
2089
 
2019
2090
  if (context && facet && config) {
2020
- return state.setIn([context, facet], fromJS(config));
2091
+ state[context][facet] = { ...searchFacet,
2092
+ ...config
2093
+ };
2021
2094
  } else if (config) {
2022
2095
  // Changing the entire search config
2023
- const newState = fromJS(config);
2024
- return newState;
2096
+ state = config;
2025
2097
  }
2026
2098
 
2027
2099
  return state;
2028
2100
  };
2029
2101
 
2030
2102
  const generateSearchFacets = (context, config) => {
2031
- let facets = OrderedMap();
2103
+ const facets = {};
2032
2104
 
2033
2105
  if (config) {
2034
2106
  const thisConfig = config[context] || {};
2035
2107
 
2036
2108
  if (Object.keys(thisConfig).length > 0) {
2037
2109
  Object.entries(thisConfig).map(([facetName, facet]) => {
2038
- const newFacet = searchFacet.merge(fromJS(facet));
2039
- if (!('isDisabled' in facet) || facet.isDisabled !== true) facets = facets.set(facetName, newFacet);
2110
+ const newFacet = merge(searchFacet, facet);
2111
+ if (!('isDisabled' in facet) || facet.isDisabled !== true) facets[facetName] = newFacet;
2040
2112
  });
2041
2113
  }
2042
2114
  }
@@ -2051,15 +2123,27 @@ const generateFiltersState = ({
2051
2123
  isCurrentFacet
2052
2124
  }, state) => {
2053
2125
  // Remove filters we know about from params
2054
- const filterParams = fromJS({ ...params,
2126
+ const filterParams = { ...params,
2055
2127
  facet: undefined,
2056
2128
  orderBy: undefined,
2057
2129
  pageIndex: undefined,
2058
2130
  term: undefined
2059
- }); // Get any existing filters and normalise the items[]
2131
+ }; // Get any existing filters and normalise the items[]
2060
2132
  // so we can start off with isSelected is false
2061
2133
 
2062
- let filters = state.getIn([context, facet, 'filters'], Map({})).map(filter => isCurrentFacet || filter.get('isGrouped') ? filter.set('items', filter.get('items').map(item => item === null || item === void 0 ? void 0 : item.set('isSelected', false))) : filter);
2134
+ let filters = Object.entries(state[context][facet].filters || []).map(([key, filter]) => {
2135
+ if (isCurrentFacet || filter.isGrouped) {
2136
+ var _filter$items;
2137
+
2138
+ return [key, { ...filter,
2139
+ items: (_filter$items = filter.items) === null || _filter$items === void 0 ? void 0 : _filter$items.map(item => ({ ...item,
2140
+ isSelected: false
2141
+ }))
2142
+ }];
2143
+ }
2144
+
2145
+ return [key, filter];
2146
+ });
2063
2147
 
2064
2148
  const addFilterItem = (filters, paramKey, paramValue) => // Iterate through all filters within the facet,
2065
2149
  // if the paramKey matches the filter key
@@ -2067,14 +2151,25 @@ const generateFiltersState = ({
2067
2151
  // already exists, if so set isSelected to true,
2068
2152
  // if not create a new filterItem, setting the key only
2069
2153
  // so we can match this key later on when we load the filters
2070
- filters.map((filter = Map(), key) => {
2071
- if (paramKey !== key || !isCurrentFacet && !filter.get('isGrouped')) {
2072
- return filter;
2154
+ filters.map(([key, filter]) => {
2155
+ if (paramKey !== key || !isCurrentFacet && !filter.isGrouped) {
2156
+ return [key, filter];
2073
2157
  } else {
2074
- const items = filter.get('items') || List();
2075
- const itemIndex = items.findIndex(item => (item === null || item === void 0 ? void 0 : item.get('key')) === paramValue);
2076
- if (items.size > 0 && itemIndex !== -1) return filter.setIn(['items', itemIndex, 'isSelected'], true);
2077
- return filter.set('items', (filter.get('items') || List()).push(filterItem.set('key', paramValue).set('isSelected', true)));
2158
+ const items = filter.items || [];
2159
+ const itemIndex = items.findIndex(item => (item === null || item === void 0 ? void 0 : item.key) === paramValue);
2160
+
2161
+ if (items.length > 0 && itemIndex !== -1) {
2162
+ items[itemIndex].isSelected = true;
2163
+ } else {
2164
+ items.push({ ...filterItem,
2165
+ key: paramValue,
2166
+ isSelected: true
2167
+ });
2168
+ }
2169
+
2170
+ return [key, { ...filter,
2171
+ items
2172
+ }];
2078
2173
  }
2079
2174
  }); // For each value found in filterParams
2080
2175
  // we are looking to split that value into multiple by any comma
@@ -2084,44 +2179,66 @@ const generateFiltersState = ({
2084
2179
  // the search results during SSR without needing to fetch the filters first
2085
2180
 
2086
2181
 
2087
- filterParams.map((paramValue, paramName = '') => paramValue && paramValue.split(',').map(pVal => filters = addFilterItem(filters, paramName, pVal)));
2088
- return filters;
2182
+ Object.entries(filterParams).map(([paramName = '', paramValue]) => typeof paramValue === 'string' && paramValue.split(',').map(pVal => filters = addFilterItem(filters, paramName, pVal)));
2183
+ return Object.fromEntries(filters);
2089
2184
  };
2090
2185
 
2091
- const resetFacets = (state, context) => OrderedMap(state.get(context).map((v = OrderedMap()) => resetFacet(v)));
2186
+ const resetFacets = (state, context) => Object.fromEntries(Object.entries(state[context]).map(([k, v]) => [k, resetFacet(v)]));
2092
2187
 
2093
- const resetFacet = facet => facet.setIn(['pagingInfo', 'pagesLoaded'], fromJS([])).setIn(['pagingInfo', 'pageIndex'], 0).setIn(['queryDuration'], 0);
2188
+ const resetFacet = facet => {
2189
+ facet.pagingInfo.pagesLoaded = [];
2190
+ facet.pagingInfo.pageIndex = 0;
2191
+ facet.queryDuration = 0;
2192
+ return facet;
2193
+ };
2094
2194
 
2095
2195
  var reducers = (config => {
2096
2196
  // Add facets from SearchConfig to initialState
2097
- const initState = initialState.set('tabs', fromJS(config.tabs)).set('facets', generateSearchFacets(Context.facets, config)).set('listings', generateSearchFacets(Context.listings, config)).set('minilist', generateSearchFacets(Context.minilist, config));
2098
- return (state = initState, action) => {
2099
- const context = state.get('context');
2100
- const current = state.get(context !== 'listings' ? 'currentFacet' : 'currentListing');
2197
+ const initState = { ...initialState,
2198
+ tabs: config.tabs,
2199
+ facets: generateSearchFacets(Context.facets, config),
2200
+ listings: generateSearchFacets(Context.listings, config),
2201
+ minilist: generateSearchFacets(Context.minilist, config)
2202
+ };
2203
+ return produce((state = initState, action) => {
2204
+ const context = state.context;
2205
+ const current = context !== 'listings' ? state.currentFacet : state.currentListing;
2101
2206
 
2102
2207
  switch (action.type) {
2103
2208
  case APPLY_CONFIG:
2104
2209
  {
2105
- return addConfigToState(state, action);
2210
+ state = addConfigToState(state, action);
2211
+ return;
2106
2212
  }
2107
2213
 
2108
2214
  case CLEAR_FILTERS:
2109
2215
  {
2110
- const currentFilters = state.getIn([context, current, 'filters']);
2111
- return state.setIn([context, current, 'filters'], currentFilters.map(filter => {
2112
- const filterItems = filter && filter.get('items') || [];
2113
- return filter === null || filter === void 0 ? void 0 : filter.set('items', filterItems.map(item => item === null || item === void 0 ? void 0 : item.set('isSelected', false)));
2114
- })).setIn([context, current, 'queryDuration'], 0).setIn([context, current, 'pagingInfo', 'pagesLoaded'], fromJS([]));
2216
+ const currentFilters = state[context][current].filters;
2217
+ state[context][current].filters = Object.fromEntries(Object.entries(currentFilters).map(([key, filter]) => {
2218
+ const filterItems = filter.items || [];
2219
+ filter.items = filterItems.map(item => ({ ...item,
2220
+ isSelected: false
2221
+ }));
2222
+ return [key, filter];
2223
+ }));
2224
+ state[context][current].queryDuration = 0;
2225
+ state[context][current].pagingInfo.pagesLoaded = [];
2226
+ return;
2115
2227
  }
2116
2228
 
2117
2229
  case EXECUTE_SEARCH:
2118
2230
  {
2119
- return state.setIn([action.context, action.facet, 'entries', 'isLoading'], true);
2231
+ state[action.context][action.facet].entries.isLoading = true;
2232
+ return;
2120
2233
  }
2121
2234
 
2122
2235
  case EXECUTE_SEARCH_ERROR:
2123
2236
  {
2124
- return state.setIn([action.context, action.facet, 'entries'], entries.set('isError', true).set('error', fromJS(action.error)));
2237
+ state[action.context][action.facet].entries = { ...entries,
2238
+ isError: true,
2239
+ error: action.error
2240
+ };
2241
+ return;
2125
2242
  }
2126
2243
 
2127
2244
  case LOAD_FILTERS:
@@ -2130,8 +2247,20 @@ var reducers = (config => {
2130
2247
  facetKey,
2131
2248
  filtersToLoad
2132
2249
  } = action;
2133
- const filters = state.getIn([action.context, facetKey, 'filters']);
2134
- return state.setIn([action.context, facetKey, 'filters'], filters.map((filter = Map(), filterKey) => filtersToLoad.find(f => f === filterKey) ? filter.set('isLoading', true) : filter));
2250
+ const filters = state[action.context][facetKey].filters;
2251
+ Object.entries(filters).map(([filterKey, filter]) => {
2252
+ if (filtersToLoad.find(f => f === filterKey)) return { ...filter,
2253
+ isLoading: true
2254
+ };
2255
+ return filter;
2256
+ });
2257
+ state[action.context][facetKey].filters = Object.fromEntries(Object.entries(filters).map(([filterKey, filter]) => {
2258
+ if (filtersToLoad.find(f => f === filterKey)) return [filterKey, { ...filter,
2259
+ isLoading: true
2260
+ }];
2261
+ return [filterKey, filter];
2262
+ }));
2263
+ return;
2135
2264
  }
2136
2265
 
2137
2266
  case LOAD_FILTERS_ERROR:
@@ -2142,10 +2271,21 @@ var reducers = (config => {
2142
2271
  filterKey,
2143
2272
  nextFilter
2144
2273
  } = action;
2145
- const filter = state.getIn([action.context, facetKey, 'filters', filterKey]);
2146
- if (!(nextFilter.items && nextFilter.items.length > 0) && filter.get('items').size >= nextFilter.items.length) // Preserve items already in state
2147
- return state.setIn([action.context, facetKey, 'filters', filterKey], filter.set('isLoading', false).set('isError', nextFilter.isError));
2148
- return state.setIn([action.context, facetKey, 'filters', filterKey], filter.merge(fromJS(nextFilter)));
2274
+ const filter = state[action.context][facetKey].filters[filterKey];
2275
+
2276
+ if (!(nextFilter.items && nextFilter.items.length > 0) && (filter.items || []).length >= nextFilter.items.length) {
2277
+ // Preserve items already in state
2278
+ state[action.context][facetKey].filters[filterKey] = { ...filter,
2279
+ isLoading: false,
2280
+ isError: nextFilter.isError
2281
+ };
2282
+ return;
2283
+ }
2284
+
2285
+ state[action.context][facetKey].filters[filterKey] = merge(filter, nextFilter, {
2286
+ arrayMerge: (source, inbound) => inbound
2287
+ });
2288
+ return;
2149
2289
  }
2150
2290
 
2151
2291
  case SET_ROUTE_FILTERS:
@@ -2160,8 +2300,8 @@ var reducers = (config => {
2160
2300
  pageIndex,
2161
2301
  orderBy
2162
2302
  } = params;
2163
- const stateTerm = state.get('term');
2164
- const tabId = state.getIn([context, facet, 'tabId'], 0); // Reset the facet if the search term has changed, or if the any of
2303
+ const stateTerm = state.term;
2304
+ const tabId = state[context][facet].tabId || 0; // Reset the facet if the search term has changed, or if the any of
2165
2305
  // the filters have changed
2166
2306
 
2167
2307
  const resetAllFacets = stateTerm && term !== stateTerm;
@@ -2169,7 +2309,7 @@ var reducers = (config => {
2169
2309
  // causing unfetched filter items to be generated with isSelected: true
2170
2310
  // or existing filter items to be tagged with isSelected: true
2171
2311
 
2172
- const nextFacets = state.get(context).map((stateFacet = Map(), facetName = '') => {
2312
+ const nextFacets = Object.fromEntries(Object.entries(state[context]).map(([facetName = '', stateFacet]) => {
2173
2313
  const isCurrentFacet = facetName === facet;
2174
2314
  const nextFilters = generateFiltersState({
2175
2315
  facet: facetName,
@@ -2177,18 +2317,32 @@ var reducers = (config => {
2177
2317
  context,
2178
2318
  isCurrentFacet
2179
2319
  }, state);
2180
- resetCurrentFacet = state.getIn(['config', 'isLoaded'], false) === true && !nextFilters.equals(stateFacet.get('filters'));
2181
- return (resetCurrentFacet ? resetFacet(stateFacet) : stateFacet).set('filters', nextFilters).setIn(['queryParams', 'dynamicOrderBy'], toArray(orderBy));
2182
- });
2183
- const nextState = state.set('context', context).set(context, nextFacets).set(action.context === Context.facets ? 'currentFacet' : 'currentListing', facet).set('term', term).setIn(['tabs', tabId, 'currentFacet'], facet).setIn([context, facet, 'pagingInfo', 'pageIndex'], Number(pageIndex) - 1 || (state.getIn([context, facet, 'queryParams', 'loadMorePaging']) ? state.getIn([context, facet, 'pagingInfo', 'pageIndex'], 0) : 0)).setIn(['config', 'isLoaded'], true).setIn(['config', 'ssr'], typeof window === 'undefined');
2184
- return resetAllFacets ? nextState.set(context, resetFacets(nextState, context)) : nextState;
2320
+ resetCurrentFacet = state.config.isLoaded === true && !equals(nextFilters, stateFacet.filters);
2321
+ stateFacet = resetCurrentFacet ? resetFacet(stateFacet) : stateFacet;
2322
+ stateFacet.filters = nextFilters;
2323
+ stateFacet.queryParams.dynamicOrderBy = toArray(orderBy) || [];
2324
+ return [facetName, stateFacet];
2325
+ }));
2326
+ state.context = context;
2327
+ state[context] = nextFacets;
2328
+ state[action.context === Context.facets ? 'currentFacet' : 'currentListing'] = facet;
2329
+ state.term = term;
2330
+ state.tabs[tabId].currentFacet = facet;
2331
+ state[context][facet].pagingInfo.pageIndex = Number(pageIndex) - 1 || (state[context][facet].queryParams.loadMorePaging ? state[context][facet].pagingInfo.pageIndex || 0 : 0);
2332
+ state.config.isLoaded = true;
2333
+ state.config.ssr = typeof window === 'undefined';
2334
+ if (resetAllFacets) state[context] = resetFacets(state, context);
2335
+ return;
2185
2336
  }
2186
2337
 
2187
2338
  case SET_SEARCH_ENTRIES:
2188
2339
  {
2189
2340
  const thisContext = action.context || context;
2190
- const currentFacet = state.getIn([thisContext, action.facet]);
2191
- return state.setIn([thisContext, action.facet], currentFacet.merge(fromJS(action.nextFacet)));
2341
+ const currentFacet = state[thisContext][action.facet];
2342
+ state[thisContext][action.facet] = merge(currentFacet, action.nextFacet, {
2343
+ arrayMerge: (source, inbound) => inbound
2344
+ });
2345
+ return;
2192
2346
  }
2193
2347
 
2194
2348
  case SET_SEARCH_FILTERS:
@@ -2204,8 +2358,12 @@ var reducers = (config => {
2204
2358
  isCurrentFacet: true
2205
2359
  }, state);
2206
2360
  const term = action === null || action === void 0 ? void 0 : (_action$params = action.params) === null || _action$params === void 0 ? void 0 : _action$params.term;
2207
- const useSearchTerm = state.getIn([action.context || Context.minilist, action.facet, 'queryParams', 'useSearchTerm'], false);
2208
- return state.setIn([action.context || Context.minilist, action.facet, 'filters'], filters).setIn([action.context || Context.minilist, action.facet, 'queryParams', 'excludeIds'], fromJS(action.excludeIds)).set('term', useSearchTerm ? term : state.get('term')).setIn(['config', 'ssr'], typeof window === 'undefined');
2361
+ const useSearchTerm = state[action.context || Context.minilist][action.facet].queryParams.useSearchTerm || false;
2362
+ state[action.context || Context.minilist][action.facet].filters = filters;
2363
+ state[action.context || Context.minilist][action.facet].queryParams.excludeIds = action.excludeIds;
2364
+ state.term = useSearchTerm ? term : state.term;
2365
+ state.config.ssr = typeof window === 'undefined';
2366
+ return;
2209
2367
  }
2210
2368
 
2211
2369
  case UPDATE_PAGE_INDEX:
@@ -2213,16 +2371,21 @@ var reducers = (config => {
2213
2371
  const {
2214
2372
  pageIndex
2215
2373
  } = action;
2216
- const internalPaging = state.getIn([context, current, 'queryParams', 'internalPaging'], false);
2217
- const currentPageIndex = state.getIn([context, current, 'pagingInfo', 'pageIndex'], 0);
2218
- const nextState = state.setIn([context, current, 'pagingInfo', 'pageIndex'], Number(pageIndex) || 0).setIn([context, current, 'pagingInfo', 'prevPageIndex'], currentPageIndex).setIn([context, current, 'pagingInfo', 'isLoading'], true);
2219
- if (internalPaging) return nextState;
2220
- return nextState.setIn([context, current, 'queryDuration'], 0);
2374
+ const internalPaging = state[context][current].queryParams.internalPaging || false;
2375
+ const currentPageIndex = state[context][current].pagingInfo.pageIndex || 0;
2376
+ state[context][current].pagingInfo.pageIndex = Number(pageIndex) || 0;
2377
+ state[context][current].pagingInfo.prevPageIndex = currentPageIndex;
2378
+ state[context][current].pagingInfo.isLoading = true;
2379
+ if (internalPaging) return;
2380
+ state[context][current].queryDuration = 0;
2381
+ return;
2221
2382
  }
2222
2383
 
2223
2384
  case UPDATE_SEARCH_TERM:
2224
2385
  {
2225
- return state.set('term', action.term).set(context, resetFacets(state, context));
2386
+ state.term = action.term;
2387
+ state[context] = resetFacets(state, context);
2388
+ return;
2226
2389
  }
2227
2390
 
2228
2391
  case UPDATE_SELECTED_FILTERS:
@@ -2231,16 +2394,24 @@ var reducers = (config => {
2231
2394
  filter,
2232
2395
  key
2233
2396
  } = action;
2234
- const isSingleSelect = state.getIn([context, current, 'filters', filter, 'isSingleSelect'], false);
2235
- const isGrouped = state.getIn([context, current, 'filters', filter, 'isGrouped'], false);
2236
- const currentItems = state.getIn([context, current, 'filters', filter, 'items']);
2237
- return state.set(context, isGrouped ? resetFacets(state, context) : state.get(context)).setIn([context, current], resetFacet(state.getIn([context, current]))).setIn([context, current, 'filters', filter, 'items'], currentItems.map((item = Map()) => {
2238
- if (item.get('key') === key) {
2239
- return item.set('isSelected', !item.get('isSelected'));
2397
+ const isSingleSelect = state[context][current].filters[filter].isSingleSelect || false;
2398
+ const isGrouped = state[context][current].filters[filter].isGrouped || false;
2399
+ const currentItems = state[context][current].filters[filter].items;
2400
+ if (isGrouped) state[context] = resetFacets(state, context);
2401
+ state[context][current] = resetFacet(state[context][current]);
2402
+ state[context][current].filters[filter].items = currentItems === null || currentItems === void 0 ? void 0 : currentItems.map(item => {
2403
+ if (item.key === key) {
2404
+ return { ...item,
2405
+ isSelected: !item.isSelected
2406
+ };
2240
2407
  }
2241
2408
 
2242
- return isSingleSelect ? item.set('isSelected', false) : item;
2243
- }));
2409
+ if (isSingleSelect) return { ...item,
2410
+ isSelected: false
2411
+ };
2412
+ return item;
2413
+ });
2414
+ return;
2244
2415
  }
2245
2416
 
2246
2417
  case UPDATE_SORT_ORDER:
@@ -2249,13 +2420,16 @@ var reducers = (config => {
2249
2420
  orderBy,
2250
2421
  facet
2251
2422
  } = action;
2252
- return state.set(context, resetFacets(state, context)).setIn([context, facet || current, 'queryParams', 'dynamicOrderBy'], orderBy ? fromJS(toArray(orderBy)) : '');
2423
+ state[context] = resetFacets(state, context);
2424
+ const currentFacet = facet || current;
2425
+ state[context][currentFacet].queryParams.dynamicOrderBy = orderBy ? toArray(orderBy) || [] : [];
2426
+ return;
2253
2427
  }
2254
2428
 
2255
2429
  default:
2256
- return state;
2430
+ return;
2257
2431
  }
2258
- };
2432
+ }, initState);
2259
2433
  });
2260
2434
 
2261
2435
  // eslint-disable-next-line @typescript-eslint/naming-convention