diff --git a/client/components/animation.js b/client/components/animation.js new file mode 100644 index 00000000..05c305ff --- /dev/null +++ b/client/components/animation.js @@ -0,0 +1,30 @@ +import React, { useState, useEffect } from "react"; + +/** + * Back when I started this project, there used to be a library for animation made by facebook + * named: react-addons-css-transition-group + * Facebook got away from it and things haven't stayed backward compatible at the point where I got + * to realise it would be easier to write this simpler wrapper than migrate things over + */ +export function CSSTransition({ transitionName = "animate", children = null, transitionAppearTimeout = 300 }) { + const [child, setChildren] = useState(React.cloneElement(children, { + className: `${children.props.className} ${transitionName}-appear` + })); + + useEffect(() => { + setChildren(React.cloneElement(child, { + className: `${children.props.className} ${transitionName}-appear ${transitionName}-appear-active` + })) + const timeout = setTimeout(() => { + setChildren(React.cloneElement(child, { + className: `${children.props.className}` + })) + }, transitionAppearTimeout); + + return () => { + clearTimeout(timeout); + }; + }, []); + + return child; +} diff --git a/client/components/loader.js b/client/components/loader.js index be410766..129dcfb6 100644 --- a/client/components/loader.js +++ b/client/components/loader.js @@ -1,10 +1,10 @@ import React from "react"; -import ReactCSSTransitionGroup from "react-addons-css-transition-group"; +import { CSSTransition } from "./animation"; import "./loader.scss"; export const Loader = () => { return ( - +
@@ -15,6 +15,6 @@ export const Loader = () => {
-
+ ); }; diff --git a/client/components/loader.scss b/client/components/loader.scss index d79092fd..48d0cb10 100644 --- a/client/components/loader.scss +++ b/client/components/loader.scss @@ -7,7 +7,7 @@ opacity: 0; } .loader-appear.loader-appear-active{ - transition: opacity 0.1s ease-out; - transition-delay: 0.3s; + transition: opacity 0.2s ease-out; + transition-delay: 0.5s; opacity: 1; }