instantsearch.js 4.61.0 → 4.63.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 (33) hide show
  1. package/cjs/components/SearchBox/SearchBox.js +13 -7
  2. package/cjs/connectors/breadcrumb/connectBreadcrumb.js +10 -14
  3. package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +11 -13
  4. package/cjs/connectors/menu/connectMenu.js +11 -14
  5. package/cjs/connectors/numeric-menu/connectNumericMenu.js +10 -14
  6. package/cjs/connectors/rating-menu/connectRatingMenu.js +10 -14
  7. package/cjs/connectors/refinement-list/connectRefinementList.js +11 -13
  8. package/cjs/lib/InstantSearch.js +5 -2
  9. package/cjs/lib/routers/history.js +17 -4
  10. package/cjs/lib/version.js +1 -1
  11. package/cjs/middlewares/createInsightsMiddleware.js +16 -4
  12. package/dist/instantsearch.development.d.ts +20 -2
  13. package/dist/instantsearch.development.js +196 -155
  14. package/dist/instantsearch.development.js.map +1 -1
  15. package/dist/instantsearch.production.d.ts +20 -2
  16. package/dist/instantsearch.production.min.d.ts +20 -2
  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 +13 -7
  20. package/es/connectors/breadcrumb/connectBreadcrumb.js +10 -14
  21. package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +11 -13
  22. package/es/connectors/menu/connectMenu.js +11 -14
  23. package/es/connectors/numeric-menu/connectNumericMenu.js +10 -14
  24. package/es/connectors/rating-menu/connectRatingMenu.js +10 -14
  25. package/es/connectors/refinement-list/connectRefinementList.js +11 -13
  26. package/es/lib/InstantSearch.d.ts +10 -0
  27. package/es/lib/InstantSearch.js +5 -2
  28. package/es/lib/routers/history.d.ts +10 -2
  29. package/es/lib/routers/history.js +18 -5
  30. package/es/lib/version.d.ts +1 -1
  31. package/es/lib/version.js +1 -1
  32. package/es/middlewares/createInsightsMiddleware.js +16 -4
  33. package/package.json +10 -10
@@ -58,13 +58,15 @@ var SearchBox = /*#__PURE__*/function (_Component) {
58
58
  refine = _this$props.refine,
59
59
  onChange = _this$props.onChange;
60
60
  var query = event.target.value;
61
- if (searchAsYouType) {
62
- refine(query);
61
+ if (event.type === 'compositionend' || !event.isComposing) {
62
+ if (searchAsYouType) {
63
+ refine(query);
64
+ }
65
+ _this.setState({
66
+ query: query
67
+ });
68
+ onChange(event);
63
69
  }
64
- _this.setState({
65
- query: query
66
- });
67
- onChange(event);
68
70
  });
69
71
  _defineProperty(_assertThisInitialized(_this), "onSubmit", function (event) {
70
72
  var _this$props2 = _this.props,
@@ -174,7 +176,11 @@ var SearchBox = /*#__PURE__*/function (_Component) {
174
176
  ,
175
177
  spellCheck: "false",
176
178
  maxLength: 512,
177
- onInput: this.onInput,
179
+ onInput: this.onInput
180
+ // see: https://github.com/preactjs/preact/issues/1978
181
+ // eslint-disable-next-line react/no-unknown-property
182
+ ,
183
+ oncompositionend: this.onInput,
178
184
  onBlur: this.onBlur,
179
185
  onFocus: this.onFocus,
180
186
  "aria-label": ariaLabel
@@ -6,9 +6,6 @@ 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; }
12
9
  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; }
13
10
  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; }
14
11
  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; }
@@ -126,7 +123,7 @@ var connectBreadcrumb = function connectBreadcrumb(renderFn) {
126
123
  var path = searchParameters.getHierarchicalFacetBreadcrumb(hierarchicalFacetName);
127
124
  return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
128
125
  hierarchicalMenu: _objectSpread(_objectSpread({}, uiState.hierarchicalMenu), {}, _defineProperty({}, hierarchicalFacetName, path))
129
- }));
126
+ }), hierarchicalFacetName);
130
127
  },
