2024-06-22 22:06:16 +01:00
|
|
|
import { useEffect, useRef } from 'react';
|
2024-06-19 21:18:35 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The useTimeout function is a custom hook that sets a timeout for a given callback function.
|
|
|
|
|
* It takes in a callback function and a delay time in milliseconds as parameters.
|
|
|
|
|
* It returns nothing.
|
|
|
|
|
*/
|
|
|
|
|
function useTimeout(callback: () => void, delay: number) {
|
|
|
|
|
const callbackRef = useRef(callback);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
callbackRef.current = callback;
|
|
|
|
|
}, [callback]);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
let timer: NodeJS.Timeout | undefined;
|
|
|
|
|
|
2024-06-22 22:06:16 +01:00
|
|
|
if (delay !== null && callback && typeof callback === 'function') {
|
2024-06-19 21:18:35 +01:00
|
|
|
timer = setTimeout(callbackRef.current, delay);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
|
if (timer) {
|
|
|
|
|
clearTimeout(timer);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}, [callback, delay]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default useTimeout;
|