1 | "use strict";
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.useFilteredData = useFilteredData;
|
5 | exports.presets = void 0;
|
6 |
|
7 | var _Accessors = require("./Accessors");
|
8 |
|
9 | var _react = require("react");
|
10 |
|
11 | const 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 | };
|
16 | exports.presets = presets;
|
17 |
|
18 | function 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 |
|
28 | function 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 |