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
package/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ # [4.45.0](https://github.com/algolia/instantsearch.js/compare/v4.44.1...v4.45.0) (2022-08-29)
2
+
3
+
4
+ ### Features
5
+
6
+ * **connectors:** deprecate `hasNoResults` in favor of `canRefine` ([#5091](https://github.com/algolia/instantsearch.js/issues/5091)) ([1749a4e](https://github.com/algolia/instantsearch.js/commit/1749a4eb9a2f28fa4a8d442163e3b10acbde7c22))
7
+
8
+
9
+
10
+ ## [4.44.1](https://github.com/algolia/instantsearch.js/compare/v4.44.0...v4.44.1) (2022-08-25)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **connectNumericMenu + connectRange:** stop sending invalid clickedFilters event ([#5085](https://github.com/algolia/instantsearch.js/issues/5085)) ([20996c7](https://github.com/algolia/instantsearch.js/commit/20996c7a159988c58e00ff24d2d2dc98af8b980f))
16
+
17
+
18
+
19
+ # [4.44.0](https://github.com/algolia/instantsearch.js/compare/v4.43.1...v4.44.0) (2022-08-08)
20
+
21
+
22
+ ### Features
23
+
24
+ * **geo-search:** make `GeoHit` type generic ([#5083](https://github.com/algolia/instantsearch.js/issues/5083)) ([3d3c7b2](https://github.com/algolia/instantsearch.js/commit/3d3c7b298b74effe9bb722a04fbb47dc39a4bd95))
25
+
26
+
27
+
1
28
  ## [4.43.1](https://github.com/algolia/instantsearch.js/compare/v4.43.0...v4.43.1) (2022-07-11)
2
29
 
3
30
 
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Highlight = Highlight;
7
+
8
+ var _uiComponentsShared = require("@algolia/ui-components-shared");
9
+
10
+ var _preact = require("preact");
11
+
12
+ var _InternalHighlight = require("../InternalHighlight/InternalHighlight.js");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ 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; }
19
+
20
+ function Highlight(_ref) {
21
+ var _ref$classNames = _ref.classNames,
22
+ classNames = _ref$classNames === void 0 ? {} : _ref$classNames,
23
+ props = _objectWithoutProperties(_ref, ["classNames"]);
24
+
25
+ return (0, _preact.h)(_InternalHighlight.InternalHighlight, _extends({
26
+ classNames: {
27
+ root: (0, _uiComponentsShared.cx)('ais-Highlight', classNames.root),
28
+ highlighted: (0, _uiComponentsShared.cx)('ais-Highlight-highlighted', classNames.highlighted),
29
+ nonHighlighted: (0, _uiComponentsShared.cx)('ais-Highlight-nonHighlighted', classNames.nonHighlighted),
30
+ separator: (0, _uiComponentsShared.cx)('ais-Highlight-separator', classNames.separator)
31
+ }
32
+ }, props));
33
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.InternalHighlight = void 0;
7
+
8
+ var _uiComponentsHighlightVdom = require("@algolia/ui-components-highlight-vdom");
9
+
10
+ var _preact = require("preact");
11
+
12
+ var InternalHighlight = (0, _uiComponentsHighlightVdom.createHighlightComponent)({
13
+ createElement: _preact.createElement,
14
+ Fragment: _preact.Fragment
15
+ });
16
+ exports.InternalHighlight = InternalHighlight;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ReverseHighlight = ReverseHighlight;
7
+
8
+ var _uiComponentsShared = require("@algolia/ui-components-shared");
9
+
10
+ var _preact = require("preact");
11
+
12
+ var _InternalHighlight = require("../InternalHighlight/InternalHighlight.js");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ 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; }
19
+
20
+ function ReverseHighlight(_ref) {
21
+ var _ref$classNames = _ref.classNames,
22
+ classNames = _ref$classNames === void 0 ? {} : _ref$classNames,
23
+ props = _objectWithoutProperties(_ref, ["classNames"]);
24
+
25
+ return (0, _preact.h)(_InternalHighlight.InternalHighlight, _extends({
26
+ classNames: {
27
+ root: (0, _uiComponentsShared.cx)('ais-ReverseHighlight', classNames.root),
28
+ highlighted: (0, _uiComponentsShared.cx)('ais-ReverseHighlight-highlighted', classNames.highlighted),
29
+ nonHighlighted: (0, _uiComponentsShared.cx)('ais-ReverseHighlight-nonHighlighted', classNames.nonHighlighted),
30
+ separator: (0, _uiComponentsShared.cx)('ais-ReverseHighlight-separator', classNames.separator)
31
+ }
32
+ }, props));
33
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ReverseSnippet = ReverseSnippet;
7
+
8
+ var _uiComponentsShared = require("@algolia/ui-components-shared");
9
+
10
+ var _preact = require("preact");
11
+
12
+ var _InternalHighlight = require("../InternalHighlight/InternalHighlight.js");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ 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; }
19
+
20
+ function ReverseSnippet(_ref) {
21
+ var _ref$classNames = _ref.classNames,
22
+ classNames = _ref$classNames === void 0 ? {} : _ref$classNames,
23
+ props = _objectWithoutProperties(_ref, ["classNames"]);
24
+
25
+ return (0, _preact.h)(_InternalHighlight.InternalHighlight, _extends({
26
+ classNames: {
27
+ root: (0, _uiComponentsShared.cx)('ais-ReverseSnippet', classNames.root),
28
+ highlighted: (0, _uiComponentsShared.cx)('ais-ReverseSnippet-highlighted', classNames.highlighted),
29
+ nonHighlighted: (0, _uiComponentsShared.cx)('ais-ReverseSnippet-nonHighlighted', classNames.nonHighlighted),
30
+ separator: (0, _uiComponentsShared.cx)('ais-ReverseSnippet-separator', classNames.separator)
31
+ }
32
+ }, props));
33
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Snippet = Snippet;
7
+
8
+ var _uiComponentsShared = require("@algolia/ui-components-shared");
9
+
10
+ var _preact = require("preact");
11
+
12
+ var _InternalHighlight = require("../InternalHighlight/InternalHighlight.js");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ 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; }
19
+
20
+ function Snippet(_ref) {
21
+ var _ref$classNames = _ref.classNames,
22
+ classNames = _ref$classNames === void 0 ? {} : _ref$classNames,
23
+ props = _objectWithoutProperties(_ref, ["classNames"]);
24
+
25
+ return (0, _preact.h)(_InternalHighlight.InternalHighlight, _extends({
26
+ classNames: {
27
+ root: (0, _uiComponentsShared.cx)('ais-Snippet', classNames.root),
28
+ highlighted: (0, _uiComponentsShared.cx)('ais-Snippet-highlighted', classNames.highlighted),
29
+ nonHighlighted: (0, _uiComponentsShared.cx)('ais-Snippet-nonHighlighted', classNames.nonHighlighted),
30
+ separator: (0, _uiComponentsShared.cx)('ais-Snippet-separator', classNames.separator)
31
+ }
32
+ }, props));
33
+ }
@@ -127,6 +127,7 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
127
127
  results = _ref5.results,
128
128
  createURL = _ref5.createURL,
129
129
  helper = _ref5.helper;
130
+ var canRefine = results ? results.nbHits > 0 : false;
130
131
  return {
131
132
  items: transformItems(normalizeItems(state), {
132
133
  results: results
@@ -136,7 +137,8 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
136
137
  state: state,
137
138
  createURL: createURL
138
139
  }),
139
- hasNoResults: results ? results.nbHits === 0 : true,
140
+ hasNoResults: !canRefine,
141
+ canRefine: canRefine,
140
142
  widgetParams: widgetParams
141
143
  };
142
144
  },
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
 
8
8
  var _index = require("../../lib/utils/index.js");
9
9
 
10
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { 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 = o[Symbol.iterator](); }, 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; } } }; }
11
+
10
12
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
11
13
 