131
128
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref4) {
132
129
  var uiState = _ref4.uiState;
@@ -177,18 +174,17 @@ function shiftItemsValues(array) {
177
174
  };
178
175
  });
179
176
  }
180
- function removeEmptyRefinementsFromUiState(indexUiState) {
181
- var hierarchicalMenu = indexUiState.hierarchicalMenu,
182
- indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded);
183
- if (!hierarchicalMenu) {
177
+ function removeEmptyRefinementsFromUiState(indexUiState, attribute) {
178
+ if (!indexUiState.hierarchicalMenu) {
184
179
  return indexUiState;
185
180
  }
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
- } : {});
181
+ if (!indexUiState.hierarchicalMenu[attribute] || !indexUiState.hierarchicalMenu[attribute].length) {
182
+ delete indexUiState.hierarchicalMenu[attribute];
183
+ }
184
+ if (Object.keys(indexUiState.hierarchicalMenu).length === 0) {
185
+ delete indexUiState.hierarchicalMenu;
186
+ }
187
+ return indexUiState;
192
188
  }
193
189
  var _default = connectBreadcrumb;
194
190
  exports.default = _default;
@@ -6,8 +6,7 @@ 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"],
10
- _excluded2 = ["hierarchicalMenu"];
9
+ var _excluded = ["name", "escapedValue", "data", "path"];
11
10
  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
11
  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
12
  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; }
@@ -208,7 +207,7 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
208
207
  var path = searchParameters.getHierarchicalFacetBreadcrumb(hierarchicalFacetName);
209
208
  return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
210
209
  hierarchicalMenu: _objectSpread(_objectSpread({}, uiState.hierarchicalMenu), {}, _defineProperty({}, hierarchicalFacetName, path))
211
- }));
210
+ }), hierarchicalFacetName);
212
211
  },
213
212
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
214
213
  var uiState = _ref6.uiState;
@@ -241,18 +240,17 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
241
240
  };
242
241
  };
243
242
  };
244
- function removeEmptyRefinementsFromUiState(indexUiState) {
245
- var hierarchicalMenu = indexUiState.hierarchicalMenu,
246
- indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded2);
247
- if (!hierarchicalMenu) {
243
+ function removeEmptyRefinementsFromUiState(indexUiState, attribute) {
244
+ if (!indexUiState.hierarchicalMenu) {
248
245
  return indexUiState;
249
246
  }
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
- } : {});
247
+ if (!indexUiState.hierarchicalMenu[attribute] || indexUiState.hierarchicalMenu[attribute].length === 0) {
248
+ delete indexUiState.hierarchicalMenu[attribute];
249
+ }
250
+ if (Object.keys(indexUiState.hierarchicalMenu).length === 0) {
251
+ delete indexUiState.hierarchicalMenu;
252
+ }
253
+ return indexUiState;
256
254
  }
257
255
  var _default = connectHierarchicalMenu;
258
256
  exports.default = _default;
@@ -5,8 +5,7 @@ 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"],
9
- _excluded2 = ["menu"];
8
+ var _excluded = ["name", "escapedValue", "path"];
10
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); }
11
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; }
12
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; }
@@ -180,7 +179,7 @@ var connectMenu = function connectMenu(renderFn) {
180
179
  value = _searchParameters$get2[0];
181
180
  return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
182
181
  menu: _objectSpread(_objectSpread({}, uiState.menu), {}, _defineProperty({}, attribute, value))
183
- }));
182
+ }), attribute);
184
183
  },
185
184
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref5) {
186
185
  var uiState = _ref5.uiState;
@@ -206,19 +205,17 @@ var connectMenu = function connectMenu(renderFn) {
206
205
  };
207
206
  };
208
207
  };
