diff --git a/src/transitions/FadeTransition.tsx b/src/transitions/FadeTransition.tsx new file mode 100644 index 00000000..50dc2113 --- /dev/null +++ b/src/transitions/FadeTransition.tsx @@ -0,0 +1,23 @@ +import { Transition } from 'react-transition-group'; +import { FadeTransitionProps } from './FadeTransition.types'; +import { getTransitionStyle, transitionTypes } from './TransitionStyles'; + +export function FadeTransition(props: FadeTransitionProps): JSX.Element +{ + const { inProp = false, timeout = 300 } = props; + + const style = getTransitionStyle('ease-in-out', timeout); + + return ( + + {state => ( +
+ { props.children } +
+ )} +
+ ); +} diff --git a/src/transitions/FadeTransition.types.ts b/src/transitions/FadeTransition.types.ts new file mode 100644 index 00000000..6a9ad9a3 --- /dev/null +++ b/src/transitions/FadeTransition.types.ts @@ -0,0 +1,8 @@ +import { ReactNode } from 'react'; + +export interface FadeTransitionProps +{ + inProp: boolean; + timeout?: number; + children?: ReactNode +} diff --git a/src/transitions/TransitionStyles.ts b/src/transitions/TransitionStyles.ts new file mode 100644 index 00000000..3b7bc1b6 --- /dev/null +++ b/src/transitions/TransitionStyles.ts @@ -0,0 +1,18 @@ +export const transitionTypes = { + entering: { opacity: 1 }, + entered: { opacity: 1 }, + exiting: { opacity: 0 }, + exited: { opacity: 0 }, +}; + +export function getTransitionStyle(type: string, timeout: number = 300): Partial +{ + switch(type) + { + case 'ease-in-out': + return { + transition: `opacity ${ timeout }ms ease-in-out`, + opacity: '0' + } + } +}