@geist-ui/react
Version:
Modern and minimalist React UI library.
71 lines (61 loc) • 2.38 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["children", "className", "visible", "enterTime", "leaveTime", "clearTime", "name"];
import React, { useEffect, useState } from 'react';
var defaultProps = {
visible: false,
enterTime: 60,
leaveTime: 60,
clearTime: 60,
className: '',
name: 'transition'
};
var CssTransition = function CssTransition(_ref) {
var children = _ref.children,
className = _ref.className,
visible = _ref.visible,
enterTime = _ref.enterTime,
leaveTime = _ref.leaveTime,
clearTime = _ref.clearTime,
name = _ref.name,
props = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(''),
_useState2 = _slicedToArray(_useState, 2),
classes = _useState2[0],
setClasses = _useState2[1];
var _useState3 = useState(visible),
_useState4 = _slicedToArray(_useState3, 2),
renderable = _useState4[0],
setRenderable = _useState4[1];
useEffect(function () {
var statusClassName = visible ? 'enter' : 'leave';
var time = visible ? enterTime : leaveTime;
if (visible && !renderable) {
setRenderable(true);
}
setClasses("".concat(name, "-").concat(statusClassName)); // set class to active
var timer = setTimeout(function () {
setClasses("".concat(name, "-").concat(statusClassName, " ").concat(name, "-").concat(statusClassName, "-active"));
clearTimeout(timer);
}, time); // remove classess when animation over
var clearClassesTimer = setTimeout(function () {
if (!visible) {
setClasses('');
setRenderable(false);
}
clearTimeout(clearClassesTimer);
}, time + clearTime);
return function () {
clearTimeout(timer);
clearTimeout(clearClassesTimer);
};
}, [visible, renderable]);
if (! /*#__PURE__*/React.isValidElement(children) || !renderable) return null;
return /*#__PURE__*/React.cloneElement(children, _extends({}, props, {
className: "".concat(children.props.className, " ").concat(className, " ").concat(classes)
}));
};
CssTransition.defaultProps = defaultProps;
CssTransition.displayName = 'GeistCssTransition';
export default CssTransition;