UNPKG

1.09 kBJavaScriptView Raw
1"use strict";
2
3exports.__esModule = true;
4exports.useFilteredData = useFilteredData;
5exports.presets = void 0;
6
7var _Accessors = require("./Accessors");
8
9var _react = require("react");
10
11const presets = {
12 eq: (a, b) => a === b,
13 contains: (a, b) => a.indexOf(b) !== -1,
14 startsWith: (a, b) => a.lastIndexOf(b, 0) === 0
15};
16exports.presets = presets;
17
18function normalizeFilter(filter, textField) {
19 if (filter === false) return null;
20 if (typeof filter === 'function') return filter;
21 const filterPreset = presets[filter === true ? 'startsWith' : filter || 'eq'];
22 return (item, searchTerm) => {
23 let textValue = (0, _Accessors.dataText)(item, textField);
24 return filterPreset(textValue.toLowerCase(), searchTerm.toLowerCase());
25 };
26}
27
28function useFilteredData(data, filterer, searchTerm = '', textAccessor) {
29 return (0, _react.useMemo)(() => {
30 const filter = normalizeFilter(filterer, textAccessor);
31 if (!filter || !searchTerm.trim()) return data;
32 return data.filter((item, idx) => filter(item, searchTerm, idx));
33 }, [data, filterer, searchTerm, textAccessor]);
34}
\No newline at end of file