instantsearch.js 4.43.1 → 4.45.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 (58) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/cjs/components/Highlight/Highlight.js +33 -0
  3. package/cjs/components/InternalHighlight/InternalHighlight.js +16 -0
  4. package/cjs/components/ReverseHighlight/ReverseHighlight.js +33 -0
  5. package/cjs/components/ReverseSnippet/ReverseSnippet.js +33 -0
  6. package/cjs/components/Snippet/Snippet.js +33 -0
  7. package/cjs/connectors/hits-per-page/connectHitsPerPage.js +3 -1
  8. package/cjs/connectors/numeric-menu/connectNumericMenu.js +31 -43
  9. package/cjs/connectors/range/connectRange.js +7 -46
  10. package/cjs/connectors/rating-menu/connectRatingMenu.js +8 -2
  11. package/cjs/connectors/sort-by/connectSortBy.js +3 -1
  12. package/cjs/helpers/components/Highlight.js +45 -0
  13. package/cjs/helpers/components/ReverseHighlight.js +58 -0
  14. package/cjs/helpers/components/ReverseSnippet.js +58 -0
  15. package/cjs/helpers/components/Snippet.js +45 -0
  16. package/cjs/helpers/components/index.js +57 -0
  17. package/cjs/lib/version.js +1 -1
  18. package/dist/instantsearch.development.d.ts +29 -9
  19. package/dist/instantsearch.development.js +109 -120
  20. package/dist/instantsearch.development.js.map +1 -1
  21. package/dist/instantsearch.production.d.ts +29 -9
  22. package/dist/instantsearch.production.min.d.ts +29 -9
  23. package/dist/instantsearch.production.min.js +2 -2
  24. package/dist/instantsearch.production.min.js.map +1 -1
  25. package/es/components/Highlight/Highlight.d.ts +7 -0
  26. package/es/components/Highlight/Highlight.js +24 -0
  27. package/es/components/InternalHighlight/InternalHighlight.d.ts +2 -0
  28. package/es/components/InternalHighlight/InternalHighlight.js +6 -0
  29. package/es/components/ReverseHighlight/ReverseHighlight.d.ts +7 -0
  30. package/es/components/ReverseHighlight/ReverseHighlight.js +24 -0
  31. package/es/components/ReverseSnippet/ReverseSnippet.d.ts +7 -0
  32. package/es/components/ReverseSnippet/ReverseSnippet.js +24 -0
  33. package/es/components/Snippet/Snippet.d.ts +7 -0
  34. package/es/components/Snippet/Snippet.js +24 -0
  35. package/es/connectors/geo-search/connectGeoSearch.d.ts +10 -10
  36. package/es/connectors/hits-per-page/connectHitsPerPage.d.ts +5 -0
  37. package/es/connectors/hits-per-page/connectHitsPerPage.js +3 -1
  38. package/es/connectors/numeric-menu/connectNumericMenu.d.ts +8 -0
  39. package/es/connectors/numeric-menu/connectNumericMenu.js +32 -44
  40. package/es/connectors/range/connectRange.js +8 -47
  41. package/es/connectors/rating-menu/connectRatingMenu.d.ts +2 -0
  42. package/es/connectors/rating-menu/connectRatingMenu.js +8 -2
  43. package/es/connectors/sort-by/connectSortBy.d.ts +5 -0
  44. package/es/connectors/sort-by/connectSortBy.js +3 -1
  45. package/es/helpers/components/Highlight.d.ts +10 -0
  46. package/es/helpers/components/Highlight.js +31 -0
  47. package/es/helpers/components/ReverseHighlight.d.ts +10 -0
  48. package/es/helpers/components/ReverseHighlight.js +44 -0
  49. package/es/helpers/components/ReverseSnippet.d.ts +10 -0
  50. package/es/helpers/components/ReverseSnippet.js +44 -0
  51. package/es/helpers/components/Snippet.d.ts +10 -0
  52. package/es/helpers/components/Snippet.js +31 -0
  53. package/es/helpers/components/index.d.ts +4 -0
  54. package/es/helpers/components/index.js +4 -0
  55. package/es/lib/version.d.ts +1 -1
  56. package/es/lib/version.js +1 -1
  57. package/es/types/utils.d.ts +4 -0
  58. package/package.json +6 -3
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Snippet = Snippet;
7
+
8
+ var _preact = require("preact");
9
+
10
+ var _Snippet = require("../../components/Snippet/Snippet.js");
11
+
12
+ var _getHighlightedParts = _interopRequireDefault(require("../../lib/utils/getHighlightedParts.js"));
13
+
14
+ var _getPropertyByPath = _interopRequireDefault(require("../../lib/utils/getPropertyByPath.js"));
15
+
16
+ var _unescape = _interopRequireDefault(require("../../lib/utils/unescape.js"));
17
+
18
+ var _logger = require("../../lib/utils/logger.js");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
+
24
+ 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; }
25
+
26
+ 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; }
27
+
28
+ function Snippet(_ref) {
29
+ var hit = _ref.hit,
30
+ attribute = _ref.attribute,
31
+ cssClasses = _ref.cssClasses,
32
+ props = _objectWithoutProperties(_ref, ["hit", "attribute", "cssClasses"]);
33
+
34
+ var property = (0, _getPropertyByPath.default)(hit._snippetResult, attribute) || [];
35
+ var properties = Array.isArray(property) ? property : [property];
36
+ process.env.NODE_ENV === 'development' ? (0, _logger.warning)(Boolean(properties.length), "Could not enable snippet for \"".concat(attribute.toString(), "\", will display an empty string.\nPlease check whether this attribute exists and is specified in `attributesToSnippet`.\n\nSee: https://alg.li/highlighting\n")) : void 0;
37
+ var parts = properties.map(function (_ref2) {
38
+ var value = _ref2.value;
39
+ return (0, _getHighlightedParts.default)((0, _unescape.default)(value || ''));
40
+ });
41
+ return (0, _preact.h)(_Snippet.Snippet, _extends({}, props, {
42
+ parts: parts,
43
+ classNames: cssClasses
44
+ }));
45
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _Highlight = require("./Highlight.js");
8
+
9
+ Object.keys(_Highlight).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _Highlight[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _Highlight[key];
16
+ }
17
+ });
18
+ });
19
+
20
+ var _ReverseHighlight = require("./ReverseHighlight.js");
21
+
22
+ Object.keys(_ReverseHighlight).forEach(function (key) {
23
+ if (key === "default" || key === "__esModule") return;
24
+ if (key in exports && exports[key] === _ReverseHighlight[key]) return;
25
+ Object.defineProperty(exports, key, {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _ReverseHighlight[key];
29
+ }
30
+ });
31
+ });
32
+
33
+ var _ReverseSnippet = require("./ReverseSnippet.js");
34
+
35
+ Object.keys(_ReverseSnippet).forEach(function (key) {
36
+ if (key === "default" || key === "__esModule") return;
37
+ if (key in exports && exports[key] === _ReverseSnippet[key]) return;
38
+ Object.defineProperty(exports, key, {
39
+ enumerable: true,
40
+ get: function get() {
41
+ return _ReverseSnippet[key];
42
+ }
43
+ });
44
+ });
45
+
46
+ var _Snippet = require("./Snippet.js");
47
+
48
+ Object.keys(_Snippet).forEach(function (key) {
49
+ if (key === "default" || key === "__esModule") return;
50
+ if (key in exports && exports[key] === _Snippet[key]) return;
51
+ Object.defineProperty(exports, key, {
52
+ enumerable: true,
53
+ get: function get() {
54
+ return _Snippet[key];
55
+ }
56
+ });
57
+ });
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '4.43.1';
7
+ var _default = '4.45.0';
8
8
  exports.default = _default;
