xref: /MusicFree/src/hooks/useDelayFalsy.ts (revision 6704747af84cebd842b258efac7143542722fac5)
1import {useRef, useState} from 'react';
2
3export default function useDelayFalsy<T extends any = any>(
4  init?: T,
5  ms: number = 0,
6) {
7  const [_state, _setState] = useState<T | undefined>(init);
8  const timer = useRef<any>();
9
10  function setState(st: T) {
11    if (st === undefined || st === null || st === false) {
12      timer.current = setTimeout(() => {
13        _setState(st);
14        timer.current = undefined;
15      }, ms);
16      return;
17    }
18    timer.current && clearTimeout(timer.current);
19    timer.current = undefined;
20    _setState(st);
21  }
22
23  return [_state, setState, _setState] as [
24    ...ReturnType<typeof useState<T>>,
25    ReturnType<typeof useState<T>>[1],
26  ];
27}
28