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

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 (147) hide show
  1. package/README.md +4 -4
  2. package/cjs/{App-581b6653.js → App-2ff001f6.js} +139 -124
  3. package/cjs/App-2ff001f6.js.map +1 -0
  4. package/cjs/{RouteLoader-282c03ab.js → RouteLoader-2ed14766.js} +44 -30
  5. package/cjs/RouteLoader-2ed14766.js.map +1 -0
  6. package/cjs/ToJs-09204afd.js +129 -0
  7. package/cjs/ToJs-09204afd.js.map +1 -0
  8. package/cjs/{actions-12871aca.js → actions-6b9ef168.js} +9 -8
  9. package/cjs/actions-6b9ef168.js.map +1 -0
  10. package/cjs/client.js +43 -22
  11. package/cjs/client.js.map +1 -1
  12. package/cjs/contensis-react-base.js +42 -46
  13. package/cjs/contensis-react-base.js.map +1 -1
  14. package/cjs/forms.js +275 -275
  15. package/cjs/forms.js.map +1 -1
  16. package/cjs/fromJSLeaveImmer-65d26804.js +28 -0
  17. package/cjs/fromJSLeaveImmer-65d26804.js.map +1 -0
  18. package/cjs/{login-81d7f9ef.js → login-d67b82aa.js} +113 -79
  19. package/cjs/login-d67b82aa.js.map +1 -0
  20. package/cjs/{reducers-fde41d6b.js → reducers-3a4f8971.js} +26 -25
  21. package/cjs/reducers-3a4f8971.js.map +1 -0
  22. package/cjs/redux.js +13 -14
  23. package/cjs/redux.js.map +1 -1
  24. package/cjs/routing.js +9 -8
  25. package/cjs/routing.js.map +1 -1
  26. package/cjs/search.js +413 -254
  27. package/cjs/search.js.map +1 -1
  28. package/cjs/{selectors-ed26ed97.js → selectors-2c1b1183.js} +8 -4
  29. package/cjs/selectors-2c1b1183.js.map +1 -0
  30. package/cjs/user.js +32 -23
  31. package/cjs/user.js.map +1 -1
  32. package/cjs/util.js +49 -46
  33. package/cjs/util.js.map +1 -1
  34. package/cjs/{version-f061e409.js → version-951bc80c.js} +58 -52
  35. package/cjs/version-951bc80c.js.map +1 -0
  36. package/cjs/{version-0c190929.js → version-dcfdafd9.js} +5 -5
  37. package/cjs/{version-0c190929.js.map → version-dcfdafd9.js.map} +1 -1
  38. package/esm/{App-122f28a3.js → App-7b3aee16.js} +120 -124
  39. package/esm/App-7b3aee16.js.map +1 -0
  40. package/esm/{RouteLoader-c2faac87.js → RouteLoader-d4b4d320.js} +37 -23
  41. package/esm/RouteLoader-d4b4d320.js.map +1 -0
  42. package/esm/ToJs-2627ce21.js +99 -0
  43. package/esm/ToJs-2627ce21.js.map +1 -0
  44. package/esm/{actions-3cc39599.js → actions-5437f43d.js} +8 -7
  45. package/esm/actions-5437f43d.js.map +1 -0
  46. package/esm/client.js +22 -20
  47. package/esm/client.js.map +1 -1
  48. package/esm/contensis-react-base.js +24 -28
  49. package/esm/contensis-react-base.js.map +1 -1
  50. package/esm/forms.js +5 -5
  51. package/esm/forms.js.map +1 -1
  52. package/esm/fromJSLeaveImmer-e2f0f331.js +26 -0
  53. package/esm/fromJSLeaveImmer-e2f0f331.js.map +1 -0
  54. package/esm/{login-92db44d1.js → login-f6dfbe1b.js} +97 -60
  55. package/esm/login-f6dfbe1b.js.map +1 -0
  56. package/esm/{reducers-d6c0edb1.js → reducers-8e5d6232.js} +26 -25
  57. package/esm/reducers-8e5d6232.js.map +1 -0
  58. package/esm/redux.js +14 -13
  59. package/esm/redux.js.map +1 -1
  60. package/esm/routing.js +9 -8
  61. package/esm/routing.js.map +1 -1
  62. package/esm/search.js +382 -242
  63. package/esm/search.js.map +1 -1
  64. package/esm/{selectors-82e71d8e.js → selectors-65f0f31c.js} +9 -6
  65. package/esm/selectors-65f0f31c.js.map +1 -0
  66. package/esm/user.js +31 -22
  67. package/esm/user.js.map +1 -1
  68. package/esm/util.js +18 -11
  69. package/esm/util.js.map +1 -1
  70. package/esm/version-696796d7.js +15 -0
  71. package/esm/{version-59c8f9be.js.map → version-696796d7.js.map} +1 -1
  72. package/esm/{version-cb9cd09d.js → version-b2ca1dab.js} +38 -31
  73. package/esm/version-b2ca1dab.js.map +1 -0
  74. package/models/redux/appstate.d.ts +5 -10
  75. package/models/redux/reducers/navigation.d.ts +1 -6
  76. package/models/redux/reducers/version.d.ts +1 -5
  77. package/models/redux/selectors/navigation.d.ts +2 -1
  78. package/models/routing/redux/actions.d.ts +1 -1
  79. package/models/routing/redux/reducers.d.ts +1 -21
  80. package/models/routing/redux/selectors.d.ts +1 -1
  81. package/models/routing/routes.d.ts +3 -2
  82. package/models/routing/util/expressions.d.ts +3 -2
  83. package/models/routing/util/queries.d.ts +1 -1
  84. package/models/search/containers/withListing.d.ts +1 -1
  85. package/models/search/containers/withSearch.d.ts +1 -1
  86. package/models/search/hooks/useListing.hook.d.ts +3 -0
  87. package/models/search/hooks/useMinilist.hook.d.ts +2 -9
  88. package/models/search/index.d.ts +1 -0
  89. package/models/search/models/Queries.d.ts +8 -5
  90. package/models/search/models/Search.d.ts +58 -26
  91. package/models/search/models/SearchActions.d.ts +4 -3
  92. package/models/search/models/SearchProps.d.ts +25 -2
  93. package/models/search/models/SearchState.d.ts +5 -1
  94. package/models/search/models/index.d.ts +2 -1
  95. package/models/search/redux/actions.d.ts +2 -1
  96. package/models/search/redux/reducers.d.ts +230 -314
  97. package/models/search/redux/sagas.d.ts +5 -5
  98. package/models/search/redux/selectors.d.ts +5 -10
  99. package/models/search/search/expressions.d.ts +2 -6
  100. package/models/search/transformations/entry-to-filteritem.mapper.d.ts +2 -1
  101. package/models/search/transformations/filter-to-filterexpression.mapper.d.ts +6 -0
  102. package/models/search/transformations/filters-to-filterexpressions.mapper.d.ts +3 -0
  103. package/models/search/transformations/index.d.ts +3 -0
  104. package/models/search/transformations/state-to-searchuri.d.ts +2 -13
  105. package/models/server/util/headers.d.ts +3 -2
  106. package/models/testImmer/redux/reducer.d.ts +1 -7
  107. package/models/user/components/Login.d.ts +1 -2
  108. package/models/user/components/LoginForm.d.ts +1 -2
  109. package/models/user/hocs/withLogin.d.ts +2 -2
  110. package/models/user/hooks/useChangePassword.d.ts +5 -5
  111. package/models/user/hooks/useForgotPassword.d.ts +6 -6
  112. package/models/user/hooks/useLogin.d.ts +9 -45
  113. package/models/user/hooks/useRegistration.d.ts +4 -4
  114. package/models/user/redux/reducers.d.ts +5 -32
  115. package/models/user/redux/sagas/login.d.ts +11 -8
  116. package/models/user/redux/selectors.d.ts +33 -71
  117. package/models/user/util/LoginHelper.class.d.ts +4 -3
  118. package/models/util/json-mapper.d.ts +9 -3
  119. package/models/util/merge.d.ts +1 -0
  120. package/package-lock.json +2006 -4796
  121. package/package.json +47 -48
  122. package/cjs/App-581b6653.js.map +0 -1
  123. package/cjs/RouteLoader-282c03ab.js.map +0 -1
  124. package/cjs/ToJs-87edc45d.js +0 -230
  125. package/cjs/ToJs-87edc45d.js.map +0 -1
  126. package/cjs/actions-12871aca.js.map +0 -1
  127. package/cjs/fromJSLeaveImmer-9b550c8e.js +0 -40
  128. package/cjs/fromJSLeaveImmer-9b550c8e.js.map +0 -1
  129. package/cjs/login-81d7f9ef.js.map +0 -1
  130. package/cjs/reducers-fde41d6b.js.map +0 -1
  131. package/cjs/selectors-ed26ed97.js.map +0 -1
  132. package/cjs/version-f061e409.js.map +0 -1
  133. package/esm/App-122f28a3.js.map +0 -1
  134. package/esm/RouteLoader-c2faac87.js.map +0 -1
  135. package/esm/ToJs-52fee252.js +0 -199
  136. package/esm/ToJs-52fee252.js.map +0 -1
  137. package/esm/actions-3cc39599.js.map +0 -1
  138. package/esm/fromJSLeaveImmer-e44d1a91.js +0 -38
  139. package/esm/fromJSLeaveImmer-e44d1a91.js.map +0 -1
  140. package/esm/login-92db44d1.js.map +0 -1
  141. package/esm/reducers-d6c0edb1.js.map +0 -1
  142. package/esm/selectors-82e71d8e.js.map +0 -1
  143. package/esm/version-59c8f9be.js +0 -15
  144. package/esm/version-cb9cd09d.js.map +0 -1
  145. package/models/search/transformations/filters-to-filterexpression.d.ts +0 -1
  146. package/models/search/transformations/filters-to-filterexpression.mapper.d.ts +0 -2
  147. package/models/server/features/caching/cacheHashing.d.ts +0 -1
package/cjs/search.js CHANGED
@@ -5,26 +5,44 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  var reactRedux = require('react-redux');
7
7
  var mapJson = require('jsonpath-mapper');
8
- var immer = require('immer');
8
+ var log = require('loglevel');
9
9
  var effects = require('@redux-saga/core/effects');
10
10
  var contensisDeliveryApi = require('contensis-delivery-api');
11
11
  var queryString = require('query-string');
12
- var log = require('loglevel');
13
- var reselect = require('reselect');
14
12
  var contensisCoreApi = require('contensis-core-api');
15
13
  var merge = require('deepmerge');
14
+ var reselect = require('reselect');
15
+ var immer = require('immer');
16
16
  var equals = require('deep-equal');
17
17
 
18
18
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
19
 
