UNPKG

@clive-cudi/geist-ui

Version:

Modern and minimalist React UI library.

77 lines (66 loc) 2.91 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, _ref$className = _ref.className, className = _ref$className === void 0 ? defaultProps.className : _ref$className, _ref$visible = _ref.visible, visible = _ref$visible === void 0 ? defaultProps.visible : _ref$visible, _ref$enterTime = _ref.enterTime, enterTime = _ref$enterTime === void 0 ? defaultProps.enterTime : _ref$enterTime, _ref$leaveTime = _ref.leaveTime, leaveTime = _ref$leaveTime === void 0 ? defaultProps.leaveTime : _ref$leaveTime, _ref$clearTime = _ref.clearTime, clearTime = _ref$clearTime === void 0 ? defaultProps.clearTime : _ref$clearTime, _ref$name = _ref.name, name = _ref$name === void 0 ? defaultProps.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;