react-instantsearch 7.23.1 → 7.24.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.
@@ -1,13 +1,11 @@
1
- var _excluded = ["indices", "showSuggestions", "showRecent", "searchParameters"],
2
- _excluded2 = ["indicesConfig", "refineSearchBox", "getSearchPageURL", "onSelect", "indexUiState", "isSearchPage", "panelComponent", "showRecent", "recentSearchConfig", "showSuggestions", "transformItems", "placeholder"];
1
+ var _excluded = ["indices", "showSuggestions", "showRecent", "searchParameters", "detachedMediaQuery", "translations"],
2
+ _excluded2 = ["indicesConfig", "refineSearchBox", "isSearchStalled", "getSearchPageURL", "onSelect", "indexUiState", "isSearchPage", "panelComponent", "showRecent", "recentSearchConfig", "showSuggestions", "transformItems", "placeholder", "detachedMediaQuery", "translations", "classNames"];
3
3
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
4
4
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
5
5
  function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
6
6
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
8
7
  function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
9
8
  function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
10
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
11
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
10
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
11
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -15,7 +13,13 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
15
13
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
16
14
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
17
15
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
18
- import { createAutocompleteComponent, createAutocompleteIndexComponent, createAutocompletePanelComponent, createAutocompletePropGetters, createAutocompleteSuggestionComponent, createAutocompleteRecentSearchComponent, createAutocompleteStorage, cx } from 'instantsearch-ui-components';
16
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
17
+ 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."); }
18
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
19
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
20
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
21
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22
+ import { createAutocompleteComponent, createAutocompleteDetachedContainerComponent, createAutocompleteDetachedOverlayComponent, createAutocompleteDetachedFormContainerComponent, createAutocompleteDetachedSearchButtonComponent, createAutocompleteIndexComponent, createAutocompletePanelComponent, createAutocompletePropGetters, createAutocompleteSuggestionComponent, createAutocompleteRecentSearchComponent, createAutocompleteStorage, cx } from 'instantsearch-ui-components';
19
23
  import React, { createElement, Fragment, useEffect, useId, useMemo, useRef, useState } from 'react';
20
24
  import { Configure, Index, useAutocomplete, useInstantSearch, useSearchBox } from 'react-instantsearch-core';
21
25
  import { AutocompleteSearch } from "../components/AutocompleteSearch.js";
@@ -40,6 +44,22 @@ var AutocompleteRecentSearch = createAutocompleteRecentSearchComponent({
40
44
  createElement: createElement,
41
45
  Fragment: Fragment
42
46
  });
