instantsearch.js 4.56.4 → 4.56.5

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 (38) hide show
  1. package/cjs/connectors/breadcrumb/connectBreadcrumb.js +31 -4
  2. package/cjs/connectors/hierarchical-menu/connectHierarchicalMenu.js +9 -3
  3. package/cjs/connectors/hits-per-page/connectHitsPerPage.js +12 -3
  4. package/cjs/connectors/menu/connectMenu.js +7 -1
  5. package/cjs/connectors/numeric-menu/connectNumericMenu.js +7 -1
  6. package/cjs/connectors/pagination/connectPagination.js +7 -5
  7. package/cjs/connectors/rating-menu/connectRatingMenu.js +12 -3
  8. package/cjs/connectors/refinement-list/connectRefinementList.js +7 -1
  9. package/cjs/connectors/toggle-refinement/connectToggleRefinement.js +15 -3
  10. package/cjs/lib/version.js +1 -1
  11. package/cjs/middlewares/createRouterMiddleware.js +9 -1
  12. package/cjs/widgets/index/index.js +6 -3
  13. package/dist/instantsearch.development.d.ts +7 -3
  14. package/dist/instantsearch.development.js +124 -30
  15. package/dist/instantsearch.development.js.map +1 -1
  16. package/dist/instantsearch.production.d.ts +7 -3
  17. package/dist/instantsearch.production.min.d.ts +7 -3
  18. package/dist/instantsearch.production.min.js +2 -2
  19. package/dist/instantsearch.production.min.js.map +1 -1
  20. package/es/connectors/breadcrumb/connectBreadcrumb.js +31 -4
  21. package/es/connectors/hierarchical-menu/connectHierarchicalMenu.js +9 -3
  22. package/es/connectors/hits-per-page/connectHitsPerPage.d.ts +5 -1
  23. package/es/connectors/hits-per-page/connectHitsPerPage.js +12 -3
  24. package/es/connectors/menu/connectMenu.js +7 -1
  25. package/es/connectors/numeric-menu/connectNumericMenu.js +7 -1
  26. package/es/connectors/pagination/connectPagination.js +7 -5
  27. package/es/connectors/rating-menu/connectRatingMenu.js +12 -3
  28. package/es/connectors/refinement-list/connectRefinementList.js +7 -1
  29. package/es/connectors/toggle-refinement/connectToggleRefinement.d.ts +1 -1
  30. package/es/connectors/toggle-refinement/connectToggleRefinement.js +15 -3
  31. package/es/lib/utils/render-args.d.ts +222 -2
  32. package/es/lib/version.d.ts +1 -1
  33. package/es/lib/version.js +1 -1
  34. package/es/middlewares/createRouterMiddleware.js +9 -1
  35. package/es/types/widget.d.ts +1 -1
  36. package/es/widgets/index/index.d.ts +1 -1
  37. package/es/widgets/index/index.js +6 -3
  38. package/package.json +5 -5
@@ -67,6 +67,7 @@ var connectBreadcrumb = function connectBreadcrumb(renderFn) {
67
67
  });
68
68
  },
