instantsearch.js 4.69.0 → 4.71.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 (91) hide show
  1. package/cjs/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.js +1 -2
  2. package/cjs/connectors/geo-search/connectGeoSearch.js +4 -3
  3. package/cjs/connectors/hits/connectHits.js +10 -7
  4. package/cjs/connectors/infinite-hits/connectInfiniteHits.js +7 -8
  5. package/cjs/connectors/looking-similar/connectLookingSimilar.js +2 -3
  6. package/cjs/connectors/related-products/connectRelatedProducts.js +2 -3
  7. package/cjs/connectors/trending-items/connectTrendingItems.js +5 -3
  8. package/cjs/lib/InstantSearch.js +3 -2
  9. package/cjs/lib/server.js +28 -9
  10. package/cjs/lib/utils/addWidgetId.js +4 -0
  11. package/cjs/lib/utils/hydrateRecommendCache.js +23 -0
  12. package/cjs/lib/utils/hydrateSearchClient.js +7 -3
  13. package/cjs/lib/utils/index.js +22 -0
  14. package/cjs/lib/version.js +1 -1
  15. package/cjs/widgets/frequently-bought-together/frequently-bought-together.js +1 -3
  16. package/cjs/widgets/geo-search/geo-search.js +4 -3
  17. package/cjs/widgets/hits/defaultTemplates.js +2 -0
  18. package/cjs/widgets/hits/hits.js +3 -4
  19. package/cjs/widgets/index/index.js +8 -1
  20. package/cjs/widgets/infinite-hits/infinite-hits.js +3 -4
  21. package/cjs/widgets/looking-similar/looking-similar.js +4 -6
  22. package/cjs/widgets/rating-menu/defaultTemplates.js +1 -0
  23. package/cjs/widgets/related-products/related-products.js +1 -3
  24. package/cjs/widgets/trending-items/trending-items.js +1 -3
  25. package/dist/instantsearch.development.d.ts +4306 -237
  26. package/dist/instantsearch.development.js +8572 -8530
  27. package/dist/instantsearch.development.js.map +1 -1
  28. package/dist/instantsearch.production.d.ts +4306 -237
  29. package/dist/instantsearch.production.min.d.ts +4306 -237
  30. package/dist/instantsearch.production.min.js +2 -2
  31. package/dist/instantsearch.production.min.js.map +1 -1
  32. package/es/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.d.ts +311 -7
  33. package/es/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.js +2 -3
  34. package/es/connectors/geo-search/connectGeoSearch.d.ts +218 -8
  35. package/es/connectors/geo-search/connectGeoSearch.js +5 -4
  36. package/es/connectors/hits/connectHits.d.ts +128 -7
  37. package/es/connectors/hits/connectHits.js +11 -8
  38. package/es/connectors/hits/connectHitsWithInsights.d.ts +190 -1
  39. package/es/connectors/infinite-hits/connectInfiniteHits.d.ts +192 -12
  40. package/es/connectors/infinite-hits/connectInfiniteHits.js +8 -9
  41. package/es/connectors/infinite-hits/connectInfiniteHitsWithInsights.d.ts +249 -1
  42. package/es/connectors/looking-similar/connectLookingSimilar.d.ts +303 -7
  43. package/es/connectors/looking-similar/connectLookingSimilar.js +3 -4
  44. package/es/connectors/related-products/connectRelatedProducts.d.ts +303 -7
  45. package/es/connectors/related-products/connectRelatedProducts.js +3 -4
  46. package/es/connectors/trending-items/connectTrendingItems.d.ts +310 -9
  47. package/es/connectors/trending-items/connectTrendingItems.js +7 -5
  48. package/es/lib/InstantSearch.d.ts +1 -2
  49. package/es/lib/InstantSearch.js +3 -2
  50. package/es/lib/server.d.ts +1 -1
  51. package/es/lib/server.js +28 -9
  52. package/es/lib/utils/addWidgetId.d.ts +1 -0
  53. package/es/lib/utils/addWidgetId.js +3 -0
  54. package/es/lib/utils/checkIndexUiState.d.ts +1 -2
  55. package/es/lib/utils/checkRendering.d.ts +1 -1
  56. package/es/lib/utils/getWidgetAttribute.d.ts +1 -2
  57. package/es/lib/utils/hydrateRecommendCache.d.ts +3 -0
  58. package/es/lib/utils/hydrateRecommendCache.js +17 -0
  59. package/es/lib/utils/hydrateSearchClient.js +7 -3
  60. package/es/lib/utils/index.d.ts +2 -0
  61. package/es/lib/utils/index.js +2 -0
  62. package/es/lib/utils/isIndexWidget.d.ts +1 -2
  63. package/es/lib/utils/render-args.d.ts +1 -2
  64. package/es/lib/utils/resolveSearchParameters.d.ts +1 -1
  65. package/es/lib/utils/setIndexHelperState.d.ts +1 -2
  66. package/es/lib/version.d.ts +1 -1
  67. package/es/lib/version.js +1 -1
  68. package/es/types/index.d.ts +0 -1
  69. package/es/types/index.js +1 -4
  70. package/es/types/results.d.ts +11 -6
  71. package/es/types/widget.d.ts +2 -2
  72. package/es/widgets/frequently-bought-together/frequently-bought-together.d.ts +306 -9
  73. package/es/widgets/frequently-bought-together/frequently-bought-together.js +2 -4
  74. package/es/widgets/geo-search/geo-search.d.ts +328 -8
  75. package/es/widgets/geo-search/geo-search.js +5 -4
  76. package/es/widgets/hits/defaultTemplates.d.ts +32 -2
  77. package/es/widgets/hits/defaultTemplates.js +3 -0
  78. package/es/widgets/hits/hits.d.ts +204 -8
  79. package/es/widgets/hits/hits.js +4 -5
  80. package/es/widgets/index/index.js +8 -1
  81. package/es/widgets/index.d.ts +1 -0
  82. package/es/widgets/infinite-hits/infinite-hits.d.ts +262 -9
  83. package/es/widgets/infinite-hits/infinite-hits.js +4 -5
  84. package/es/widgets/looking-similar/looking-similar.d.ts +309 -9
  85. package/es/widgets/looking-similar/looking-similar.js +5 -7
  86. package/es/widgets/rating-menu/defaultTemplates.js +1 -0
  87. package/es/widgets/related-products/related-products.d.ts +306 -9
  88. package/es/widgets/related-products/related-products.js +2 -4
  89. package/es/widgets/trending-items/trending-items.d.ts +310 -9
  90. package/es/widgets/trending-items/trending-items.js +2 -4
  91. package/package.json +6 -6
