FadeIn.tsx 848 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import React, { FC } from 'react';
  2. import Transition from 'react-transition-group/Transition';
  3. interface Props {
  4. duration: number;
  5. children: JSX.Element;
  6. in: boolean;
  7. unmountOnExit?: boolean;
  8. }
  9. export const FadeIn: FC<Props> = props => {
  10. const defaultStyle = {
  11. transition: `opacity ${props.duration}ms linear`,
  12. opacity: 0,
  13. };
  14. const transitionStyles = {
  15. exited: { opacity: 0, display: 'none' },
  16. entering: { opacity: 0 },
  17. entered: { opacity: 1 },
  18. exiting: { opacity: 0 },
  19. };
  20. return (
  21. <Transition in={props.in} timeout={props.duration} unmountOnExit={props.unmountOnExit || false}>
  22. {state => (
  23. <div
  24. style={{
  25. ...defaultStyle,
  26. ...transitionStyles[state],
  27. }}
  28. >
  29. {props.children}
  30. </div>
  31. )}
  32. </Transition>
  33. );
  34. };