47
+ var AutocompleteDetachedContainer = createAutocompleteDetachedContainerComponent({
48
+ createElement: createElement,
49
+ Fragment: Fragment
50
+ });
51
+ var AutocompleteDetachedOverlay = createAutocompleteDetachedOverlayComponent({
52
+ createElement: createElement,
53
+ Fragment: Fragment
54
+ });
55
+ var AutocompleteDetachedFormContainer = createAutocompleteDetachedFormContainerComponent({
56
+ createElement: createElement,
57
+ Fragment: Fragment
58
+ });
59
+ var AutocompleteDetachedSearchButton = createAutocompleteDetachedSearchButtonComponent({
60
+ createElement: createElement,
61
+ Fragment: Fragment
62
+ });
43
63
  var usePropGetters = createAutocompletePropGetters({
44
64
  useEffect: useEffect,
45
65
  useId: useId,
@@ -52,6 +72,127 @@ var useStorage = createAutocompleteStorage({
52
72
  useMemo: useMemo,
53
73
  useState: useState
54
74
  });
75
+ var DEFAULT_DETACHED_MEDIA_QUERY = '(max-width: 680px)';
76
+ var DEFAULT_DETACHED_MODAL_MEDIA_QUERY = '(min-width: 680px)';
77
+ var DETACHED_MEDIA_QUERY_CSS_VAR = '--ais-autocomplete-detached-media-query';
78
+ var DETACHED_MODAL_MEDIA_QUERY_CSS_VAR = '--ais-autocomplete-detached-modal-media-query';
79
+ var DEFAULT_TRANSLATIONS = {
80
+ detachedCancelButtonText: 'Cancel',
81
+ detachedSearchButtonTitle: 'Search',
82
+ detachedClearButtonTitle: 'Clear'
83
+ };
84
+ function getCssMediaQueryValue(name) {
85
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
86
+ return '';
87
+ }
88
+ return getComputedStyle(document.documentElement).getPropertyValue(name).trim();
89
+ }
90
+ function resolveMediaQuery(value, cssVarName, fallback) {
91
+ if (value === '') {
92
+ return '';
93
+ }
94
+ if (value) {
95
+ return value;
96
+ }
97
+ return getCssMediaQueryValue(cssVarName) || fallback;
98
+ }
99
+ function getMediaQueryList(mediaQuery) {
100
+ if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
101
+ return null;
102
+ }
103
+ return window.matchMedia(mediaQuery);
104
+ }
105
+
106
+ /**
107
+ * Hook to manage detached (mobile) mode state
108
+ */
109
+ function useDetachedMode(mediaQuery) {
110
+ var resolvedMediaQuery = useMemo(function () {
111
+ return resolveMediaQuery(mediaQuery, DETACHED_MEDIA_QUERY_CSS_VAR, DEFAULT_DETACHED_MEDIA_QUERY);
112
+ }, [mediaQuery]);
113
+ var _useState = useState(function () {
114
+ var _getMediaQueryList;
115
+ return resolvedMediaQuery ? Boolean((_getMediaQueryList = getMediaQueryList(resolvedMediaQuery)) === null || _getMediaQueryList === void 0 ? void 0 : _getMediaQueryList.matches) : false;
116
+ }),
117
+ _useState2 = _slicedToArray(_useState, 2),
118
+ isDetached = _useState2[0],
119
+ setIsDetached = _useState2[1];
120
+ var _useState3 = useState(false),
121
+ _useState4 = _slicedToArray(_useState3, 2),
122
+ isModalOpen = _useState4[0],
123
+ setIsModalOpen = _useState4[1];
124
+ var _useState5 = useState(false),
125
+ _useState6 = _slicedToArray(_useState5, 2),
126
+ isModalDetached = _useState6[0],
127
+ setIsModalDetached = _useState6[1];
128
+ useEffect(function () {
129
+ if (!resolvedMediaQuery) {
130
+ setIsDetached(false);
131
+ return function () {};
132
+ }
133
+ var mql = getMediaQueryList(resolvedMediaQuery);
134
+ if (!mql) {
135
+ setIsDetached(false);
136
+ return function () {};
137
+ }
138
+ var handler = function handler(event) {
139
+ var wasDetached = isDetached;
140
+ setIsDetached(event.matches);
141
+ // Close modal if switching from detached to non-detached
142
+ if (wasDetached && !event.matches) {
143
+ setIsModalOpen(false);
144
+ }
145
+ };
146
+ mql.addEventListener('change', handler);
147
+ return function () {
148
+ return mql.removeEventListener('change', handler);
149
+ };
150
+ }, [resolvedMediaQuery, isDetached]);
151
+ useEffect(function () {
152
+ if (!isDetached) {
153
+ setIsModalDetached(false);
154
+ return function () {};
155
+ }
156
+ var modalMediaQuery = resolveMediaQuery(undefined, DETACHED_MODAL_MEDIA_QUERY_CSS_VAR, DEFAULT_DETACHED_MODAL_MEDIA_QUERY);
157
+ if (!modalMediaQuery) {
158
+ setIsModalDetached(false);
159
+ return function () {};
160
+ }
161
+ var mql = getMediaQueryList(modalMediaQuery);
162
+ if (!mql) {
163
+ setIsModalDetached(false);
164
+ return function () {};
165
+ }
166
+ var handler = function handler(event) {
167
+ setIsModalDetached(event.matches);
168
+ };
169
+ setIsModalDetached(mql.matches);
170
+ mql.addEventListener('change', handler);
171
+ return function () {
172
+ return mql.removeEventListener('change', handler);
173
+ };
174
+ }, [isDetached]);
175
+ useEffect(function () {
176
+ if (typeof document === 'undefined') return function () {};
177
+ if (isModalOpen) {
178
+ var scrollY = window.scrollY;
179
+ document.body.style.top = "-".concat(scrollY, "px");
180
+ document.body.classList.add('ais-Autocomplete--detached');
181
+ return function () {
182
+ document.body.classList.remove('ais-Autocomplete--detached');
183
+ document.body.style.top = '';
184
+ window.scrollTo(0, scrollY);
185
+ };
186
+ }
187
+ return function () {};
188
+ }, [isModalOpen]);
189
+ return {
190
+ isDetached: isDetached,
191
+ isModalDetached: isModalDetached,
192
+ isModalOpen: isModalOpen,
193
+ setIsModalOpen: setIsModalOpen
194
+ };
195
+ }
55
196
  export function EXPERIMENTAL_Autocomplete(_ref) {
56
197
  var _showRecent$className, _showRecent$className2, _showRecent$className3, _showRecent$className4;
57
198
  var _ref$indices = _ref.indices,
@@ -59,15 +200,21 @@ export function EXPERIMENTAL_Autocomplete(_ref) {
59
200
  showSuggestions = _ref.showSuggestions,
60
201
  showRecent = _ref.showRecent,
61
202
  userSearchParameters = _ref.searchParameters,
203
+ detachedMediaQuery = _ref.detachedMediaQuery,
204
+ _ref$translations = _ref.translations,
205
+ userTranslations = _ref$translations === void 0 ? {} : _ref$translations,
62
206
  props = _objectWithoutProperties(_ref, _excluded);
207
+ var translations = _objectSpread(_objectSpread({}, DEFAULT_TRANSLATIONS), userTranslations);
63
208
  var _useInstantSearch = useInstantSearch(),
64
209
  indexUiState = _useInstantSearch.indexUiState,
65
- indexRenderState = _useInstantSearch.indexRenderState;
210
+ indexRenderState = _useInstantSearch.indexRenderState,
211
+ status = _useInstantSearch.status;
66
212
  var _useSearchBox = useSearchBox({}, {
67
213
  $$type: 'ais.autocomplete',
68
214
  $$widgetType: 'ais.autocomplete'
69
215
  }),
70
216
  refine = _useSearchBox.refine;
217
+ var isSearchStalled = status === 'stalled';
71
218
  var searchParameters = _objectSpread({
72
219
  hitsPerPage: 5
73
220
  }, userSearchParameters);
@@ -124,16 +271,20 @@ export function EXPERIMENTAL_Autocomplete(_ref) {
124
271
  }), /*#__PURE__*/React.createElement(InnerAutocomplete, _extends({}, props, {
125
272
  indicesConfig: indicesConfig,
126
273
  refineSearchBox: refine,
274
+ isSearchStalled: isSearchStalled,
127
275
  indexUiState: indexUiState,
128
276
  isSearchPage: isSearchPage,
129
277
  showRecent: showRecent,
130
278
  recentSearchConfig: recentSearchConfig,
131
- showSuggestions: showSuggestions
279
+ showSuggestions: showSuggestions,
280
+ detachedMediaQuery: detachedMediaQuery,
281
+ translations: translations
132
282
  }))));
