instantsearch.js 4.60.0 → 4.61.0

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 (35) hide show
  1. package/cjs/components/SearchBox/SearchBox.js +2 -2
  2. package/cjs/connectors/breadcrumb/connectBreadcrumb.js +18 -5
  3. package/cjs/connectors/dynamic-widgets/connectDynamicWidgets.js +2 -3
  4. package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +17 -6
  5. package/cjs/connectors/menu/connectMenu.js +18 -6
  6. package/cjs/connectors/numeric-menu/connectNumericMenu.js +18 -5
  7. package/cjs/connectors/rating-menu/connectRatingMenu.js +19 -6
  8. package/cjs/connectors/refinement-list/connectRefinementList.js +17 -6
  9. package/cjs/lib/utils/hydrateSearchClient.js +39 -29
  10. package/cjs/lib/version.js +1 -1
  11. package/cjs/widgets/search-box/defaultTemplates.js +9 -3
  12. package/dist/instantsearch.development.d.ts +13 -3
  13. package/dist/instantsearch.development.js +200 -124
  14. package/dist/instantsearch.development.js.map +1 -1
  15. package/dist/instantsearch.production.d.ts +13 -3
  16. package/dist/instantsearch.production.min.d.ts +13 -3
  17. package/dist/instantsearch.production.min.js +2 -2
  18. package/dist/instantsearch.production.min.js.map +1 -1
  19. package/es/components/SearchBox/SearchBox.js +2 -2
  20. package/es/connectors/breadcrumb/connectBreadcrumb.js +18 -5
  21. package/es/connectors/dynamic-widgets/connectDynamicWidgets.d.ts +12 -2
  22. package/es/connectors/dynamic-widgets/connectDynamicWidgets.js +2 -3
  23. package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +17 -6
  24. package/es/connectors/menu/connectMenu.js +18 -6
  25. package/es/connectors/numeric-menu/connectNumericMenu.js +18 -5
  26. package/es/connectors/rating-menu/connectRatingMenu.d.ts +1 -1
  27. package/es/connectors/rating-menu/connectRatingMenu.js +19 -6
  28. package/es/connectors/refinement-list/connectRefinementList.js +17 -6
  29. package/es/lib/utils/hydrateSearchClient.d.ts +5 -2
  30. package/es/lib/utils/hydrateSearchClient.js +39 -29
  31. package/es/lib/utils/render-args.d.ts +4 -4
  32. package/es/lib/version.d.ts +1 -1
  33. package/es/lib/version.js +1 -1
  34. package/es/widgets/search-box/defaultTemplates.js +10 -3
  35. package/package.json +5 -5
@@ -184,7 +184,7 @@ var SearchBox = /*#__PURE__*/function (_Component) {
184
184
  rootProps: {
185
185
  className: cssClasses.submit,
186
186
  type: 'submit',
187
- title: 'Submit the search query.',
187
+ title: 'Submit the search query',
188
188
  hidden: !showSubmit
189
189
  },
190
190
  templates: templates,
@@ -197,7 +197,7 @@ var SearchBox = /*#__PURE__*/function (_Component) {
197
197
  rootProps: {
198
198
  className: cssClasses.reset,
199
199
  type: 'reset',
200
- title: 'Clear the search query.',
200
+ title: 'Clear the search query',
201
201
  hidden: !(showReset && this.state.query.trim() && !isSearchStalled)
202
202
  },
203
203
  templates: templates,
@@ -6,6 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _utils = require("../../lib/utils");
9
+ var _excluded = ["hierarchicalMenu"];
10
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
11
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
9
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
14
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -121,12 +124,9 @@ var connectBreadcrumb = function connectBreadcrumb(renderFn) {
121
124
  getWidgetUiState: function getWidgetUiState(uiState, _ref3) {
122
125
  var searchParameters = _ref3.searchParameters;
123
126
  var path = searchParameters.getHierarchicalFacetBreadcrumb(hierarchicalFacetName);
124
- if (!path.length) {
125
- return uiState;
126
- }
127
- return _objectSpread(_objectSpread({}, uiState), {}, {
127
+ return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
128
128
  hierarchicalMenu: _objectSpread(_objectSpread({}, uiState.hierarchicalMenu), {}, _defineProperty({}, hierarchicalFacetName, path))
129
- });
129
+ }));
130
130
  },
