instantsearch.js 4.44.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.
@@ -50,8 +50,13 @@ export declare type HitsPerPageRenderState = {
50
50
  refine: (value: number) => void;
51
51
  /**
52
52
  * Indicates whether or not the search has results.
53
+ * @deprecated Use `canRefine` instead.
53
54
  */
54
55
  hasNoResults: boolean;
56
+ /**
57
+ * Indicates if search state can be refined.
58
+ */
59
+ canRefine: boolean;
55
60
  };
56
61
  export declare type HitsPerPageWidgetDescription = {
57
62
  $$type: 'ais.hitsPerPage';
@@ -119,6 +119,7 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
119
119
  results = _ref5.results,
120
120
  createURL = _ref5.createURL,
121
121
  helper = _ref5.helper;
122
+ var canRefine = results ? results.nbHits > 0 : false;
122
123
  return {
123
124
  items: transformItems(normalizeItems(state), {
124
125
  results: results
@@ -128,7 +129,8 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
128
129
  state: state,
129
130
  createURL: createURL
130
131
  }),
131
- hasNoResults: results ? results.nbHits === 0 : true,
132
+ hasNoResults: !canRefine,
133
+ canRefine: canRefine,
132
134
  widgetParams: widgetParams
133
135
  };
134
136
  },
@@ -56,8 +56,16 @@ export declare type NumericMenuRenderState = {
56
56
  createURL: CreateURL<NumericMenuRenderStateItem['value']>;
57
57
  /**
58
58
  * `true` if the last search contains no result
59
+ * @deprecated Use `canRefine` instead.
59
60
  */
60
61
  hasNoResults: boolean;
62
+ /**
63
+ * Indicates if search state can be refined.
64
+ *
65
+ * This is `true` if the last search contains no result and
66
+ * "All" range is selected
67
+ */
68
+ canRefine: boolean;
61
69
  /**
62
70
  * Sets the selected value and trigger a new search
63
71
  */
@@ -1,3 +1,5 @@
1
+ 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; } } }; }
2
+
1
3
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
4
 
3
5
  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."); }
@@ -177,12 +179,35 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
177
179
  });
178
180
  }
179
181
 