133
283
  }
134
284
  function InnerAutocomplete(_ref3) {
135
285
  var indicesConfig = _ref3.indicesConfig,
136
286
  refineSearchBox = _ref3.refineSearchBox,
287
+ isSearchStalled = _ref3.isSearchStalled,
137
288
  getSearchPageURL = _ref3.getSearchPageURL,
138
289
  userOnSelect = _ref3.onSelect,
139
290
  indexUiState = _ref3.indexUiState,
@@ -144,6 +295,10 @@ function InnerAutocomplete(_ref3) {
144
295
  showSuggestions = _ref3.showSuggestions,
145
296
  transformItems = _ref3.transformItems,
146
297
  placeholder = _ref3.placeholder,
298
+ _ref3$detachedMediaQu = _ref3.detachedMediaQuery,
299
+ detachedMediaQuery = _ref3$detachedMediaQu === void 0 ? DEFAULT_DETACHED_MEDIA_QUERY : _ref3$detachedMediaQu,
300
+ translations = _ref3.translations,
301
+ classNames = _ref3.classNames,
147
302
  props = _objectWithoutProperties(_ref3, _excluded2);
148
303
  var _useAutocomplete = useAutocomplete({
149
304
  transformItems: transformItems
@@ -151,6 +306,12 @@ function InnerAutocomplete(_ref3) {
151
306
  indices = _useAutocomplete.indices,
152
307
  refineAutocomplete = _useAutocomplete.refine,
153
308
  currentRefinement = _useAutocomplete.currentRefinement;
309
+ var _useDetachedMode = useDetachedMode(detachedMediaQuery),
310
+ isDetached = _useDetachedMode.isDetached,
311
+ isModalDetached = _useDetachedMode.isModalDetached,
312
+ isModalOpen = _useDetachedMode.isModalOpen,
313
+ setIsModalOpen = _useDetachedMode.setIsModalOpen;
314
+ var previousIsDetachedRef = useRef(isDetached);
154
315
  var _useStorage = useStorage({
155
316
  showRecent: showRecent,
156
317
  query: currentRefinement,
@@ -189,12 +350,41 @@ function InnerAutocomplete(_ref3) {
189
350
  }
190
351
  setQuery(query);
191
352
  },
192
- placeholder: placeholder
353
+ onSubmit: function onSubmit() {
354
+ // Close the detached modal when form is submitted
355
+ if (isDetached) {
356
+ setIsModalOpen(false);
357
+ }
358
+ },
359
+ placeholder: placeholder,
360
+ isDetached: isDetached
193
361
  }),
194
362
  getInputProps = _usePropGetters.getInputProps,
195
363
  getItemProps = _usePropGetters.getItemProps,
196
364
  getPanelProps = _usePropGetters.getPanelProps,
197
- getRootProps = _usePropGetters.getRootProps;
365
+ getRootProps = _usePropGetters.getRootProps,
366
+ isOpen = _usePropGetters.isOpen,
367
+ setIsOpen = _usePropGetters.setIsOpen,
368
+ focusInput = _usePropGetters.focusInput;
369
+
370
+ // Open panel and focus input when modal opens
371
+ useEffect(function () {
372
+ if (isDetached && isModalOpen) {
373
+ setIsOpen(true);
374
+ // Focus input to show the keyboard on mobile
375
+ focusInput();
376
+ }
377
+ }, [isDetached, isModalOpen, setIsOpen, focusInput]);
378
+
379
+ // Keep the modal open if the panel was open before switching to detached
380
+ useEffect(function () {
381
+ var wasDetached = previousIsDetachedRef.current;
382
+ var switchedToDetached = !wasDetached && isDetached;
383
+ if (switchedToDetached && isOpen) {
384
+ setIsModalOpen(true);
385
+ }
386
+ previousIsDetachedRef.current = isDetached;
387
+ }, [isDetached, isOpen, setIsModalOpen]);
198
388
  var elements = {};
199
389
  if (showRecent && recentSearchConfig) {
200
390
  var RecentSearchItemComponent = recentSearchConfig.itemComponent;
@@ -256,18 +446,66 @@ function InnerAutocomplete(_ref3) {
256
446
  classNames: currentIndexConfig.classNames
257
447
  });
258
448
  });
259
- return /*#__PURE__*/React.createElement(Autocomplete, _extends({}, props, getRootProps()), /*#__PURE__*/React.createElement(AutocompleteSearch, {
449
+ var searchBoxContent = /*#__PURE__*/React.createElement(AutocompleteSearch, {
260
450
  inputProps: getInputProps(),
261
451
  clearQuery: function clearQuery() {
262
452
  refineSearchBox('');
263
453
  refineAutocomplete('');
264
- }
265
- }), /*#__PURE__*/React.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/React.createElement(PanelComponent, {
454
+ },
455
+ onQueryChange: function onQueryChange(query) {
456
+ refineAutocomplete(query);
457
+ },
458
+ query: currentRefinement || indexUiState.query || '',
459
+ refine: refineSearchBox,
460
+ isSearchStalled: isSearchStalled
461
+ });
462
+ var panelContent = /*#__PURE__*/React.createElement(AutocompletePanel, getPanelProps(), PanelComponent ? /*#__PURE__*/React.createElement(PanelComponent, {
266
463
  elements: elements,
267
464
  indices: indices
268
465
  }) : Object.keys(elements).map(function (elementId) {
269
466
  return elements[elementId];
270
- })));
467
+ }));
468
+ var detachedContainerClassNames = isModalDetached ? _objectSpread(_objectSpread({}, classNames), {}, {
469
+ detachedContainer: cx('ais-AutocompleteDetachedContainer--modal', classNames === null || classNames === void 0 ? void 0 : classNames.detachedContainer)
470
+ }) : classNames;
471
+ if (isDetached) {
472
+ return /*#__PURE__*/React.createElement(Autocomplete, _extends({}, props, getRootProps(), {
473
+ classNames: classNames
474
+ }), /*#__PURE__*/React.createElement(AutocompleteDetachedSearchButton, {
475
+ query: currentRefinement || indexUiState.query || '',
476
+ placeholder: placeholder,
477
+ classNames: classNames,
478
+ onClick: function onClick() {
479
+ setIsModalOpen(true);
480
+ setIsOpen(true);
481
+ },
482
+ onClear: function onClear() {
483
+ refineSearchBox('');
484
+ refineAutocomplete('');
485
+ },
486
+ translations: translations
487
+ }), isModalOpen && /*#__PURE__*/React.createElement(AutocompleteDetachedOverlay, {
488
+ classNames: classNames,
489
+ onClose: function onClose() {
490
+ setIsModalOpen(false);
491
+ setIsOpen(false);
492
+ }
493
+ }, /*#__PURE__*/React.createElement(AutocompleteDetachedContainer, {
494
+ classNames: detachedContainerClassNames
495
+ }, /*#__PURE__*/React.createElement(AutocompleteDetachedFormContainer, {
496
+ classNames: classNames,
497
+ onCancel: function onCancel() {
498
+ setIsModalOpen(false);
499
+ setIsOpen(false);
500
+ },
501
+ translations: translations
502
+ }, searchBoxContent), panelContent)));
503
+ }
504
+
505
+ // Normal (non-detached) rendering
506
+ return /*#__PURE__*/React.createElement(Autocomplete, _extends({}, props, getRootProps(), {
507
+ classNames: classNames
508
+ }), searchBoxContent, panelContent);
271
509
  }