131
131
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref4) {
132
132
  var uiState = _ref4.uiState;
@@ -177,5 +177,18 @@ function shiftItemsValues(array) {
177
177
  };
178
178
  });
179
179
  }
180
+ function removeEmptyRefinementsFromUiState(indexUiState) {
181
+ var hierarchicalMenu = indexUiState.hierarchicalMenu,
182
+ indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded);
183
+ if (!hierarchicalMenu) {
184
+ return indexUiState;
185
+ }
186
+ var connectorUiState = Object.keys(hierarchicalMenu).reduce(function (acc, key) {
187
+ return _objectSpread(_objectSpread({}, acc), hierarchicalMenu[key].length > 0 ? _defineProperty({}, key, hierarchicalMenu[key]) : {});
188
+ }, {});
189
+ return _objectSpread(_objectSpread({}, indexUiStateBase), Object.keys(connectorUiState).length > 0 ? {
190
+ hierarchicalMenu: connectorUiState
191
+ } : {});
192
+ }
180
193
  var _default = connectBreadcrumb;
181
194
  exports.default = _default;
@@ -35,8 +35,8 @@ var connectDynamicWidgets = function connectDynamicWidgets(renderFn) {
35
35
  }))) {
36
36
  throw new Error(withUsage('The `widgets` option expects an array of widgets.'));
37
37
  }
38
- if (!(Array.isArray(facets) && facets.length <= 1 && (facets[0] === '*' || facets[0] === undefined))) {
39
- throw new Error(withUsage("The `facets` option only accepts [] or [\"*\"], you passed ".concat(JSON.stringify(facets))));
38
+ if (!Array.isArray(facets)) {
39
+ throw new Error(withUsage("The `facets` option only accepts an array of facets, you passed ".concat(JSON.stringify(facets))));
40
40
  }
41
41
  var localWidgets = new Map();
42
42
  return {
@@ -114,7 +114,6 @@ var connectDynamicWidgets = function connectDynamicWidgets(renderFn) {
114
114
  unmountFn();
115
115
  },
116
116
  getWidgetSearchParameters: function getWidgetSearchParameters(state) {
117
- // broadening the scope of facets to avoid conflict between never and *
118
117
  return facets.reduce(function (acc, curr) {
119
118
  return acc.addFacet(curr);
120
119
  }, state.setQueryParameters({
@@ -6,7 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _utils = require("../../lib/utils");
9
- var _excluded = ["name", "escapedValue", "data", "path"];
9
+ var _excluded = ["name", "escapedValue", "data", "path"],
10
+ _excluded2 = ["hierarchicalMenu"];
10
11
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
12
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
13
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -205,12 +206,9 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
205
206
  getWidgetUiState: function getWidgetUiState(uiState, _ref5) {
206
207
  var searchParameters = _ref5.searchParameters;
207
208
  var path = searchParameters.getHierarchicalFacetBreadcrumb(hierarchicalFacetName);
208
- if (!path.length) {
209
- return uiState;
210
- }
211
- return _objectSpread(_objectSpread({}, uiState), {}, {
209
+ return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
212
210
  hierarchicalMenu: _objectSpread(_objectSpread({}, uiState.hierarchicalMenu), {}, _defineProperty({}, hierarchicalFacetName, path))
213
- });
211
+ }));
214
212
  },
215
213
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
216
214
  var uiState = _ref6.uiState;
@@ -243,5 +241,18 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
243
241
  };
244
242
  };
245
243
  };
244
+ function removeEmptyRefinementsFromUiState(indexUiState) {
245
+ var hierarchicalMenu = indexUiState.hierarchicalMenu,
246
+ indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded2);
247
+ if (!hierarchicalMenu) {
248
+ return indexUiState;
249
+ }
250
+ var connectorUiState = Object.keys(hierarchicalMenu).reduce(function (acc, key) {
251
+ return _objectSpread(_objectSpread({}, acc), hierarchicalMenu[key].length > 0 ? _defineProperty({}, key, hierarchicalMenu[key]) : {});
252
+ }, {});
253
+ return _objectSpread(_objectSpread({}, indexUiStateBase), Object.keys(connectorUiState).length > 0 ? {
254
+ hierarchicalMenu: connectorUiState
255
+ } : {});
256
+ }
246
257
  var _default = connectHierarchicalMenu;
