File size: 683 Bytes
d47b053 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 }
}
|