@@ -1169,7 +1169,7 @@ declare const EXPERIMENTAL_connectDynamicWidgets: DynamicWidgetsConnector;
1169
1169
  /** @deprecated use dynamicWidgets */
1170
1170
  declare const EXPERIMENTAL_dynamicWidgets: DynamicWidgetsWidget;
1171
1171
 
1172
- declare type GeoHit = Hit & Required<Pick<Hit, '_geoloc'>>;
1172
+ declare type GeoHit<THit extends BaseHit = Record<string, any>> = Hit<THit> & Required<Pick<Hit, '_geoloc'>>;
1173
1173
 
1174
1174
  declare type GeoLoc = {
1175
1175
  lat: number;
@@ -1191,9 +1191,9 @@ declare type GeoLoc = {
1191
1191
  */
1192
1192
  declare const geoSearch: GeoSearchWidget;
1193
1193
 
1194
- declare type GeoSearchConnector = Connector<GeoSearchWidgetDescription, GeoSearchConnectorParams>;
1194
+ declare type GeoSearchConnector<THit extends BaseHit = Record<string, any>> = Connector<GeoSearchWidgetDescription<THit>, GeoSearchConnectorParams<THit>>;
1195
1195
 
1196
- declare type GeoSearchConnectorParams = {
1196
+ declare type GeoSearchConnectorParams<THit extends BaseHit = Record<string, any>> = {
1197
1197
  /**
1198
1198
  * If true, refine will be triggered as you move the map.
1199
1199
  * @default true
@@ -1203,7 +1203,7 @@ declare type GeoSearchConnectorParams = {
1203
1203
  * Function to transform the items passed to the templates.
1204
1204
  * @default items => items
1205
1205
  */
1206
- transformItems?: TransformItems<GeoHit>;
1206
+ transformItems?: TransformItems<GeoHit<THit>>;
1207
1207
  };
1208
1208
 
1209
1209
  declare type GeoSearchCSSClasses = Partial<{
@@ -1249,7 +1249,7 @@ declare type GeoSearchMarker<TOptions> = {
1249
1249
  };
1250
1250
  };
1251
1251
 
1252
- declare type GeoSearchRenderState = {
1252
+ declare type GeoSearchRenderState<THit extends BaseHit = Record<string, any>> = {
1253
1253
  /**
1254
1254
  * Reset the current bounding box refinement.
1255
1255
  */
@@ -1273,7 +1273,7 @@ declare type GeoSearchRenderState = {
1273
1273
  /**
1274
1274
  * The matched hits from Algolia API.
1275
1275
  */
1276
- items: GeoHit[];
1276
+ items: Array<GeoHit<THit>>;
1277
1277
  /**
1278
1278
  * The current position of the search.
1279
1279
  */
@@ -1313,11 +1313,11 @@ declare type GeoSearchWidget = WidgetFactory<GeoSearchWidgetDescription & {
1313
1313
  $$widgetType: 'ais.geoSearch';
1314
1314
  }, GeoSearchConnectorParams, GeoSearchWidgetParams>;
1315
1315
 
1316
- declare type GeoSearchWidgetDescription = {
1316
+ declare type GeoSearchWidgetDescription<THit extends BaseHit = Record<string, any>> = {
1317
1317
  $$type: 'ais.geoSearch';
1318
- renderState: GeoSearchRenderState;
1318
+ renderState: GeoSearchRenderState<THit>;
1319
1319
  indexRenderState: {
1320
- geoSearch: WidgetRenderState<GeoSearchRenderState, GeoSearchConnectorParams>;
1320
+ geoSearch: WidgetRenderState<GeoSearchRenderState<THit>, GeoSearchConnectorParams<THit>>;
1321
1321
  };
1322
1322
  indexUiState: {
1323
1323
  geoSearch: {
@@ -1872,8 +1872,13 @@ declare type HitsPerPageRenderState = {
1872
1872
  refine: (value: number) => void;
1873
1873
  /**
1874
1874
  * Indicates whether or not the search has results.
1875
+ * @deprecated Use `canRefine` instead.
1875
1876
  */
1876
1877
  hasNoResults: boolean;
1878
+ /**
1879
+ * Indicates if search state can be refined.
1880
+ */
1881
+ canRefine: boolean;
1877
1882
  };
1878
1883
 
1879
1884
  declare type HitsPerPageRenderStateItem = {
@@ -2855,8 +2860,16 @@ declare type NumericMenuRenderState = {
2855
2860
  createURL: CreateURL<NumericMenuRenderStateItem['value']>;
2856
2861
  /**
2857
2862
  * `true` if the last search contains no result
2863
+ * @deprecated Use `canRefine` instead.
2858
2864
  */
2859
2865
  hasNoResults: boolean;
2866
+ /**
2867
+ * Indicates if search state can be refined.
2868
+ *
2869
+ * This is `true` if the last search contains no result and
2870
+ * "All" range is selected
2871
+ */
2872
+ canRefine: boolean;
2860
2873
  /**
2861
2874
  * Sets the selected value and trigger a new search
2862
2875
  */
@@ -3721,6 +3734,8 @@ declare type RatingMenuRenderState = {
3721
3734
  refine: (value: string) => void;
3722
3735
  /**
3723
3736
  * `true` if the last search contains no result.
3737
+ *
3738
+ * @deprecated Use `canRefine` instead.
3724
3739
  */
3725
3740
  hasNoResults: boolean;
3726
3741
  /**
@@ -4683,8 +4698,13 @@ declare type SortByRenderState = {
4683
4698
  refine: (value: string) => void;
4684
4699
  /**
4685
4700
  * `true` if the last search contains no result.
4701
+ * @deprecated Use `canRefine` instead.
4686
4702
  */
4687
4703
  hasNoResults: boolean;
4704
+ /**
4705
+ * `true` if we can refine.
4706
+ */
4707
+ canRefine: boolean;
4688
4708
  };
4689
4709
 
4690
4710
  declare type SortByWidget = WidgetFactory<SortByWidgetDescription & {
@@ -1,4 +1,4 @@
1
- /*! InstantSearch.js 4.43.1 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch.js */
1
+ /*! InstantSearch.js 4.45.0 | © Algolia, Inc. and contributors; MIT License | https://github.com/algolia/instantsearch.js */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
@@ -297,6 +297,63 @@
297
297
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
298
298
  }
299
299
 
300
+ function _createForOfIteratorHelper(o, allowArrayLike) {
301
+ var it;
302
+
303
+ if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
304
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
305
+ if (it) o = it;
306
+ var i = 0;
307
+
308
+ var F = function () {};
309
+
310
+ return {
311
+ s: F,
312
+ n: function () {
313
+ if (i >= o.length) return {
314
+ done: true
315
+ };
316
+ return {
317
+ done: false,
318
+ value: o[i++]
319
+ };
320
+ },
321
+ e: function (e) {
322
+ throw e;
323
+ },
324
+ f: F
325
+ };
326
+ }
327
+
328
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
329
+ }
330
+
331
+ var normalCompletion = true,
332
+ didErr = false,
333
+ err;
334
+ return {
335
+ s: function () {
336
+ it = o[Symbol.iterator]();
337
+ },
338
+ n: function () {
339
+ var step = it.next();
340
+ normalCompletion = step.done;
341
+ return step;
342
+ },
343
+ e: function (e) {
344
+ didErr = true;
345
+ err = e;
346
+ },
347
+ f: function () {
348
+ try {
349
+ if (!normalCompletion && it.return != null) it.return();
350
+ } finally {
351
+ if (didErr) throw err;
352
+ }
353
+ }
354
+ };
355
+ }
356
+
300
357
  function clone(value) {
301
358
  if (typeof value === 'object' && value !== null) {
302
359
  return _merge(Array.isArray(value) ? [] : {}, value);
@@ -7918,31 +7975,6 @@
7918
7975
  }
7919
7976
  }
7920
7977
 
7921
- function convertNumericRefinementsToFilters(state, attribute) {
7922
- if (!state) {
7923
- return null;
7924
- }
7925
-
7926
- var filtersObj = state.numericRefinements[attribute];
7927
- /*
7928
- filtersObj === {
7929
- "<=": [10],
7930
- "=": [],
7931
- ">=": [5]
7932
- }
7933
- */
7934
-
7935
- var filters = [];
7936
- Object.keys(filtersObj).filter(function (operator) {
7937
- return Array.isArray(filtersObj[operator]) && filtersObj[operator].length > 0;
7938
- }).forEach(function (operator) {
7939
- filtersObj[operator].forEach(function (value) {
7940
- filters.push("".concat(attribute).concat(operator).concat(value));
7941
- });
7942
- });
7943
- return filters;
7944
- }
7945
-
7946
7978
  // copied from
7947
7979
  // https://github.com/algolia/autocomplete.js/blob/307a7acc4283e10a19cb7d067f04f1bea79dc56f/packages/autocomplete-core/src/utils/createConcurrentSafePromise.ts#L1:L1
7948
7980
 
@@ -8603,7 +8635,7 @@
8603
8635
  instantSearchInstance.renderState = _objectSpread2(_objectSpread2({}, instantSearchInstance.renderState), {}, _defineProperty({}, parentIndexName, _objectSpread2(_objectSpread2({}, instantSearchInstance.renderState[parentIndexName]), renderState)));
8604
8636
  }
8605
8637
 
8606
- var version$1 = '4.43.1';
8638
+ var version$1 = '4.45.0';
8607
8639
 
8608
8640
  var NAMESPACE = 'ais';
8609
8641
  var component = function component(componentName) {
@@ -11637,6 +11669,7 @@
11637
11669
  results = _ref5.results,
11638
11670
  createURL = _ref5.createURL,
11639
11671
  helper = _ref5.helper;
11672
+ var canRefine = results ? results.nbHits > 0 : false;
11640
11673
  return {
11641
11674
  items: transformItems(normalizeItems(state), {
11642
11675
  results: results
@@ -11646,7 +11679,8 @@
11646
11679
  state: state,
11647
11680
  createURL: createURL
11648
11681
  }),
11649
- hasNoResults: results ? results.nbHits === 0 : true,
11682
+ hasNoResults: !canRefine,
11683
+ canRefine: canRefine,
11650
11684
  widgetParams: widgetParams
11651
11685
  };
11652
11686
  },
@@ -12117,47 +12151,12 @@
12117
12151
  var $$type = 'ais.numericMenu';
12118
12152
 
12119
12153
  var createSendEvent = function createSendEvent(_ref) {
12120
- var instantSearchInstance = _ref.instantSearchInstance,
12121
- helper = _ref.helper,
12122
- attribute = _ref.attribute;
12154
+ var instantSearchInstance = _ref.instantSearchInstance;
12123
12155
  return function () {
12124
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12125
- args[_key] = arguments[_key];
12126
- }
12127
-
12128
- if (args.length === 1) {
12129
- instantSearchInstance.sendEventToInsights(args[0]);
12156
+ if (arguments.length === 1) {
12157
+ instantSearchInstance.sendEventToInsights(arguments.length <= 0 ? undefined : arguments[0]);
12130
12158
  return;
12131
12159
  }
12132
-
12133
- var eventType = args[0],
12134
- facetValue = args[1],
12135
- _args$ = args[2],
12136
- eventName = _args$ === void 0 ? 'Filter Applied' : _args$;
12137
-
12138
- if (eventType !== 'click') {
12139
- return;
12140
- } // facetValue === "%7B%22start%22:5,%22end%22:10%7D"
12141
-
12142
-
12143
- var filters = convertNumericRefinementsToFilters(getRefinedState(helper.state, attribute, facetValue), attribute);
12144
-
12145
- if (filters && filters.length > 0) {
12146
- /*
12147
- filters === ["price<=10", "price>=5"]
12148
- */
12149
- instantSearchInstance.sendEventToInsights({
12150
- insightsMethod: 'clickedFilters',
12151
- widgetType: $$type,
12152
- eventType: eventType,
12153
- payload: {
12154
- eventName: eventName,
12155
- index: helper.getIndex(),
12156
- filters: filters
12157
- },
12158
- attribute: attribute
12159
- });
12160
- }
12161
12160
  };
12162
12161
  };
12163
12162
 
@@ -12301,18 +12300,39 @@
12301
12300
 
12302
12301
  if (!connectorState.sendEvent) {
12303
12302
  connectorState.sendEvent = createSendEvent({
12304
- instantSearchInstance: instantSearchInstance,
12305
- helper: helper,
12306
- attribute: attribute
12303
+ instantSearchInstance: instantSearchInstance
12307
12304
  });
12308
12305
  }
12309
12306
 
12307
+ var hasNoResults = results ? results.nbHits === 0 : true;
12308
+ var preparedItems = prepareItems(state);
12309
+ var allIsSelected = true;
12310
+
12311
+ var _iterator = _createForOfIteratorHelper(preparedItems),
12312
+ _step;
12313
+
12314
+ try {
12315
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
12316
+ var item = _step.value;
12317
+
12318
+ if (item.isRefined && decodeURI(item.value) !== '{}') {
12319
+ allIsSelected = false;
12320
+ break;
12321
+ }
12322
+ }
12323
+ } catch (err) {
12324
+ _iterator.e(err);
12325
+ } finally {
12326
+ _iterator.f();
12327
+ }
12328
+
12310
12329
  return {
12311
12330
  createURL: connectorState.createURL(state),
12312
- items: transformItems(prepareItems(state), {
12331
+ items: transformItems(preparedItems, {
12313
12332
  results: results
12314
12333
  }),
12315
- hasNoResults: results ? results.nbHits === 0 : true,
12334
+ hasNoResults: hasNoResults,
12335
+ canRefine: !(hasNoResults && allIsSelected),
12316
12336
  refine: connectorState.refine,
12317
12337
  sendEvent: connectorState.sendEvent,
12318
12338
  widgetParams: widgetParams
@@ -12729,50 +12749,12 @@
12729
12749
  return null;
12730
12750
  };
12731
12751
 
12732
- var sendEventWithRefinedState = function sendEventWithRefinedState(refinedState, instantSearchInstance, helper) {
12733
- var eventName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'Filter Applied';
12734
- var filters = convertNumericRefinementsToFilters(refinedState, attribute);
12735
-
12736
- if (filters && filters.length > 0) {
12737
- instantSearchInstance.sendEventToInsights({
12738
- insightsMethod: 'clickedFilters',
12739
- widgetType: $$type$1,
12740
- eventType: 'click',
12741
- payload: {
12742
- eventName: eventName,
12743
- index: helper.getIndex(),
12744
- filters: filters
12745
- },
12746
- attribute: attribute
12747
- });
12748
- }
12749
- };
12750
-
12751
- var createSendEvent = function createSendEvent(instantSearchInstance, helper, currentRange) {
12752
+ var createSendEvent = function createSendEvent(instantSearchInstance) {
12752
12753
  return function () {
12753
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
12754
- args[_key] = arguments[_key];
12755
- }
12756
-
12757
- if (args.length === 1) {
12758
- instantSearchInstance.sendEventToInsights(args[0]);
12754
+ if (arguments.length === 1) {
12755
+ instantSearchInstance.sendEventToInsights(arguments.length <= 0 ? undefined : arguments[0]);
12759
12756
  return;
12760
12757
  }
12761
-
12762
- var eventType = args[0],
12763
- facetValue = args[1],
12764
- eventName = args[2];
12765
-
12766
- if (eventType !== 'click') {
12767
- return;
12768
- }
12769
-
12770
- var _facetValue = _slicedToArray(facetValue, 2),
12771
- nextMin = _facetValue[0],
12772
- nextMax = _facetValue[1];
12773
-
12774
- var refinedState = getRefinedState(helper, currentRange, nextMin, nextMax);
12775
- sendEventWithRefinedState(refinedState, instantSearchInstance, helper, eventName);
12776
12758
  };
12777
12759
  };
12778
12760
 
@@ -12818,7 +12800,7 @@
12818
12800
  return [min, max];
12819
12801
  }
12820
12802
 
12821
- function _refine(instantSearchInstance, helper, currentRange) {
12803
+ function _refine(helper, currentRange) {
12822
12804
  return function () {
12823
12805
  var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [undefined, undefined],
12824
12806
  _ref12 = _slicedToArray(_ref11, 2),
@@ -12828,7 +12810,6 @@
12828
12810
  var refinedState = getRefinedState(helper, currentRange, nextMin, nextMax);
12829
12811
 
12830
12812
  if (refinedState) {
12831
- sendEventWithRefinedState(refinedState, instantSearchInstance, helper);
12832
12813
  helper.setState(refinedState).search();
12833
12814
  }
12834
12815
  };
@@ -12874,12 +12855,12 @@
12874
12855
  // On first render pass an empty range
12875
12856
  // to be able to bypass the validation
12876
12857
  // related to it
12877
- refine = _refine(instantSearchInstance, helper, {
12858
+ refine = _refine(helper, {
12878
12859
  min: undefined,
12879
12860
  max: undefined
12880
12861
  });
12881
12862
  } else {
12882
- refine = _refine(instantSearchInstance, helper, currentRange);
12863
+ refine = _refine(helper, currentRange);
12883
12864
  }
12884
12865
 
12885
12866
  return {
@@ -12887,7 +12868,7 @@
12887
12868
  canRefine: currentRange.min !== currentRange.max,
12888
12869
  format: rangeFormatter,
12889
12870
  range: currentRange,
12890
- sendEvent: createSendEvent(instantSearchInstance, helper, currentRange),
12871
+ sendEvent: createSendEvent(instantSearchInstance),
12891
12872
  widgetParams: _objectSpread2(_objectSpread2({}, widgetParams), {}, {
12892
12873
  precision: precision
12893
12874
  }),
@@ -13407,13 +13388,15 @@
13407
13388
  };
13408
13389
  }
13409
13390
 
13391
+ var hasNoResults = results ? results.nbHits === 0 : true;
13410
13392
  return {
13411
13393
  currentRefinement: state.index,
13412
13394
  options: transformItems(items, {
13413
13395
  results: results
13414
13396
  }),
13415
13397
  refine: connectorState.setIndex,
13416
- hasNoResults: results ? results.nbHits === 0 : true,
13398
+ hasNoResults: hasNoResults,
13399
+ canRefine: !hasNoResults && items.length > 0,
13417
13400
  widgetParams: widgetParams
13418
13401
  };
13419
13402
  },
@@ -13617,6 +13600,9 @@
13617
13600
  });
13618
13601
  }
13619
13602
 
13603
+ var refinementIsApplied = false;
13604
+ var totalCount = 0;
13605
+
13620
13606
  if (results) {
13621
13607
  var facetResults = results.getFacetValues(attribute, {});
13622
13608
  var maxValuesPerFacet = facetResults.length;
@@ -13632,6 +13618,7 @@
13632
13618
 
13633
13619
  var _loop = function _loop(star) {
13634
13620
  var isRefined = refinedStar === star;
13621
+ refinementIsApplied = refinementIsApplied || isRefined;
13635
13622
  var count = facetResults.filter(function (f) {
13636
13623
  return Number(f.name) >= star && Number(f.name) <= max;
13637
13624
  }).map(function (f) {
@@ -13639,6 +13626,7 @@
13639
13626
  }).reduce(function (sum, current) {
13640
13627
  return sum + current;
13641
13628
  }, 0);
13629
+ totalCount += count;
13642
13630
 
13643
13631
  if (refinedStar && !isRefined && count === 0) {
13644
13632
  // skip count==0 when at least 1 refinement is enabled
@@ -13668,10 +13656,11 @@
13668
13656
  }
13669
13657
 
13670
13658
  facetValues = facetValues.reverse();
13659
+ var hasNoResults = results ? results.nbHits === 0 : true;
13671
13660
  return {
13672
13661
  items: facetValues,
13673
- hasNoResults: results ? results.nbHits === 0 : true,
13674
- canRefine: facetValues.length > 0,
13662
+ hasNoResults: hasNoResults,
13663
+ canRefine: (!hasNoResults || refinementIsApplied) && totalCount > 0,
13675
13664
  refine: connectorState.toggleRefinementFactory(helper),
13676
13665
  sendEvent: sendEvent,
13677
13666
  createURL: connectorState.createURLFactory({