| import { useState, useRef, useEffect } from 'react'; | |
| import type { ReactNode } from 'react'; | |
| const useDelayedRender = (delay: number) => { | |
| const [delayed, setDelayed] = useState(true); | |
| const timerPromiseRef = useRef<Promise<void> | null>(null); | |
| useEffect(() => { | |
| if (delayed) { | |
| const timerPromise = new Promise<void>((resolve) => { | |
| const timeout = setTimeout(() => { | |
| setDelayed(false); | |
| resolve(); | |
| }, delay); | |
| return () => { | |
| clearTimeout(timeout); | |
| }; | |
| }); | |
| timerPromiseRef.current = timerPromise; | |
| } | |
| return () => { | |
| timerPromiseRef.current = null; | |
| }; | |
| }, [delay, delayed]); | |
| return (fn: () => ReactNode) => { | |
| if (delayed && timerPromiseRef.current) { | |
| throw timerPromiseRef.current; | |
| } | |
| return fn(); | |
| }; | |
| }; | |
| export default useDelayedRender; | |