69
69
  getWidgetRenderState: function getWidgetRenderState(_ref2) {
70
+ var _this = this;
70
71
  var helper = _ref2.helper,
71
72
  createURL = _ref2.createURL,
72
73
  results = _ref2.results,
@@ -90,7 +91,12 @@ var connectBreadcrumb = function connectBreadcrumb(renderFn) {
90
91
  var items = getItems();
91
92
  if (!connectorState.createURL) {
92
93
  connectorState.createURL = function (facetValue) {
93
- return createURL(getRefinedState(helper.state, facetValue));
94
+ return createURL(function (uiState) {
95
+ return _this.getWidgetUiState(uiState, {
96
+ searchParameters: getRefinedState(helper.state, facetValue),
97
+ helper: helper
98
+ });
99
+ });
94
100
  };
95
101
  }
96
102
  if (!connectorState.refine) {
@@ -106,18 +112,39 @@ var connectBreadcrumb = function connectBreadcrumb(renderFn) {
106
112
  widgetParams: widgetParams
107
113
  };
108
114
  },
109
- getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters) {
115
+ getWidgetUiState: function getWidgetUiState(uiState, _ref3) {
116
+ var searchParameters = _ref3.searchParameters;
117
+ var path = searchParameters.getHierarchicalFacetBreadcrumb(hierarchicalFacetName);
118
+ if (!path.length) {
119
+ return uiState;
120
+ }
121
+ return _objectSpread(_objectSpread({}, uiState), {}, {
122
+ hierarchicalMenu: _objectSpread(_objectSpread({}, uiState.hierarchicalMenu), {}, _defineProperty({}, hierarchicalFacetName, path))
123
+ });
124
+ },
125
+ getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref4) {
126
+ var uiState = _ref4.uiState;
127
+ var values = uiState.hierarchicalMenu && uiState.hierarchicalMenu[hierarchicalFacetName];
128
+ if (searchParameters.isConjunctiveFacet(hierarchicalFacetName) || searchParameters.isDisjunctiveFacet(hierarchicalFacetName)) {
129
+ process.env.NODE_ENV === 'development' ? warning(false, "HierarchicalMenu: Attribute \"".concat(hierarchicalFacetName, "\" is already used by another widget applying conjunctive or disjunctive faceting.\nAs this is not supported, please make sure to remove this other widget or this HierarchicalMenu widget will not work at all.")) : void 0;
130
+ return searchParameters;
131
+ }
110
132
  if (searchParameters.isHierarchicalFacet(hierarchicalFacetName)) {
111
133
  var facet = searchParameters.getHierarchicalFacetByName(hierarchicalFacetName);
112
134
  process.env.NODE_ENV === 'development' ? warning(isEqual(facet.attributes, attributes) && facet.separator === separator && facet.rootPath === rootPath, 'Using Breadcrumb and HierarchicalMenu on the same facet with different options overrides the configuration of the HierarchicalMenu.') : void 0;
113
- return searchParameters;
114
135
  }
115
- return searchParameters.addHierarchicalFacet({
136
+ var withFacetConfiguration = searchParameters.removeHierarchicalFacet(hierarchicalFacetName).addHierarchicalFacet({
116
137
  name: hierarchicalFacetName,
117
138
  attributes: attributes,
118
139
  separator: separator,
119
140
  rootPath: rootPath
120
141
  });
142
+ if (!values) {
143
+ return withFacetConfiguration.setQueryParameters({
144
+ hierarchicalFacetsRefinements: _objectSpread(_objectSpread({}, withFacetConfiguration.hierarchicalFacetsRefinements), {}, _defineProperty({}, hierarchicalFacetName, []))
145
+ });
146
+ }
147
+ return withFacetConfiguration.addHierarchicalFacetRefinement(hierarchicalFacetName, values.join(separator));
121
148
  }
122
149
  };
123
150
  };
@@ -130,6 +130,7 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
130
130
  });
131
131
  },