@@ -89,5 +89,4 @@ var connectFrequentlyBoughtTogether = function connectFrequentlyBoughtTogether(r
89
89
  };
90
90
  };
91
91
  };
92
- var _default = connectFrequentlyBoughtTogether;
93
- exports.default = _default;
92
+ exports.default = connectFrequentlyBoughtTogether;
@@ -176,7 +176,9 @@ var connectGeoSearch = function connectGeoSearch(renderFn) {
176
176
  widgetParams: widgetParams
177
177
  };
178
178
  },
179
- getRenderState: function getRenderState(renderState, renderOptions) {
179
+ getRenderState: function getRenderState(renderState, renderOptions
180
+ // Type is explicitly redefined, to avoid having the TWidgetParams type in the definition
181
+ ) {
180
182
  return _objectSpread(_objectSpread({}, renderState), {}, {
181
183
  geoSearch: this.getWidgetRenderState(renderOptions)
182
184
  });
@@ -208,5 +210,4 @@ var connectGeoSearch = function connectGeoSearch(renderFn) {
208
210
  };
209
211
  };
210
212
  };
211
- var _default = connectGeoSearch;
212
- exports.default = _default;
213
+ exports.default = connectGeoSearch;
@@ -40,9 +40,11 @@ var connectHits = function connectHits(renderFn) {
40
40
  renderFn(_objectSpread(_objectSpread({}, renderState), {}, {
41
41
  instantSearchInstance: renderOptions.instantSearchInstance
42
42
  }), false);
43
- renderState.sendEvent('view:internal', renderState.hits);
43
+ renderState.sendEvent('view:internal', renderState.items);
44
44
  },
