Download client/src/hooks/useDelayedRender.tsx from Zhitomir/chat: direct link, hf CLI and curl.
- Browser
- Download file 867 Bytes
-
https://huggingface.co/spaces/Zhitomir/chat/resolve/main/client/src/hooks/useDelayedRender.tsx
- Command line
-
hf download hf://spaces/Zhitomir/chat/client/src/hooks/useDelayedRender.tsx
-
curl -L -o useDelayedRender.tsx https://huggingface.co/spaces/Zhitomir/chat/resolve/main/client/src/hooks/useDelayedRender.tsx
867 Bytes
| 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; | |