209
- function removeEmptyRefinementsFromUiState(indexUiState) {
210
- var menu = indexUiState.menu,
211
- indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded2);
212
- if (!menu) {
208
+ function removeEmptyRefinementsFromUiState(indexUiState, attribute) {
209
+ if (!indexUiState.menu) {
213
210
  return indexUiState;
214
211
  }
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
- } : {});
212
+ if (indexUiState.menu[attribute] === undefined) {
213
+ delete indexUiState.menu[attribute];
214
+ }
215
+ if (Object.keys(indexUiState.menu).length === 0) {
216
+ delete indexUiState.menu;
217
+ }
218
+ return indexUiState;
222
219
  }
223
220
  var _default = connectMenu;
224
221
  exports.default = _default;
@@ -5,10 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _utils = require("../../lib/utils");
8
- var _excluded = ["numericMenu"];
9
8
  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; }
12
9
  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; } } }; }
13
10
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
11
  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."); }
@@ -106,7 +103,7 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
106
103
  var max = values['<='] && values['<='][0] || '';
107
104
  return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
108
105
  numericMenu: _objectSpread(_objectSpread({}, uiState.numericMenu), {}, _defineProperty({}, attribute, "".concat(min, ":").concat(max)))
109
- }));
106
+ }), attribute);
110
107
  },
111
108
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
112
109
  var uiState = _ref6.uiState;
@@ -268,18 +265,17 @@ function getRefinedState(state, attribute, facetValue) {
268
265
  function hasNumericRefinement(currentRefinements, operator, value) {
269
266
  return currentRefinements[operator] !== undefined && currentRefinements[operator].includes(value);
270
267
  }
271
- function removeEmptyRefinementsFromUiState(indexUiState) {
272
- var numericMenu = indexUiState.numericMenu,
273
- indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded);
274
- if (!numericMenu) {
268
+ function removeEmptyRefinementsFromUiState(indexUiState, attribute) {
269
+ if (!indexUiState.numericMenu) {
275
270
  return indexUiState;
276
271
  }
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
- } : {});
272
+ if (indexUiState.numericMenu[attribute] === ':') {
273
+ delete indexUiState.numericMenu[attribute];
274
+ }
275
+ if (Object.keys(indexUiState.numericMenu).length === 0) {
276
+ delete indexUiState.numericMenu;
277
+ }
278
+ return indexUiState;
283
279
  }
284
280
  var _default = connectNumericMenu;
285
281
  exports.default = _default;
@@ -6,9 +6,6 @@ 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; }
12
9
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
13
10
  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."); }
14
11
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -267,7 +264,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
267
264
  var value = _getRefinedStar(searchParameters);
268
265
  return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
269
266
  ratingMenu: _objectSpread(_objectSpread({}, uiState.ratingMenu), {}, _defineProperty({}, attribute, typeof value === 'number' ? value : undefined))
270
- }));
267
+ }), attribute);
271
268
  },
272
269
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref8) {
273
270
  var uiState = _ref8.uiState;
@@ -284,18 +281,17 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
284
281
  };
285
282
  };
286
283
  };
287
- function removeEmptyRefinementsFromUiState(indexUiState) {
288
- var ratingMenu = indexUiState.ratingMenu,
289
- indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded);
290
- if (!ratingMenu) {
284
+ function removeEmptyRefinementsFromUiState(indexUiState, attribute) {
285
+ if (!indexUiState.ratingMenu) {
291
286
  return indexUiState;
292
287
  }
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
- } : {});
288
+ if (typeof indexUiState.ratingMenu[attribute] !== 'number') {
289
+ delete indexUiState.ratingMenu[attribute];
290
+ }
291
+ if (Object.keys(indexUiState.ratingMenu).length === 0) {
292
+ delete indexUiState.ratingMenu;
293
+ }
294
+ return indexUiState;
299
295
  }
300
296
  var _default = connectRatingMenu;
301
297
  exports.default = _default;