12
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."); }
@@ -32,46 +34,11 @@ var withUsage = (0, _index.createDocumentationMessageGenerator)({
32
34
  var $$type = 'ais.numericMenu';
33
35
 
34
36
  var createSendEvent = function createSendEvent(_ref) {
35
- var instantSearchInstance = _ref.instantSearchInstance,
36
- helper = _ref.helper,
37
- attribute = _ref.attribute;
37
+ var instantSearchInstance = _ref.instantSearchInstance;
38
38
  return function () {
39
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
40
- args[_key] = arguments[_key];
41
- }
42
-
43
- if (args.length === 1) {
44
- instantSearchInstance.sendEventToInsights(args[0]);
45
- return;
46
- }
47
-
48
- var eventType = args[0],
49
- facetValue = args[1],
50
- _args$ = args[2],
51
- eventName = _args$ === void 0 ? 'Filter Applied' : _args$;
52
-
53
- if (eventType !== 'click') {
39
+ if (arguments.length === 1) {
40
+ instantSearchInstance.sendEventToInsights(arguments.length <= 0 ? undefined : arguments[0]);
54
41
  return;
55
- } // facetValue === "%7B%22start%22:5,%22end%22:10%7D"
56
-
57
-
58
- var filters = (0, _index.convertNumericRefinementsToFilters)(getRefinedState(helper.state, attribute, facetValue), attribute);
59
-
60
- if (filters && filters.length > 0) {
61
- /*
62
- filters === ["price<=10", "price>=5"]
63
- */
64
- instantSearchInstance.sendEventToInsights({
65
- insightsMethod: 'clickedFilters',
66
- widgetType: $$type,
67
- eventType: eventType,
68
- payload: {
69
- eventName: eventName,
70
- index: helper.getIndex(),
71
- filters: filters
72
- },
73
- attribute: attribute
74
- });
75
42
  }
76
43
  };
77
44
  };
@@ -216,18 +183,39 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
216
183
 
217
184
  if (!connectorState.sendEvent) {
218
185
  connectorState.sendEvent = createSendEvent({
219
- instantSearchInstance: instantSearchInstance,
220
- helper: helper,
221
- attribute: attribute
186
+ instantSearchInstance: instantSearchInstance
222
187
  });
223
188
  }
224
189
 
190
+ var hasNoResults = results ? results.nbHits === 0 : true;
191
+ var preparedItems = prepareItems(state);
192
+ var allIsSelected = true;
193
+
194
+ var _iterator = _createForOfIteratorHelper(preparedItems),
195
+ _step;
196
+
197
+ try {
198
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
199
+ var item = _step.value;
200
+
201
+ if (item.isRefined && decodeURI(item.value) !== '{}') {
202
+ allIsSelected = false;
203
+ break;
204
+ }
205
+ }
206
+ } catch (err) {
207
+ _iterator.e(err);
208
+ } finally {
209
+ _iterator.f();
210
+ }
211
+
225
212
  return {
226
213
  createURL: connectorState.createURL(state),
227
- items: transformItems(prepareItems(state), {
214
+ items: transformItems(preparedItems, {
228
215
  results: results
229
216
  }),
230
- hasNoResults: results ? results.nbHits === 0 : true,
217
+ hasNoResults: hasNoResults,
218
+ canRefine: !(hasNoResults && allIsSelected),
231
219
  refine: connectorState.refine,
232
220
  sendEvent: connectorState.sendEvent,
233
221
  widgetParams: widgetParams
@@ -156,50 +156,12 @@ var connectRange = function connectRange(renderFn) {
156
156
  return null;
157
157
  };
158
158
 
159
- var sendEventWithRefinedState = function sendEventWithRefinedState(refinedState, instantSearchInstance, helper) {
160
- var eventName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'Filter Applied';
161
- var filters = (0, _index.convertNumericRefinementsToFilters)(refinedState, attribute);
162
-
163
- if (filters && filters.length > 0) {
164
- instantSearchInstance.sendEventToInsights({
165
- insightsMethod: 'clickedFilters',
166
- widgetType: $$type,
167
- eventType: 'click',
168
- payload: {
169
- eventName: eventName,
170
- index: helper.getIndex(),
171
- filters: filters
172
- },
173
- attribute: attribute
174
- });
175
- }
176
- };
177
-
178
- var createSendEvent = function createSendEvent(instantSearchInstance, helper, currentRange) {
159
+ var createSendEvent = function createSendEvent(instantSearchInstance) {
179
160
  return function () {
180
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
181
- args[_key] = arguments[_key];
182
- }
183
-
184
- if (args.length === 1) {
185
- instantSearchInstance.sendEventToInsights(args[0]);
161
+ if (arguments.length === 1) {
162
+ instantSearchInstance.sendEventToInsights(arguments.length <= 0 ? undefined : arguments[0]);
186
163
  return;
187
164
  }
188
-
189
- var eventType = args[0],
190
- facetValue = args[1],
191
- eventName = args[2];
192
-
193
- if (eventType !== 'click') {
194
- return;
195
- }
196
-
197
- var _facetValue = _slicedToArray(facetValue, 2),
198
- nextMin = _facetValue[0],
199
- nextMax = _facetValue[1];
200
-
201
- var refinedState = getRefinedState(helper, currentRange, nextMin, nextMax);
202
- sendEventWithRefinedState(refinedState, instantSearchInstance, helper, eventName);
203
165
  };
204
166
  };
205
167
 
@@ -245,7 +207,7 @@ var connectRange = function connectRange(renderFn) {
245
207
  return [min, max];
246
208
  }
247
209
 
248
- function _refine(instantSearchInstance, helper, currentRange) {
210
+ function _refine(helper, currentRange) {
249
211
  return function () {
250
212
  var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [undefined, undefined],
251
213
  _ref12 = _slicedToArray(_ref11, 2),
@@ -255,7 +217,6 @@ var connectRange = function connectRange(renderFn) {
255
217
  var refinedState = getRefinedState(helper, currentRange, nextMin, nextMax);
256
218
 
257
219
  if (refinedState) {
258
- sendEventWithRefinedState(refinedState, instantSearchInstance, helper);
259
220
  helper.setState(refinedState).search();
260
221
  }
261
222
  };
@@ -301,12 +262,12 @@ var connectRange = function connectRange(renderFn) {
301
262
  // On first render pass an empty range
302
263
  // to be able to bypass the validation
303
264
  // related to it
304
- refine = _refine(instantSearchInstance, helper, {
265
+ refine = _refine(helper, {
305
266
  min: undefined,
306
267
  max: undefined
307
268
  });
308
269
  } else {
309
- refine = _refine(instantSearchInstance, helper, currentRange);
270
+ refine = _refine(helper, currentRange);
310
271
  }
311
272
 
312
273
  return {
@@ -314,7 +275,7 @@ var connectRange = function connectRange(renderFn) {
314
275
  canRefine: currentRange.min !== currentRange.max,
315
276
  format: rangeFormatter,
316
277
  range: currentRange,
317
- sendEvent: createSendEvent(instantSearchInstance, helper, currentRange),
278
+ sendEvent: createSendEvent(instantSearchInstance),
318
279
  widgetParams: _objectSpread(_objectSpread({}, widgetParams), {}, {
319
280
  precision: precision
320
281
  }),
@@ -218,6 +218,9 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
218
218
  });
219
219
  }
220
220
 
221
+ var refinementIsApplied = false;
222
+ var totalCount = 0;
223
+
221
224
  if (results) {
222
225
  var facetResults = results.getFacetValues(attribute, {});
223
226
  var maxValuesPerFacet = facetResults.length;
@@ -233,6 +236,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
233
236
 
234
237
  var _loop = function _loop(star) {
235
238
  var isRefined = refinedStar === star;
239
+ refinementIsApplied = refinementIsApplied || isRefined;
236
240
  var count = facetResults.filter(function (f) {
237
241
  return Number(f.name) >= star && Number(f.name) <= max;
238
242
  }).map(function (f) {
@@ -240,6 +244,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
240
244
  }).reduce(function (sum, current) {
241
245
  return sum + current;
242
246
  }, 0);
247
+ totalCount += count;
243
248
 
244
249
  if (refinedStar && !isRefined && count === 0) {
245
250
  // skip count==0 when at least 1 refinement is enabled
@@ -269,10 +274,11 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
269
274
  }
270
275
 
271
276
  facetValues = facetValues.reverse();
277
+ var hasNoResults = results ? results.nbHits === 0 : true;
272
278
  return {
273
279
  items: facetValues,
274
- hasNoResults: results ? results.nbHits === 0 : true,
275
- canRefine: facetValues.length > 0,
280
+ hasNoResults: hasNoResults,
281
+ canRefine: (!hasNoResults || refinementIsApplied) && totalCount > 0,
276
282
  refine: connectorState.toggleRefinementFactory(helper),
277
283
  sendEvent: sendEvent,
278
284
  createURL: connectorState.createURLFactory({
@@ -85,13 +85,15 @@ var connectSortBy = function connectSortBy(renderFn) {
85
85
  };
86
86
  }
87
87
 
88
+ var hasNoResults = results ? results.nbHits === 0 : true;
88
89
  return {
89
90
  currentRefinement: state.index,
90
91
  options: transformItems(items, {
91
92
  results: results
92
93
  }),
93
94
  refine: connectorState.setIndex,
94
- hasNoResults: results ? results.nbHits === 0 : true,
95
+ hasNoResults: hasNoResults,
96
+ canRefine: !hasNoResults && items.length > 0,
95
97
  widgetParams: widgetParams
96
98
  };
97
99
  },
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Highlight = Highlight;
7
+
8
+ var _preact = require("preact");
9
+
10
+ var _Highlight = require("../../components/Highlight/Highlight.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 Highlight(_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._highlightResult, attribute) || [];
35
+ var properties = Array.isArray(property) ? property : [property];
36
+ process.env.NODE_ENV === 'development' ? (0, _logger.warning)(Boolean(properties.length), "Could not enable highlight for \"".concat(attribute.toString(), "\", will display an empty string.\nPlease check whether this attribute exists and is either searchable or specified in `attributesToHighlight`.\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)(_Highlight.Highlight, _extends({}, props, {
42
+ parts: parts,
43
+ classNames: cssClasses
44
+ }));
45
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ReverseHighlight = ReverseHighlight;
7
+
8
+ var _preact = require("preact");
9
+
10
+ var _ReverseHighlight = require("../../components/ReverseHighlight/ReverseHighlight.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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
25
+
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
27
+
28
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
+
30
+ 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; }
31
+
32
+ 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; }
33
+
34
+ function ReverseHighlight(_ref) {
35
+ var hit = _ref.hit,
36
+ attribute = _ref.attribute,
37
+ cssClasses = _ref.cssClasses,
38
+ props = _objectWithoutProperties(_ref, ["hit", "attribute", "cssClasses"]);
39
+
40
+ var property = (0, _getPropertyByPath.default)(hit._highlightResult, attribute) || [];
41
+ var properties = Array.isArray(property) ? property : [property];
42
+ process.env.NODE_ENV === 'development' ? (0, _logger.warning)(Boolean(properties.length), "Could not enable highlight for \"".concat(attribute.toString(), "\", will display an empty string.\nPlease check whether this attribute exists and is either searchable or specified in `attributesToHighlight`.\n\nSee: https://alg.li/highlighting\n")) : void 0;
43
+ var parts = properties.map(function (_ref2) {
44
+ var value = _ref2.value;
45
+ return (0, _getHighlightedParts.default)((0, _unescape.default)(value || '')).map(function (_ref3) {
46
+ var isHighlighted = _ref3.isHighlighted,
47
+ rest = _objectWithoutProperties(_ref3, ["isHighlighted"]);
48
+
49
+ return _objectSpread(_objectSpread({}, rest), {}, {
50
+ isHighlighted: !isHighlighted
51
+ });
52
+ });
53
+ });
54
+ return (0, _preact.h)(_ReverseHighlight.ReverseHighlight, _extends({}, props, {
55
+ parts: parts,
56
+ classNames: cssClasses
57
+ }));
58
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ReverseSnippet = ReverseSnippet;
7
+
8
+ var _preact = require("preact");
9
+
10
+ var _ReverseSnippet = require("../../components/ReverseSnippet/ReverseSnippet.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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
25
+
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
27
+
28
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
+
30
+ 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; }
31
+
32
+ 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; }
33
+
34
+ function ReverseSnippet(_ref) {
35
+ var hit = _ref.hit,
36
+ attribute = _ref.attribute,
37
+ cssClasses = _ref.cssClasses,
38
+ props = _objectWithoutProperties(_ref, ["hit", "attribute", "cssClasses"]);
39
+
40
+ var property = (0, _getPropertyByPath.default)(hit._snippetResult, attribute) || [];
41
+ var properties = Array.isArray(property) ? property : [property];
42
+ 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;
43
+ var parts = properties.map(function (_ref2) {
44
+ var value = _ref2.value;
45
+ return (0, _getHighlightedParts.default)((0, _unescape.default)(value || '')).map(function (_ref3) {
46
+ var isHighlighted = _ref3.isHighlighted,
47
+ rest = _objectWithoutProperties(_ref3, ["isHighlighted"]);
48
+
49
+ return _objectSpread(_objectSpread({}, rest), {}, {
50
+ isHighlighted: !isHighlighted
51
+ });
52
+ });
53
+ });
54
+ return (0, _preact.h)(_ReverseSnippet.ReverseSnippet, _extends({}, props, {
55
+ parts: parts,
56
+ classNames: cssClasses
57
+ }));
58
+ }