247
258
  exports.default = _default;
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _utils = require("../../lib/utils");
8
- var _excluded = ["name", "escapedValue", "path"];
8
+ var _excluded = ["name", "escapedValue", "path"],
9
+ _excluded2 = ["menu"];
9
10
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
10
11
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
11
12
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
@@ -177,12 +178,9 @@ var connectMenu = function connectMenu(renderFn) {
177
178
  var _searchParameters$get = searchParameters.getHierarchicalFacetBreadcrumb(attribute),
178
179
  _searchParameters$get2 = _slicedToArray(_searchParameters$get, 1),
179
180
  value = _searchParameters$get2[0];
180
- if (!value) {
181
- return uiState;
182
- }
183
- return _objectSpread(_objectSpread({}, uiState), {}, {
181
+ return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
184
182
  menu: _objectSpread(_objectSpread({}, uiState.menu), {}, _defineProperty({}, attribute, value))
185
- });
183
+ }));
186
184
  },
187
185
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref5) {
188
186
  var uiState = _ref5.uiState;
@@ -208,5 +206,19 @@ var connectMenu = function connectMenu(renderFn) {
208
206
  };
209
207
  };
210
208
  };
209
+ function removeEmptyRefinementsFromUiState(indexUiState) {
210
+ var menu = indexUiState.menu,
211
+ indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded2);
212
+ if (!menu) {
213
+ return indexUiState;
214
+ }
215
+ var connectorUiState = Object.keys(menu).reduce(function (acc, key) {
216
+ var _menu$key;
217
+ return _objectSpread(_objectSpread({}, acc), ((_menu$key = menu[key]) === null || _menu$key === void 0 ? void 0 : _menu$key.length) > 0 ? _defineProperty({}, key, menu[key]) : {});
218
+ }, {});
219
+ return _objectSpread(_objectSpread({}, indexUiStateBase), Object.keys(connectorUiState).length > 0 ? {
220
+ menu: connectorUiState
221
+ } : {});
222
+ }
211
223
  var _default = connectMenu;
212
224
  exports.default = _default;
@@ -5,7 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _utils = require("../../lib/utils");
8
+ var _excluded = ["numericMenu"];
8
9
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
10
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
11
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
9
12
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
13
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
14
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -101,12 +104,9 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
101
104
  }
102
105
  var min = values['>='] && values['>='][0] || '';
103
106
  var max = values['<='] && values['<='][0] || '';
104
- if (min === '' && max === '') {
105
- return uiState;
106
- }
107
- return _objectSpread(_objectSpread({}, uiState), {}, {
107
+ return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
108
108
  numericMenu: _objectSpread(_objectSpread({}, uiState.numericMenu), {}, _defineProperty({}, attribute, "".concat(min, ":").concat(max)))
109
- });
109
+ }));
110
110
  },
111
111
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
112
112
  var uiState = _ref6.uiState;
@@ -268,5 +268,18 @@ function getRefinedState(state, attribute, facetValue) {
268
268
  function hasNumericRefinement(currentRefinements, operator, value) {
269
269
  return currentRefinements[operator] !== undefined && currentRefinements[operator].includes(value);
270
270
  }
271
+ function removeEmptyRefinementsFromUiState(indexUiState) {
272
+ var numericMenu = indexUiState.numericMenu,
273
+ indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded);
274
+ if (!numericMenu) {
275
+ return indexUiState;
276
+ }
277
+ var connectorUiState = Object.keys(numericMenu).reduce(function (acc, key) {
278
+ return _objectSpread(_objectSpread({}, acc), numericMenu[key] !== ':' ? _defineProperty({}, key, numericMenu[key]) : {});
279
+ }, {});
280
+ return _objectSpread(_objectSpread({}, indexUiStateBase), Object.keys(connectorUiState).length > 0 ? {
281
+ numericMenu: connectorUiState
282
+ } : {});
283
+ }
271
284
  var _default = connectNumericMenu;
