import { FC, useEffect, useState } from 'react'; import { Transition } from 'react-transition-group'; import { getTransitionAnimationStyle } from './TransitionAnimationStyles'; interface TransitionAnimationProps { type: string; inProp: boolean; timeout?: number; className?: string; } export const TransitionAnimation: FC = props => { const { type = null, inProp = false, timeout = 300, className = null, children = null } = props; const [ isChildrenVisible, setChildrenVisible ] = useState(false); useEffect(() => { let timeoutData: ReturnType = null; if(inProp) { setChildrenVisible(true); } else { timeoutData = setTimeout(() => { setChildrenVisible(false); clearTimeout(timeout); }, timeout); } return () => { if(timeoutData) clearTimeout(timeoutData); } }, [ inProp, timeout ]); return ( { state => (
{ isChildrenVisible && children }
) }
); }