gdq-archive/frontend/components/Filter.tsx

36 lines
677 B
TypeScript
Raw Normal View History

2020-08-22 20:25:57 +00:00
import Fuse from 'fuse.js';
import React from 'react';
export default function Filter<T, U extends React.ReactNode>({
items,
query = '',
isCaseSensitive = false,
keys,
output,
}: {
items: Array<T>,
query: string,
isCaseSensitive?: boolean,
keys: Array<string>,
output: (filteredItems: Array<Fuse.FuseResult<T>>) => U,
}) {
if (query.length > 0) {
const fuse = new Fuse(items, {
isCaseSensitive,
keys,
});
const filteredItems = fuse.search(query);
return (
<>{output(filteredItems)}</>
);
}
return (
<>
{output(items.map((item, refIndex) => ({
item,
refIndex,
})))}
</>
);
}