Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.70 KB | None | 0 0
  1. import useDebounce from "react-use/lib/useDebounce";
  2. import { useMemo, useState, Dispatch, SetStateAction } from "react";
  3. import Fuse, { FuseOptions } from "fuse.js";
  4.  
  5. export default <T>(
  6. data: ReadonlyArray<T>,
  7. fuseOptions: FuseOptions<T>,
  8. debounce: number = 500
  9. ): [ReadonlyArray<T>, string, Dispatch<SetStateAction<string>>] => {
  10. const [filteredData, setFilteredData] = useState(data);
  11. const [query, setQuery] = useState("");
  12. const fuseSearch = useMemo(() => new Fuse(data, fuseOptions), [
  13. data,
  14. fuseOptions
  15. ]);
  16. useDebounce(
  17. () => setFilteredData(query ? fuseSearch.search(query) : data),
  18. debounce,
  19. [query, data, debounce]
  20. );
  21.  
  22. return [filteredData, query, setQuery];
  23. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement