UNPKG

@mcabreradev/filter

Version:

A powerful, SQL-like array filtering library for TypeScript and JavaScript with advanced pattern matching, MongoDB-style operators, deep object comparison, and zero dependencies

28 lines (27 loc) 1.1 kB
import { useState, useEffect, useRef } from 'react'; import { DEFAULT_DEBOUNCE_DELAY } from './react.constants'; import { debounce } from '../shared'; import { useFilterCore, useIsFiltering } from './react.utils'; export function useDebouncedFilter(data, expression, options) { const { delay = DEFAULT_DEBOUNCE_DELAY, ...filterOptions } = options || {}; const [debouncedExpr, setDebouncedExpr] = useState(expression); const [isPending, setIsPending] = useState(false); const debouncedSet = useRef(null); useEffect(() => { const fn = debounce((e) => { setDebouncedExpr(e); setIsPending(false); }, delay); debouncedSet.current = fn; return () => fn.cancel(); }, [delay]); useEffect(() => { if (!debouncedSet.current) return; setIsPending(true); debouncedSet.current(expression); }, [expression]); const filtered = useFilterCore(data, debouncedExpr, filterOptions); const isFiltering = useIsFiltering(filtered, data); return { filtered, isFiltering, isPending }; }