@zengenti/contensis-react-base 4.0.0-beta.14 → 4.0.0-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,6 +6,12 @@ Handles web app routing with Contensis Site View and component rendering based o
6
6
 
7
7
  ## Upgrade notes (older projects)
8
8
 
9
+ ### React 18 (v4.0+)
10
+
11
+ This version introduces major updates to React, React Router and Express
12
+
13
+ We have prepared a [Migration Guide: v3 → v4](https://github.com/zengenti/contensis-react-base/blob/feat/react18/MIGRATE-V4.md) with detailed steps to follow to ensure your upgrade goes smoothly
14
+
9
15
  ### Styled Components 6 (v3.3+)
10
16
 
11
17
  Some projects may see console warnings in the web app like the example below after upgrading to v3.3+ which updates Styled Components from version 5 to 6
@@ -7,7 +7,7 @@ var contensisDeliveryApi = require('contensis-delivery-api');
7
7
  var React = require('react');
8
8
  var reactRedux = require('react-redux');
9
9
  var mapJson = require('jsonpath-mapper');
10
- var sagas = require('./sagas-BtPnqKAF.js');
10
+ var sagas = require('./sagas-C0t6j-SQ.js');
11
11
  require('reselect');
12
12
  require('immer');
13
13
  require('deep-equal');
@@ -262,9 +262,13 @@ const getListing$1 = (state, listing = '') => {
262
262
  const currentListing = listing || getCurrentListing(state);
263
263
  return getImmutableOrJS(state, ['search', Context.listings, currentListing], {});
264
264
  };
265
+
266
+ /** Return filter state for the current (or provided) facet */
265
267
  const getFilters = (state, facet, context = Context.facets, returnType) => {
266
268
  return getImmutableOrJS(state, ['search', context, facet || getCurrent$2(state, context), 'filters'], {}, returnType);
267
269
  };
270
+
271
+ /** Return filter state for the current (or provided) facet, excluding filters configured as `renderable: false` */
268
272
  const getRenderableFilters$2 = (state, facet = '', context = Context.facets) => Object.fromEntries(Object.entries(getFilters(state, facet, context, 'js')).filter(([, f = {}]) => typeof f.renderable !== 'boolean' ? true : f.renderable));
269
273
  const getFiltersToLoad = (state, facet, context = Context.facets, returnType) => {
270
274
  const filters = getFilters(state, facet, context, returnType);
@@ -275,16 +279,30 @@ const getFiltersToLoad = (state, facet, context = Context.facets, returnType) =>
275
279
  return loadedFilters.map(([filterKey, isLoaded]) => !isLoaded ? filterKey : null).filter(f => !!f);
276
280
  };
277
281
 
278
- // We lowercase the filter key unless it's an ISO date string where the T must be uppercase
279
- const getSelectedFilters = (state, facet = '', context = Context.facets, returnType) => {
280
- const filters = getFilters(state, facet, context, 'js');
282
+ /** Reduce filters state to a simple object containing all filter keys and the selected values */
283
+ const reduceSelectedFilters = filters => {
281
284
  const selectedFilters = Object.fromEntries(Object.entries(filters).map(([key, filter = {}]) => [key, (filter.items || []).filter(item => !!(item.isSelected || false)).map(item => {
282
285
  const key = (item === null || item === void 0 ? void 0 : item.key) || '';
283
286
  return key;
284
287
  })]));
288
+ return selectedFilters;
289
+ };
290
+
291
+ /** Return keyed object for all filters in the current facet with all selected values for each filter */
292
+ const getSelectedFilters = (state, facet = '', context = Context.facets, returnType) => {
293
+ const filters = getFilters(state, facet, context, 'js');
294
+ const selectedFilters = reduceSelectedFilters(filters);
285
295
  const fromJS = makeFromJS(returnType);
286
296
  return fromJS(selectedFilters);
287
297
  };
298
+
299
+ /** Return keyed object for all _renderable_ filters in the current facet with all selected values for each filter */
300
+ const getRenderableSelectedFilters = (state, facet = '', context = Context.facets) => {
301
+ const filters = getRenderableFilters$2(state, facet, context);
302
+
303
+ // new in CRB4: intended no support for immutable state type
304
+ return reduceSelectedFilters(filters);
305
+ };
288
306
  const getResults = (state, current = '', context = Context.facets, returnType) => {
289
307
  return getImmutableOrJS(state, ['search', context, current || getCurrent$2(state, context), 'results'], [], returnType);
290
308
  };
@@ -476,6 +494,7 @@ var selectors = /*#__PURE__*/Object.freeze({
476
494
  getQueryParameter: getQueryParameter$2,
477
495
  getQueryParams: getQueryParams,
478
496
  getRenderableFilters: getRenderableFilters$2,
497
+ getRenderableSelectedFilters: getRenderableSelectedFilters,
479
498
  getResults: getResults,
480
499
  getSearchContext: getSearchContext,
481
500
  getSearchTabs: getSearchTabs,
@@ -522,7 +541,7 @@ const searchUriTemplate = {
522
541
  const searchContext = getSearchContext(state);
523
542
  // Lose stateFilters and currentSearch if a new
524
543
  // term is passed via an argument
525
- const stateFilters = term ? {} : Object.fromEntries(Object.entries(getSelectedFilters(state, facet, searchContext, 'js')).map(([k, f]) => [k, f === null || f === void 0 ? void 0 : f.join(',')]));
544
+ const stateFilters = term ? {} : Object.fromEntries(Object.entries(getRenderableSelectedFilters(state, facet, searchContext)).map(([k, f]) => [k, f === null || f === void 0 ? void 0 : f.join(',')]));
526
545
  const currentSearch = !term && getImmutableOrJS(state, ['routing', 'location', 'search']);
527
546
  const currentQs = util.removeEmptyAttributes(queryString.parse(currentSearch));
528
547
  if (orderBy) currentQs.orderBy = orderBy;
@@ -5758,4 +5777,4 @@ exports.updateSortOrder = updateSortOrder$1;
5758
5777
  exports.useFacets = useFacets;
5759
5778
  exports.useListing = useListing;
5760
5779
  exports.withMappers = withMappers;
5761
- //# sourceMappingURL=sagas-BtPnqKAF.js.map
5780
+ //# sourceMappingURL=sagas-C0t6j-SQ.js.map