nitro-react/src/transitions/TransitionAnimation.tsx

39 lines
1.2 KiB
TypeScript
Raw Normal View History

2021-05-12 03:12:42 +02:00
import { useEffect, useState } from 'react';
2021-04-21 05:36:39 +02:00
import { Transition } from 'react-transition-group';
import { TransitionAnimationProps } from './TransitionAnimation.types';
import { getTransitionAnimationStyle } from './TransitionAnimationStyles';
export function TransitionAnimation(props: TransitionAnimationProps): JSX.Element
{
const { type = null, inProp = false, timeout = 300, className = null, children = null } = props;
2021-05-12 03:12:42 +02:00
const [ showChild, setShowChild ] = useState(false);
const [ timeoutInstance, setTimeoutInstance ] = useState<any>(null);
useEffect(() =>
{
if(inProp)
{
clearTimeout(timeoutInstance);
setShowChild(true);
}
else
{
setTimeoutInstance(setTimeout(() => {
setShowChild(false);
clearTimeout(timeoutInstance);
}, timeout));
}
}, [ inProp ])
2021-04-21 05:36:39 +02:00
return (
<Transition in={ inProp } timeout={ timeout }>
{state => (
<div className={ className + " animate__animated" } style={ { ...getTransitionAnimationStyle(type, state, timeout) } }>
2021-05-12 03:12:42 +02:00
{ showChild && children }
2021-04-21 05:36:39 +02:00
</div>
)}
</Transition>
);
}