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.
- package/dist/cjs/components/AutocompleteSearch.js +8 -7
- package/dist/cjs/widgets/Autocomplete.js +250 -12
- package/dist/cjs/widgets/chat/tools/SearchIndexTool.js +14 -29
- package/dist/es/components/AutocompleteSearch.d.ts +5 -1
- package/dist/es/components/AutocompleteSearch.js +8 -7
- package/dist/es/widgets/Autocomplete.d.ts +18 -1
- package/dist/es/widgets/Autocomplete.js +251 -13
- package/dist/es/widgets/chat/tools/SearchIndexTool.d.ts +2 -2
- package/dist/es/widgets/chat/tools/SearchIndexTool.js +14 -30
- package/dist/umd/ReactInstantSearch.js +626 -208
- package/dist/umd/ReactInstantSearch.js.map +1 -1
- package/dist/umd/ReactInstantSearch.min.js +1 -1
- package/dist/umd/ReactInstantSearch.min.js.map +1 -1
- package/package.json +5 -5
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
449
|
+
var searchBoxContent = /*#__PURE__*/React.createElement(AutocompleteSearch, {
|
|
260
450
|
inputProps: getInputProps(),
|
|
261
451
|
clearQuery: function clearQuery() {
|
|
262
452
|
refineSearchBox('');
|
|
263
453
|
refineAutocomplete('');
|
|
264
|
-
}
|
|
265
|
-
|
|
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?: (
|
|
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
|
-
|
|
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
|
-
|
|
20
|
+
input: input,
|
|
28
21
|
hitsPerPage: items.length,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
getSearchPageURL: getSearchPageURL,
|
|
32
|
-
onClose: onClose
|
|
22
|
+
onClose: onClose,
|
|
23
|
+
applyFilters: applyFilters
|
|
33
24
|
}, props));
|
|
34
25
|
};
|
|
35
|
-
}, [items.length, input
|
|
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
|
-
|
|
41
|
+
input = _ref2.input,
|
|
51
42
|
hitsPerPage = _ref2.hitsPerPage,
|
|
52
|
-
|
|
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 (!
|
|
70
|
-
var
|
|
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
|
-
|
|
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, {
|