fix npm package + use our own "useDelayedState"

This commit is contained in:
MathieuG-P
2023-04-08 00:11:11 +02:00
parent 6562f6c764
commit 97fa44cd5d
4 changed files with 459 additions and 523 deletions
@@ -0,0 +1,39 @@
import { useEffect, useState, useRef } from 'react'
// Code improved from : https://www.npmjs.com/package/use-delayed-state
export function useDelayedState<T = unknown>(initialState: T): [T, (newState: T, delay: number) => void, () => void] {
const [state, setState] = useState(initialState);
const timeoutRef = useRef<NodeJS.Timeout>();
const setStateAfter = (newState: T, delay: number) => {
if (delay === 0 || delay === undefined) {
return setState(newState);
}
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
}
timeoutRef.current = setTimeout(() => {
setState(newState);
timeoutRef.current = null;
}, delay);
}
const cancelSetState = () => {
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
timeoutRef.current = null
}
}
useEffect(() => {
return () => {
if (timeoutRef.current) { clearTimeout(timeoutRef.current); }
}
}, []);
return [state, setStateAfter, cancelSetState]
}