272
510
  function ConditionalReverseHighlight(_ref7) {
273
511
  var _item$_highlightResul;
@@ -1,5 +1,5 @@
1
+ import type { SearchParameters } from 'algoliasearch-helper';
1
2
  import type { RecommendComponentProps, RecordWithObjectID, UserClientSideTool } from 'instantsearch-ui-components';
2
- import type { IndexUiState } from 'instantsearch.js';
3
3
  type ItemComponent<TObject> = RecommendComponentProps<TObject>['itemComponent'];
4
- declare function createCarouselTool<TObject extends RecordWithObjectID>(showViewAll: boolean, itemComponent?: ItemComponent<TObject>, getSearchPageURL?: (nextUiState: IndexUiState) => string): UserClientSideTool;
4
+ declare function createCarouselTool<TObject extends RecordWithObjectID>(showViewAll: boolean, itemComponent?: ItemComponent<TObject>, getSearchPageURL?: (params: SearchParameters) => string): UserClientSideTool;
5
5
  export { createCarouselTool };
@@ -1,9 +1,3 @@
1
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
8
2
  import { ChevronLeftIcon, ChevronRightIcon, ArrowRightIcon, createButtonComponent } from 'instantsearch-ui-components';
9
3
  import React, { createElement } from 'react';
@@ -14,8 +8,7 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
14
8
  });