@@ -7,8 +7,7 @@ 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"],
11
- _excluded3 = ["refinementList"];
10
+ _excluded2 = ["escapedValue", "value"];
12
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; }
13
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; }
14
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; }
@@ -252,7 +251,7 @@ var connectRefinementList = function connectRefinementList(renderFn) {
252
251
  var values = operator === 'or' ? searchParameters.getDisjunctiveRefinements(attribute) : searchParameters.getConjunctiveRefinements(attribute);
253
252
  return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {
254
253
  refinementList: _objectSpread(_objectSpread({}, uiState.refinementList), {}, _defineProperty({}, attribute, values))
255
- }));
254
+ }), attribute);
256
255
  },
257
256
  getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {
258
257
  var uiState = _ref6.uiState;
@@ -282,18 +281,17 @@ var connectRefinementList = function connectRefinementList(renderFn) {
282
281
  };
283
282
  };
284
283
  };
285
- function removeEmptyRefinementsFromUiState(indexUiState) {
286
- var refinementList = indexUiState.refinementList,
287
- indexUiStateBase = _objectWithoutProperties(indexUiState, _excluded3);
288
- if (!refinementList) {
284
+ function removeEmptyRefinementsFromUiState(indexUiState, attribute) {
285
+ if (!indexUiState.refinementList) {
289
286
  return indexUiState;
290
287
  }
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
- } : {});
288
+ if (!indexUiState.refinementList[attribute] || indexUiState.refinementList[attribute].length === 0) {
289
+ delete indexUiState.refinementList[attribute];
290
+ }
291
+ if (Object.keys(indexUiState.refinementList).length === 0) {
292
+ delete indexUiState.refinementList;
293
+ }
294
+ return indexUiState;
297
295
  }
298
296
  var _default = connectRefinementList;
299
297
  exports.default = _default;
