ManimCat / frontend /src /hooks /useModalTransition.ts
Bin29's picture
Sync from main: 3002239 docs: refresh dual-mode studio positioning
4ee35df
import { useEffect, useState } from 'react'
export function useModalTransition(isOpen: boolean, duration: number = 400) {
const [shouldRender, setShouldRender] = useState(isOpen)
const [isExiting, setIsExiting] = useState(false)
useEffect(() => {
if (isOpen) {
setShouldRender(true)
setIsExiting(false)
return undefined
}
if (!shouldRender) {
return undefined
}
setIsExiting(true)
const timeoutId = window.setTimeout(() => {
setShouldRender(false)
setIsExiting(false)
}, duration)
return () => window.clearTimeout(timeoutId)
}, [duration, isOpen, shouldRender])
return { shouldRender, isExiting }
}