mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2025-12-13 07:46:10 +00:00
36 lines
947 B
TypeScript
36 lines
947 B
TypeScript
/* 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<any>()
|
|
|
|
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 }
|
|
}
|