132
132
  getWidgetRenderState: function getWidgetRenderState(_ref4) {
133
+ var _this = this;
133
134
  var results = _ref4.results,
134
135
  state = _ref4.state,
135
136
  createURL = _ref4.createURL,
@@ -139,9 +140,14 @@ var connectHierarchicalMenu = function connectHierarchicalMenu(renderFn) {
139
140
  var canToggleShowMore = false;
140
141
 
141
142
  // Bind createURL to this specific attribute
142
- function _createURL(facetValue) {
143
- return createURL(state.resetPage().toggleFacetRefinement(hierarchicalFacetName, facetValue));
144
- }
143
+ var _createURL = function _createURL(facetValue) {
144
+ return createURL(function (uiState) {
145
+ return _this.getWidgetUiState(uiState, {
146
+ searchParameters: state.resetPage().toggleFacetRefinement(hierarchicalFacetName, facetValue),
147
+ helper: helper
148
+ });
149
+ });
150
+ };
145
151
  if (!sendEvent) {
146
152
  sendEvent = createSendEventForFacet({
147
153
  instantSearchInstance: instantSearchInstance,
@@ -1,4 +1,4 @@
1
- import type { Connector, TransformItems, WidgetRenderState } from '../../types';
1
+ import type { Connector, TransformItems, CreateURL, WidgetRenderState } from '../../types';
2
2
  export type HitsPerPageRenderStateItem = {
3
3
  /**
4
4
  * Label to display in the option.
@@ -44,6 +44,10 @@ export type HitsPerPageRenderState = {
44
44
  * Array of objects defining the different values and labels.
45
45
  */
46
46
  items: HitsPerPageRenderStateItem[];
47
+ /**
48
+ * Creates the URL for a single item name in the list.
49
+ */
50
+ createURL: CreateURL<HitsPerPageConnectorParamsItem['value']>;
47
51
  /**
48
52
  * Sets the number of hits per page and triggers a search.
49
53
  */
@@ -55,9 +55,16 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
55
55
  },
56
56
  createURLFactory: function createURLFactory(_ref3) {
57
57
  var state = _ref3.state,
58
- createURL = _ref3.createURL;
58
+ createURL = _ref3.createURL,
59
+ getWidgetUiState = _ref3.getWidgetUiState,
60
+ helper = _ref3.helper;
59
61
  return function (value) {
60
- return createURL(state.resetPage().setQueryParameter('hitsPerPage', !value && value !== 0 ? undefined : value));
62
+ return createURL(function (uiState) {
63
+ return getWidgetUiState(uiState, {
64
+ searchParameters: state.resetPage().setQueryParameter('hitsPerPage', !value && value !== 0 ? undefined : value),
65
+ helper: helper
66
+ });
67
+ });
61
68
  };
62
69
  }
63
70
  };
@@ -112,7 +119,9 @@ var connectHitsPerPage = function connectHitsPerPage(renderFn) {
112
119
  refine: connectorState.getRefine(helper),
113
120
  createURL: connectorState.createURLFactory({
114
121
  state: state,
115
- createURL: createURL
122
+ createURL: createURL,
123
+ getWidgetUiState: this.getWidgetUiState,
124
+ helper: helper
116
125
  }),
117
126
  hasNoResults: !canRefine,
118
127
  canRefine: canRefine,
@@ -97,6 +97,7 @@ var connectMenu = function connectMenu(renderFn) {
97
97
  });
98
98
  },
99
99
  getWidgetRenderState: function getWidgetRenderState(renderOptions) {
100
+ var _this = this;
100
101
  var results = renderOptions.results,
101
102
  createURL = renderOptions.createURL,
102
103
  instantSearchInstance = renderOptions.instantSearchInstance,
@@ -113,7 +114,12 @@ var connectMenu = function connectMenu(renderFn) {
113
114
  }
114
115
  if (!_createURL) {
115
116
  _createURL = function _createURL(facetValue) {
116
- return createURL(helper.state.resetPage().toggleFacetRefinement(attribute, facetValue));
117
+ return createURL(function (uiState) {
118
+ return _this.getWidgetUiState(uiState, {
119
+ searchParameters: helper.state.resetPage().toggleFacetRefinement(attribute, facetValue),
120
+ helper: helper
121
+ });
122
+ });
117
123
  };
118
124
  }
119
125
  if (!_refine) {
@@ -129,6 +129,7 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
129
129
  });
130
130
  },
131
131
  getWidgetRenderState: function getWidgetRenderState(_ref7) {
132
+ var _this = this;
132
133
  var results = _ref7.results,
133
134
  state = _ref7.state,
134
135
  instantSearchInstance = _ref7.instantSearchInstance,
@@ -144,7 +145,12 @@ var connectNumericMenu = function connectNumericMenu(renderFn) {
144
145
  if (!connectorState.createURL) {
145
146
  connectorState.createURL = function (newState) {
146
147
  return function (facetValue) {
147
- return createURL(getRefinedState(newState, attribute, facetValue));
148
+ return createURL(function (uiState) {
149
+ return _this.getWidgetUiState(uiState, {
150
+ searchParameters: getRefinedState(newState, attribute, facetValue),
151
+ helper: helper
152
+ });
153
+ });
148
154
  };
149
155
  };
150
156
  }
@@ -81,10 +81,12 @@ var connectPagination = function connectPagination(renderFn) {
81
81
  };
82
82
  }
83
83
  if (!connectorState.createURL) {
84
- connectorState.createURL = function (helperState) {
85
- return function (page) {
86
- return createURL(helperState.setPage(page));
87
- };
84
+ connectorState.createURL = function (page) {
85
+ return createURL(function (uiState) {
86
+ return _objectSpread(_objectSpread({}, uiState), {}, {
87
+ page: page
88
+ });
89
+ });
88
90
  };
89
91
  }
90
92
  var page = state.page || 0;
@@ -94,7 +96,7 @@ var connectPagination = function connectPagination(renderFn) {
94
96
  pager.currentPage = page;
95
97
  pager.total = nbPages;
96
98
  return {
97
- createURL: connectorState.createURL(state),
99
+ createURL: connectorState.createURL,
98
100
  refine: connectorState.refine,
99
101
  canRefine: nbPages > 1,
100
102
  currentRefinement: page,
@@ -136,9 +136,16 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
136
136
  },
137
137
  createURLFactory: function createURLFactory(_ref4) {
138
138
  var state = _ref4.state,
139
- createURL = _ref4.createURL;
139
+ createURL = _ref4.createURL,
140
+ getWidgetUiState = _ref4.getWidgetUiState,
141
+ helper = _ref4.helper;
140
142
  return function (value) {
141
- return createURL(getRefinedState(state, value));
143
+ return createURL(function (uiState) {
144
+ return getWidgetUiState(uiState, {
145
+ searchParameters: getRefinedState(state, value),
146
+ helper: helper
147
+ });
148
+ });
142
149
  };
143
150
  }
144
151
  };
@@ -234,7 +241,9 @@ var connectRatingMenu = function connectRatingMenu(renderFn) {
234
241
  sendEvent: sendEvent,
235
242
  createURL: connectorState.createURLFactory({
236
243
  state: state,
237
- createURL: createURL
244
+ createURL: createURL,
245
+ helper: helper,
246
+ getWidgetUiState: this.getWidgetUiState
238
247
  }),
239
248
  widgetParams: widgetParams
240
249
  };
@@ -157,6 +157,7 @@ var connectRefinementList = function connectRefinementList(renderFn) {
157
157
  });
158
158
  },
159
159
  getWidgetRenderState: function getWidgetRenderState(renderOptions) {
160
+ var _this = this;
160
161
  var results = renderOptions.results,
161
162
  state = renderOptions.state,
162
163
  _createURL = renderOptions.createURL,
@@ -210,7 +211,12 @@ var connectRefinementList = function connectRefinementList(renderFn) {
210
211
  var canToggleShowMore = canShowLess || canShowMore;
211
212
  return {
212
213
  createURL: function createURL(facetValue) {
213
- return _createURL(state.resetPage().toggleFacetRefinement(attribute, facetValue));
214
+ return _createURL(function (uiState) {
215
+ return _this.getWidgetUiState(uiState, {
216
+ searchParameters: state.resetPage().toggleFacetRefinement(attribute, facetValue),
217
+ helper: helper
218
+ });
219
+ });
214
220
  },
215
221
  items: items,
216
222
  refine: triggerRefine,
@@ -55,7 +55,7 @@ export type ToggleRefinementRenderState = {
55
55
  /**
56
56
  * Creates an URL for the next state.
57
57
  */
58
- createURL: CreateURL<string>;
58
+ createURL: CreateURL<void>;
59
59
  /**
60
60
  * Send a "Facet Clicked" Insights event.
61
61
  */
@@ -119,7 +119,9 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
119
119
  var connectorState = {
120
120
  createURLFactory: function createURLFactory(isRefined, _ref4) {
121
121
  var state = _ref4.state,
122
- createURL = _ref4.createURL;
122
+ createURL = _ref4.createURL,
123
+ getWidgetUiState = _ref4.getWidgetUiState,
124
+ helper = _ref4.helper;
123
125
  return function () {
124
126
  state = state.resetPage();
125
127
  var valuesToRemove = isRefined ? on : off;
@@ -134,7 +136,12 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
134
136
  state = state.addDisjunctiveFacetRefinement(attribute, v);
135
137
  });
136
138
  }
137
- return createURL(state);
139
+ return createURL(function (uiState) {
140
+ return getWidgetUiState(uiState, {
141
+ searchParameters: state,
142
+ helper: helper
143
+ });
144
+ });
138
145
  };
139
146
  }
140
147
  };
@@ -239,7 +246,9 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
239
246
  },
240
247
  createURL: connectorState.createURLFactory(isRefined, {
241
248
  state: state,
242
- createURL: createURL
249
+ createURL: createURL,
250
+ helper: helper,
251
+ getWidgetUiState: this.getWidgetUiState
243
252
  }),
244
253
  sendEvent: sendEvent,
245
254
  canRefine: Boolean(results ? nextRefinement.count : null),
@@ -253,6 +262,9 @@ var connectToggleRefinement = function connectToggleRefinement(renderFn) {
253
262
  return searchParameters.isDisjunctiveFacetRefined(attribute, v);
254
263
  });
255
264
  if (!isRefined) {
265
+ var _uiState$toggle;
266
+ // This needs to be done in the case `uiState` comes from `createURL`
267
+ (_uiState$toggle = uiState.toggle) === null || _uiState$toggle === void 0 ? true : delete _uiState$toggle[attribute];
256
268
  return uiState;
257
269
  }
258
270
  return _objectSpread(_objectSpread({}, uiState), {}, {
@@ -8,7 +8,117 @@ export declare function createInitArgs(instantSearchInstance: InstantSearch, par
8
8
  state: import("algoliasearch-helper").SearchParameters;
9
9
  renderState: import("../../types").RenderState;
10
10
  templatesConfig: Record<string, unknown>;
11
- createURL: (state: import("algoliasearch-helper").SearchParameters) => string;
11
+ createURL: (nextState: import("algoliasearch-helper").SearchParameters | ((state: Partial<{
12
+ query: string;
13
+ } & {
14
+ configure: import("algoliasearch-helper").PlainSearchParameters;
15
+ } & {
16
+ geoSearch: {
17
+ boundingBox: string;
18
+ };
19
+ } & {
20
+ hierarchicalMenu: {
21
+ [rootAttribute: string]: string[];
22
+ };
23
+ } & {
24
+ hitsPerPage: number;
25
+ } & {
26
+ page: number;
27
+ } & {
28
+ menu: {
29
+ [attribute: string]: string;
30
+ };
31
+ } & {
32
+ numericMenu: {
33
+ [attribute: string]: string;
34
+ };
35
+ } & {
36
+ page: number;
37
+ } & {
38
+ range: {
39
+ [attribute: string]: string;
40
+ };
41
+ } & {
42
+ ratingMenu: {
43
+ [attribute: string]: number;
44
+ };
45
+ } & {
46
+ refinementList: {
47
+ [attribute: string]: string[];
48
+ };
49
+ } & {
50
+ relevantSort: number;
51
+ } & {
52
+ query: string;
53
+ } & {
54
+ sortBy: string;
55
+ } & {
56
+ toggle: {
57
+ [attribute: string]: boolean;
58
+ };
59
+ } & {
60
+ query: string;
61
+ } & {
62
+ places: {
63
+ query: string;
64
+ position: string;
65
+ };
66
+ }>) => Partial<{
67
+ query: string;
68
+ } & {
69
+ configure: import("algoliasearch-helper").PlainSearchParameters;
70
+ } & {
71
+ geoSearch: {
72
+ boundingBox: string;
73
+ };
74
+ } & {
75
+ hierarchicalMenu: {
76
+ [rootAttribute: string]: string[];
77
+ };
78
+ } & {
79
+ hitsPerPage: number;
80
+ } & {
81
+ page: number;
82
+ } & {
83
+ menu: {
84
+ [attribute: string]: string;
85
+ };
86
+ } & {
87
+ numericMenu: {
88
+ [attribute: string]: string;
89
+ };
90
+ } & {
91
+ page: number;
92
+ } & {
93
+ range: {
94
+ [attribute: string]: string;
95
+ };
96
+ } & {
97
+ ratingMenu: {
98
+ [attribute: string]: number;
99
+ };
100
+ } & {
101
+ refinementList: {
102
+ [attribute: string]: string[];
103
+ };
104
+ } & {
105
+ relevantSort: number;
106
+ } & {
107
+ query: string;
108
+ } & {
109
+ sortBy: string;
110
+ } & {
111
+ toggle: {
112
+ [attribute: string]: boolean;
113
+ };
114
+ } & {
115
+ query: string;
116
+ } & {
117
+ places: {
118
+ query: string;
119
+ position: string;
120
+ };
121
+ }>)) => string;
12
122
  scopedResults: never[];
13
123
  searchMetadata: {
14
124
  isSearchStalled: boolean;
@@ -25,7 +135,117 @@ export declare function createRenderArgs(instantSearchInstance: InstantSearch, p
25
135
  state: import("algoliasearch-helper").SearchParameters;
26
136
  renderState: import("../../types").RenderState;
27
137
  templatesConfig: Record<string, unknown>;
28
- createURL: (state: import("algoliasearch-helper").SearchParameters) => string;
138
+ createURL: (nextState: import("algoliasearch-helper").SearchParameters | ((state: Partial<{
139
+ query: string;
140
+ } & {
141
+ configure: import("algoliasearch-helper").PlainSearchParameters;
142
+ } & {
143
+ geoSearch: {
144
+ boundingBox: string;
145
+ };
146
+ } & {
147
+ hierarchicalMenu: {
148
+ [rootAttribute: string]: string[];
149
+ };
150
+ } & {
151
+ hitsPerPage: number;
152
+ } & {
153
+ page: number;
154
+ } & {
155
+ menu: {
156
+ [attribute: string]: string;
157
+ };
158
+ } & {
159
+ numericMenu: {
160
+ [attribute: string]: string;
161
+ };
162
+ } & {
163
+ page: number;
164
+ } & {
165
+ range: {
166
+ [attribute: string]: string;
167
+ };
168
+ } & {
169
+ ratingMenu: {
170
+ [attribute: string]: number;
171
+ };
172
+ } & {
173
+ refinementList: {
174
+ [attribute: string]: string[];
175
+ };
176
+ } & {
177
+ relevantSort: number;
178
+ } & {
179
+ query: string;
180
+ } & {
181
+ sortBy: string;
182
+ } & {
183
+ toggle: {
184
+ [attribute: string]: boolean;
185
+ };
186
+ } & {
187
+ query: string;
188
+ } & {
189
+ places: {
190
+ query: string;
191
+ position: string;
192
+ };
193
+ }>) => Partial<{
194
+ query: string;
195
+ } & {
196
+ configure: import("algoliasearch-helper").PlainSearchParameters;
197
+ } & {
198
+ geoSearch: {
199
+ boundingBox: string;
200
+ };
201
+ } & {
202
+ hierarchicalMenu: {
203
+ [rootAttribute: string]: string[];
204
+ };
205
+ } & {
206
+ hitsPerPage: number;
207
+ } & {
208
+ page: number;
209
+ } & {
210
+ menu: {
211
+ [attribute: string]: string;
212
+ };
213
+ } & {
214
+ numericMenu: {
215
+ [attribute: string]: string;
216
+ };
217
+ } & {
218
+ page: number;
219
+ } & {
220
+ range: {
221
+ [attribute: string]: string;
222
+ };
223
+ } & {
224
+ ratingMenu: {
225
+ [attribute: string]: number;
226
+ };
227
+ } & {
228
+ refinementList: {
229
+ [attribute: string]: string[];
230
+ };
231
+ } & {
232
+ relevantSort: number;
233
+ } & {
234
+ query: string;
235
+ } & {
236
+ sortBy: string;
237
+ } & {
238
+ toggle: {
239
+ [attribute: string]: boolean;
240
+ };
241
+ } & {
242
+ query: string;
243
+ } & {
244
+ places: {
245
+ query: string;
246
+ position: string;
247
+ };
248
+ }>)) => string;
29
249
  searchMetadata: {
30
250
  isSearchStalled: boolean;
31
251
  };
@@ -1,2 +1,2 @@
1
- declare const _default: "4.56.4";
1
+ declare const _default: "4.56.5";
2
2
  export default _default;
package/es/lib/version.js CHANGED
@@ -1 +1 @@
1
- export default '4.56.4';
1
+ export default '4.56.5';
@@ -18,9 +18,17 @@ export var createRouterMiddleware = function createRouterMiddleware() {
18
18
  return function (_ref) {
19
19
  var instantSearchInstance = _ref.instantSearchInstance;
20
20
  function topLevelCreateURL(nextState) {
21
+ var previousUiState =
22
+ // If only the mainIndex is initialized, we don't yet know what other
23
+ // index widgets are used. Therefore we fall back to the initialUiState.
24
+ // We can't indiscriminately use the initialUiState because then we
25
+ // reintroduce state that was changed by the user.
26
+ // When there are no widgets, we are sure the user can't yet have made
27
+ // any changes.
28
+ instantSearchInstance.mainIndex.getWidgets().length === 0 ? instantSearchInstance._initialUiState : instantSearchInstance.mainIndex.getWidgetUiState({});
21
29
  var uiState = Object.keys(nextState).reduce(function (acc, indexId) {
22
30
  return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, indexId, nextState[indexId]));
23
- }, instantSearchInstance.mainIndex.getWidgetUiState({}));
31
+ }, previousUiState);
24
32
  var route = stateMapping.stateToRoute(uiState);
25
33
  return router.createURL(route);
26
34
  }
@@ -24,7 +24,7 @@ type SharedRenderOptions = {
24
24
  };
25
25
  status: InstantSearch['status'];
26
26
  error: InstantSearch['error'];
27
- createURL: (state: SearchParameters) => string;
27
+ createURL: (nextState: SearchParameters | ((state: IndexUiState) => IndexUiState)) => string;
28
28
  };
29
29
  export type InitOptions = SharedRenderOptions & {
30
30
  uiState: UiState;
@@ -27,7 +27,7 @@ export type IndexWidget<TUiState extends UiState = UiState> = Omit<Widget<IndexW
27
27
  getScopedResults: () => ScopedResult[];
28
28
  getParent: () => IndexWidget | null;
29
29
  getWidgets: () => Array<Widget | IndexWidget>;
30
- createURL: (state: SearchParameters) => string;
30
+ createURL: (nextState: SearchParameters | ((state: IndexUiState) => IndexUiState)) => string;
31
31
  addWidgets: (widgets: Array<Widget | IndexWidget>) => IndexWidget;
32
32
  removeWidgets: (widgets: Array<Widget | IndexWidget>) => IndexWidget;
33
33
  init: (options: IndexInitOptions) => void;
@@ -140,6 +140,9 @@ var index = function index(widgetParams) {
140
140
  return localParent;
141
141
  },
142
142
  createURL: function createURL(nextState) {
143
+ if (typeof nextState === 'function') {
144
+ return localInstantSearchInstance._createURL(_defineProperty({}, indexId, nextState(localUiState)));
145
+ }
143
146
  return localInstantSearchInstance._createURL(_defineProperty({}, indexId, getLocalWidgetsUiState(localWidgets, {
144
147
  searchParameters: nextState,
145
148
  helper: helper
@@ -204,7 +207,7 @@ var index = function index(widgetParams) {
204
207
  return widgets.indexOf(widget) === -1;
205
208
  });
206
209
  if (localInstantSearchInstance && Boolean(widgets.length)) {
207
- var nextState = widgets.reduce(function (state, widget) {
210
+ var _nextState = widgets.reduce(function (state, widget) {
208
211
  // the `dispose` method exists at this point we already assert it
209
212
  var next = widget.dispose({
210
213
  helper: helper,
@@ -214,12 +217,12 @@ var index = function index(widgetParams) {
214
217
  return next || state;
215
218
  }, helper.state);
216
219
  localUiState = getLocalWidgetsUiState(localWidgets, {
217
- searchParameters: nextState,
220
+ searchParameters: _nextState,
218
221
  helper: helper
219
222
  });
220
223
  helper.setState(getLocalWidgetsSearchParameters(localWidgets, {
221
224
  uiState: localUiState,
222
- initialSearchParameters: nextState
225
+ initialSearchParameters: _nextState
223
226
  }));
224
227
  if (localWidgets.length) {
225
228
  localInstantSearchInstance.scheduleSearch();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instantsearch.js",
3
- "version": "4.56.4",
3
+ "version": "4.56.5",
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",
@@ -55,9 +55,9 @@
55
55
  "version": "./scripts/version/update-version.js"
56
56
  },
57
57
  "devDependencies": {
58
- "@instantsearch/mocks": "1.17.0",
59
- "@instantsearch/tests": "1.17.0",
60
- "@instantsearch/testutils": "1.6.0",
58
+ "@instantsearch/mocks": "1.18.0",
59
+ "@instantsearch/tests": "1.18.0",
60
+ "@instantsearch/testutils": "1.7.0",
61
61
  "@storybook/html": "5.3.9",
62
62
  "@types/scriptjs": "0.0.2",
63
63
  "algoliasearch": "4.14.3",
@@ -65,5 +65,5 @@
65
65
  "scriptjs": "2.5.9",
66
66
  "webpack": "4.41.5"
67
67
  },
68
- "gitHead": "d441895874038286168b028c1a45193b1fce8eaf"
68
+ "gitHead": "99119060ec345379181f0446ea4ca8d7cf331354"
69
69
  }