272
285
  exports.default = _default;
@@ -6,6 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _utils = require("../../lib/utils");
9
+ var _excluded = ["ratingMenu"];
10
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
11
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
9
12
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
10
13
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
14
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -262,12 +265,9 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
262
265
  getWidgetUiState: function getWidgetUiState(uiState, _ref7) {
263
266
  var searchParameters = _ref7.searchParameters;
264
267
  var value = _getRefinedStar(searchParameters);
265
- if (typeof value !== 'number') {
266
- return uiState;
267
- }
268
- return _objectSpread(_objectSpread({}, uiState), {}, {
269
- ratingMenu: _objectSpread(_objectSpread({}, uiState.ratingMenu), {}, _defineProperty({}, attribute, value))
270
- });
268
+ return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
269
+ ratingMenu: _objectSpread(_objectSpread({}, uiState.ratingMenu), {}, _defineProperty({}, attribute, typeof value === 'number' ? value : undefined))
270
+ }));
271
271
  },
272
272
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref8) {
273
273
  var uiState = _ref8.uiState;
@@ -284,5 +284,18 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
284
284
  };
285
285
  };
286
286
  };
287
+ function removeEmptyRefinementsFromUiState(indexUiState) {
288
+ var ratingMenu = indexUiState.ratingMenu,
289
+ indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded);
290
+ if (!ratingMenu) {
291
+ return indexUiState;
292
+ }
293
+ var connectorUiState = Object.keys(ratingMenu).reduce(function (acc, key) {
294
+ return _objectSpread(_objectSpread({}, acc), typeof ratingMenu[key] === 'number' ? _defineProperty({}, key, ratingMenu[key]) : {});
295
+ }, {});
296
+ return _objectSpread(_objectSpread({}, indexUiStateBase), Object.keys(connectorUiState).length > 0 ? {
297
+ ratingMenu: connectorUiState
298
+ } : {});
299
+ }
287
300
  var _default = connectRatingMenu;
288
301
  exports.default = _default;
@@ -7,7 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _utils = require("../../lib/utils");
9
9
  var _excluded = ["name", "escapedValue"],
10
- _excluded2 = ["escapedValue", "value"];
10
+ _excluded2 = ["escapedValue", "value"],
11
+ _excluded3 = ["refinementList"];
11
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13
14
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -249,12 +250,9 @@ var connectRefinementList = function connectRefinementList(renderFn) {
249
250
  getWidgetUiState: function getWidgetUiState(uiState, _ref5) {
250
251
  var searchParameters = _ref5.searchParameters;
251
252
  var values = operator === 'or' ? searchParameters.getDisjunctiveRefinements(attribute) : searchParameters.getConjunctiveRefinements(attribute);
252
- if (!values.length) {
253
- return uiState;
254
- }
255
- return _objectSpread(_objectSpread({}, uiState), {}, {
253
+ return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
256
254
  refinementList: _objectSpread(_objectSpread({}, uiState.refinementList), {}, _defineProperty({}, attribute, values))
257
- });
255
+ }));
258
256
  },
259
257
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
260
258
  var uiState = _ref6.uiState;
@@ -284,5 +282,18 @@ var connectRefinementList = function connectRefinementList(renderFn) {
284
282
  };
285
283
  };
286
284
  };
285
+ function removeEmptyRefinementsFromUiState(indexUiState) {
286
+ var refinementList = indexUiState.refinementList,
287
+ indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded3);
288
+ if (!refinementList) {
289
+ return indexUiState;
290
+ }
291
+ var connectorUiState = Object.keys(refinementList).reduce(function (acc, key) {
292
+ return _objectSpread(_objectSpread({}, acc), refinementList[key].length > 0 ? _defineProperty({}, key, refinementList[key]) : {});
293
+ }, {});
294
+ return _objectSpread(_objectSpread({}, indexUiStateBase), Object.keys(connectorUiState).length > 0 ? {
295
+ refinementList: connectorUiState
296
+ } : {});
297
+ }
287
298
  var _default = connectRefinementList;