20
+ function _interopNamespace(e) {
21
+ if (e && e.__esModule) return e;
22
+ var n = Object.create(null);
23
+ if (e) {
24
+ Object.keys(e).forEach(function (k) {
25
+ if (k !== 'default') {
26
+ var d = Object.getOwnPropertyDescriptor(e, k);
27
+ Object.defineProperty(n, k, d.get ? d : {
28
+ enumerable: true,
29
+ get: function () { return e[k]; }
30
+ });
31
+ }
32
+ });
33
+ }
34
+ n["default"] = e;
35
+ return Object.freeze(n);
36
+ }
37
+
20
38
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
39
  var mapJson__default = /*#__PURE__*/_interopDefaultLegacy(mapJson);
22
- var queryString__default = /*#__PURE__*/_interopDefaultLegacy(queryString);
40
+ var log__namespace = /*#__PURE__*/_interopNamespace(log);
23
41
  var merge__default = /*#__PURE__*/_interopDefaultLegacy(merge);
24
42
  var equals__default = /*#__PURE__*/_interopDefaultLegacy(equals);
25
43
 
26
44
  /* eslint-disable import/default */
27
- const toJS = WrappedComponent => wrappedComponentProps => {
45
+ const toJS$1 = WrappedComponent => wrappedComponentProps => {
28
46
  const KEY = 0;
29
47
  const VALUE = 1;
30
48
  const propsJS = Object.entries(wrappedComponentProps).reduce((newProps, wrappedComponentProp) => {
@@ -33,7 +51,7 @@ const toJS = WrappedComponent => wrappedComponentProps => {
33
51
  newProps[propKey] = propValue && typeof propValue === 'object' && 'toJS' in propValue ? propValue.toJS() : propValue;
34
52
  return newProps;
35
53
  }, {});
36
- return /*#__PURE__*/React__default['default'].createElement(WrappedComponent, propsJS);
54
+ return /*#__PURE__*/React__default["default"].createElement(WrappedComponent, propsJS);
37
55
  };
38
56
 
39
57
  const ACTION_PREFIX = '@SEARCH/';
@@ -133,43 +151,44 @@ const navigate = (path, state) => {
133
151
  state
134
152
  };
135
153
  };
136
- const clearFilters = () => {
154
+ const clearFilters$1 = () => {
137
155
  return {
138
156
  type: CLEAR_FILTERS
139
157
  };
140
158
  };
141
- const updatePageIndex = pageIndex => {
159
+ const updatePageIndex$1 = pageIndex => {
142
160
  return {
143
161
  type: UPDATE_PAGE_INDEX,
144
162
  pageIndex
145
163
  };
146
164
  };
147
- const updateCurrentFacet = facet => {
165
+ const updateCurrentFacet$1 = facet => {
148
166
  return {
149
167
  type: UPDATE_CURRENT_FACET,
150
168
  facet
151
169
  };
152
170
  };
153
- const updateCurrentTab = id => {
171
+ const updateCurrentTab$1 = id => {
154
172
  return {
155
173
  type: UPDATE_CURRENT_TAB,
156
174
  id
157
175
  };
158
176
  };
159
- const updateSearchTerm = term => {
177
+ const updateSearchTerm$1 = term => {
160
178
  return {
161
179
  type: UPDATE_SEARCH_TERM,
162
180
  term
163
181
  };
164
182
  };
165
- const updateSelectedFilters = (filter, key) => {
183
+ const updateSelectedFilters = (filter, key, isUnknownItem = false) => {
166
184
  return {
167
185
  type: UPDATE_SELECTED_FILTERS,
168
186
  filter,
169
- key
187
+ key,
188
+ isUnknownItem
170
189
  };
171
190
  };
172
- const updateSortOrder = (orderBy, facet) => {
191
+ const updateSortOrder$1 = (orderBy, facet) => {
173
192
  return {
174
193
  type: UPDATE_SORT_ORDER,
175
194
  orderBy,
@@ -183,22 +202,22 @@ var actions = /*#__PURE__*/Object.freeze({
183
202
  triggerSearch: triggerSearch,
184
203
  initListing: initListing,
185
204
  navigate: navigate,
186
- clearFilters: clearFilters,
187
- updatePageIndex: updatePageIndex,
188
- updateCurrentFacet: updateCurrentFacet,
189
- updateCurrentTab: updateCurrentTab,
190
- updateSearchTerm: updateSearchTerm,
205
+ clearFilters: clearFilters$1,
206
+ updatePageIndex: updatePageIndex$1,
207
+ updateCurrentFacet: updateCurrentFacet$1,
208
+ updateCurrentTab: updateCurrentTab$1,
209
+ updateSearchTerm: updateSearchTerm$1,
191
210
  updateSelectedFilters: updateSelectedFilters,
192
- updateSortOrder: updateSortOrder
211
+ updateSortOrder: updateSortOrder$1
193
212
  });
194
213
 
195
- let Context; // export type Context = 'facets' | 'listings' | 'minilist';
214
+ let Context$1; // export type Context = 'facets' | 'listings' | 'minilist';
196
215
 
197
216
  (function (Context) {
198
217
  Context["facets"] = "facets";
199
218
  Context["listings"] = "listings";
200
219
  Context["minilist"] = "minilist";
201
- })(Context || (Context = {}));
220
+ })(Context$1 || (Context$1 = {}));
202
221
 
203
222
  // or replace with a stub function for non-immutable gets
204
223
 
@@ -229,12 +248,12 @@ const getImmutableOrJS = (state, stateKey, fallbackValue, returnType = globalThi
229
248
  return result;
230
249
  };
231
250
 
232
- const getSearchContext = state => getImmutableOrJS(state, ['search', 'context'], Context.facets);
233
- const getCurrent = (state, context = Context.facets) => context === Context.facets ? getCurrentFacet(state) : getCurrentListing(state);
251
+ const getSearchContext = state => getImmutableOrJS(state, ['search', 'context'], Context$1.facets);
252
+ const getCurrent$1 = (state, context = Context$1.facets) => context === Context$1.facets ? getCurrentFacet(state) : getCurrentListing(state);
234
253
  const getCurrentFacet = state => getImmutableOrJS(state, ['search', 'currentFacet']);
235
254
  const getCurrentListing = state => getImmutableOrJS(state, ['search', 'currentListing']);
236
- const getCurrentTab = state => getImmutableOrJS(state, ['search', Context.facets, getCurrentFacet(state), 'tabId'], 0);
237
- const getFacets = (state, returnType) => getImmutableOrJS(state, ['search', Context.facets], {}, returnType);
255
+ const getCurrentTab = state => getImmutableOrJS(state, ['search', Context$1.facets, getCurrentFacet(state), 'tabId'], 0);
256
+ const getFacets = (state, returnType) => getImmutableOrJS(state, ['search', Context$1.facets], {}, returnType);
238
257
  const getTabFacets = state => Object.fromEntries(Object.entries(getFacets(state, 'js')).filter(([key]) => getImmutableOrJS(getFacets(state), [key, 'tabId'], 0) === getCurrentTab(state)));
239
258
  const getFacetTitles = state => Object.entries(getFacets(state, 'js')).map(([key, facet = {}]) => {
240
259
  var _facet$pagingInfo;
@@ -245,19 +264,19 @@ const getFacetTitles = state => Object.entries(getFacets(state, 'js')).map(([key
245
264
  totalCount: (_facet$pagingInfo = facet.pagingInfo) === null || _facet$pagingInfo === void 0 ? void 0 : _facet$pagingInfo.totalCount
246
265
  };
247
266
  });
248
- const getFacet = (state, facetName = '', context = Context.facets, returnType) => {
267
+ const getFacet = (state, facetName = '', context = Context$1.facets, returnType) => {
249
268
  const currentFacet = facetName || getCurrentFacet(state);
250
269
  return getImmutableOrJS(state, ['search', context, currentFacet], {}, returnType);
251
270
  };
252
- const getListing = (state, listing = '') => {
271
+ const getListing$1 = (state, listing = '') => {
253
272
  const currentListing = listing || getCurrentListing(state);
254
- return getImmutableOrJS(state, ['search', Context.listings, currentListing], {});
273
+ return getImmutableOrJS(state, ['search', Context$1.listings, currentListing], {});
255
274
  };
256
- const getFilters = (state, facet, context = Context.facets, returnType) => {
257
- return getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'filters'], {}, returnType);
275
+ const getFilters = (state, facet, context = Context$1.facets, returnType) => {
276
+ return getImmutableOrJS(state, ['search', context, facet || getCurrent$1(state, context), 'filters'], {}, returnType);
258
277
  };
259
- 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));
260
- const getFiltersToLoad = (state, facet, context = Context.facets, returnType) => {
278
+ 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));
279
+ const getFiltersToLoad = (state, facet, context = Context$1.facets, returnType) => {
261
280
  const filters = getFilters(state, facet, context, returnType);
262
281
  const loadedFilters = Object.entries(filters).map(([key, f = {}]) => [key, (f.items || []).filter(i => {
263
282
  const title = i === null || i === void 0 ? void 0 : i.title;
@@ -266,68 +285,68 @@ const getFiltersToLoad = (state, facet, context = Context.facets, returnType) =>
266
285
  return loadedFilters.map(([filterKey, isLoaded]) => !isLoaded ? filterKey : null).filter(f => !!f);
267
286
  }; // We lowercase the filter key unless it's an ISO date string where the T must be uppercase
268
287
 
269
- const getSelectedFilters = (state, facet = '', context = Context.facets, returnType) => {
288
+ const getSelectedFilters = (state, facet = '', context = Context$1.facets, returnType) => {
270
289
  const filters = getFilters(state, facet, context, 'js');
271
290
  const isoDateRegex = RegExp(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d/);
272
291
  const selectedFilters = Object.fromEntries(Object.entries(filters).map(([key, filter = {}]) => [key, (filter.items || []).filter(item => !!(item.isSelected || false)).map(item => {
273
292
  const key = (item === null || item === void 0 ? void 0 : item.key) || '';
274
293
  const isIsoDate = isoDateRegex.test(key);
275
- return isIsoDate ? key : key.toLowerCase();
294
+ return isIsoDate ? key : typeof key.toLowerCase !== 'undefined' ? key.toLowerCase() : key;
276
295
  })]));
277
296
  const fromJS = makeFromJS(returnType);
278
297
  return fromJS(selectedFilters);
279
298
  };
280
- const getResults = (state, current = '', context = Context.facets, returnType) => {
281
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'results'], [], returnType);
299
+ const getResults$1 = (state, current = '', context = Context$1.facets, returnType) => {
300
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'results'], [], returnType);
282
301
  };
283
- const getIsInternalPaging = (state, current, context = Context.facets) => {
284
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams', 'internalPaging'], false);
302
+ const getIsInternalPaging = (state, current, context = Context$1.facets) => {
303
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'queryParams', 'internalPaging'], false);
285
304
  };
286
- const getIsLoaded = (state, context = Context.facets, facet) => {
287
- return !!getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'queryDuration'], 0);
305
+ const getIsLoaded = (state, context = Context$1.facets, facet) => {
306
+ return !!getImmutableOrJS(state, ['search', context, facet || getCurrent$1(state, context), 'queryDuration'], 0);
288
307
  };
289
- const getIsLoading = (state, context = Context.facets, facet) => {
290
- return getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'entries', 'isLoading']);
308
+ const getIsLoading$1 = (state, context = Context$1.facets, facet) => {
309
+ return getImmutableOrJS(state, ['search', context, facet || getCurrent$1(state, context), 'entries', 'isLoading']);
291
310
  };
292
311
  const getIsSsr = state => getImmutableOrJS(state, ['search', 'config', 'ssr'], false);
293
- const getFeaturedResults = (state, current = '', context = Context.facets) => {
294
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'featuredResults'], []);
312
+ const getFeaturedResults$1 = (state, current = '', context = Context$1.facets) => {
313
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'featuredResults'], []);
295
314
  };
296
- const getPaging = (state, current = '', context = Context.facets, returnType) => {
297
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo'], {}, returnType);
315
+ const getPaging$1 = (state, current = '', context = Context$1.facets, returnType) => {
316
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo'], {}, returnType);
298
317
  };
299
- const getPageIndex = (state, current = '', context = Context.facets) => {
300
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pageIndex']);
318
+ const getPageIndex$1 = (state, current = '', context = Context$1.facets) => {
319
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'pageIndex']);
301
320
  };
302
- const getPrevPageIndex = (state, current = '', context = Context.facets) => {
303
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'prevPageIndex']);
321
+ const getPrevPageIndex = (state, current = '', context = Context$1.facets) => {
322
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'prevPageIndex']);
304
323
  };
305
- const getPageIsLoading = (state, current = '', context = Context.facets) => {
306
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'isLoading']);
324
+ const getPageIsLoading$1 = (state, current = '', context = Context$1.facets) => {
325
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'isLoading']);
307
326
  };