@@ -44,7 +44,8 @@ function defaultCreateURL() {
44
44
  * Global options for an InstantSearch instance.
45
45
  */
46
46
  var INSTANTSEARCH_FUTURE_DEFAULTS = {
47
- preserveSharedStateOnUnmount: false
47
+ preserveSharedStateOnUnmount: false,
48
+ persistHierarchicalRootCount: false
48
49
  };
49
50
 
50
51
  /**
@@ -381,7 +382,9 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
381
382
  // DerivedHelper scoped into the `index` widgets.
382
383
  // In Vue InstantSearch' hydrate, a main helper gets set before start, so
383
384
  // we need to respect this helper as a way to keep all listeners correct.
384
- var mainHelper = this.mainHelper || (0, _algoliasearchHelper.default)(this.client, this.indexName);
385
+ var mainHelper = this.mainHelper || (0, _algoliasearchHelper.default)(this.client, this.indexName, undefined, {
386
+ persistHierarchicalRootCount: this.future.persistHierarchicalRootCount
387
+ });
385
388
  mainHelper.search = function () {
386
389
  _this3.status = 'loading';
387
390
  _this3.scheduleRender(false);
@@ -36,7 +36,8 @@ var BrowserHistory = /*#__PURE__*/function () {
36
36
  getLocation = _ref.getLocation,
37
37
  start = _ref.start,
38
38
  dispose = _ref.dispose,
39
- push = _ref.push;
39
+ push = _ref.push,
40
+ cleanUrlOnDispose = _ref.cleanUrlOnDispose;
40
41
  _classCallCheck(this, BrowserHistory);
41
42
  _defineProperty(this, "$$type", 'ais.browser');
42
43
  /**
@@ -86,6 +87,7 @@ var BrowserHistory = /*#__PURE__*/function () {
86
87
  _defineProperty(this, "_start", void 0);
87
88
  _defineProperty(this, "_dispose", void 0);
88
89
  _defineProperty(this, "_push", void 0);
90
+ _defineProperty(this, "_cleanUrlOnDispose", void 0);
89
91
  this.windowTitle = windowTitle;
90
92
  this.writeTimer = undefined;
91
93
  this.writeDelay = writeDelay;
@@ -95,6 +97,13 @@ var BrowserHistory = /*#__PURE__*/function () {
95
97
  this._start = start;
96
98
  this._dispose = dispose;
97
99
  this._push = push;
100
+ this._cleanUrlOnDispose = typeof cleanUrlOnDispose === 'undefined' ? true : cleanUrlOnDispose;
101
+ if (process.env.NODE_ENV === 'development' && typeof cleanUrlOnDispose === 'undefined') {
102
+ // eslint-disable-next-line no-console
103
+ console.info("Starting from the next major version, InstantSearch will not clean up the URL from active refinements when it is disposed.\n\nWe recommend setting `cleanUrlOnDispose` to false to adopt this change today.\nTo stay with the current behaviour and remove this warning, set the option to true.\n\nSee documentation: ".concat((0, _utils.createDocumentationLink)({
104
+ name: 'history-router'
105
+ }), "#widget-param-cleanurlondispose"));
106
+ }
98
107
  (0, _utils.safelyRunOnBrowser)(function (_ref2) {
99
108
  var window = _ref2.window;
100
109
  var title = _this.windowTitle && _this.windowTitle(_this.read());
@@ -222,7 +231,9 @@ var BrowserHistory = /*#__PURE__*/function () {
222
231
  if (this.writeTimer) {
223
232
  clearTimeout(this.writeTimer);
224
233
  }
225
- this.write({});
234
+ if (this._cleanUrlOnDispose) {
235
+ this.write({});
236
+ }
226
237
  }
227
238
  }, {
228
239
  key: "start",
@@ -311,7 +322,8 @@ function historyRouter() {
311
322
  } : _ref7$getLocation,
312
323
  start = _ref7.start,
313
324
  dispose = _ref7.dispose,
314
- push = _ref7.push;
325
+ push = _ref7.push,
326
+ cleanUrlOnDispose = _ref7.cleanUrlOnDispose;
315
327
  return new BrowserHistory({
316
328
  createURL: createURL,
317
329
  parseURL: parseURL,
@@ -320,6 +332,7 @@ function historyRouter() {
320
332
  getLocation: getLocation,
321
333
  start: start,
322
334
  dispose: dispose,
323
- push: push
335
+ push: push,
336
+ cleanUrlOnDispose: cleanUrlOnDispose
324
337
  });
325
338
  }
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '4.61.0';
7
+ var _default = '4.63.0';
8
8
  exports.default = _default;
@@ -22,7 +22,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
22
22
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
23
23
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
24
24
  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; }
25
- var ALGOLIA_INSIGHTS_VERSION = '2.6.0';
25
+ var ALGOLIA_INSIGHTS_VERSION = '2.13.0';
26
26
  var ALGOLIA_INSIGHTS_SRC = "https://cdn.jsdelivr.net/npm/search-insights@".concat(ALGOLIA_INSIGHTS_VERSION, "/dist/search-insights.min.js");
27
27
  function createInsightsMiddleware() {
28
28
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -106,7 +106,7 @@ function createInsightsMiddleware() {
106
106
  // set it later on.
107
107
  //
108
108
  // Otherwise, the `init` call might override it with anonymous user token.
109
- userTokenBeforeInit = userToken;
109
+ userTokenBeforeInit = normalizeUserToken(userToken);
110
110
  });
111
111
 
112
112
  // Only `init` if the `insightsInitParams` option is passed or
@@ -162,13 +162,14 @@ function createInsightsMiddleware() {
162
162
  }
163
163
  var setUserTokenToSearch = function setUserTokenToSearch(userToken) {
164
164
  var immediate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
165
- if (!userToken) {
165
+ var normalizedUserToken = normalizeUserToken(userToken);
166
+ if (!normalizedUserToken) {
166
167
  return;
167
168
  }
168
169
  var existingToken = helper.state.userToken;
169
170
  function applyToken() {
170
171
  helper.overrideStateWithoutTriggeringChangeEvent(_objectSpread(_objectSpread({}, helper.state), {}, {
171
- userToken: userToken
172
+ userToken: normalizedUserToken
172
173
  }));
173
174
  if (existingToken && existingToken !== userToken) {
174
175
  instantSearchInstance.scheduleSearch();
@@ -265,4 +266,15 @@ function isModernInsightsClient(client) {
265
266
  /* eslint-enable @typescript-eslint/naming-convention */
266
267
 
267
268
  return v3 || v2_6 || v1_10;
269
+ }
270
+
271
+ /**
272
+ * While `search-insights` supports both string and number user tokens,
273
+ * the Search API only accepts strings. This function normalizes the user token.
274
+ */
275
+ function normalizeUserToken(userToken) {
276
+ if (!userToken) {
277
+ return undefined;
278
+ }
279
+ return typeof userToken === 'number' ? userToken.toString() : userToken;
268
280
  }
@@ -486,11 +486,12 @@ declare class BrowserHistory<TRouteState> implements Router<TRouteState> {
486
486
  private _start?;
487
487
  private _dispose?;
488
488
  private _push?;
489
+ private _cleanUrlOnDispose;
489
490
  /**
490
491
  * Initializes a new storage provider that syncs the search state to the URL
491
492
  * using web APIs (`window.location.pushState` and `onpopstate` event).
492
493
  */
493
- constructor({ windowTitle, writeDelay, createURL, parseURL, getLocation, start, dispose, push, }: BrowserHistoryArgs<TRouteState>);
494
+ constructor({ windowTitle, writeDelay, createURL, parseURL, getLocation, start, dispose, push, cleanUrlOnDispose, }: BrowserHistoryArgs<TRouteState>);
494
495
  /**
495
496
  * Reads the URL and returns a syncable UI search state.
496
497
  */
@@ -529,6 +530,13 @@ declare type BrowserHistoryArgs<TRouteState> = {
529
530
  start?: (onUpdate: () => void) => void;
530
531
  dispose?: () => void;
531
532
  push?: (url: string) => void;
533
+ /**
534
+ * Whether the URL should be cleaned up when the router is disposed.
535
+ * This can be useful when closing a modal containing InstantSearch, to
536
+ * remove active refinements from the URL.
537
+ * @default true
538
+ */
539
+ cleanUrlOnDispose?: boolean;
532
540
  };
533
541
 
534
542
  declare type BuiltInBindEventForHits = (eventType: string, hits: Hit | Hit[], eventName?: string, additionalData?: Record<string, any>) => string;
@@ -1813,7 +1821,7 @@ declare type HighlightProps_2 = Omit<HighlightProps_3, 'classNames'> & {
1813
1821
  classNames?: Partial<HighlightClassNames>;
1814
1822
  };
1815
1823
 
1816
- declare function historyRouter<TRouteState = UiState>({ createURL, parseURL, writeDelay, windowTitle, getLocation, start, dispose, push, }?: Partial<BrowserHistoryArgs<TRouteState>>): BrowserHistory<TRouteState>;
1824
+ declare function historyRouter<TRouteState = UiState>({ createURL, parseURL, writeDelay, windowTitle, getLocation, start, dispose, push, cleanUrlOnDispose, }?: Partial<BrowserHistoryArgs<TRouteState>>): BrowserHistory<TRouteState>;
1817
1825
 
1818
1826
  declare type Hit<THit extends BaseHit = Record<string, any>> = {
1819
1827
  __position: number;
@@ -2627,6 +2635,16 @@ declare type InstantSearchOptions<TUiState extends UiState = UiState, TRouteStat
2627
2635
  * @default false
2628
2636
  */
2629
2637
  preserveSharedStateOnUnmount?: boolean;
2638
+ /**
2639
+ * Changes the way root levels of hierarchical facets have their count displayed.
2640
+ *
2641
+ * If `false` (by default), the count of the refined root level is updated to match the count of the actively refined parent level.
2642
+ *
2643
+ * If `true`, the count of the root level stays the same as the count of all children levels.
2644
+ *
2645
+ * @default false
2646
+ */
2647
+ persistHierarchicalRootCount?: boolean;
2630
2648
  };
2631
2649
  };
2632
2650