182
+ var hasNoResults = results ? results.nbHits === 0 : true;
183
+ var preparedItems = prepareItems(state);
184
+ var allIsSelected = true;
185
+
186
+ var _iterator = _createForOfIteratorHelper(preparedItems),
187
+ _step;
188
+
189
+ try {
190
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
191
+ var item = _step.value;
192
+
193
+ if (item.isRefined && decodeURI(item.value) !== '{}') {
194
+ allIsSelected = false;
195
+ break;
196
+ }
197
+ }
198
+ } catch (err) {
199
+ _iterator.e(err);
200
+ } finally {
201
+ _iterator.f();
202
+ }
203
+
180
204
  return {
181
205
  createURL: connectorState.createURL(state),
182
- items: transformItems(prepareItems(state), {
206
+ items: transformItems(preparedItems, {
183
207
  results: results
184
208
  }),
185
- hasNoResults: results ? results.nbHits === 0 : true,
209
+ hasNoResults: hasNoResults,
210
+ canRefine: !(hasNoResults && allIsSelected),
186
211
  refine: connectorState.refine,
187
212
  sendEvent: connectorState.sendEvent,
188
213
  widgetParams: widgetParams
@@ -56,6 +56,8 @@ export declare type RatingMenuRenderState = {
56
56
  refine: (value: string) => void;
57
57
  /**
58
58
  * `true` if the last search contains no result.
59
+ *
60
+ * @deprecated Use `canRefine` instead.
59
61
  */
60
62
  hasNoResults: boolean;
61
63
  /**
@@ -210,6 +210,9 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
210
210
  });
211
211
  }
212
212
 
213
+ var refinementIsApplied = false;
214
+ var totalCount = 0;
215
+
213
216
  if (results) {
214
217
  var facetResults = results.getFacetValues(attribute, {});
215
218
  var maxValuesPerFacet = facetResults.length;
@@ -225,6 +228,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
225
228
 
226
229
  var _loop = function _loop(star) {
227
230
  var isRefined = refinedStar === star;
231
+ refinementIsApplied = refinementIsApplied || isRefined;
228
232
  var count = facetResults.filter(function (f) {
229
233
  return Number(f.name) >= star && Number(f.name) <= max;
230
234
  }).map(function (f) {
@@ -232,6 +236,7 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
232
236
  }).reduce(function (sum, current) {
233
237
  return sum + current;
234
238
  }, 0);
239
+ totalCount += count;
235
240
 
236
241
  if (refinedStar && !isRefined && count === 0) {
237
242
  // skip count==0 when at least 1 refinement is enabled
@@ -261,10 +266,11 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
261
266
  }
262
267
 
263
268
  facetValues = facetValues.reverse();
269
+ var hasNoResults = results ? results.nbHits === 0 : true;
264
270
  return {
265
271
  items: facetValues,
266
- hasNoResults: results ? results.nbHits === 0 : true,
267
- canRefine: facetValues.length > 0,
272
+ hasNoResults: hasNoResults,
273
+ canRefine: (!hasNoResults || refinementIsApplied) && totalCount > 0,
268
274
  refine: connectorState.toggleRefinementFactory(helper),
269
275
  sendEvent: sendEvent,
270
276
  createURL: connectorState.createURLFactory({
@@ -43,8 +43,13 @@ export declare type SortByRenderState = {
43
43
  refine: (value: string) => void;
44
44
  /**
45
45
  * `true` if the last search contains no result.
46
+ * @deprecated Use `canRefine` instead.
46
47
  */
47
48
  hasNoResults: boolean;
49
+ /**
50
+ * `true` if we can refine.
51
+ */
52
+ canRefine: boolean;
48
53
  };
49
54
  export declare type SortByWidgetDescription = {
50
55
  $$type: 'ais.sortBy';
@@ -77,13 +77,15 @@ var connectSortBy = function connectSortBy(renderFn) {
77
77
  };
78
78
  }
79
79
 
80
+ var hasNoResults = results ? results.nbHits === 0 : true;
80
81
  return {
81
82
  currentRefinement: state.index,
82
83
  options: transformItems(items, {
83
84
  results: results
84
85
  }),
85
86
  refine: connectorState.setIndex,
86
- hasNoResults: results ? results.nbHits === 0 : true,
87
+ hasNoResults: hasNoResults,
88
+ canRefine: !hasNoResults && items.length > 0,
87
89
  widgetParams: widgetParams
88
90
  };
89
91
  },
@@ -1,2 +1,2 @@
1
- declare const _default: "4.44.1";
1
+ declare const _default: "4.45.0";
2
2
  export default _default;
package/es/lib/version.js CHANGED
@@ -1 +1 @@
1
- export default '4.44.1';
1
+ export default '4.45.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instantsearch.js",
3
- "version": "4.44.1",
3
+ "version": "4.45.0",
4
4
  "description": "InstantSearch.js is a JavaScript library for building performant and instant search experiences with Algolia.",
5
5
  "homepage": "https://www.algolia.com/doc/guides/building-search-ui/what-is-instantsearch/js/",
6
6
  "types": "es/index.d.ts",
@@ -157,11 +157,11 @@
157
157
  "bundlesize": [
158
158
  {
159
159
  "path": "./dist/instantsearch.production.min.js",
160
- "maxSize": "70.25 kB"
160
+ "maxSize": "70.50 kB"
161
161
  },
162
162
  {
163
163
  "path": "./dist/instantsearch.development.js",
164
- "maxSize": "151.50 kB"
164
+ "maxSize": "152.00 kB"
165
165
  }
166
166
  ]
167
167
  }