xref: /MusicFree/src/hooks/useDelayFalsy.ts (revision b882a19d884fffa32f7c8cef31652b909dceaa0f)
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