15
9
  function SearchLayoutComponent(_ref) {
16
10
  var message = _ref.message,
17
- indexUiState = _ref.indexUiState,
18
- setIndexUiState = _ref.setIndexUiState,
11
+ applyFilters = _ref.applyFilters,
19
12
  onClose = _ref.onClose;
20
13
  var input = message === null || message === void 0 ? void 0 : message.input;
21
14
  var output = message === null || message === void 0 ? void 0 : message.output;
@@ -24,15 +17,13 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
24
17
  return function (props) {
25
18
  return /*#__PURE__*/React.createElement(HeaderComponent, _extends({
26
19
  nbHits: output === null || output === void 0 ? void 0 : output.nbHits,
27
- query: input === null || input === void 0 ? void 0 : input.query,
20
+ input: input,
28
21
  hitsPerPage: items.length,
29
- setIndexUiState: setIndexUiState,
30
- indexUiState: indexUiState,
31
- getSearchPageURL: getSearchPageURL,
32
- onClose: onClose
22
+ onClose: onClose,
23
+ applyFilters: applyFilters
33
24
  }, props));
34
25
  };
35
- }, [items.length, input === null || input === void 0 ? void 0 : input.query, output === null || output === void 0 ? void 0 : output.nbHits, setIndexUiState, onClose, indexUiState]);
26
+ }, [items.length, input, output === null || output === void 0 ? void 0 : output.nbHits, applyFilters, onClose]);
36
27
  return /*#__PURE__*/React.createElement(Carousel, {
37
28
  items: items,
38
29
  itemComponent: itemComponent,
@@ -47,11 +38,9 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
47
38
  scrollLeft = _ref2.scrollLeft,
48
39
  scrollRight = _ref2.scrollRight,
49
40
  nbHits = _ref2.nbHits,
50
- query = _ref2.query,
41
+ input = _ref2.input,
51
42
  hitsPerPage = _ref2.hitsPerPage,
52
- setIndexUiState = _ref2.setIndexUiState,
53
- indexUiState = _ref2.indexUiState,
54
- getSearchPageURL = _ref2.getSearchPageURL,
43
+ applyFilters = _ref2.applyFilters,
55
44
  onClose = _ref2.onClose;
56
45
  if ((hitsPerPage !== null && hitsPerPage !== void 0 ? hitsPerPage : 0) < 1) {
57
46
  return null;
@@ -66,20 +55,15 @@ function createCarouselTool(showViewAll, itemComponent, getSearchPageURL) {
66
55
  variant: "ghost",
67
56
  size: "sm",
68
57
  onClick: function onClick() {
69
- if (!query) return;
70
- var nextUiState = _objectSpread(_objectSpread({}, indexUiState), {}, {
71
- query: query
58
+ if (!input || !applyFilters) return;
59
+ var params = applyFilters({
60
+ query: input.query,
61
+ facetFilters: input.facet_filters
72
62
  });
73
-
74
- // If no main search page URL or we are on the search page, just update the state
75
- if (!getSearchPageURL || getSearchPageURL && new URL(getSearchPageURL(nextUiState)).pathname === window.location.pathname) {
76
- setIndexUiState(nextUiState);
77
- onClose();
78
- return;
63
+ if (getSearchPageURL && new URL(getSearchPageURL(params)).pathname !== window.location.pathname) {
64
+ window.location.href = getSearchPageURL(params);
79
65
  }
80
-
81
- // Navigate to different page
82
- window.location.href = getSearchPageURL(nextUiState);
66
+ onClose();
83
67
  },
84
68
  className: "ais-ChatToolSearchIndexCarouselHeaderViewAll"
85
69
  }, "View all", /*#__PURE__*/React.createElement(ArrowRightIcon, {