308
- const getPagesLoaded = (state, current = '', context = Context.facets) => {
309
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pagesLoaded'], [], 'js');
327
+ const getPagesLoaded = (state, current = '', context = Context$1.facets) => {
328
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'pagesLoaded'], [], 'js');
310
329
  };
311
- const getTotalCount = (state, current = '', context = Context.facets) => {
312
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'totalCount']);
330
+ const getTotalCount = (state, current = '', context = Context$1.facets) => {
331
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'pagingInfo', 'totalCount']);
313
332
  };
314
- const getSearchTerm = state => getImmutableOrJS(state, ['search', 'term']);
333
+ const getSearchTerm$1 = state => getImmutableOrJS(state, ['search', 'term']);
315
334
  const getSearchTabs = (state, returnType) => getImmutableOrJS(state, ['search', 'tabs'], [], returnType);
316
- const getQueryParams = (state, current = '', context = Context.facets) => {
317
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams'], {}, 'js');
335
+ const getQueryParams = (state, current = '', context = Context$1.facets) => {
336
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'queryParams'], {}, 'js');
318
337
  };
319
- const getQueryParameter = ({
338
+ const getQueryParameter$1 = ({
320
339
  state,
321
340
  facet,
322
- context = Context.facets
341
+ context = Context$1.facets
323
342
  }, key, ifnull = null) => {
324
343
  return getImmutableOrJS(getQueryParams(state, facet, context), key, ifnull, 'js');
325
344
  };
326
- const getCustomApi = (state, current, context = Context.facets, returnType) => {
327
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'customApi'], null, returnType);
345
+ const getCustomApi = (state, current, context = Context$1.facets, returnType) => {
346
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'customApi'], null, returnType);
328
347
  };
329
- const getCustomEnv = (state, current, context = Context.facets) => {
330
- return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'env']);
348
+ const getCustomEnv = (state, current, context = Context$1.facets) => {
349
+ return getImmutableOrJS(state, ['search', context, current || getCurrent$1(state, context), 'env']);
331
350
  };
332
351
  const getTabsAndFacets = (state, returnType) => {
333
352
  const tabs = getSearchTabs(state, 'js');
@@ -342,7 +361,7 @@ const getTabsAndFacets = (state, returnType) => {
342
361
  return 0;
343
362
  }).reduce((a, b) => a + b, 0);
344
363
  return { ...tab,
345
- [Context.facets]: Object.fromEntries(thisTabFacets),
364
+ [Context$1.facets]: Object.fromEntries(thisTabFacets),
346
365
  totalCount: thisTabTotal
347
366
  };
348
367
  });
@@ -373,69 +392,70 @@ const selectFacets = {
373
392
  getFacetTitles,
374
393
  getFacets,
375
394
  getFacetsTotalCount,
376
- getFeaturedResults,
395
+ getFeaturedResults: getFeaturedResults$1,
377
396
  getFilters,
378
397
  getFiltersToLoad,
379
398
  getIsLoaded,
380
- getIsLoading,
381
- getPageIndex,
382
- getPageIsLoading,
399
+ getIsLoading: getIsLoading$1,
400
+ getPageIndex: getPageIndex$1,
401
+ getPageIsLoading: getPageIsLoading$1,
383
402
  getPagesLoaded,
384
- getPaging,
385
- getQueryParams: (state, facet) => getQueryParams(state, facet, Context.facets),
403
+ getPaging: getPaging$1,
404
+ getQueryParams: (state, facet) => getQueryParams(state, facet, Context$1.facets),
386
405
  getQueryParameter: ({
387
406
  state,
388
407
  facet
389
- }, key, ifnull) => getQueryParameter({
408
+ }, key, ifnull) => getQueryParameter$1({
390
409
  state,
391
410
  facet,
392
- context: Context.facets
411
+ context: Context$1.facets
393
412
  }, key, ifnull),
394
- getRenderableFilters,
395
- getResults,
413
+ getRenderableFilters: getRenderableFilters$1,
414
+ getResults: getResults$1,
396
415
  getTabFacets,
397
416
  getTabsAndFacets,
398
417
  getTotalCount,
399
418
  getSearchTabs,
400
- getSearchTerm,
419
+ getSearchTerm: getSearchTerm$1,
401
420
  getSearchTotalCount,
402
421
  getSelectedFilters
403
422
  }; // An exported copy of the relevant selectors pre-scoped to a listing context
404
423
 
405
424
  const selectListing = {
406
425
  getCurrent: getCurrentListing,
407
- getFeaturedResults: (state, listing = '') => getFeaturedResults(state, listing, Context.listings),
408
- getFilters: (state, listing = '') => getFilters(state, listing, Context.listings),
409
- getFiltersToLoad: (state, listing = '') => getFiltersToLoad(state, listing, Context.listings),
410
- getListing,
411
- getIsLoaded: state => getIsLoaded(state, Context.listings),
412
- getIsLoading: state => getIsLoading(state, Context.listings),
413
- getPageIndex: (state, listing = '') => getPageIndex(state, listing, Context.listings),
414
- getPaging: (state, listing = '') => getPaging(state, listing, Context.listings),
415
- getPageIsLoading: (state, listing = '') => getPageIsLoading(state, listing, Context.listings),
416
- getPagesLoaded: (state, listing = '') => getPagesLoaded(state, listing, Context.listings),
417
- getQueryParams: (state, listing = '') => getQueryParams(state, listing, Context.listings),
426
+ getFeaturedResults: (state, listing = '') => getFeaturedResults$1(state, listing, Context$1.listings),
427
+ getFilters: (state, listing = '') => getFilters(state, listing, Context$1.listings),
428
+ getFiltersToLoad: (state, listing = '') => getFiltersToLoad(state, listing, Context$1.listings),
429
+ getListing: getListing$1,
430
+ getIsLoaded: state => getIsLoaded(state, Context$1.listings),
431
+ getIsLoading: state => getIsLoading$1(state, Context$1.listings),
432
+ getPageIndex: (state, listing = '') => getPageIndex$1(state, listing, Context$1.listings),
433
+ getPaging: (state, listing = '') => getPaging$1(state, listing, Context$1.listings),
434
+ getPageIsLoading: (state, listing = '') => getPageIsLoading$1(state, listing, Context$1.listings),
435
+ getPagesLoaded: (state, listing = '') => getPagesLoaded(state, listing, Context$1.listings),
436
+ getQueryParams: (state, listing = '') => getQueryParams(state, listing, Context$1.listings),
418
437
  getQueryParameter: ({
419
438
  state,
420
439
  facet
421
- }, key, ifnull) => getQueryParameter({
440
+ }, key, ifnull) => getQueryParameter$1({
422
441
  state,
423
442
  facet,
424
- context: Context.listings
443
+ context: Context$1.listings
425
444
  }, key, ifnull),
426
- getRenderableFilters: (state, listing = '') => getRenderableFilters(state, listing, Context.listings),
427
- getResults: (state, listing = '') => getResults(state, listing, Context.listings),
428
- getSearchTerm,
429
- getTotalCount: (state, listing = '') => getTotalCount(state, listing, Context.listings),
430
- getSelectedFilters: (state, listing = '') => getSelectedFilters(state, listing, Context.listings)
445
+ getRenderableFilters: (state, listing = '') => getRenderableFilters$1(state, listing, Context$1.listings),
446
+ getResults: (state, listing = '') => getResults$1(state, listing, Context$1.listings),
447
+ getSearchTerm: getSearchTerm$1,
448
+ getTotalCount: (state, listing = '') => getTotalCount(state, listing, Context$1.listings),
449
+ getSelectedFilters: (state, listing = '') => getSelectedFilters(state, listing, Context$1.listings)
431
450
  };
432
451
  const selectCurrentPath = state => getImmutableOrJS(state, ['routing', 'currentPath']);
452
+ const selectCurrentProject = state => getImmutableOrJS(state, ['routing', 'currentProject']);
433
453
  const selectVersionStatus = state => getImmutableOrJS(state, ['version', 'contensisVersionStatus']);
434
454
 
