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

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 (138) hide show
  1. package/README.md +4 -4
  2. package/cjs/{App-581b6653.js → App-b681e8eb.js} +139 -124
  3. package/cjs/App-b681e8eb.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 +228 -164
  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 +48 -45
  33. package/cjs/util.js.map +1 -1
  34. package/cjs/{version-f061e409.js → version-7c4ce67e.js} +58 -52
  35. package/cjs/version-7c4ce67e.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-c9e818ab.js} +120 -124
  39. package/esm/App-c9e818ab.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 +198 -152
  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 +17 -10
  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-e6a545e1.js} +38 -31
  73. package/esm/version-e6a545e1.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/models/Queries.d.ts +8 -5
  85. package/models/search/models/Search.d.ts +9 -8
  86. package/models/search/models/SearchActions.d.ts +1 -0
  87. package/models/search/models/SearchState.d.ts +3 -0
  88. package/models/search/models/index.d.ts +3 -2
  89. package/models/search/redux/actions.d.ts +2 -1
  90. package/models/search/redux/reducers.d.ts +226 -314
  91. package/models/search/redux/sagas.d.ts +2 -2
  92. package/models/search/redux/selectors.d.ts +5 -10
  93. package/models/search/search/expressions.d.ts +2 -6
  94. package/models/search/transformations/filter-to-filterexpression.mapper.d.ts +6 -0
  95. package/models/search/transformations/filters-to-filterexpressions.mapper.d.ts +3 -0
  96. package/models/server/util/headers.d.ts +3 -2
  97. package/models/testImmer/redux/reducer.d.ts +1 -7
  98. package/models/user/components/Login.d.ts +1 -2
  99. package/models/user/components/LoginForm.d.ts +1 -2
  100. package/models/user/hocs/withLogin.d.ts +2 -2
  101. package/models/user/hooks/useChangePassword.d.ts +5 -5
  102. package/models/user/hooks/useForgotPassword.d.ts +6 -6
  103. package/models/user/hooks/useLogin.d.ts +9 -45
  104. package/models/user/hooks/useRegistration.d.ts +4 -4
  105. package/models/user/redux/reducers.d.ts +5 -32
  106. package/models/user/redux/sagas/login.d.ts +11 -8
  107. package/models/user/redux/selectors.d.ts +33 -71
  108. package/models/user/util/LoginHelper.class.d.ts +4 -3
  109. package/models/util/json-mapper.d.ts +9 -3
  110. package/models/util/merge.d.ts +1 -0
  111. package/package-lock.json +2006 -4796
  112. package/package.json +47 -48
  113. package/cjs/App-581b6653.js.map +0 -1
  114. package/cjs/RouteLoader-282c03ab.js.map +0 -1
  115. package/cjs/ToJs-87edc45d.js +0 -230
  116. package/cjs/ToJs-87edc45d.js.map +0 -1
  117. package/cjs/actions-12871aca.js.map +0 -1
  118. package/cjs/fromJSLeaveImmer-9b550c8e.js +0 -40
  119. package/cjs/fromJSLeaveImmer-9b550c8e.js.map +0 -1
  120. package/cjs/login-81d7f9ef.js.map +0 -1
  121. package/cjs/reducers-fde41d6b.js.map +0 -1
  122. package/cjs/selectors-ed26ed97.js.map +0 -1
  123. package/cjs/version-f061e409.js.map +0 -1
  124. package/esm/App-122f28a3.js.map +0 -1
  125. package/esm/RouteLoader-c2faac87.js.map +0 -1
  126. package/esm/ToJs-52fee252.js +0 -199
  127. package/esm/ToJs-52fee252.js.map +0 -1
  128. package/esm/actions-3cc39599.js.map +0 -1
  129. package/esm/fromJSLeaveImmer-e44d1a91.js +0 -38
  130. package/esm/fromJSLeaveImmer-e44d1a91.js.map +0 -1
  131. package/esm/login-92db44d1.js.map +0 -1
  132. package/esm/reducers-d6c0edb1.js.map +0 -1
  133. package/esm/selectors-82e71d8e.js.map +0 -1
  134. package/esm/version-59c8f9be.js +0 -15
  135. package/esm/version-cb9cd09d.js.map +0 -1
  136. package/models/search/transformations/filters-to-filterexpression.d.ts +0 -1
  137. package/models/search/transformations/filters-to-filterexpression.mapper.d.ts +0 -2
  138. 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 = (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
271
  const getListing = (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) => {
275
+ const getFilters = (state, facet, context = Context$1.facets, returnType) => {
257
276
  return getImmutableOrJS(state, ['search', context, facet || getCurrent(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 = (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,7 +285,7 @@ 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 => {
@@ -277,56 +296,56 @@ const getSelectedFilters = (state, facet = '', context = Context.facets, returnT
277
296
  const fromJS = makeFromJS(returnType);
278
297
  return fromJS(selectedFilters);
279
298
  };
280
- const getResults = (state, current = '', context = Context.facets, returnType) => {
299
+ const getResults = (state, current = '', context = Context$1.facets, returnType) => {
281
300
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'results'], [], returnType);
282
301
  };
283
- const getIsInternalPaging = (state, current, context = Context.facets) => {
302
+ const getIsInternalPaging = (state, current, context = Context$1.facets) => {
284
303
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams', 'internalPaging'], false);
285
304
  };
286
- const getIsLoaded = (state, context = Context.facets, facet) => {
305
+ const getIsLoaded = (state, context = Context$1.facets, facet) => {
287
306
  return !!getImmutableOrJS(state, ['search', context, facet || getCurrent(state, context), 'queryDuration'], 0);
288
307
  };
289
- const getIsLoading = (state, context = Context.facets, facet) => {
308
+ const getIsLoading = (state, context = Context$1.facets, facet) => {
290
309
  return getImmutableOrJS(state, ['search', context, facet || getCurrent(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) => {
312
+ const getFeaturedResults = (state, current = '', context = Context$1.facets) => {
294
313
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'featuredResults'], []);
295
314
  };
296
- const getPaging = (state, current = '', context = Context.facets, returnType) => {
315
+ const getPaging = (state, current = '', context = Context$1.facets, returnType) => {
297
316
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo'], {}, returnType);
298
317
  };
299
- const getPageIndex = (state, current = '', context = Context.facets) => {
318
+ const getPageIndex = (state, current = '', context = Context$1.facets) => {
300
319
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pageIndex']);
301
320
  };
302
- const getPrevPageIndex = (state, current = '', context = Context.facets) => {
321
+ const getPrevPageIndex = (state, current = '', context = Context$1.facets) => {
303
322
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'prevPageIndex']);
304
323
  };
305
- const getPageIsLoading = (state, current = '', context = Context.facets) => {
324
+ const getPageIsLoading = (state, current = '', context = Context$1.facets) => {
306
325
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'isLoading']);
307
326
  };
308
- const getPagesLoaded = (state, current = '', context = Context.facets) => {
327
+ const getPagesLoaded = (state, current = '', context = Context$1.facets) => {
309
328
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'pagesLoaded'], [], 'js');
310
329
  };
311
- const getTotalCount = (state, current = '', context = Context.facets) => {
330
+ const getTotalCount = (state, current = '', context = Context$1.facets) => {
312
331
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'pagingInfo', 'totalCount']);
313
332
  };
314
333
  const getSearchTerm = state => getImmutableOrJS(state, ['search', 'term']);
315
334
  const getSearchTabs = (state, returnType) => getImmutableOrJS(state, ['search', 'tabs'], [], returnType);
316
- const getQueryParams = (state, current = '', context = Context.facets) => {
335
+ const getQueryParams = (state, current = '', context = Context$1.facets) => {
317
336
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'queryParams'], {}, 'js');
318
337
  };
319
338
  const getQueryParameter = ({
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) => {
345
+ const getCustomApi = (state, current, context = Context$1.facets, returnType) => {
327
346
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'customApi'], null, returnType);
328
347
  };
329
- const getCustomEnv = (state, current, context = Context.facets) => {
348
+ const getCustomEnv = (state, current, context = Context$1.facets) => {
330
349
  return getImmutableOrJS(state, ['search', context, current || getCurrent(state, context), 'env']);
331
350
  };
332
351
  const getTabsAndFacets = (state, returnType) => {
@@ -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
  });
@@ -382,14 +401,14 @@ const selectFacets = {
382
401
  getPageIsLoading,
383
402
  getPagesLoaded,
384
403
  getPaging,
385
- getQueryParams: (state, facet) => getQueryParams(state, facet, Context.facets),
404
+ getQueryParams: (state, facet) => getQueryParams(state, facet, Context$1.facets),
386
405
  getQueryParameter: ({
387
406
  state,
388
407
  facet
389
408
  }, key, ifnull) => getQueryParameter({
390
409
  state,
391
410
  facet,
392
- context: Context.facets
411
+ context: Context$1.facets
393
412
  }, key, ifnull),
394
413
  getRenderableFilters,
395
414
  getResults,
@@ -404,32 +423,33 @@ const selectFacets = {
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),
426
+ getFeaturedResults: (state, listing = '') => getFeaturedResults(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),
410
429
  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),
430
+ getIsLoaded: state => getIsLoaded(state, Context$1.listings),
431
+ getIsLoading: state => getIsLoading(state, Context$1.listings),
432
+ getPageIndex: (state, listing = '') => getPageIndex(state, listing, Context$1.listings),
433
+ getPaging: (state, listing = '') => getPaging(state, listing, Context$1.listings),
434
+ getPageIsLoading: (state, listing = '') => getPageIsLoading(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
440
  }, key, ifnull) => getQueryParameter({
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),
445
+ getRenderableFilters: (state, listing = '') => getRenderableFilters(state, listing, Context$1.listings),
446
+ getResults: (state, listing = '') => getResults(state, listing, Context$1.listings),
428
447
  getSearchTerm,
429
- getTotalCount: (state, listing = '') => getTotalCount(state, listing, Context.listings),
430
- getSelectedFilters: (state, listing = '') => getSelectedFilters(state, listing, Context.listings)
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({
@@ -472,6 +492,7 @@ 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
 
@@ -480,7 +501,7 @@ var selectors = /*#__PURE__*/Object.freeze({
480
501
  /* eslint-disable @typescript-eslint/naming-convention */
481
502
  const withSearch = mappers => SearchComponent => {
482
503
  const Wrapper = props => {
483
- return /*#__PURE__*/React__default['default'].createElement(SearchComponent, props);
504
+ return /*#__PURE__*/React__default["default"].createElement(SearchComponent, props);
484
505
  };
485
506
 
486
507
  Wrapper.displayName = `withSearch(${SearchComponent.displayName || SearchComponent.name})`;
@@ -512,23 +533,23 @@ const withSearch = mappers => SearchComponent => {
512
533
  };
513
534
 
514
535
  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)
536
+ clearFilters: () => withMappers(clearFilters$1(), mappers),
537
+ updateCurrentFacet: facet => withMappers(updateCurrentFacet$1(facet), mappers),
538
+ updateCurrentTab: id => withMappers(updateCurrentTab$1(id), mappers),
539
+ updatePageIndex: pageIndex => withMappers(updatePageIndex$1(pageIndex), mappers),
540
+ updateSearchTerm: term => withMappers(updateSearchTerm$1(term), mappers),
541
+ updateSelectedFilters: (filter, key, isUnknownItem = false) => withMappers(updateSelectedFilters(filter, key, isUnknownItem), mappers),
542
+ updateSortOrder: orderBy => withMappers(updateSortOrder$1(orderBy), mappers)
522
543
  };
523
544
  const connector = reactRedux.connect(mapStateToProps, mapDispatchToProps);
524
- return connector(toJS(Wrapper));
545
+ return connector(toJS$1(Wrapper));
525
546
  };
526
547
 
527
548
  /* eslint-disable @typescript-eslint/naming-convention */
528
549
 
529
550
  const withListing = mappers => ListingComponent => {
530
551
  const Wrapper = props => {
531
- return /*#__PURE__*/React__default['default'].createElement(ListingComponent, props);
552
+ return /*#__PURE__*/React__default["default"].createElement(ListingComponent, props);
532
553
  };
533
554
 
534
555
  Wrapper.displayName = `withListing(${ListingComponent.displayName || ListingComponent.name})`;
@@ -564,14 +585,14 @@ const withListing = mappers => ListingComponent => {
564
585
  };
565
586
 
566
587
  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)
588
+ clearFilters: () => withMappers(clearFilters$1(), mappers),
589
+ updateCurrentFacet: facet => withMappers(updateCurrentFacet$1(facet), mappers),
590
+ updatePageIndex: pageIndex => withMappers(updatePageIndex$1(pageIndex), mappers),
591
+ updateSearchTerm: term => withMappers(updateSearchTerm$1(term), mappers),
592
+ updateSelectedFilters: (filter, key, isUnknownItem = false) => withMappers(updateSelectedFilters(filter, key, isUnknownItem), mappers),
593
+ updateSortOrder: orderBy => withMappers(updateSortOrder$1(orderBy), mappers)
573
594
  };
574
- return reactRedux.connect(mapStateToProps, mapDispatchToProps)(toJS(Wrapper));
595
+ return reactRedux.connect(mapStateToProps, mapDispatchToProps)(toJS$1(Wrapper));
575
596
  };
576
597
 
577
598
  const getClientConfig = (project, env) => {
@@ -780,7 +801,7 @@ const extractQuotedPhrases = searchTerm => {
780
801
  return (searchTerm.match(pattern) || []).map(match => match.replace(/"/g, ''));
781
802
  };
782
803
  const buildUrl = (route, params) => {
783
- const qs = queryString__default['default'].stringify(params);
804
+ const qs = queryString.stringify(params);
784
805
  const path = qs ? `${route}?${qs}` : route;
785
806
  return path;
786
807
  };
@@ -861,7 +882,7 @@ const fieldExpression = (field, value, operator = 'equalTo', weight) => {
861
882
  // to generate expressions that are combined with an 'or' operator
862
883
  return [contensisCoreApi.Op.or(...field.map(fieldId => fieldExpression(fieldId, value, operator, weight)).flat())];
863
884
  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)];
885
+ if (Array.isArray(value)) return equalToOrIn(field, value, operator);else return !weight ? equalToOrIn(field, value, operator) : [equalToOrIn(field, value, operator)[0].weight(weight)];
865
886
  };
866
887
  const contentTypeIdExpression = (contentTypeIds, webpageTemplates, assetTypes) => {
867
888
  const expressions = [];
@@ -885,8 +906,17 @@ const contentTypeIdExpression = (contentTypeIds, webpageTemplates, assetTypes) =
885
906
  const filterExpressions = filters => {
886
907
  if (!filters) return [];
887
908
  const expressions = [];
888
- filters.map(param => {
889
- expressions.push(...fieldExpression(param.key, param.value, param.operator || 'in'));
909
+ filters.map(selectedFilter => {
910
+ if (selectedFilter.logicOperator === 'and') // using 'and' logic operator we loop through each filter
911
+ // and loop through all values to add an expression for each filter value
912
+ selectedFilter.values.forEach(value => expressions.push(...fieldExpression(selectedFilter.key, value, selectedFilter.fieldOperator || 'equalTo')));else if (selectedFilter.logicOperator === 'not') {
913
+ const fieldExpressions = fieldExpression(selectedFilter.key, selectedFilter.values, selectedFilter.fieldOperator || 'in');
914
+ fieldExpressions.forEach(expr => {
915
+ expressions.push(contensisCoreApi.Op.not(expr));
916
+ });
917
+ } // using 'or' logic operator we loop over each filter
918
+ // and simply add the array of values to an expression with an 'in' operator
919
+ else expressions.push(...fieldExpression(selectedFilter.key, selectedFilter.values, selectedFilter.fieldOperator || 'in'));
890
920
  });
891
921
  return expressions;
892
922
  };
@@ -903,8 +933,8 @@ const dataFormatExpression = (contentTypeIds, dataFormat = DataFormats.entry) =>
903
933
  const withExpr = fieldExpression(Fields.sys.contentTypeId, withContentTypeIds)[0];
904
934
  const notExpr = contensisCoreApi.Op.not(fieldExpression(Fields.sys.contentTypeId, notContentTypeIds)[0]);
905
935
  andExpr.add(dataFormatExpr);
906
- if (withContentTypeIds.length > 0) andExpr.add(withExpr);
907
- if (notContentTypeIds.length > 0) andExpr.add(notExpr);
936
+ if (withContentTypeIds.length > 0 && withExpr) andExpr.add(withExpr);
937
+ if (notContentTypeIds.length > 0 && notExpr) andExpr.add(notExpr);
908
938
  return [andExpr];
909
939
  }
910
940
 
@@ -960,19 +990,45 @@ const equalToOrIn = (field, value, operator = 'equalTo') => {
960
990
  if (value.length === 0) return [];
961
991
 
962
992
  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)];
993
+ if (operator === 'equalTo') return [contensisCoreApi.Op.in(field, ...value)];
994
+ return [contensisCoreApi.Op.or(...value.map(innerValue => {
995
+ switch (operator) {
996
+ case 'between':
997
+ case 'distanceWithin':
998
+ // Not implemented
999
+ return contensisCoreApi.Op.equalTo(field, innerValue);
1000
+
1001
+ case 'freeText':
1002
+ // TODO: Potentially needs further implementation of new options
1003
+ return contensisCoreApi.Op[operator](field, innerValue, false, undefined);
1004
+
1005
+ default:
1006
+ return contensisCoreApi.Op[operator](field, innerValue);
1007
+ }
1008
+ }))];
965
1009
  }
966
1010
 
967
- return [];
1011
+ switch (operator) {
1012
+ case 'between':
1013
+ case 'distanceWithin':
1014
+ // Not implemented
1015
+ return [contensisCoreApi.Op.equalTo(field, value)];
1016
+
1017
+ case 'freeText':
1018
+ // TODO: Potentially needs further implementation of new options
1019
+ return [contensisCoreApi.Op[operator](field, value, false, undefined)];
1020
+
1021
+ default:
1022
+ return [contensisCoreApi.Op[operator](field, value)];
1023
+ }
968
1024
  };
969
1025
 
970
1026
  const between = (field, value) => {
971
1027
  const handle = betweenValue => {
972
- const valArr = betweenValue.split('-');
1028
+ const valArr = betweenValue.split('--');
973
1029
 
974
1030
  if (valArr.length > 1) {
975
- const [minimum, maximum = null] = betweenValue.split('-');
1031
+ const [minimum, maximum] = valArr;
976
1032
  return contensisCoreApi.Op.between(field, minimum, maximum);
977
1033
  } else {
978
1034
  // eslint-disable-next-line no-console
@@ -982,10 +1038,9 @@ const between = (field, value) => {
982
1038
  };
983
1039
 
984
1040
  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
-
1041
+ if (Array.isArray(value)) return [contensisCoreApi.Op.or(...value.map(handle).filter(bc => bc !== false))];
987
1042
  const op = handle(value);
988
- return op ? [op] : []; // valArr.length > 1 ? [Op.between(field, ...value.split('-'))] : [];
1043
+ return op ? [op] : [];
989
1044
  };
990
1045
  /**
991
1046
  * Accept HTTP style objects and map them to
@@ -1028,7 +1083,7 @@ const customWhereExpressions = where => {
1028
1083
  // the second property inside the clause
1029
1084
 
1030
1085
  if (notIdx === 1) {
1031
- expression = contensisCoreApi.Op.not(contensisCoreApi.Op[innerOperator](innerField, innerValue));
1086
+ expression = innerOperator === 'between' ? contensisCoreApi.Op.not(contensisCoreApi.Op[innerOperator](innerField, innerValue[0], innerValue[1])) : contensisCoreApi.Op.not(contensisCoreApi.Op[innerOperator](innerField, innerValue));
1032
1087
  }
1033
1088
  });
1034
1089
  }
@@ -1040,8 +1095,9 @@ const customWhereExpressions = where => {
1040
1095
 
1041
1096
  if (idx === 1 && // operator !== 'and' &&
1042
1097
  // 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);
1098
+ // operator !== 'between' &&
1099
+ operator !== 'distanceWithin') {
1100
+ 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
1101
  if (typeof weight === 'number') expression = expression.weight(weight);
1046
1102
  }
1047
1103
  });
@@ -1154,7 +1210,7 @@ const searchUriTemplate = {
1154
1210
  facet,
1155
1211
  pageIndex
1156
1212
  }) => {
1157
- const currentFacet = getSearchContext(state) !== Context.listings && (facet || getCurrentFacet(state));
1213
+ const currentFacet = getSearchContext(state) !== Context$1.listings && (facet || getCurrentFacet(state));
1158
1214
  const currentPath = selectCurrentPath(state) || '/search';
1159
1215
  const newPath = currentFacet ? `${currentPath}/${currentFacet}` : currentPath;
1160
1216
  if (pageIndex) return `${newPath}/${pageIndex + 1}`;
@@ -1171,15 +1227,15 @@ const searchUriTemplate = {
1171
1227
 
1172
1228
  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
1229
  const currentSearch = !term && getImmutableOrJS(state, ['routing', 'location', 'search']);
1174
- const currentQs = removeEmptyAttributes(queryString__default['default'].parse(currentSearch));
1230
+ const currentQs = removeEmptyAttributes(queryString.parse(currentSearch));
1175
1231
  if (orderBy) currentQs.orderBy = orderBy;
1176
1232
  const searchTerm = getSearchTerm(state); // Use Immutable's merge to merge the stateFilters with any current Qs
1177
1233
  // to build the new Qs.
1178
1234
 
1179
- const mergedSearch = removeEmptyAttributes({ ...merge__default['default'](currentQs, stateFilters),
1235
+ const mergedSearch = removeEmptyAttributes({ ...merge__default["default"](currentQs, stateFilters),
1180
1236
  term: searchTerm
1181
1237
  });
1182
- return queryString__default['default'].stringify(mergedSearch);
1238
+ return queryString.stringify(mergedSearch);
1183
1239
  },
1184
1240
  hash: {
1185
1241
  $path: 'state',
@@ -1187,7 +1243,7 @@ const searchUriTemplate = {
1187
1243
  }
1188
1244
  };
1189
1245
 
1190
- const mapStateToSearchUri = params => mapJson__default['default'](params, searchUriTemplate);
1246
+ const mapStateToSearchUri = params => mapJson__default["default"](params, searchUriTemplate);
1191
1247
 
1192
1248
  const mapEntriesToSearchResults = ({
1193
1249
  mappers,
@@ -1329,35 +1385,33 @@ const filterTemplate = {
1329
1385
  const filterExpressionMapper = {
1330
1386
  // Expression type: so we can identify how to build the query
1331
1387
  expressionType: ({
1332
- filter
1333
- }) => filter.contentTypeId ? FilterExpressionTypes.contentType : FilterExpressionTypes.field,
1388
+ contentTypeId
1389
+ }) => contentTypeId ? FilterExpressionTypes.contentType : FilterExpressionTypes.field,
1334
1390
  // Key: so we can target the query to a specific field
1335
- key: 'filter.fieldId',
1391
+ key: 'fieldId',
1336
1392
  // Value: so we can filter a specific field by an array of values
1337
1393
  // e.g. taxonomy key or contentTypeId array
1338
- value: 'selectedValue',
1339
- operator: 'filter.fieldOperator'
1394
+ values: 'selectedValues',
1395
+ fieldOperator: 'fieldOperator',
1396
+ logicOperator: 'logicOperator'
1340
1397
  };
1341
1398
 
1342
- const mapFilterToFilterExpression = filter => mapJson__default['default'](filter, filterExpressionMapper);
1399
+ const mapFilterToFilterExpression = filter => mapJson__default["default"](filter, filterExpressionMapper);
1343
1400
 
1344
1401
  const mapFiltersToFilterExpression = (filters, selectedFilters) => {
1345
1402
  if (!selectedFilters || Object.keys(selectedFilters).length === 0) return [];
1346
1403
  const filterExpressions = []; // Iterate through the keys in selectedFilters and locate
1347
1404
  // the items that are selected and queryable
1348
1405
 
1349
- Object.entries(selectedFilters).map(([fkey, selectedValue]) => {
1406
+ Object.entries(selectedFilters).map(([fkey, selectedValues]) => {
1350
1407
  const filter = filters[fkey];
1351
1408
 
1352
- if (selectedValue && filter) {
1353
- const selectedItems = filter.items && filter.items.filter(itm => itm.isSelected) || []; // Where we have a value for a selectedFilter
1409
+ if (selectedValues && filter) {
1410
+ // Where we have a value for a selectedFilter
1354
1411
  // and a filter is found for the current key
1355
1412
  // map the filter to a filterExpression object
1356
-
1357
- const expr = mapFilterToFilterExpression({
1358
- filter,
1359
- selectedItems,
1360
- selectedValue
1413
+ const expr = mapFilterToFilterExpression({ ...filter,
1414
+ selectedValues
1361
1415
  });
1362
1416
  filterExpressions.push(expr);
1363
1417
  }
@@ -1436,9 +1490,9 @@ const queryParamsTemplate = {
1436
1490
  }) => {
1437
1491
  var _getFacet;
1438
1492
 
1439
- return (_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId;
1493
+ return ((_getFacet = getFacet(state, facet, context)) === null || _getFacet === void 0 ? void 0 : _getFacet.projectId) || selectCurrentProject(state);
1440
1494
  },
1441
- searchTerm: root => root.context !== Context.minilist || getQueryParameter(root, 'useSearchTerm', false) ? getSearchTerm(root.state) : '',
1495
+ searchTerm: root => root.context !== Context$1.minilist || getQueryParameter(root, 'useSearchTerm', false) ? getSearchTerm(root.state) : '',
1442
1496
  selectedFilters: ({
1443
1497
  state,
1444
1498
  facet,
@@ -1455,7 +1509,7 @@ const queryParamsTemplate = {
1455
1509
  webpageTemplates: root => getQueryParameter(root, 'webpageTemplates', [])
1456
1510
  };
1457
1511
 
1458
- const mapStateToQueryParams = sourceJson => mapJson__default['default'](sourceJson, queryParamsTemplate);
1512
+ const mapStateToQueryParams = sourceJson => mapJson__default["default"](sourceJson, queryParamsTemplate);
1459
1513
 
1460
1514
  /**
1461
1515
  * 1, Generates all the parameters required to run the search query.
@@ -1501,7 +1555,7 @@ const runSearch = (action, state, queryParams) => {
1501
1555
  stateParams.pageIndex = getPageIndex(ogState, facet, context);
1502
1556
  stateParams.searchTerm = getSearchTerm(ogState);
1503
1557
 
1504
- if (context === Context.facets && ssr || // context === Context.minilist ||
1558
+ if (context === Context$1.facets && ssr || // context === Context.minilist ||
1505
1559
  preload || !facetIsLoaded || filterParamsChanged(action) || defaultLang) {
1506
1560
  willRun = true;
1507
1561
  } else {
@@ -1550,9 +1604,10 @@ const filterParamsChanged = (action, state) => {
1550
1604
  const debugExecuteSearch = (action, state) => {
1551
1605
  const [queryParams, runSearch] = generateQueryParams(action, state);
1552
1606
  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);
1607
+ const stateParams = { ...getQueryParams(action.ogState || state, action.facet, action.context),
1608
+ pageIndex: getPageIndex(action.ogState || state, action.facet, action.context),
1609
+ searchTerm: getSearchTerm(action.ogState || state)
1610
+ };
1556
1611
  console.log(stateParams, queryParams);
1557
1612
  console.log('getSelectedFilters', getSelectedFilters(action.ogState || state, action.facet, action.context, 'js'), 'params', action.params);
1558
1613
  };
@@ -1575,16 +1630,16 @@ const mapEntriesToFilterItems = entries => {
1575
1630
  const template = base;
1576
1631
 
1577
1632
  if (template) {
1578
- return mapJson__default['default'](entry, template);
1633
+ return mapJson__default["default"](entry, template);
1579
1634
  }
1580
1635
 
1581
1636
  return entry;
1582
1637
  });
1583
1638
  };
1584
1639
 
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)];
1640
+ 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
1641
 
1587
- const toJS$1 = obj => obj && 'toJS' in obj && typeof obj.toJS === 'function' ? obj.toJS() : obj;
1642
+ const toJS = obj => obj && 'toJS' in obj && typeof obj.toJS === 'function' ? obj.toJS() : obj;
1588
1643
 
1589
1644
  function* setRouteFilters(action) {
1590
1645
  const {
@@ -1594,8 +1649,8 @@ function* setRouteFilters(action) {
1594
1649
  defaultLang,
1595
1650
  debug
1596
1651
  } = action;
1597
- const context = listingType ? Context.listings : Context.facets;
1598
- const state = toJS$1(yield effects.select());
1652
+ const context = listingType ? Context$1.listings : Context$1.facets;
1653
+ const state = toJS(yield effects.select());
1599
1654
  const ssr = getIsSsr(state); // Get current facet from params or state
1600
1655
 
1601
1656
  let currentFacet = params && params.facet || listingType; // Pick the default facet from initialState
@@ -1625,7 +1680,7 @@ function* setRouteFilters(action) {
1625
1680
  });
1626
1681
  }
1627
1682
  function* doSearch(action) {
1628
- const state = toJS$1(yield effects.select());
1683
+ const state = toJS(yield effects.select());
1629
1684
 
1630
1685
  if (action.config) {
1631
1686
  // If the action contains a config object, we can add this to the
@@ -1726,7 +1781,7 @@ function* loadFilter(action) {
1726
1781
  createStateFrom.error = error;
1727
1782
  }
1728
1783
 
1729
- const nextAction = mapJson__default['default'](createStateFrom, filterTemplate);
1784
+ const nextAction = mapJson__default["default"](createStateFrom, filterTemplate);
1730
1785
  yield effects.put(nextAction);
1731
1786
  }
1732
1787
 
@@ -1760,7 +1815,7 @@ function* ensureSearch(action) {
1760
1815
  }
1761
1816
  } catch (error) {
1762
1817
  // eslint-disable-next-line import/namespace
1763
- log.error(...['Error running search saga:', error, error.stack]);
1818
+ log__namespace.error(...['Error running search saga:', error, error.stack]);
1764
1819
  }
1765
1820
  }
1766
1821
 
@@ -1807,11 +1862,11 @@ function* executeSearch(action) {
1807
1862
  result,
1808
1863
  state
1809
1864
  };
1810
- const nextAction = mapJson__default['default'](createStateFrom, facetTemplate);
1865
+ const nextAction = mapJson__default["default"](createStateFrom, facetTemplate);
1811
1866
  yield effects.put(nextAction);
1812
1867
  } catch (error) {
1813
1868
  // eslint-disable-next-line import/namespace
1814
- log.error(...['Error running search saga:', error, error.stack]);
1869
+ log__namespace.error(...['Error running search saga:', error, error.stack]);
1815
1870
  }
1816
1871
  }
1817
1872
 
@@ -1825,7 +1880,7 @@ function* preloadOtherFacets(action) {
1825
1880
  const state = yield effects.select();
1826
1881
  const currentFacet = getCurrentFacet(state);
1827
1882
 
1828
- if (!preload && facet === currentFacet && context !== Context.listings) {
1883
+ if (!preload && facet === currentFacet && context !== Context$1.listings) {
1829
1884
  const allFacets = getFacets(state, 'js');
1830
1885
  const otherFacets = Object.keys(allFacets).filter(f => f !== currentFacet);
1831
1886
  yield effects.all(otherFacets.map((preloadFacet = '') => {
@@ -1845,7 +1900,7 @@ function* preloadOtherFacets(action) {
1845
1900
  }
1846
1901
  }
1847
1902
 
1848
- function* updateCurrentTab$1(action) {
1903
+ function* updateCurrentTab(action) {
1849
1904
  const {
1850
1905
  id,
1851
1906
  mappers
@@ -1864,10 +1919,10 @@ function* updateCurrentTab$1(action) {
1864
1919
 
1865
1920
 
1866
1921
  if (!nextFacet) nextFacet = Object.entries(facets).filter(([, f]) => f.tabId === id)[0][0];
1867
- yield effects.put(withMappers(updateCurrentFacet(nextFacet), mappers));
1922
+ yield effects.put(withMappers(updateCurrentFacet$1(nextFacet), mappers));
1868
1923
  }
1869
1924
 
1870
- function* clearFilters$1(action) {
1925
+ function* clearFilters(action) {
1871
1926
  const {
1872
1927
  mappers
1873
1928
  } = action;
@@ -1875,7 +1930,7 @@ function* clearFilters$1(action) {
1875
1930
  yield effects.put(navigate(uri));
1876
1931
  }
1877
1932
 
1878
- function* updateCurrentFacet$1(action) {
1933
+ function* updateCurrentFacet(action) {
1879
1934
  const {
1880
1935
  facet,
1881
1936
  mappers
@@ -1888,7 +1943,7 @@ function* updateCurrentFacet$1(action) {
1888
1943
  yield effects.put(navigate(uri));
1889
1944
  }
1890
1945
 
1891
- function* updateSearchTerm$1(action) {
1946
+ function* updateSearchTerm(action) {
1892
1947
  const {
1893
1948
  term,
1894
1949
  mappers
@@ -1899,7 +1954,7 @@ function* updateSearchTerm$1(action) {
1899
1954
  yield effects.put(navigate(uri));
1900
1955
  }
1901
1956
 
1902
- function* updateSortOrder$1(action) {
1957
+ function* updateSortOrder(action) {
1903
1958
  const {
1904
1959
  orderBy,
1905
1960
  facet,
@@ -1912,7 +1967,7 @@ function* updateSortOrder$1(action) {
1912
1967
  yield effects.put(navigate(uri));
1913
1968
  }
1914
1969
 
1915
- function* updatePageIndex$1(action) {
1970
+ function* updatePageIndex(action) {
1916
1971
  const {
1917
1972
  pageIndex,
1918
1973
  mappers
@@ -1951,11 +2006,11 @@ function* buildUri({
1951
2006
  }
1952
2007
 
1953
2008
  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'),
2009
+ facet: getFacet(state, id, Context$1.minilist, 'js'),
2010
+ filters: getFilters(state, id, Context$1.minilist, 'js'),
2011
+ isLoading: getIsLoading(state, Context$1.minilist, id),
2012
+ pagingInfo: getPaging(state, id, Context$1.minilist, 'js'),
2013
+ results: getResults(state, id, Context$1.minilist, 'js'),
1959
2014
  searchTerm: getSearchTerm(state)
1960
2015
  }));
1961
2016
 
@@ -1993,7 +2048,7 @@ const useMinilist = ({
1993
2048
  if (id && (mapper || mappers && mappers.results)) {
1994
2049
  dispatch(triggerSearch({
1995
2050
  config,
1996
- context: Context.minilist,
2051
+ context: Context$1.minilist,
1997
2052
  defaultLang,
1998
2053
  facet: id,
1999
2054
  mapper,
@@ -2119,7 +2174,7 @@ const generateSearchFacets = (context, config) => {
2119
2174
 
2120
2175
  if (Object.keys(thisConfig).length > 0) {
2121
2176
  Object.entries(thisConfig).map(([facetName, facet]) => {
2122
- const newFacet = merge__default['default'](searchFacet, facet);
2177
+ const newFacet = merge__default["default"](searchFacet, facet);
2123
2178
  if (!('isDisabled' in facet) || facet.isDisabled !== true) facets[facetName] = newFacet;
2124
2179
  });
2125
2180
  }
@@ -2208,9 +2263,9 @@ var reducers = (config => {
2208
2263
  // Add facets from SearchConfig to initialState
2209
2264
  const initState = { ...initialState,
2210
2265
  tabs: config.tabs,
2211
- facets: generateSearchFacets(Context.facets, config),
2212
- listings: generateSearchFacets(Context.listings, config),
2213
- minilist: generateSearchFacets(Context.minilist, config)
2266
+ facets: generateSearchFacets(Context$1.facets, config),
2267
+ listings: generateSearchFacets(Context$1.listings, config),
2268
+ minilist: generateSearchFacets(Context$1.minilist, config)
2214
2269
  };
2215
2270
  return immer.produce((state = initState, action) => {
2216
2271
  const context = state.context;
@@ -2220,7 +2275,7 @@ var reducers = (config => {
2220
2275
  case APPLY_CONFIG:
2221
2276
  {
2222
2277
  state = addConfigToState(state, action);
2223
- return;
2278
+ return state;
2224
2279
  }
2225
2280
 
2226
2281
  case CLEAR_FILTERS:
@@ -2294,7 +2349,7 @@ var reducers = (config => {
2294
2349
  return;
2295
2350
  }
2296
2351
 
2297
- state[action.context][facetKey].filters[filterKey] = merge__default['default'](filter, nextFilter, {
2352
+ state[action.context][facetKey].filters[filterKey] = merge__default["default"](filter, nextFilter, {
2298
2353
  arrayMerge: (source, inbound) => inbound
2299
2354
  });
2300
2355
  return;
@@ -2329,7 +2384,7 @@ var reducers = (config => {
2329
2384
  context,
2330
2385
  isCurrentFacet
2331
2386
  }, state);
2332
- resetCurrentFacet = state.config.isLoaded === true && !equals__default['default'](nextFilters, stateFacet.filters);
2387
+ resetCurrentFacet = state.config.isLoaded === true && !equals__default["default"](nextFilters, stateFacet.filters);
2333
2388
  stateFacet = resetCurrentFacet ? resetFacet(stateFacet) : stateFacet;
2334
2389
  stateFacet.filters = nextFilters;
2335
2390
  stateFacet.queryParams.dynamicOrderBy = toArray(orderBy) || [];
@@ -2337,7 +2392,7 @@ var reducers = (config => {
2337
2392
  }));
2338
2393
  state.context = context;
2339
2394
  state[context] = nextFacets;
2340
- state[action.context === Context.facets ? 'currentFacet' : 'currentListing'] = facet;
2395
+ state[action.context === Context$1.facets ? 'currentFacet' : 'currentListing'] = facet;
2341
2396
  state.term = term;
2342
2397
  state.tabs[tabId].currentFacet = facet;
2343
2398
  state[context][facet].pagingInfo.pageIndex = Number(pageIndex) - 1 || (state[context][facet].queryParams.loadMorePaging ? state[context][facet].pagingInfo.pageIndex || 0 : 0);
@@ -2351,7 +2406,7 @@ var reducers = (config => {
2351
2406
  {
2352
2407
  const thisContext = action.context || context;
2353
2408
  const currentFacet = state[thisContext][action.facet];
2354
- state[thisContext][action.facet] = merge__default['default'](currentFacet, action.nextFacet, {
2409
+ state[thisContext][action.facet] = merge__default["default"](currentFacet, action.nextFacet, {
2355
2410
  arrayMerge: (source, inbound) => inbound
2356
2411
  });
2357
2412
  return;
@@ -2370,9 +2425,9 @@ var reducers = (config => {
2370
2425
  isCurrentFacet: true
2371
2426
  }, state);
2372
2427
  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;
2428
+ const useSearchTerm = state[action.context || Context$1.minilist][action.facet].queryParams.useSearchTerm || false;
2429
+ state[action.context || Context$1.minilist][action.facet].filters = filters;
2430
+ state[action.context || Context$1.minilist][action.facet].queryParams.excludeIds = action.excludeIds;
2376
2431
  state.term = useSearchTerm ? term : state.term;
2377
2432
  state.config.ssr = typeof window === 'undefined';
2378
2433
  return;
@@ -2404,13 +2459,22 @@ var reducers = (config => {
2404
2459
  {
2405
2460
  const {
2406
2461
  filter,
2407
- key
2462
+ key,
2463
+ isUnknownItem
2408
2464
  } = action;
2409
2465
  const isSingleSelect = state[context][current].filters[filter].isSingleSelect || false;
2410
2466
  const isGrouped = state[context][current].filters[filter].isGrouped || false;
2411
2467
  const currentItems = state[context][current].filters[filter].items;
2412
2468
  if (isGrouped) state[context] = resetFacets(state, context);
2413
2469
  state[context][current] = resetFacet(state[context][current]);
2470
+
2471
+ if (isUnknownItem && (currentItems === null || currentItems === void 0 ? void 0 : currentItems.findIndex(item => (item === null || item === void 0 ? void 0 : item.key) === key)) === -1) {
2472
+ currentItems === null || currentItems === void 0 ? void 0 : currentItems.push({
2473
+ key,
2474
+ isSelected: false
2475
+ });
2476
+ }
2477
+
2414
2478
  state[context][current].filters[filter].items = currentItems === null || currentItems === void 0 ? void 0 : currentItems.map(item => {
2415
2479
  if (item.key === key) {
2416
2480
  return { ...item,
@@ -2445,13 +2509,13 @@ var reducers = (config => {
2445
2509
  });
2446
2510
 
2447
2511
  // eslint-disable-next-line @typescript-eslint/naming-convention
2448
- const Context$1 = {
2512
+ const Context = {
2449
2513
  facets: 'facets',
2450
2514
  listings: 'listings',
2451
2515
  minilist: 'minilist'
2452
2516
  };
2453
2517
 
2454
- exports.Context = Context$1;
2518
+ exports.Context = Context;
2455
2519
  exports.actions = actions;
2456
2520
  exports.doSearch = doSearch;
2457
2521
  exports.queries = queries;