xref: /MusicFree/src/hooks/useDelayFalsy.ts (revision 8d82ecd9ebd88f4516b7a450e82025018c9ae12d)
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 && clearTimeout(timer.current);
13            timer.current = setTimeout(() => {
14                _setState(st);
15                timer.current = undefined;
16            }, ms);
17            return;
18        }
19        timer.current && clearTimeout(timer.current);
20        timer.current = undefined;
21        _setState(st);
22    }
23
24    return [_state, setState, _setState] as [
25        ...ReturnType<typeof useState<T>>,
26        ReturnType<typeof useState<T>>[1],
27    ];
28}
29