435
455
  var selectors = /*#__PURE__*/Object.freeze({
436
456
  __proto__: null,
437
457
  getSearchContext: getSearchContext,
438
- getCurrent: getCurrent,
458
+ getCurrent: getCurrent$1,
439
459
  getCurrentFacet: getCurrentFacet,
440
460
  getCurrentListing: getCurrentListing,
441
461
  getCurrentTab: getCurrentTab,
@@ -443,27 +463,27 @@ var selectors = /*#__PURE__*/Object.freeze({
443
463
  getTabFacets: getTabFacets,
444
464
  getFacetTitles: getFacetTitles,
445
465
  getFacet: getFacet,
446
- getListing: getListing,
466
+ getListing: getListing$1,
447
467
  getFilters: getFilters,
448
- getRenderableFilters: getRenderableFilters,
468
+ getRenderableFilters: getRenderableFilters$1,
449
469
  getFiltersToLoad: getFiltersToLoad,
450
470
  getSelectedFilters: getSelectedFilters,
451
- getResults: getResults,
471
+ getResults: getResults$1,
452
472
  getIsInternalPaging: getIsInternalPaging,
453
473
  getIsLoaded: getIsLoaded,
454
- getIsLoading: getIsLoading,
474
+ getIsLoading: getIsLoading$1,
455
475
  getIsSsr: getIsSsr,
456
- getFeaturedResults: getFeaturedResults,
457
- getPaging: getPaging,
458
- getPageIndex: getPageIndex,
476
+ getFeaturedResults: getFeaturedResults$1,
477
+ getPaging: getPaging$1,
478
+ getPageIndex: getPageIndex$1,
459
479
  getPrevPageIndex: getPrevPageIndex,
460
- getPageIsLoading: getPageIsLoading,
480
+ getPageIsLoading: getPageIsLoading$1,
461
481
  getPagesLoaded: getPagesLoaded,
462
482
  getTotalCount: getTotalCount,
463
- getSearchTerm: getSearchTerm,
483
+ getSearchTerm: getSearchTerm$1,
464
484
  getSearchTabs: getSearchTabs,
465
485
  getQueryParams: getQueryParams,
466
- getQueryParameter: getQueryParameter,
486
+ getQueryParameter: getQueryParameter$1,
467
487
  getCustomApi: getCustomApi,
468
488
  getCustomEnv: getCustomEnv,
469
489
  getTabsAndFacets: getTabsAndFacets,
@@ -472,15 +492,15 @@ var selectors = /*#__PURE__*/Object.freeze({
472
492
  selectFacets: selectFacets,
473
493
  selectListing: selectListing,
474
494
  selectCurrentPath: selectCurrentPath,
495
+ selectCurrentProject: selectCurrentProject,
475
496
  selectVersionStatus: selectVersionStatus
476
497
  });
477
498
 
478
499
  // eslint-disable-next-line import/default
479
500
 
480
- /* eslint-disable @typescript-eslint/naming-convention */
481
501
  const withSearch = mappers => SearchComponent => {
482
502
  const Wrapper = props => {
483
- return /*#__PURE__*/React__default['default'].createElement(SearchComponent, props);
503
+ return /*#__PURE__*/React__default["default"].createElement(SearchComponent, props);
484
504
  };
485
505
 
486
506
  Wrapper.displayName = `withSearch(${SearchComponent.displayName || SearchComponent.name})`;
@@ -488,22 +508,22 @@ const withSearch = mappers => SearchComponent => {
488
508
  const mapStateToProps = state => {
489
509
  return {
490
510
  currentFacet: getCurrentFacet(state),
491
- currentPageIndex: getPageIndex(state),
511
+ currentPageIndex: getPageIndex$1(state),
492
512
  currentTabIndex: getCurrentTab(state),
493
513
  facet: getFacet(state),
494
514
  facets: getTabFacets(state),
495
515
  facetsTotalCount: getFacetsTotalCount(state),
496
516
  facetTitles: getFacetTitles(state),
497
- featuredResults: getFeaturedResults(state),
498
- filters: getRenderableFilters(state),
499
- isLoading: getIsLoading(state),
500
- paging: getPaging(state),
501
- pageIsLoading: getPageIsLoading(state),
502
- results: getResults(state),
517
+ featuredResults: getFeaturedResults$1(state),
518
+ filters: getRenderableFilters$1(state),
519
+ isLoading: getIsLoading$1(state),
520
+ paging: getPaging$1(state),
521
+ pageIsLoading: getPageIsLoading$1(state),
522
+ results: getResults$1(state),
503
523
  resultsInfo: (mappers === null || mappers === void 0 ? void 0 : mappers.resultsInfo) && mappers.resultsInfo(state),
504
- searchTerm: getSearchTerm(state),
524
+ searchTerm: getSearchTerm$1(state),
505
525
  searchTotalCount: getSearchTotalCount(state),
506
- sortOrder: getQueryParameter({
526
+ sortOrder: getQueryParameter$1({
507
527
  state
508
528
  }, 'dynamicOrderBy', []),
509
529
  tabsAndFacets: getTabsAndFacets(state),
@@ -512,23 +532,23 @@ const withSearch = mappers => SearchComponent => {
512
532
  };
513
533
 
514
534
  const mapDispatchToProps = {
515
- clearFilters: () => withMappers(clearFilters(), mappers),
516
- updateCurrentFacet: facet => withMappers(updateCurrentFacet(facet), mappers),
517
- updateCurrentTab: id => withMappers(updateCurrentTab(id), mappers),
518
- updatePageIndex: pageIndex => withMappers(updatePageIndex(pageIndex), mappers),
519
- updateSearchTerm: term => withMappers(updateSearchTerm(term), mappers),
520
- updateSelectedFilters: (filter, key) => withMappers(updateSelectedFilters(filter, key), mappers),
521
- updateSortOrder: orderBy => withMappers(updateSortOrder(orderBy), mappers)
535
+ clearFilters: () => withMappers(clearFilters$1(), mappers),
536
+ updateCurrentFacet: facet => withMappers(updateCurrentFacet$1(facet), mappers),
537
+ updateCurrentTab: id => withMappers(updateCurrentTab$1(id), mappers),
538
+ updatePageIndex: pageIndex => withMappers(updatePageIndex$1(pageIndex), mappers),
539
+ updateSearchTerm: term => withMappers(updateSearchTerm$1(term), mappers),
540
+ updateSelectedFilters: (filter, key, isUnknownItem = false) => withMappers(updateSelectedFilters(filter, key, isUnknownItem), mappers),
541
+ updateSortOrder: orderBy => withMappers(updateSortOrder$1(orderBy), mappers)
522
542
  };
523
543
  const connector = reactRedux.connect(mapStateToProps, mapDispatchToProps);
524
- return connector(toJS(Wrapper));
544
+ return connector(toJS$1(Wrapper));
525
545
  };
526
546
 
527
547
  /* eslint-disable @typescript-eslint/naming-convention */
528
548
 
529
549
  const withListing = mappers => ListingComponent => {
530
550
  const Wrapper = props => {
531
- return /*#__PURE__*/React__default['default'].createElement(ListingComponent, props);
551
+ return /*#__PURE__*/React__default["default"].createElement(ListingComponent, props);
532
552
  };
533
553
 
534
554
  Wrapper.displayName = `withListing(${ListingComponent.displayName || ListingComponent.name})`;
@@ -564,14 +584,14 @@ const withListing = mappers => ListingComponent => {
564
584
  };
565
585
 
566
586
  const mapDispatchToProps = {
567
- clearFilters: () => withMappers(clearFilters(), mappers),
568
- updateCurrentFacet: facet => withMappers(updateCurrentFacet(facet), mappers),
569
- updatePageIndex: pageIndex => withMappers(updatePageIndex(pageIndex), mappers),
570
- updateSearchTerm: term => withMappers(updateSearchTerm(term), mappers),
571
- updateSelectedFilters: (filter, key) => withMappers(updateSelectedFilters(filter, key), mappers),
572
- updateSortOrder: orderBy => withMappers(updateSortOrder(orderBy), mappers)
587
+ clearFilters: () => withMappers(clearFilters$1(), mappers),
588
+ updateCurrentFacet: facet => withMappers(updateCurrentFacet$1(facet), mappers),
589
+ updatePageIndex: pageIndex => withMappers(updatePageIndex$1(pageIndex), mappers),
590
+ updateSearchTerm: term => withMappers(updateSearchTerm$1(term), mappers),
591
+ updateSelectedFilters: (filter, key, isUnknownItem = false) => withMappers(updateSelectedFilters(filter, key, isUnknownItem), mappers),
592
+ updateSortOrder: orderBy => withMappers(updateSortOrder$1(orderBy), mappers)
573
593
  };
574
- return reactRedux.connect(mapStateToProps, mapDispatchToProps)(toJS(Wrapper));
594
+ return reactRedux.connect(mapStateToProps, mapDispatchToProps)(toJS$1(Wrapper));
575
595
  };
576
596
 
577
597
  const getClientConfig = (project, env) => {
@@ -780,7 +800,7 @@ const extractQuotedPhrases = searchTerm => {
780
800
  return (searchTerm.match(pattern) || []).map(match => match.replace(/"/g, ''));
781
801
  };
782
802
  const buildUrl = (route, params) => {
783
- const qs = queryString__default['default'].stringify(params);
803
+ const qs = queryString.stringify(params);
784
804
  const path = qs ? `${route}?${qs}` : route;
785
805
  return path;
786
806
  };
@@ -861,7 +881,7 @@ const fieldExpression = (field, value, operator = 'equalTo', weight) => {
861
881
  // to generate expressions that are combined with an 'or' operator
862
882
  return [contensisCoreApi.Op.or(...field.map(fieldId => fieldExpression(fieldId, value, operator, weight)).flat())];
863
883
  if (operator === 'between') return between(field, value);
864
- if (Array.isArray(value)) return equalToOrIn(field, value, operator);else return !weight ? [contensisCoreApi.Op[operator](field, value, undefined, undefined)] : [contensisCoreApi.Op[operator](field, value, undefined, undefined).weight(weight)];
884
+ if (Array.isArray(value)) return equalToOrIn(field, value, operator);else return !weight ? equalToOrIn(field, value, operator) : [equalToOrIn(field, value, operator)[0].weight(weight)];
865
885
  };
866
886
  const contentTypeIdExpression = (contentTypeIds, webpageTemplates, assetTypes) => {
867
887
  const expressions = [];
@@ -885,8 +905,17 @@ const contentTypeIdExpression = (contentTypeIds, webpageTemplates, assetTypes) =
885
905
  const filterExpressions = filters => {
886
906
  if (!filters) return [];
887
907
  const expressions = [];
888
- filters.map(param => {
889
- expressions.push(...fieldExpression(param.key, param.value, param.operator || 'in'));
908
+ filters.map(selectedFilter => {
909
+ if (selectedFilter.logicOperator === 'and') // using 'and' logic operator we loop through each filter
910
+ // and loop through all values to add an expression for each filter value
911
+ selectedFilter.values.forEach(value => expressions.push(...fieldExpression(selectedFilter.key, value, selectedFilter.fieldOperator || 'equalTo')));else if (selectedFilter.logicOperator === 'not') {
912
+ const fieldExpressions = fieldExpression(selectedFilter.key, selectedFilter.values, selectedFilter.fieldOperator || 'in');
913
+ fieldExpressions.forEach(expr => {
914
+ expressions.push(contensisCoreApi.Op.not(expr));
915
+ });
916
+ } // using 'or' logic operator we loop over each filter
917
+ // and simply add the array of values to an expression with an 'in' operator
918
+ else expressions.push(...fieldExpression(selectedFilter.key, selectedFilter.values, selectedFilter.fieldOperator || 'in'));
890
919
  });
891
920
  return expressions;
892
921
  };
@@ -903,8 +932,8 @@ const dataFormatExpression = (contentTypeIds, dataFormat = DataFormats.entry) =>
903
932
  const withExpr = fieldExpression(Fields.sys.contentTypeId, withContentTypeIds)[0];
904
933
  const notExpr = contensisCoreApi.Op.not(fieldExpression(Fields.sys.contentTypeId, notContentTypeIds)[0]);
905
934
  andExpr.add(dataFormatExpr);
906
- if (withContentTypeIds.length > 0) andExpr.add(withExpr);
907
- if (notContentTypeIds.length > 0) andExpr.add(notExpr);
935
+ if (withContentTypeIds.length > 0 && withExpr) andExpr.add(withExpr);
936
+ if (notContentTypeIds.length > 0 && notExpr) andExpr.add(notExpr);
908
937
  return [andExpr];
909
938
  }
910
939
 
@@ -960,19 +989,45 @@ const equalToOrIn = (field, value, operator = 'equalTo') => {
960
989
  if (value.length === 0) return [];
961
990
 
962
991
  if (Array.isArray(value)) {
963
- if (value.length === 1) return [contensisCoreApi.Op[operator](field, value[0], undefined, undefined)];
964
- return [contensisCoreApi.Op.in(field, ...value)];
992
+ if (operator === 'equalTo') return [contensisCoreApi.Op.in(field, ...value)];
993
+ return [contensisCoreApi.Op.or(...value.map(innerValue => {
994
+ switch (operator) {
995
+ case 'between':
996
+ case 'distanceWithin':
997
+ // Not implemented
998
+ return contensisCoreApi.Op.equalTo(field, innerValue);
999
+
1000
+ case 'freeText':
1001
+ // TODO: Potentially needs further implementation of new options
1002
+ return contensisCoreApi.Op[operator](field, innerValue, false, undefined);
1003
+
1004
+ default:
1005
+ return contensisCoreApi.Op[operator](field, innerValue);
1006
+ }
1007
+ }))];
965
1008
  }
966
1009
 
967
- return [];
1010
+ switch (operator) {
1011
+ case 'between':
1012
+ case 'distanceWithin':
1013
+ // Not implemented
1014
+ return [contensisCoreApi.Op.equalTo(field, value)];
1015
+
1016
+ case 'freeText':
1017
+ // TODO: Potentially needs further implementation of new options
1018
+ return [contensisCoreApi.Op[operator](field, value, false, undefined)];
1019
+
1020
+ default:
1021
+ return [contensisCoreApi.Op[operator](field, value)];
1022
+ }
968
1023
  };
969
1024
 
970
1025
  const between = (field, value) => {
971
1026
  const handle = betweenValue => {
972
- const valArr = betweenValue.split('-');
1027
+ const valArr = betweenValue.split('--');
973
1028
 
974
1029
  if (valArr.length > 1) {
975
- const [minimum, maximum = null] = betweenValue.split('-');
1030
+ const [minimum, maximum] = valArr;
976
1031
  return contensisCoreApi.Op.between(field, minimum, maximum);
977
1032
  } else {
978
1033
  // eslint-disable-next-line no-console
@@ -982,10 +1037,9 @@ const between = (field, value) => {
982
1037
  };
983
1038
 
984
1039
  if (value.length === 0) return [];
985
- if (Array.isArray(value)) return [contensisCoreApi.Op.or(...value.map(handle).filter(bc => bc !== false))]; // const valArr = value.split('-');
986
-
1040
+ if (Array.isArray(value)) return [contensisCoreApi.Op.or(...value.map(handle).filter(bc => bc !== false))];
987
1041
  const op = handle(value);
988
- return op ? [op] : []; // valArr.length > 1 ? [Op.between(field, ...value.split('-'))] : [];
1042
+ return op ? [op] : [];
989
1043
  };
990
1044
  /**
991
1045
  * Accept HTTP style objects and map them to
@@ -1028,7 +1082,7 @@ const customWhereExpressions = where => {
1028
1082
  // the second property inside the clause
1029
1083
 
1030
1084
  if (notIdx === 1) {
1031
- expression = contensisCoreApi.Op.not(contensisCoreApi.Op[innerOperator](innerField, innerValue));
1085
+ expression = innerOperator === 'between' ? contensisCoreApi.Op.not(contensisCoreApi.Op[innerOperator](innerField, innerValue[0], innerValue[1])) : contensisCoreApi.Op.not(contensisCoreApi.Op[innerOperator](innerField, innerValue));
1032
1086
  }
1033
1087
  });
1034
1088
  }
@@ -1040,8 +1094,9 @@ const customWhereExpressions = where => {
1040
1094
 
1041
1095
  if (idx === 1 && // operator !== 'and' &&
1042
1096
  // operator !== 'or' &&
1043
- operator !== 'between' && operator !== 'distanceWithin') {
1044
- expression = operator === 'freeText' || operator === 'contains' ? contensisCoreApi.Op[operator](field, value) : operator === 'in' ? contensisCoreApi.Op[operator](field, ...value) : contensisCoreApi.Op[operator](field, value);
1097
+ // operator !== 'between' &&
1098
+ operator !== 'distanceWithin') {
1099
+ expression = operator === 'freeText' || operator === 'contains' ? contensisCoreApi.Op[operator](field, value) : operator === 'in' ? contensisCoreApi.Op[operator](field, ...value) : operator === 'exists' ? contensisCoreApi.Op[operator](field, value) : operator === 'between' ? contensisCoreApi.Op[operator](field, value[0], value[1]) : contensisCoreApi.Op[operator](field, value);
1045
1100
  if (typeof weight === 'number') expression = expression.weight(weight);
1046
1101
  }
1047
1102
  });
@@ -1154,7 +1209,7 @@ const searchUriTemplate = {
1154
1209
  facet,
1155
1210
  pageIndex
1156
1211
  }) => {
1157
- const currentFacet = getSearchContext(state) !== Context.listings && (facet || getCurrentFacet(state));
1212
+ const currentFacet = getSearchContext(state) !== Context$1.listings && (facet || getCurrentFacet(state));
1158
1213
  const currentPath = selectCurrentPath(state) || '/search';
1159
1214
  const newPath = currentFacet ? `${currentPath}/${currentFacet}` : currentPath;
1160
1215
  if (pageIndex) return `${newPath}/${pageIndex + 1}`;
@@ -1171,23 +1226,19 @@ const searchUriTemplate = {
1171
1226
 
1172
1227
  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(',')]));
1173
1228
  const currentSearch = !term && getImmutableOrJS(state, ['routing', 'location', 'search']);
1174
- const currentQs = removeEmptyAttributes(queryString__default['default'].parse(currentSearch));
1229
+ const currentQs = removeEmptyAttributes(queryString.parse(currentSearch));
1175
1230
  if (orderBy) currentQs.orderBy = orderBy;
1176
- const searchTerm = getSearchTerm(state); // Use Immutable's merge to merge the stateFilters with any current Qs
1177
- // to build the new Qs.
1231
+ const searchTerm = getSearchTerm$1(state); // Merge the stateFilters with any current qs to build the new qs
1178
1232
 
1179
- const mergedSearch = removeEmptyAttributes({ ...merge__default['default'](currentQs, stateFilters),
1233
+ const mergedSearch = removeEmptyAttributes({ ...merge__default["default"](currentQs, stateFilters),
1180
1234
  term: searchTerm
1181
1235
  });
1182
- return queryString__default['default'].stringify(mergedSearch);
1236
+ return queryString.stringify(mergedSearch);
1183
1237
  },
1184
- hash: {
1185
- $path: 'state',
1186
- $formatting: state => getImmutableOrJS(state, ['routing', 'location', 'hash'], '').replace('#', '')
1187
- }
1238
+ hash: state => getImmutableOrJS(state, ['routing', 'location', 'hash'], '').replace('#', '')
1188
1239
  };
1189
1240
 
1190
- const mapStateToSearchUri = params => mapJson__default['default'](params, searchUriTemplate);
1241
+ const mapStateToSearchUri = params => mapJson__default["default"](params, searchUriTemplate);
1191
1242
 
1192
1243
  const mapEntriesToSearchResults = ({
1193
1244
  mappers,
@@ -1329,35 +1380,33 @@ const filterTemplate = {
1329
1380
  const filterExpressionMapper = {
1330
1381
  // Expression type: so we can identify how to build the query
1331
1382
  expressionType: ({
1332
- filter
1333
- }) => filter.contentTypeId ? FilterExpressionTypes.contentType : FilterExpressionTypes.field,
1383
+ contentTypeId
1384
+ }) => contentTypeId ? FilterExpressionTypes.contentType : FilterExpressionTypes.field,
1334
1385
  // Key: so we can target the query to a specific field
1335
- key: 'filter.fieldId',
1386
+ key: 'fieldId',
1336
1387
  // Value: so we can filter a specific field by an array of values
1337
1388
  // e.g. taxonomy key or contentTypeId array
1338
- value: 'selectedValue',
1339
- operator: 'filter.fieldOperator'
1389
+ values: 'selectedValues',
1390
+ fieldOperator: 'fieldOperator',
1391
+ logicOperator: 'logicOperator'
1340
1392
  };
1341
1393
 
1342
- const mapFilterToFilterExpression = filter => mapJson__default['default'](filter, filterExpressionMapper);
1394
+ const mapFilterToFilterExpression = filter => mapJson__default["default"](filter, filterExpressionMapper);
1343
1395
 
1344
1396
  const mapFiltersToFilterExpression = (filters, selectedFilters) => {
1345
1397
  if (!selectedFilters || Object.keys(selectedFilters).length === 0) return [];
1346
1398
  const filterExpressions = []; // Iterate through the keys in selectedFilters and locate
1347
1399
  // the items that are selected and queryable
1348
1400
 
1349
- Object.entries(selectedFilters).map(([fkey, selectedValue]) => {
1401
+ Object.entries(selectedFilters).map(([fkey, selectedValues]) => {
1350
1402
  const filter = filters[fkey];
1351
1403
 
1352
- if (selectedValue && filter) {
1353
- const selectedItems = filter.items && filter.items.filter(itm => itm.isSelected) || []; // Where we have a value for a selectedFilter
1404
+ if (selectedValues && filter) {
1405
+ // Where we have a value for a selectedFilter
1354
1406
  // and a filter is found for the current key
1355
1407
  // map the filter to a filterExpression object
1356
-
1357
- const expr = mapFilterToFilterExpression({
1358
- filter,
1359
- selectedItems,
1360
- selectedValue
1408
+ const expr = mapFilterToFilterExpression({ ...filter,
1409
+ selectedValues
1361
1410
  });
1362
1411
  filterExpressions.push(expr);
1363
1412
  }
@@ -1366,10 +1415,10 @@ const mapFiltersToFilterExpression = (filters, selectedFilters) => {
1366
1415
  };
1367
1416
 
1368
1417
  const queryParamsTemplate = {
1369
- assetTypes: root => getQueryParameter(root, 'assetTypes', []),
1370
- contentTypeIds: root => getQueryParameter(root, 'contentTypeIds', []),
1371
- customWhere: root => getQueryParameter(root, 'customWhere', []),
1372
- dynamicOrderBy: root => getQueryParameter(root, 'dynamicOrderBy', []),
1418
+ assetTypes: root => getQueryParameter$1(root, 'assetTypes', []),
1419
+ contentTypeIds: root => getQueryParameter$1(root, 'contentTypeIds', []),
1420
+ customWhere: root => getQueryParameter$1(root, 'customWhere', []),
1421
+ dynamicOrderBy: root => getQueryParameter$1(root, 'dynamicOrderBy', []),
1373
1422
  env: ({
1374
1423
  state,
1375
1424
  facet,
@@ -1384,8 +1433,8 @@ const queryParamsTemplate = {
1384
1433
  if (excludeIds) return Array.isArray(excludeIds) ? excludeIds : excludeIds.split(',').map(id => id.trim());
1385
1434
  return null;
1386
1435
  },
1387
- featuredResults: root => getQueryParameter(root, 'featuredResults', null),
1388
- fields: root => getQueryParameter(root, 'fields', []),
1436
+ featuredResults: root => getQueryParameter$1(root, 'featuredResults', null),
1437
+ fields: root => getQueryParameter$1(root, 'fields', []),
1389
1438
  filters: ({
1390
1439
  state,
1391
1440
  facet,
@@ -1397,28 +1446,28 @@ const queryParamsTemplate = {
1397
1446
  const filterParams = mapFiltersToFilterExpression(stateFilters, selectedFilters);
1398
1447
  return filterParams;
1399
1448
  },
1400
- includeInSearchFields: root => getQueryParameter(root, 'includeInSearch', []),
1449
+ includeInSearchFields: root => getQueryParameter$1(root, 'includeInSearch', []),
1401
1450
  internalPageIndex: ({
1402
1451
  action,
1403
1452
  state
1404
- }) => getPageIndex(state, '', action.context),
1405
- internalPaging: root => getQueryParameter(root, 'internalPaging', false),
1453
+ }) => getPageIndex$1(state, '', action.context),
1454
+ internalPaging: root => getQueryParameter$1(root, 'internalPaging', false),
1406
1455
  languages: ({
1407
1456
  action
1408
1457
  }) => action.defaultLang ? [action.defaultLang] : [],
1409
- linkDepth: root => getQueryParameter(root, 'linkDepth', 0),
1410
- loadMorePaging: root => getQueryParameter(root, 'loadMorePaging', false),
1411
- orderBy: root => getQueryParameter(root, 'orderBy', []),
1458
+ linkDepth: root => getQueryParameter$1(root, 'linkDepth', 0),
1459
+ loadMorePaging: root => getQueryParameter$1(root, 'loadMorePaging', false),
1460
+ orderBy: root => getQueryParameter$1(root, 'orderBy', []),
1412
1461
  pageIndex: root => {
1413
1462
  const {
1414
1463
  action,
1415
1464
  state
1416
1465
  } = root;
1417
- if (getQueryParameter(root, 'internalPaging', false)) return 0;
1466
+ if (getQueryParameter$1(root, 'internalPaging', false)) return 0;
1418
1467
  if (action.type === UPDATE_PAGE_INDEX) return action.params.pageIndex;
1419
- return !action.preload ? getPageIndex(state, '', action.context) : 0;
1468
+ return !action.preload ? getPageIndex$1(state, '', action.context) : 0;
1420
1469
  },
1421
- pageSize: root => getQueryParameter(root, 'pageSize'),
1470
+ pageSize: root => getQueryParameter$1(root, 'pageSize'),
1422
1471
  pagesLoaded: ({
1423
1472
  state,
1424
1473
  facet,
@@ -1436,9 +1485,9 @@ const queryParamsTemplate = {
1436
1485
  }) => {
1437
1486
  var _getFacet;
1438
1487
 
1439
- return (_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId;
1488
+ return ((_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId) || selectCurrentProject(state);
1440
1489
  },
1441
- searchTerm: root => root.context !== Context.minilist || getQueryParameter(root, 'useSearchTerm', false) ? getSearchTerm(root.state) : '',
1490
+ searchTerm: root => root.context !== Context$1.minilist || getQueryParameter$1(root, 'useSearchTerm', false) ? getSearchTerm$1(root.state) : '',
1442
1491
  selectedFilters: ({
1443
1492
  state,
1444
1493
  facet,
@@ -1448,14 +1497,14 @@ const queryParamsTemplate = {
1448
1497
  state
1449
1498
  }) => selectVersionStatus(state),
1450
1499
  weightedSearchFields: root => {
1451
- const wsf = getQueryParameter(root, 'weightedSearchFields', []);
1500
+ const wsf = getQueryParameter$1(root, 'weightedSearchFields', []);
1452
1501
  const deduped = wsf.filter((v, i, a) => a.findIndex(t => t.fieldId === v.fieldId) === i);
1453
1502
  return deduped; // return wsf;
1454
1503
  },
1455
- webpageTemplates: root => getQueryParameter(root, 'webpageTemplates', [])
1504
+ webpageTemplates: root => getQueryParameter$1(root, 'webpageTemplates', [])
1456
1505
  };
1457
1506
 
1458
- const mapStateToQueryParams = sourceJson => mapJson__default['default'](sourceJson, queryParamsTemplate);
1507
+ const mapStateToQueryParams = sourceJson => mapJson__default["default"](sourceJson, queryParamsTemplate);
1459
1508
 
1460
1509
  /**
1461
1510
  * 1, Generates all the parameters required to run the search query.
@@ -1498,10 +1547,10 @@ const runSearch = (action, state, queryParams) => {
1498
1547
  const facetIsLoaded = defaultLang ? false : getIsLoaded(state, context, facet);
1499
1548
  const stateParams = { ...getQueryParams(ogState, facet, context)
1500
1549
  };
1501
- stateParams.pageIndex = getPageIndex(ogState, facet, context);
1502
- stateParams.searchTerm = getSearchTerm(ogState);
1550
+ stateParams.pageIndex = getPageIndex$1(ogState, facet, context);
1551
+ stateParams.searchTerm = getSearchTerm$1(ogState);
1503
1552
 
1504
- if (context === Context.facets && ssr || // context === Context.minilist ||
1553
+ if (context === Context$1.facets && ssr || // context === Context.minilist ||
1505
1554
  preload || !facetIsLoaded || filterParamsChanged(action) || defaultLang) {
1506
1555
  willRun = true;
1507
1556
  } else {
@@ -1550,9 +1599,10 @@ const filterParamsChanged = (action, state) => {
1550
1599
  const debugExecuteSearch = (action, state) => {
1551
1600
  const [queryParams, runSearch] = generateQueryParams(action, state);
1552
1601
  console.log('runSearch', runSearch, 'action', action, 'filterParamsChanged', filterParamsChanged(action, state), 'getIsLoaded(state, context, facet)', getIsLoaded(state, action.context, action.facet));
1553
- const stateParams = getQueryParams(action.ogState || state, action.facet, action.context);
1554
- stateParams.pageIndex = getPageIndex(action.ogState || state, action.facet, action.context);
1555
- stateParams.searchTerm = getSearchTerm(action.ogState || state);
1602
+ const stateParams = { ...getQueryParams(action.ogState || state, action.facet, action.context),
1603
+ pageIndex: getPageIndex$1(action.ogState || state, action.facet, action.context),
1604
+ searchTerm: getSearchTerm$1(action.ogState || state)
1605
+ };
1556
1606
  console.log(stateParams, queryParams);
1557
1607
  console.log('getSelectedFilters', getSelectedFilters(action.ogState || state, action.facet, action.context, 'js'), 'params', action.params);
1558
1608
  };
@@ -1575,16 +1625,16 @@ const mapEntriesToFilterItems = entries => {
1575
1625
  const template = base;
1576
1626
 
1577
1627
  if (template) {
1578
- return mapJson__default['default'](entry, template);
1628
+ return mapJson__default["default"](entry, template);
1579
1629
  }
1580
1630
 
1581
1631
  return entry;
1582
1632
  });
1583
1633
  };
1584
1634
 
1585
- const searchSagas = [effects.takeEvery(CLEAR_FILTERS, clearFilters$1), effects.takeEvery(DO_SEARCH, doSearch), effects.takeEvery(SET_ROUTE_FILTERS, loadFilters), effects.takeEvery(SET_SEARCH_ENTRIES, preloadOtherFacets), effects.takeEvery(UPDATE_CURRENT_FACET, updateCurrentFacet$1), effects.takeEvery(UPDATE_CURRENT_TAB, updateCurrentTab$1), effects.takeEvery(UPDATE_PAGE_INDEX, updatePageIndex$1), effects.takeEvery(UPDATE_SEARCH_TERM, updateSearchTerm$1), effects.takeEvery(UPDATE_SORT_ORDER, updateSortOrder$1), effects.takeEvery(UPDATE_SELECTED_FILTERS, applySearchFilter)];
1635
+ const searchSagas = [effects.takeEvery(CLEAR_FILTERS, clearFilters), effects.takeEvery(DO_SEARCH, doSearch), effects.takeEvery(SET_ROUTE_FILTERS, loadFilters), effects.takeEvery(SET_SEARCH_ENTRIES, preloadOtherFacets), effects.takeEvery(UPDATE_CURRENT_FACET, updateCurrentFacet), effects.takeEvery(UPDATE_CURRENT_TAB, updateCurrentTab), effects.takeEvery(UPDATE_PAGE_INDEX, updatePageIndex), effects.takeEvery(UPDATE_SEARCH_TERM, updateSearchTerm), effects.takeEvery(UPDATE_SORT_ORDER, updateSortOrder), effects.takeEvery(UPDATE_SELECTED_FILTERS, applySearchFilter)];
1586
1636
 
1587
- const toJS$1 = obj => obj && 'toJS' in obj && typeof obj.toJS === 'function' ? obj.toJS() : obj;
1637
+ const toJS = obj => obj && 'toJS' in obj && typeof obj.toJS === 'function' ? obj.toJS() : obj;
1588
1638
 
1589
1639
  function* setRouteFilters(action) {
1590
1640
  const {
@@ -1594,8 +1644,8 @@ function* setRouteFilters(action) {
1594
1644
  defaultLang,
1595
1645
  debug
1596
1646
  } = action;
1597
- const context = listingType ? Context.listings : Context.facets;
1598
- const state = toJS$1(yield effects.select());
1647
+ const context = listingType ? Context$1.listings : Context$1.facets;
1648
+ const state = toJS(yield effects.select());
1599
1649
  const ssr = getIsSsr(state); // Get current facet from params or state
1600
1650
 
1601
1651
  let currentFacet = params && params.facet || listingType; // Pick the default facet from initialState
@@ -1617,15 +1667,21 @@ function* setRouteFilters(action) {
1617
1667
  ssr,
1618
1668
  debug
1619
1669
  };
1620
- yield effects.put(nextAction); // Using call instead of triggering from the put
1670
+ yield effects.put(nextAction); // keep track of this state ref for comparing changes to params later
1671
+
1672
+ const ogState = {
1673
+ search: state.search
1674
+ }; // Using call instead of triggering from the put
1621
1675
  // to allow this exported saga to continue during SSR
1622
1676
 
1623
1677
  yield effects.call(ensureSearch, { ...nextAction,
1624
- ogState: state
1678
+ ogState
1625
1679
  });
1626
1680
  }
1627
1681
  function* doSearch(action) {
1628
- const state = toJS$1(yield effects.select());
1682
+ var _action$params;
1683
+
1684
+ const state = toJS(yield effects.select());
1629
1685
 
1630
1686
  if (action.config) {
1631
1687
  // If the action contains a config object, we can add this to the
@@ -1637,11 +1693,16 @@ function* doSearch(action) {
1637
1693
 
1638
1694
  const nextAction = { ...action,
1639
1695
  type: SET_SEARCH_FILTERS,
1640
- ssr: getIsSsr(state)
1696
+ ssr: getIsSsr(state),
1697
+ facet: action.facet || ((_action$params = action.params) === null || _action$params === void 0 ? void 0 : _action$params.facet)
1698
+ };
1699
+ yield effects.put(nextAction); // keep track of this state ref for comparing changes to params later
1700
+
1701
+ const ogState = {
1702
+ search: state.search
1641
1703
  };
1642
- yield effects.put(nextAction);
1643
1704
  yield effects.call(ensureSearch, { ...nextAction,
1644
- ogState: state
1705
+ ogState
1645
1706
  });
1646
1707
  }
1647
1708
 
@@ -1726,7 +1787,7 @@ function* loadFilter(action) {
1726
1787
  createStateFrom.error = error;
1727
1788
  }
1728
1789
 
1729
- const nextAction = mapJson__default['default'](createStateFrom, filterTemplate);
1790
+ const nextAction = mapJson__default["default"](createStateFrom, filterTemplate);
1730
1791
  yield effects.put(nextAction);
1731
1792
  }
1732
1793
 
@@ -1740,7 +1801,9 @@ function* ensureSearch(action) {
1740
1801
  try {
1741
1802
  const state = yield effects.select();
1742
1803
  const nextAction = { ...action,
1743
- ogState: action.ogState || state
1804
+ ogState: action.ogState || {
1805
+ search: state.search
1806
+ }
1744
1807
  };
1745
1808
  const [queryParams, runSearch] = generateQueryParams(nextAction, state);
1746
1809
  if (debug && (debug === true || debug.executeSearch)) debugExecuteSearch(nextAction, state);
@@ -1760,7 +1823,7 @@ function* ensureSearch(action) {
1760
1823
  }
1761
1824
  } catch (error) {
1762
1825
  // eslint-disable-next-line import/namespace
1763
- log.error(...['Error running search saga:', error, error.stack]);
1826
+ log__namespace.error(...['Error running search saga:', error, error.stack]);
1764
1827
  }
1765
1828
  }
1766
1829
 
@@ -1803,15 +1866,15 @@ function* executeSearch(action) {
1803
1866
  action,
1804
1867
  featuredResult,
1805
1868
  pageIndex: queryParams.internalPaging && queryParams.internalPageIndex || queryParams.pageIndex,
1806
- prevResults: getResults(state, facet, action.context, 'js'),
1869
+ prevResults: getResults$1(state, facet, action.context, 'js'),
1807
1870
  result,
1808
1871
  state
1809
1872
  };
1810
- const nextAction = mapJson__default['default'](createStateFrom, facetTemplate);
1873
+ const nextAction = mapJson__default["default"](createStateFrom, facetTemplate);
1811
1874
  yield effects.put(nextAction);
1812
1875
  } catch (error) {
1813
1876
  // eslint-disable-next-line import/namespace
1814
- log.error(...['Error running search saga:', error, error.stack]);
1877
+ log__namespace.error(...['Error running search saga:', error, error.stack]);
1815
1878
  }
1816
1879
  }
1817
1880
 
@@ -1825,7 +1888,7 @@ function* preloadOtherFacets(action) {
1825
1888
  const state = yield effects.select();
1826
1889
  const currentFacet = getCurrentFacet(state);
1827
1890
 
1828
- if (!preload && facet === currentFacet && context !== Context.listings) {
1891
+ if (!preload && facet === currentFacet && context !== Context$1.listings) {
1829
1892
  const allFacets = getFacets(state, 'js');
1830
1893
  const otherFacets = Object.keys(allFacets).filter(f => f !== currentFacet);
1831
1894
  yield effects.all(otherFacets.map((preloadFacet = '') => {
@@ -1845,7 +1908,7 @@ function* preloadOtherFacets(action) {
1845
1908
  }
1846
1909
  }
1847
1910
 
1848
- function* updateCurrentTab$1(action) {
1911
+ function* updateCurrentTab(action) {
1849
1912
  const {
1850
1913
  id,
1851
1914
  mappers
@@ -1864,10 +1927,10 @@ function* updateCurrentTab$1(action) {
1864
1927
 
1865
1928
 
1866
1929
  if (!nextFacet) nextFacet = Object.entries(facets).filter(([, f]) => f.tabId === id)[0][0];
1867
- yield effects.put(withMappers(updateCurrentFacet(nextFacet), mappers));
1930
+ yield effects.put(withMappers(updateCurrentFacet$1(nextFacet), mappers));
1868
1931
  }
1869
1932
 
1870
- function* clearFilters$1(action) {
1933
+ function* clearFilters(action) {
1871
1934
  const {
1872
1935
  mappers
1873
1936
  } = action;
@@ -1875,12 +1938,12 @@ function* clearFilters$1(action) {
1875
1938
  yield effects.put(navigate(uri));
1876
1939
  }
1877
1940
 
1878
- function* updateCurrentFacet$1(action) {
1941
+ function* updateCurrentFacet(action) {
1879
1942
  const {
1880
1943
  facet,
1881
1944
  mappers
1882
1945
  } = action;
1883
- const pageIndex = yield effects.select(getPageIndex, facet);
1946
+ const pageIndex = yield effects.select(getPageIndex$1, facet);
1884
1947
  const uri = yield buildUri({
1885
1948
  facet,
1886
1949
  pageIndex
@@ -1888,7 +1951,7 @@ function* updateCurrentFacet$1(action) {
1888
1951
  yield effects.put(navigate(uri));
1889
1952
  }
1890
1953
 
1891
- function* updateSearchTerm$1(action) {
1954
+ function* updateSearchTerm(action) {
1892
1955
  const {
1893
1956
  term,
1894
1957
  mappers
@@ -1899,7 +1962,7 @@ function* updateSearchTerm$1(action) {
1899
1962
  yield effects.put(navigate(uri));
1900
1963
  }
1901
1964
 
1902
- function* updateSortOrder$1(action) {
1965
+ function* updateSortOrder(action) {
1903
1966
  const {
1904
1967
  orderBy,
1905
1968
  facet,
@@ -1912,7 +1975,7 @@ function* updateSortOrder$1(action) {
1912
1975
  yield effects.put(navigate(uri));
1913
1976
  }
1914
1977
 
1915
- function* updatePageIndex$1(action) {
1978
+ function* updatePageIndex(action) {
1916
1979
  const {
1917
1980
  pageIndex,
1918
1981
  mappers
@@ -1938,7 +2001,7 @@ function* buildUri({
1938
2001
  term
1939
2002
  }, mappers) {
1940
2003
  const state = yield effects.select();
1941
- const mapUri = mappers && mappers.navigate || mapStateToSearchUri;
2004
+ const mapUri = (mappers === null || mappers === void 0 ? void 0 : mappers.navigate) || mapStateToSearchUri;
1942
2005
  const uri = mapUri({
1943
2006
  state,
1944
2007
  facet,
@@ -1950,13 +2013,97 @@ function* buildUri({
1950
2013
  return `${uri.path}${uri.search && `?${uri.search}` || ''}${uri.hash && `#${uri.hash}` || ''}`;
1951
2014
  }
1952
2015
 
2016
+ var defaultMappers = {
2017
+ results: entries => entries,
2018
+ navigate: mapStateToSearchUri
2019
+ };
2020
+
2021
+ const {
2022
+ getCurrent,
2023
+ getFeaturedResults,
2024
+ getIsLoading,
2025
+ getListing,
2026
+ getPageIndex,
2027
+ getPageIsLoading,
2028
+ getPaging,
2029
+ getQueryParameter,
2030
+ getRenderableFilters,
2031
+ getResults,
2032
+ getSearchTerm
2033
+ } = selectListing;
2034
+
2035
+ const makeSelectListingProps = () => reselect.createSelector(state => state, (_, mappers) => mappers, (state, mappers) => ({
2036
+ currentListing: getCurrent(state),
2037
+ currentPageIndex: getPageIndex(state),
2038
+ listing: getListing(state),
2039
+ featured: getFeaturedResults(state),
2040
+ filters: getRenderableFilters(state),
2041
+ isLoading: getIsLoading(state),
2042
+ pageIsLoading: getPageIsLoading(state),
2043
+ paging: getPaging(state),
2044
+ results: getResults(state),
2045
+ resultsInfo: mappers && typeof mappers.resultsInfo === 'function' && mappers.resultsInfo(state),
2046
+ searchTerm: getSearchTerm(state),
2047
+ sortOrder: getQueryParameter({
2048
+ state
2049
+ }, 'dynamicOrderBy', [])
2050
+ }));
2051
+
2052
+ const useListing = ({
2053
+ mappers
2054
+ } = {
2055
+ id: ''
2056
+ }) => {
2057
+ const dispatch = reactRedux.useDispatch();
2058
+ const m = mappers || defaultMappers;
2059
+ const selectListingProps = React.useMemo(makeSelectListingProps, [m]);
2060
+ const dispatchProps = {
2061
+ clearFilters: () => dispatch(withMappers(clearFilters$1(), m)),
2062
+ updateCurrentFacet: facet => dispatch(withMappers(updateCurrentFacet$1(facet), m)),
2063
+ updatePageIndex: pageIndex => dispatch(withMappers(updatePageIndex$1(pageIndex), m)),
2064
+ updateSearchTerm: term => dispatch(withMappers(updateSearchTerm$1(term), m)),
2065
+ updateSelectedFilters: (filter, key, isUnknownItem = false) => dispatch(withMappers(updateSelectedFilters(filter, key, isUnknownItem), m)),
2066
+ updateSortOrder: orderBy => dispatch(withMappers(updateSortOrder$1(orderBy), m))
2067
+ };
2068
+ const {
2069
+ currentListing,
2070
+ currentPageIndex,
2071
+ featured,
2072
+ filters,
2073
+ isLoading,
2074
+ listing,
2075
+ paging,
2076
+ pageIsLoading,
2077
+ results,
2078
+ resultsInfo,
2079
+ searchTerm,
2080
+ sortOrder
2081
+ } = reactRedux.useSelector(state => selectListingProps(state, m));
2082
+ return {
2083
+ currentListing,
2084
+ currentPageIndex,
2085
+ featured,
2086
+ filters,
2087
+ isLoading,
2088
+ listing,
2089
+ pageIsLoading,
2090
+ paging,
2091
+ results,
2092
+ resultsInfo,
2093
+ searchTerm,
2094
+ sortOrder,
2095
+ title: listing.title,
2096
+ ...dispatchProps
2097
+ };
2098
+ };
2099
+
1953
2100
  const makeSelectMinilistProps = () => reselect.createSelector(state => state, (_, id) => id, (state, id) => ({
1954
- facet: getFacet(state, id, Context.minilist, 'js'),
1955
- filters: getFilters(state, id, Context.minilist, 'js'),
1956
- isLoading: getIsLoading(state, Context.minilist, id),
1957
- pagingInfo: getPaging(state, id, Context.minilist, 'js'),
1958
- results: getResults(state, id, Context.minilist, 'js'),
1959
- searchTerm: getSearchTerm(state)
2101
+ facet: getFacet(state, id, Context$1.minilist, 'js'),
2102
+ filters: getFilters(state, id, Context$1.minilist, 'js'),
2103
+ isLoading: getIsLoading$1(state, Context$1.minilist, id),
2104
+ pagingInfo: getPaging$1(state, id, Context$1.minilist, 'js'),
2105
+ results: getResults$1(state, id, Context$1.minilist, 'js'),
2106
+ searchTerm: getSearchTerm$1(state)
1960
2107
  }));
1961
2108
 
1962
2109
  const useMinilist = ({
@@ -1993,7 +2140,7 @@ const useMinilist = ({
1993
2140
  if (id && (mapper || mappers && mappers.results)) {
1994
2141
  dispatch(triggerSearch({
1995
2142
  config,
1996
- context: Context.minilist,
2143
+ context: Context$1.minilist,
1997
2144
  defaultLang,
1998
2145
  facet: id,
1999
2146
  mapper,
@@ -2007,7 +2154,7 @@ const useMinilist = ({
2007
2154
  return {
2008
2155
  filters,
2009
2156
  isLoading,
2010
- pagingInfo,
2157
+ paging: pagingInfo,
2011
2158
  results,
2012
2159
  searchTerm,
2013
2160
  title: facet.title
@@ -2119,7 +2266,7 @@ const generateSearchFacets = (context, config) => {
2119
2266
 
2120
2267
  if (Object.keys(thisConfig).length > 0) {
2121
2268
  Object.entries(thisConfig).map(([facetName, facet]) => {
2122
- const newFacet = merge__default['default'](searchFacet, facet);
2269
+ const newFacet = merge__default["default"](searchFacet, facet);
2123
2270
  if (!('isDisabled' in facet) || facet.isDisabled !== true) facets[facetName] = newFacet;
2124
2271
  });
2125
2272
  }
@@ -2191,7 +2338,10 @@ const generateFiltersState = ({
2191
2338
  // the search results during SSR without needing to fetch the filters first
2192
2339
 
2193
2340
 
2194
- Object.entries(filterParams).map(([paramName = '', paramValue]) => typeof paramValue === 'string' && paramValue.split(',').map(pVal => filters = addFilterItem(filters, paramName, pVal)));
2341
+ Object.entries(filterParams).map(([paramName = '', paramValue]) => {
2342
+ if (typeof paramValue === 'string') return paramValue.split(',').map(pVal => filters = addFilterItem(filters, paramName, pVal));
2343
+ if (typeof paramValue === 'boolean') filters = addFilterItem(filters, paramName, paramValue);
2344
+ });
2195
2345
  return Object.fromEntries(filters);
2196
2346
  };
2197
2347
 
@@ -2208,9 +2358,9 @@ var reducers = (config => {
2208
2358
  // Add facets from SearchConfig to initialState
2209
2359
  const initState = { ...initialState,
2210
2360
  tabs: config.tabs,
2211
- facets: generateSearchFacets(Context.facets, config),
2212
- listings: generateSearchFacets(Context.listings, config),
2213
- minilist: generateSearchFacets(Context.minilist, config)
2361
+ facets: generateSearchFacets(Context$1.facets, config),
2362
+ listings: generateSearchFacets(Context$1.listings, config),
2363
+ minilist: generateSearchFacets(Context$1.minilist, config)
2214
2364
  };
2215
2365
  return immer.produce((state = initState, action) => {
2216
2366
  const context = state.context;
@@ -2220,7 +2370,7 @@ var reducers = (config => {
2220
2370
  case APPLY_CONFIG:
2221
2371
  {
2222
2372
  state = addConfigToState(state, action);
2223
- return;
2373
+ return state;
2224
2374
  }
2225
2375
 
2226
2376
  case CLEAR_FILTERS:
@@ -2294,7 +2444,7 @@ var reducers = (config => {
2294
2444
  return;
2295
2445
  }
2296
2446
 
2297
- state[action.context][facetKey].filters[filterKey] = merge__default['default'](filter, nextFilter, {
2447
+ state[action.context][facetKey].filters[filterKey] = merge__default["default"](filter, nextFilter, {
2298
2448
  arrayMerge: (source, inbound) => inbound
2299
2449
  });
2300
2450
  return;
@@ -2329,7 +2479,7 @@ var reducers = (config => {
2329
2479
  context,
2330
2480
  isCurrentFacet
2331
2481
  }, state);
2332
- resetCurrentFacet = state.config.isLoaded === true && !equals__default['default'](nextFilters, stateFacet.filters);
2482
+ resetCurrentFacet = state.config.isLoaded === true && !equals__default["default"](nextFilters, stateFacet.filters);
2333
2483
  stateFacet = resetCurrentFacet ? resetFacet(stateFacet) : stateFacet;
2334
2484
  stateFacet.filters = nextFilters;
2335
2485
  stateFacet.queryParams.dynamicOrderBy = toArray(orderBy) || [];
@@ -2337,7 +2487,7 @@ var reducers = (config => {
2337
2487
  }));
2338
2488
  state.context = context;
2339
2489
  state[context] = nextFacets;
2340
- state[action.context === Context.facets ? 'currentFacet' : 'currentListing'] = facet;
2490
+ state[action.context === Context$1.facets ? 'currentFacet' : 'currentListing'] = facet;
2341
2491
  state.term = term;
2342
2492
  state.tabs[tabId].currentFacet = facet;
2343
2493
  state[context][facet].pagingInfo.pageIndex = Number(pageIndex) - 1 || (state[context][facet].queryParams.loadMorePaging ? state[context][facet].pagingInfo.pageIndex || 0 : 0);
@@ -2351,7 +2501,7 @@ var reducers = (config => {
2351
2501
  {
2352
2502
  const thisContext = action.context || context;
2353
2503
  const currentFacet = state[thisContext][action.facet];
2354
- state[thisContext][action.facet] = merge__default['default'](currentFacet, action.nextFacet, {
2504
+ state[thisContext][action.facet] = merge__default["default"](currentFacet, action.nextFacet, {
2355
2505
  arrayMerge: (source, inbound) => inbound
2356
2506
  });
2357
2507
  return;
@@ -2370,9 +2520,9 @@ var reducers = (config => {
2370
2520
  isCurrentFacet: true
2371
2521
  }, state);
2372
2522
  const term = action === null || action === void 0 ? void 0 : (_action$params = action.params) === null || _action$params === void 0 ? void 0 : _action$params.term;
2373
- const useSearchTerm = state[action.context || Context.minilist][action.facet].queryParams.useSearchTerm || false;
2374
- state[action.context || Context.minilist][action.facet].filters = filters;
2375
- state[action.context || Context.minilist][action.facet].queryParams.excludeIds = action.excludeIds;
2523
+ const useSearchTerm = state[action.context || Context$1.minilist][action.facet].queryParams.useSearchTerm || false;
2524
+ state[action.context || Context$1.minilist][action.facet].filters = filters;
2525
+ state[action.context || Context$1.minilist][action.facet].queryParams.excludeIds = action.excludeIds;
2376
2526
  state.term = useSearchTerm ? term : state.term;
2377
2527
  state.config.ssr = typeof window === 'undefined';
2378
2528
  return;
@@ -2404,13 +2554,22 @@ var reducers = (config => {
2404
2554
  {
2405
2555
  const {
2406
2556
  filter,
2407
- key
2557
+ key,
2558
+ isUnknownItem
2408
2559
  } = action;
2409
2560
  const isSingleSelect = state[context][current].filters[filter].isSingleSelect || false;
2410
2561
  const isGrouped = state[context][current].filters[filter].isGrouped || false;
2411
2562
  const currentItems = state[context][current].filters[filter].items;
2412
2563
  if (isGrouped) state[context] = resetFacets(state, context);
2413
2564
  state[context][current] = resetFacet(state[context][current]);
2565
+
2566
+ if (isUnknownItem && (currentItems === null || currentItems === void 0 ? void 0 : currentItems.findIndex(item => (item === null || item === void 0 ? void 0 : item.key) === key)) === -1) {
2567
+ currentItems === null || currentItems === void 0 ? void 0 : currentItems.push({
2568
+ key,
2569
+ isSelected: false
2570
+ });
2571
+ }
2572
+
2414
2573
  state[context][current].filters[filter].items = currentItems === null || currentItems === void 0 ? void 0 : currentItems.map(item => {
2415
2574
  if (item.key === key) {
2416
2575
  return { ...item,
@@ -2444,14 +2603,13 @@ var reducers = (config => {
2444
2603
  }, initState);
2445
2604
  });
2446
2605
 
2447
- // eslint-disable-next-line @typescript-eslint/naming-convention
2448
- const Context$1 = {
2606
+ const Context = {
2449
2607
  facets: 'facets',
2450
2608
  listings: 'listings',
2451
2609
  minilist: 'minilist'
2452
2610
  };
2453
2611
 
2454
- exports.Context = Context$1;
2612
+ exports.Context = Context;
2455
2613
  exports.actions = actions;
2456
2614
  exports.doSearch = doSearch;
2457
2615
  exports.queries = queries;
@@ -2461,6 +2619,7 @@ exports.schema = schema;
2461
2619
  exports.selectors = selectors;
2462
2620
  exports.setRouteFilters = setRouteFilters;
2463
2621
  exports.types = types;
2622
+ exports.useListing = useListing;
2464
2623
  exports.useMinilist = useMinilist;
2465
2624
  exports.withListing = withListing;
2466
2625
  exports.withSearch = withSearch;