45
- getRenderState: function getRenderState(renderState, renderOptions) {
45
+ getRenderState: function getRenderState(renderState, renderOptions
46
+ // Type is explicitly redefined, to avoid having the TWidgetParams type in the definition
47
+ ) {
46
48
  return _objectSpread(_objectSpread({}, renderState), {}, {
47
49
  hits: this.getWidgetRenderState(renderOptions)
48
50
  });
@@ -73,6 +75,7 @@ var connectHits = function connectHits(renderFn) {
73
75
  if (!results) {
74
76
  return {
75
77
  hits: [],
78
+ items: [],
76
79
  results: undefined,
77
80
  banner: undefined,
78
81
  sendEvent: sendEvent,
@@ -85,12 +88,13 @@ var connectHits = function connectHits(renderFn) {
85
88
  }
86
89
  var hitsWithAbsolutePosition = (0, _utils.addAbsolutePosition)(results.hits, results.page, results.hitsPerPage);
87
90
  var hitsWithAbsolutePositionAndQueryID = (0, _utils.addQueryID)(hitsWithAbsolutePosition, results.queryID);
88
- var transformedHits = transformItems(hitsWithAbsolutePositionAndQueryID, {
91
+ var items = transformItems(hitsWithAbsolutePositionAndQueryID, {
89
92
  results: results
90
93
  });
91
94
  var banner = (_results$renderingCon = results.renderingContent) === null || _results$renderingCon === void 0 ? void 0 : (_results$renderingCon2 = _results$renderingCon.widgets) === null || _results$renderingCon2 === void 0 ? void 0 : (_results$renderingCon3 = _results$renderingCon2.banners) === null || _results$renderingCon3 === void 0 ? void 0 : _results$renderingCon3[0];
92
95
  return {
93
- hits: transformedHits,
96
+ hits: items,
97
+ items: items,
94
98
  results: results,
95
99
  banner: banner,
96
100
  sendEvent: sendEvent,
@@ -108,7 +112,7 @@ var connectHits = function connectHits(renderFn) {
108
112
  return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, undefined));
109
113
  }, {}));
110
114
  },
111
- getWidgetSearchParameters: function getWidgetSearchParameters(state) {
115
+ getWidgetSearchParameters: function getWidgetSearchParameters(state, _uiState) {
112
116
  if (!escapeHTML) {
113
117
  return state;
114
118
  }
@@ -119,5 +123,4 @@ var connectHits = function connectHits(renderFn) {
119
123
  };
120
124
  };
121
125
  };
122
- var _default = connectHits;
123
- exports.default = _default;
126
+ exports.default = connectHits;
@@ -64,9 +64,6 @@ function extractHitsFromCachedHits(cachedHits) {
64
64
  var connectInfiniteHits = function connectInfiniteHits(renderFn) {
65
65
  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noop;
66
66
  (0, _utils.checkRendering)(renderFn, withUsage());
67
-
68
- // @TODO: this should be a generic, but a Connector can not yet be generic itself
69
-
70
67
  return function (widgetParams) {
71
68
  var _ref5 = widgetParams || {},
72
69
  _ref5$escapeHTML = _ref5.escapeHTML,
@@ -134,7 +131,9 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
134
131
  }), false);
135
132
  sendEvent('view:internal', widgetRenderState.currentPageHits);
136
133
  },
137
- getRenderState: function getRenderState(renderState, renderOptions) {
134
+ getRenderState: function getRenderState(renderState, renderOptions
135
+ // Type is explicitly redefined, to avoid having the TWidgetParams type in the definition
136
+ ) {
138
137
  return _objectSpread(_objectSpread({}, renderState), {}, {
139
138
  infiniteHits: this.getWidgetRenderState(renderOptions)
140
139
  });
@@ -212,10 +211,11 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
212
211
  currentPageHits = transformedHits;
213
212
  isFirstPage = getFirstReceivedPage(state, cachedHits) === 0;
214
213
  }
215
- var hits = extractHitsFromCachedHits(cachedHits);
214
+ var items = extractHitsFromCachedHits(cachedHits);
216
215
  var isLastPage = results ? results.nbPages <= getLastReceivedPage(state, cachedHits) + 1 : true;
217
216
  return {
218
- hits: hits,
217
+ hits: items,
218
+ items: items,
219
219
  currentPageHits: currentPageHits,
220
220
  sendEvent: sendEvent,
221
221
  bindEvent: bindEvent,
@@ -268,5 +268,4 @@ var connectInfiniteHits = function connectInfiniteHits(renderFn) {
268
268
  };
269
269
  };
270
270
  };
271
- var _default = connectInfiniteHits;
272
- exports.default = _default;
271
+ exports.default = connectInfiniteHits;
@@ -18,7 +18,7 @@ var withUsage = (0, _utils.createDocumentationMessageGenerator)({
18
18
  var connectLookingSimilar = function connectLookingSimilar(renderFn) {
19
19
  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noop;
20
20
  (0, _utils.checkRendering)(renderFn, withUsage());
21
- return function LookingSimilar(widgetParams) {
21
+ return function (widgetParams) {
22
22
  var _ref = widgetParams || {},
23
23
  _ref$escapeHTML = _ref.escapeHTML,
24
24
  escapeHTML = _ref$escapeHTML === void 0 ? true : _ref$escapeHTML,
@@ -90,5 +90,4 @@ var connectLookingSimilar = function connectLookingSimilar(renderFn) {
90
90
  };
91
91
  };
92
92
  };
93
- var _default = connectLookingSimilar;
94
- exports.default = _default;
93
+ exports.default = connectLookingSimilar;
@@ -18,7 +18,7 @@ var withUsage = (0, _utils.createDocumentationMessageGenerator)({
18
18
  var connectRelatedProducts = function connectRelatedProducts(renderFn) {
19
19
  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noop;
20
20
  (0, _utils.checkRendering)(renderFn, withUsage());
21
- return function relatedProducts(widgetParams) {
21
+ return function (widgetParams) {
22
22
  var _ref = widgetParams || {},
23
23
  _ref$escapeHTML = _ref.escapeHTML,
24
24
  escapeHTML = _ref$escapeHTML === void 0 ? true : _ref$escapeHTML,
@@ -90,5 +90,4 @@ var connectRelatedProducts = function connectRelatedProducts(renderFn) {
90
90
  };
91
91
  };
92
92
  };
93
- var _default = connectRelatedProducts;
94
- exports.default = _default;
93
+ exports.default = connectRelatedProducts;
@@ -18,7 +18,7 @@ var withUsage = (0, _utils.createDocumentationMessageGenerator)({
18
18
  var connectTrendingItems = function connectTrendingItems(renderFn) {
19
19
  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.noop;
20
20
  (0, _utils.checkRendering)(renderFn, withUsage());
21
- return function trendingItems(widgetParams) {
21
+ return function (widgetParams) {
22
22
  var _ref = widgetParams || {},
23
23
  facetName = _ref.facetName,
24
24
  facetValue = _ref.facetValue,
@@ -32,6 +32,9 @@ var connectTrendingItems = function connectTrendingItems(renderFn) {
32
32
  transformItems = _ref$transformItems === void 0 ? function (items) {
33
33
  return items;
34
34
  } : _ref$transformItems;
35
+ if (facetName && !facetValue || !facetName && facetValue) {
36
+ throw new Error(withUsage("When you provide facetName (received type ".concat((0, _utils.getObjectType)(facetName), "), you must also provide facetValue (received type ").concat((0, _utils.getObjectType)(facetValue), ").")));
37
+ }
35
38
  return {
36
39
  dependsOn: 'recommend',
37
40
  $$type: 'ais.trendingItems',
@@ -86,5 +89,4 @@ var connectTrendingItems = function connectTrendingItems(renderFn) {
86
89
  };
87
90
  };
88
91
  };
89
- var _default = connectTrendingItems;
90
- exports.default = _default;
92
+ exports.default = connectTrendingItems;
@@ -9,7 +9,7 @@ var _algoliasearchHelper = _interopRequireDefault(require("algoliasearch-helper"
9
9
  var _createInsightsMiddleware = require("../middlewares/createInsightsMiddleware");
10
10
  var _createMetadataMiddleware = require("../middlewares/createMetadataMiddleware");
11
11
  var _createRouterMiddleware = require("../middlewares/createRouterMiddleware");
12
- var _index = _interopRequireDefault(require("../widgets/index/index"));
12
+ var _widgets = require("../widgets");
13
13
  var _createHelpers = _interopRequireDefault(require("./createHelpers"));
14
14
  var _utils = require("./utils");
15
15
  var _version = _interopRequireDefault(require("./version"));
@@ -175,7 +175,7 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
175
175
  _this.indexName = indexName;
176
176
  _this.helper = null;
177
177
  _this.mainHelper = null;
178
- _this.mainIndex = (0, _index.default)({
178
+ _this.mainIndex = (0, _widgets.index)({
179
179
  indexName: indexName
180
180
  });
181
181
  _this.onStateChange = onStateChange;
@@ -467,6 +467,7 @@ var InstantSearch = /*#__PURE__*/function (_EventEmitter) {
467
467
  });
468
468
  if (this._initialResults) {
469
469
  (0, _utils.hydrateSearchClient)(this.client, this._initialResults);
470
+ (0, _utils.hydrateRecommendCache)(this.mainHelper, this._initialResults);
470
471
  var originalScheduleSearch = this.scheduleSearch;
471
472
  // We don't schedule a first search when initial results are provided
472
473
  // because we already have the results to render. This skips the initial
package/cjs/lib/server.js CHANGED
@@ -17,13 +17,14 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
17
17
  * in `getServerState()`.
18
18
  */
19
19
  function waitForResults(search) {
20
+ var skipRecommend = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20
21
  var helper = search.mainHelper;
21
22
 
22
23
  // Extract search parameters from the search client to use them
23
24
  // later during hydration.
24
25
  var requestParamsList;
25
26
  var client = helper.getClient();
26
- helper.setClient({
27
+ helper.setClient(_objectSpread(_objectSpread({}, client), {}, {
27
28
  search: function search(queries) {
28
29
  requestParamsList = queries.map(function (_ref) {
29
30
  var params = _ref.params;
@@ -31,13 +32,25 @@ function waitForResults(search) {
31
32
  });
32
33
  return client.search(queries);
33
34
  }
34
- });
35
- helper.searchOnlyWithDerivedHelpers();
35
+ }));
36
+ search._hasSearchWidget && helper.searchOnlyWithDerivedHelpers();
37
+ !skipRecommend && search._hasRecommendWidget && helper.recommend();
36
38
  return new Promise(function (resolve, reject) {
39
+ var searchResultsReceived = !search._hasSearchWidget;
40
+ var recommendResultsReceived = !search._hasRecommendWidget || skipRecommend;
37
41
  // All derived helpers resolve in the same tick so we're safe only relying
38
42
  // on the first one.
39
43
  helper.derivedHelpers[0].on('result', function () {
40
- resolve(requestParamsList);
44
+ searchResultsReceived = true;
45
+ if (recommendResultsReceived) {
46
+ resolve(requestParamsList);
47
+ }
48
+ });
49
+ helper.derivedHelpers[0].on('recommend:result', function () {
50
+ recommendResultsReceived = true;
51
+ if (searchResultsReceived) {
52
+ resolve(requestParamsList);
53
+ }
41
54
  });
42
55
 
43
56
  // However, we listen to errors that can happen on any derived helper because
@@ -68,15 +81,21 @@ requestParamsList) {
68
81
  var initialResults = {};
69
82
  var requestParamsIndex = 0;
70
83
  (0, _utils.walkIndex)(rootIndex, function (widget) {
84
+ var _widget$getHelper;
71
85
  var searchResults = widget.getResults();
72
- if (searchResults) {
86
+ var recommendResults = (_widget$getHelper = widget.getHelper()) === null || _widget$getHelper === void 0 ? void 0 : _widget$getHelper.lastRecommendResults;
87
+ if (searchResults || recommendResults) {
73
88
  var requestParams = requestParamsList === null || requestParamsList === void 0 ? void 0 : requestParamsList[requestParamsIndex++];
74
- initialResults[widget.getIndexId()] = _objectSpread({
75
- // We convert the Helper state to a plain object to pass parsable data
76
- // structures from server to client.
89
+ initialResults[widget.getIndexId()] = _objectSpread(_objectSpread(_objectSpread({}, searchResults && {
77
90
  state: _objectSpread({}, searchResults._state),
78
91
  results: searchResults._rawResults
79
- }, requestParams && {
92
+ }), recommendResults && {
93
+ recommendResults: {
94
+ // We have to stringify + parse because of some explicitly undefined values.
95
+ params: JSON.parse(JSON.stringify(recommendResults._state.params)),
96
+ results: recommendResults._rawResults
97
+ }
98
+ }), requestParams && {
80
99
  requestParams: requestParams
81
100
  });
82
101
  }
@@ -4,10 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.addWidgetId = addWidgetId;
7
+ exports.resetWidgetId = resetWidgetId;
7
8
  var id = 0;
8
9
  function addWidgetId(widget) {
9
10
  if (widget.dependsOn !== 'recommend') {
10
11
  return;
11
12
  }
12
13
  widget.$$id = id++;
14
+ }
15
+ function resetWidgetId() {
16
+ id = 0;
13
17
  }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hydrateRecommendCache = hydrateRecommendCache;
7
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
8
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
12
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
13
+ function hydrateRecommendCache(helper, initialResults) {
14
+ var recommendCache = Object.keys(initialResults).reduce(function (acc, indexName) {
15
+ var initialResult = initialResults[indexName];
16
+ if (initialResult.recommendResults) {
17
+ // @MAJOR: Use `Object.assign` instead of spread operator
18
+ return _objectSpread(_objectSpread({}, acc), initialResult.recommendResults.results);
19
+ }
20
+ return acc;
21
+ }, {});
22
+ helper._recommendCache = recommendCache;
23
+ }
@@ -33,16 +33,20 @@ function hydrateSearchClient(client, results) {
33
33
  state = _results$key.state,
34
34
  requestParams = _results$key.requestParams,
35
35
  serverResults = _results$key.results;
36
- return serverResults.map(function (result) {
36
+ return serverResults && state ? serverResults.map(function (result) {
37
37
  return _objectSpread({
38
38
  indexName: state.index || result.index
39
39
  }, requestParams || result.params ? {
40
40
  params: serializeQueryParameters(requestParams || deserializeQueryParameters(result.params))
41
41
  } : {});
42
- });
42
+ }) : [];
43
43
  });
44
44
  var cachedResults = Object.keys(results).reduce(function (acc, key) {
45
- return acc.concat(results[key].results);
45
+ var res = results[key].results;
46
+ if (!res) {
47
+ return acc;
48
+ }
49
+ return acc.concat(res);
46
50
  }, []);
47
51
 
48
52
  // Algoliasearch API Client >= v4
@@ -3,6 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _addWidgetId = require("./addWidgetId");
7
+ Object.keys(_addWidgetId).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _addWidgetId[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _addWidgetId[key];
14
+ }
15
+ });
16
+ });
6
17
  var _capitalize = require("./capitalize");
7
18
  Object.keys(_capitalize).forEach(function (key) {
8
19
  if (key === "default" || key === "__esModule") return;
@@ -322,6 +333,17 @@ Object.keys(_hitsQueryId).forEach(function (key) {
322
333
  }
323
334
  });
324
335
  });
336
+ var _hydrateRecommendCache = require("./hydrateRecommendCache");
337
+ Object.keys(_hydrateRecommendCache).forEach(function (key) {
338
+ if (key === "default" || key === "__esModule") return;
339
+ if (key in exports && exports[key] === _hydrateRecommendCache[key]) return;
340
+ Object.defineProperty(exports, key, {
341
+ enumerable: true,
342
+ get: function get() {
343
+ return _hydrateRecommendCache[key];
344
+ }
345
+ });
346
+ });
325
347
  var _hydrateSearchClient = require("./hydrateSearchClient");
326
348
  Object.keys(_hydrateSearchClient).forEach(function (key) {
327
349
  if (key === "default" || key === "__esModule") return;
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '4.69.0';
7
+ var _default = '4.71.0';
8
8
  exports.default = _default;
@@ -36,7 +36,6 @@ var renderer = function renderer(_ref) {
36
36
  instantSearchInstance = _ref2.instantSearchInstance;
37
37
  if (isFirstRendering) {
38
38
  renderState.templateProps = (0, _templating.prepareTemplateProps)({
39
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
40
39
  defaultTemplates: {},
41
40
  templatesConfig: instantSearchInstance.templatesConfig,
42
41
  templates: templates
@@ -116,5 +115,4 @@ var frequentlyBoughtTogether = function frequentlyBoughtTogether(widgetParams) {
116
115
  $$widgetType: 'ais.frequentlyBoughtTogether'
117
116
  });
118
117
  };
119
- var _default = frequentlyBoughtTogether;
120
- exports.default = _default;
118
+ exports.default = frequentlyBoughtTogether;
@@ -156,12 +156,14 @@ var geoSearch = function geoSearch(widgetParams) {
156
156
  return (0, _preact.render)(null, containerNode);
157
157
  });
158
158
  return _objectSpread(_objectSpread({}, makeWidget(_objectSpread(_objectSpread({}, otherWidgetParams), {}, {
159
+ // @TODO: this type doesn't preserve the generic correctly,
160
+ // (but as they're internal only it's not a big problem)
161
+ templates: templates,
159
162
  renderState: {},
160
163
  container: containerNode,
161
164
  googleReference: googleReference,
162
165
  initialZoom: initialZoom,
163
166
  initialPosition: initialPosition,
164
- templates: templates,
165
167
  cssClasses: cssClasses,
166
168
  createMarker: createMarker,
167
169
  markerOptions: markerOptions,
@@ -172,5 +174,4 @@ var geoSearch = function geoSearch(widgetParams) {
172
174
  $$widgetType: 'ais.geoSearch'
173
175
  });
174
176
  };
175
- var _default = geoSearch;
176
- exports.default = _default;
177
+ exports.default = geoSearch;
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _utils = require("../../lib/utils");
8
+ // false positive lint error
9
+ // eslint-disable-next-line @typescript-eslint/consistent-type-imports
8
10
  var defaultTemplates = {
9
11
  empty: function empty() {
10
12
  return 'No results';
@@ -38,7 +38,7 @@ var renderer = function renderer(_ref) {
38
38
  containerNode = _ref.containerNode,
39
39
  templates = _ref.templates;
40
40
  return function (_ref2, isFirstRendering) {
41
- var receivedHits = _ref2.hits,
41
+ var items = _ref2.items,
42
42
  results = _ref2.results,
43
43
  instantSearchInstance = _ref2.instantSearchInstance,
44
44
  insights = _ref2.insights,
@@ -104,7 +104,7 @@ var renderer = function renderer(_ref) {
104
104
  }));
105
105
  };
106
106
  (0, _preact.render)((0, _preact.h)(Hits, {
107
- hits: receivedHits,
107
+ hits: items,
108
108
  itemComponent: itemComponent,
109
109
  sendEvent: sendEvent,
110
110
  classNames: cssClasses,
@@ -143,5 +143,4 @@ var hits = function hits(widgetParams) {
143
143
  $$widgetType: 'ais.hits'
144
144
  });
145
145
  };
146
- var _default = hits;
147
- exports.default = _default;
146
+ exports.default = hits;
@@ -403,13 +403,20 @@ var index = function index(widgetParams) {
403
403
  return _this3.getHelper().recommendState;
404
404
  });
405
405
  var indexInitialResults = (_instantSearchInstanc = instantSearchInstance._initialResults) === null || _instantSearchInstanc === void 0 ? void 0 : _instantSearchInstanc[this.getIndexId()];
406
- if (indexInitialResults) {
406
+ if (indexInitialResults !== null && indexInitialResults !== void 0 && indexInitialResults.results) {
407
407
  // We restore the shape of the results provided to the instance to respect
408
408
  // the helper's structure.
409
409
  var results = new _algoliasearchHelper.default.SearchResults(new _algoliasearchHelper.default.SearchParameters(indexInitialResults.state), indexInitialResults.results);
410
410
  derivedHelper.lastResults = results;
411
411
  helper.lastResults = results;
412
412
  }
413
+ if (indexInitialResults !== null && indexInitialResults !== void 0 && indexInitialResults.recommendResults) {
414
+ var recommendResults = new _algoliasearchHelper.default.RecommendResults(new _algoliasearchHelper.default.RecommendParameters({
415
+ params: indexInitialResults.recommendResults.params
416
+ }), indexInitialResults.recommendResults.results);
417
+ derivedHelper.lastRecommendResults = recommendResults;
418
+ helper.lastRecommendResults = recommendResults;
419
+ }
413
420
 
414
421
  // Subscribe to the Helper state changes for the page before widgets
415
422
  // are initialized. This behavior mimics the original one of the Helper.
@@ -31,7 +31,7 @@ var renderer = function renderer(_ref) {
31
31
  templates = _ref.templates,
32
32
  hasShowPrevious = _ref.showPrevious;
33
33
  return function (_ref2, isFirstRendering) {
34
- var hits = _ref2.hits,
34
+ var items = _ref2.items,
35
35
  results = _ref2.results,
36
36
  showMore = _ref2.showMore,
37
37
  showPrevious = _ref2.showPrevious,
@@ -51,7 +51,7 @@ var renderer = function renderer(_ref) {
51
51
  }
52
52
  (0, _preact.render)((0, _preact.h)(_InfiniteHits.default, {
53
53
  cssClasses: cssClasses,
54
- hits: hits,
54
+ hits: items,
55
55
  results: results,
56
56
  hasShowPrevious: hasShowPrevious,
57
57
  showPrevious: showPrevious,
@@ -125,5 +125,4 @@ var infiniteHits = function infiniteHits(widgetParams) {
125
125
  $$widgetType: 'ais.infiniteHits'
126
126
  });
127
127
  };
128
- var _default = infiniteHits;
129
- exports.default = _default;
128
+ exports.default = infiniteHits;
@@ -25,7 +25,7 @@ var LookingSimilar = (0, _instantsearchUiComponents.createLookingSimilarComponen
25
25
  createElement: _preact.h,
26
26
  Fragment: _preact.Fragment
27
27
  });
28
- var renderer = function renderer(_ref) {
28
+ function createRenderer(_ref) {
29
29
  var renderState = _ref.renderState,
30
30
  cssClasses = _ref.cssClasses,
31
31
  containerNode = _ref.containerNode,
@@ -36,7 +36,6 @@ var renderer = function renderer(_ref) {
36
36
  instantSearchInstance = _ref2.instantSearchInstance;
37
37
  if (isFirstRendering) {
38
38
  renderState.templateProps = (0, _templating.prepareTemplateProps)({
39
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
40
39
  defaultTemplates: {},
41
40
  templatesConfig: instantSearchInstance.templatesConfig,
42
41
  templates: templates
@@ -78,7 +77,7 @@ var renderer = function renderer(_ref) {
78
77
  status: instantSearchInstance.status
79
78
  }), containerNode);
80
79
  };
81
- };
80
+ }
82
81
  var lookingSimilar = function lookingSimilar(widgetParams) {
83
82
  var _ref4 = widgetParams || {},
84
83
  container = _ref4.container,
@@ -97,7 +96,7 @@ var lookingSimilar = function lookingSimilar(widgetParams) {
97
96
  throw new Error(withUsage('The `container` option is required.'));
98
97
  }
99
98
  var containerNode = (0, _utils.getContainerNode)(container);
100
- var specializedRenderer = renderer({
99
+ var specializedRenderer = createRenderer({
101
100
  containerNode: containerNode,
102
101
  cssClasses: cssClasses,
103
102
  renderState: {},
@@ -118,5 +117,4 @@ var lookingSimilar = function lookingSimilar(widgetParams) {
118
117
  $$widgetType: 'ais.lookingSimilar'
119
118
  });
120
119
  };
121
- var _default = lookingSimilar;
122
- exports.default = _default;
120
+ exports.default = lookingSimilar;
@@ -49,6 +49,7 @@ var defaultTemplates = {
49
49
  xlinkHref: isFull ? '#ais-RatingMenu-starSymbol' : '#ais-RatingMenu-starEmptySymbol'
50
50
  }));
51
51
  }), (0, _preact.h)("span", {
52
+ "aria-hidden": "true",
52
53
  className: (0, _instantsearchUiComponents.cx)(cssClasses.label)
53
54
  }, "& Up"), count && (0, _preact.h)("span", {
54
55
  className: (0, _instantsearchUiComponents.cx)(cssClasses.count)
@@ -36,7 +36,6 @@ function createRenderer(_ref) {
36
36
  instantSearchInstance = _ref2.instantSearchInstance;
37
37
  if (isFirstRendering) {
38
38
  renderState.templateProps = (0, _templating.prepareTemplateProps)({
39
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
40
39
  defaultTemplates: {},
41
40
  templatesConfig: instantSearchInstance.templatesConfig,
42
41
  templates: templates
@@ -118,5 +117,4 @@ var relatedProducts = function relatedProducts(widgetParams) {
118
117
  $$widgetType: 'ais.relatedProducts'
119
118
  });
120
119
  };
121
- var _default = relatedProducts;
122
- exports.default = _default;
120
+ exports.default = relatedProducts;
@@ -36,7 +36,6 @@ function createRenderer(_ref) {
36
36
  instantSearchInstance = _ref2.instantSearchInstance;
37
37
  if (isFirstRendering) {
38
38
  renderState.templateProps = (0, _templating.prepareTemplateProps)({
39
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
40
39
  defaultTemplates: {},
41
40
  templatesConfig: instantSearchInstance.templatesConfig,
42
41
  templates: templates
@@ -122,5 +121,4 @@ var trendingItems = function trendingItems(widgetParams) {
122
121
  $$widgetType: 'ais.trendingItems'
123
122
  });
124
123
  };
125
- var _default = trendingItems;
126
- exports.default = _default;
124
+ exports.default = trendingItems;