react-instantsearch
Version:
⚡ Lightning-fast search for React, by Algolia
108 lines (104 loc) • 4.7 kB
JavaScript
'use strict';
var _object_spread = require('@swc/helpers/_/_object_spread');
var _object_spread_props = require('@swc/helpers/_/_object_spread_props');
var _object_without_properties = require('@swc/helpers/_/_object_without_properties');
var _sliced_to_array = require('@swc/helpers/_/_sliced_to_array');
var React = require('react');
var reactInstantsearchCore = require('react-instantsearch-core');
var RefinementList$1 = require('../ui/RefinementList.js');
var SearchBox = require('../ui/SearchBox.js');
function RefinementList(_0) {
var searchable = _0.searchable, searchablePlaceholder = _0.searchablePlaceholder, _0_searchableSelectOnSubmit = _0.searchableSelectOnSubmit, searchableSelectOnSubmit = _0_searchableSelectOnSubmit === void 0 ? true : _0_searchableSelectOnSubmit, attribute = _0.attribute, operator = _0.operator, limit = _0.limit, showMore = _0.showMore, showMoreLimit = _0.showMoreLimit, sortBy = _0.sortBy, escapeFacetValues = _0.escapeFacetValues, transformItems = _0.transformItems, translations = _0.translations, props = _object_without_properties._(_0, [
"searchable",
"searchablePlaceholder",
"searchableSelectOnSubmit",
"attribute",
"operator",
"limit",
"showMore",
"showMoreLimit",
"sortBy",
"escapeFacetValues",
"transformItems",
"translations"
]);
var _useRefinementList = reactInstantsearchCore.useRefinementList({
attribute: attribute,
operator: operator,
limit: limit,
showMore: showMore,
showMoreLimit: showMoreLimit,
sortBy: sortBy,
escapeFacetValues: escapeFacetValues,
transformItems: transformItems
}, {
$$widgetType: 'ais.refinementList'
}), canRefine = _useRefinementList.canRefine, canToggleShowMore = _useRefinementList.canToggleShowMore, isFromSearch = _useRefinementList.isFromSearch, isShowingMore = _useRefinementList.isShowingMore, items = _useRefinementList.items, refine = _useRefinementList.refine, searchForItems = _useRefinementList.searchForItems, toggleShowMore = _useRefinementList.toggleShowMore;
var _useState = _sliced_to_array._(React.useState(''), 2), inputValue = _useState[0], setInputValue = _useState[1];
var inputRef = React.useRef(null);
function setQuery(newQuery) {
var compositionComplete = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
setInputValue(newQuery);
if (compositionComplete) {
searchForItems(newQuery);
}
}
function onRefine(item) {
refine(item.value);
setQuery('');
}
function onChange(event) {
var compositionComplete = event.type === 'compositionend' || !event.nativeEvent.isComposing;
setQuery(event.currentTarget.value, compositionComplete);
}
function onReset() {
setQuery('');
}
function onSubmit() {
if (searchableSelectOnSubmit === false) {
return;
}
if (items.length > 0) {
refine(items[0].value);
setQuery('');
}
}
var mergedTranslations = _object_spread._({
resetButtonTitle: 'Clear the search query',
submitButtonTitle: 'Submit the search query',
noResultsText: 'No results.',
showMoreButtonText: function showMoreButtonText(options) {
return options.isShowingMore ? 'Show less' : 'Show more';
}
}, translations);
var uiProps = {
items: items,
canRefine: canRefine,
onRefine: onRefine,
query: inputValue,
searchBox: searchable && /*#__PURE__*/ React.createElement(SearchBox.SearchBox, {
inputRef: inputRef,
placeholder: searchablePlaceholder,
isSearchStalled: false,
value: inputValue,
onChange: onChange,
onReset: onReset,
onSubmit: onSubmit,
translations: {
submitButtonTitle: mergedTranslations.submitButtonTitle,
resetButtonTitle: mergedTranslations.resetButtonTitle
}
}),
noResults: searchable && isFromSearch && items.length === 0 && mergedTranslations.noResultsText,
canToggleShowMore: canToggleShowMore,
onToggleShowMore: toggleShowMore,
isShowingMore: isShowingMore,
translations: {
showMoreButtonText: mergedTranslations.showMoreButtonText
}
};
return /*#__PURE__*/ React.createElement(RefinementList$1.RefinementList, _object_spread_props._(_object_spread._({}, props, uiProps), {
showMore: showMore
}));
}
exports.RefinementList = RefinementList;