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