UNPKG

@equinor/fusion-observable

Version:
14 lines 831 B
import { useCallback, useMemo, useState } from 'react'; import { from, Subject } from 'rxjs'; import { debounce, debounceTime, switchMap, tap } from 'rxjs/operators'; export const useDebounce = (fn, options) => { const [idle, setIdle] = useState(true); const [queuer] = useState(() => options?.queuer ?? new Subject()); const next = useCallback((...args) => queuer.next(args), [queuer]); const debounceFn = useMemo(() => typeof options.debounce === 'function' ? debounce(options.debounce) : debounceTime(options.debounce), [options.debounce]); const value$ = useMemo(() => queuer.pipe(debounceFn, tap(() => setIdle(false)), switchMap((args) => from(fn(...args))), tap(() => setIdle(true))), [queuer, debounceFn, fn]); return { idle, next, value$ }; }; //# sourceMappingURL=useDebounce.js.map