/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { useCallback, useEffect, useRef } from 'react' export const useTimeout = (callback, delay) => { const callbackRef = useRef(callback) const timeoutRef = useRef() useEffect(() => { callbackRef.current = callback }, [callback]) const set = useCallback(() => { timeoutRef.current = setTimeout(() => callbackRef.current(), delay) }, [delay]) const clear = useCallback(() => { timeoutRef.current && clearTimeout(timeoutRef.current) }, []) useEffect(() => { set() return clear }, [delay, set, clear]) const reset = useCallback(() => { clear() set() }, [clear, set]) return { reset, clear } }