UNPKG

@geist-ui/react

Version:

Modern and minimalist React UI library.

71 lines (61 loc) 2.38 kB
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;