UNPKG

zent

Version:

一套前端设计语言和基于React的实现

85 lines (84 loc) 3.47 kB
import { __assign, __extends } from "tslib"; import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, createRef, Component } from 'react'; import { CSSTransition } from 'react-transition-group'; import { isElement } from 'react-is'; import { runInNextFrame } from '../utils/nextFrame'; import { instanceMap } from './Container'; export var NoticeContext = createContext(null); NoticeContext.displayName = 'ZentNoticeContext'; var classNames = { appear: 'zent-notice-animation-enter', appearActive: 'zent-notice-animation-enter-active', appearDone: 'zent-notice-animation-enter-done', enter: 'zent-notice-animation-enter', enterActive: 'zent-notice-animation-enter-active', enterDone: 'zent-notice-animation-enter-done', exit: 'zent-notice-animation-exit', exitActive: 'zent-notice-animation-exit-active', exitDone: 'zent-notice-animation-exit-done', }; var NoticeWrap = (function (_super) { __extends(NoticeWrap, _super); function NoticeWrap() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.elementRef = createRef(); _this.state = { entered: false, show: false, }; _this.timer = 0; _this.ctx = { onClose: function () { _this.leave(); }, }; _this.onEntered = function () { _this.setState({ entered: true, }); }; _this.onExited = function () { var el = _this.elementRef.current; el.style.height = el.clientHeight + "px"; runInNextFrame(function () { return (el.style.height = '0'); }); setTimeout(function () { var _a = _this.props, onExited = _a.onExited, id = _a.id; onExited(id); }, 200); }; return _this; } NoticeWrap.prototype.leave = function () { if (this.timer) { clearTimeout(this.timer); } this.setState({ show: false, }); }; NoticeWrap.prototype.componentDidMount = function () { var _this = this; this.setState({ show: true, }); var children = this.props.children; if (isElement(children) && children.props) { var _a = children.props, _b = _a.autoClose, autoClose = _b === void 0 ? true : _b, _c = _a.closable, closable = _c === void 0 ? true : _c, _d = _a.timeout, timeout = _d === void 0 ? 4500 : _d; if (closable && autoClose) { this.timer = setTimeout(function () { return _this.leave(); }, timeout); } } }; NoticeWrap.prototype.componentWillUnmount = function () { var id = this.props.id; instanceMap.delete(id); }; NoticeWrap.prototype.render = function () { var children = this.props.children; var _a = this.state, entered = _a.entered, show = _a.show; return (_jsx(NoticeContext.Provider, __assign({ value: this.ctx }, { children: _jsx(CSSTransition, __assign({ in: show, timeout: entered ? 160 : 100, onEntered: this.onEntered, onExited: this.onExited, classNames: classNames }, { children: _jsx("div", __assign({ ref: this.elementRef, className: "zent-notice-animation", "data-zv": '10.0.17' }, { children: children }), void 0) }), void 0) }), void 0)); }; return NoticeWrap; }(Component)); export default NoticeWrap;