288
299
  exports.default = _default;
@@ -5,13 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.hydrateSearchClient = hydrateSearchClient;
7
7
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
8
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
13
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
14
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
15
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
16
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
17
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
12
18
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
13
- // @ts-nocheck (types to be fixed during actual implementation)
14
-
15
19
  function hydrateSearchClient(client, results) {
16
20
  if (!results) {
17
21
  return;
@@ -21,9 +25,22 @@ function hydrateSearchClient(client, results) {
21
25
  // - Algoliasearch API Client < v4 with cache disabled
22
26
  // - Third party clients (detected by the `addAlgoliaAgent` function missing)
23
27
 
24
- if ((!client.transporter || client._cacheHydrated) && (!client._useCache || typeof client.addAlgoliaAgent !== 'function')) {
28
+ if ((!('transporter' in client) || client._cacheHydrated) && (!client._useCache || typeof client.addAlgoliaAgent !== 'function')) {
25
29
  return;
26
30
  }
31
+ var cachedRequest = Object.keys(results).map(function (key) {
32
+ return results[key].results.map(function (result) {
33
+ return {
34
+ indexName: result.index,
35
+ // We normalize the params received from the server as they can
36
+ // be serialized differently depending on the engine.
37
+ params: serializeQueryParameters(deserializeQueryParameters(result.params))
38
+ };
39
+ });
40
+ });
41
+ var cachedResults = Object.keys(results).reduce(function (acc, key) {
42
+ return acc.concat(results[key].results);
43
+ }, []);
27
44
 
28
45
  // Algoliasearch API Client >= v4
29
46
  // To hydrate the client we need to populate the cache with the data from
@@ -32,9 +49,10 @@ function hydrateSearchClient(client, results) {
32
49
  // for us to compute the key the same way as `algoliasearch-client` we need
33
50
  // to populate it on a custom key and override the `search` method to
34
51
  // search on it first.
35
- if (client.transporter && !client._cacheHydrated) {
52
+ if ('transporter' in client && !client._cacheHydrated) {
36
53
  client._cacheHydrated = true;
37
54
  var baseMethod = client.search;
55
+ // @ts-ignore wanting type checks for v3 on this would make this too complex
38
56
  client.search = function (requests) {
39
57
  for (var _len = arguments.length, methodArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
40
58
  methodArgs[_key - 1] = arguments[_key];
@@ -51,22 +69,11 @@ function hydrateSearchClient(client, results) {
51
69
  return baseMethod.apply(void 0, [requests].concat(methodArgs));
52
70
  });
53
71
  };
54
-
55
- // Populate the cache with the data from the server
56
72
  client.transporter.responsesCache.set({
57
73
  method: 'search',
58
- args: [Object.keys(results).reduce(function (acc, key) {
59
- return acc.concat(results[key].results.map(function (request) {
60
- return {
61
- indexName: request.index,
62
- params: request.params
63
- };
64
- }));
65
- }, [])]
74
+ args: cachedRequest
66
75
  }, {
67
- results: Object.keys(results).reduce(function (acc, key) {
68
- return acc.concat(results[key].results);
69
- }, [])
76
+ results: cachedResults
70
77
  });
71
78
  }
72
79
 
@@ -76,24 +83,27 @@ function hydrateSearchClient(client, results) {
76
83
  // a single-index result. You can find more information about the
77
84
  // computation of the key inside the client (see link below).
78
85
  // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240
79
- if (!client.transporter) {
86
+ if (!('transporter' in client)) {
80
87
  var cacheKey = "/1/indexes/*/queries_body_".concat(JSON.stringify({
81
- requests: Object.keys(results).reduce(function (acc, key) {
82
- return acc.concat(results[key].rawResults.map(function (request) {
83
- return {
84
- indexName: request.index,
85
- params: request.params
86
- };
87
- }));
88
- }, [])
88
+ requests: cachedRequest
89
89
  }));
90
90
  client.cache = _objectSpread(_objectSpread({}, client.cache), {}, _defineProperty({}, cacheKey, JSON.stringify({
91
- results: Object.keys(results).reduce(function (acc, key) {
92
- return acc.concat(results[key].rawResults);
93
- }, [])
91
+ results: Object.keys(results).map(function (key) {
92
+ return results[key].results;
93
+ })
94
94
  })));
95
95
  }
96
96
  }
97
+ function deserializeQueryParameters(parameters) {
98
+ return parameters.split('&').reduce(function (acc, parameter) {
99
+ var _parameter$split = parameter.split('='),
100
+ _parameter$split2 = _slicedToArray(_parameter$split, 2),
101
+ key = _parameter$split2[0],
102
+ value = _parameter$split2[1];
103
+ acc[key] = value ? decodeURIComponent(value) : '';
104
+ return acc;
105
+ }, {});
106
+ }
97
107
 
98
108
  // This function is copied from the algoliasearch v4 API Client. If modified,
99
109
  // consider updating it also in `serializeQueryParameters` from `@algolia/transporter`.
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '4.60.0';
7
+ var _default = '4.61.0';
8
8
  exports.default = _default;
@@ -13,12 +13,12 @@ var _ref4 = (0, _preact.h)("path", {
13
13
  });
14
14
  var _ref6 = (0, _preact.h)("g", {
15
15
  fill: "none",
16
- fillRule: "evenodd"
16
+ "fill-rule": "evenodd"
17
17
  }, (0, _preact.h)("g", {
18
18
  transform: "translate(1 1)",
19
- strokeWidth: "2"
19
+ "stroke-width": "2"
20
20
  }, (0, _preact.h)("circle", {
21
- strokeOpacity: ".5",
21
+ "stroke-opacity": ".5",
22
22
  cx: "18",
23
23
  cy: "18",
24
24
  r: "18"
@@ -55,7 +55,12 @@ var defaultTemplate = {
55
55
  },
56
56
  loadingIndicator: function loadingIndicator(_ref5) {
57
57
  var cssClasses = _ref5.cssClasses;
58
+ /* eslint-disable react/no-unknown-property */
59
+ // Preact supports kebab case attributes, and using camel case would
60
+ // require using `preact/compat`.
61
+ // @TODO: reconsider using the `react` ESLint preset
58
62
  return (0, _preact.h)("svg", {
63
+ "aria-label": "Results are loading",
59
64
  className: cssClasses.loadingIcon,
60
65
  width: "16",
61
66
  height: "16",
@@ -63,6 +68,7 @@ var defaultTemplate = {
63
68
  stroke: "#444",
64
69
  "aria-hidden": "true"
65
70
  }, _ref6);
71
+ /* eslint-enable react/no-unknown-property */
66
72
  }
67
73
  };
68
74
  var _default = defaultTemplate;
@@ -1130,11 +1130,21 @@ declare type DynamicWidgetsConnectorParams = {
1130
1130
  }>;
1131
1131
  /**
1132
1132
  * To prevent unneeded extra network requests when widgets mount or unmount,
1133
- * we request all facet values.
1133
+ * we request all facet values by default. If you want to only request the
1134
+ * facet values that are needed, you can set this option to the list of
1135
+ * attributes you want to display.
1136
+ *
1137
+ * If `facets` is set to `['*']`, we request all facet values.
1138
+ *
1139
+ * Any facets that are requested due to the `facetOrdering` result are always
1140
+ * requested by the widget that mounted itself.
1141
+ *
1142
+ * Setting `facets` to a value other than `['*']` will only prevent extra
1143
+ * requests if all potential facets are listed.
1134
1144
  *
1135
1145
  * @default ['*']
1136
1146
  */
1137
- facets?: ['*'] | never[];
1147
+ facets?: ['*'] | string[];
1138
1148
  /**
1139
1149
  * If you have more than 20 facet values pinned, you need to increase the
1140
1150
  * maxValuesPerFacet to at least that value.
@@ -3965,7 +3975,7 @@ declare type RatingMenuWidgetDescription = {
3965
3975
  };
3966
3976
  indexUiState: {
3967
3977
  ratingMenu: {
3968
- [attribute: string]: number;
3978
+ [attribute: string]: number | undefined;
3969
3979
  };
3970
3980
  };
3971
3981
  };