UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

104 lines (96 loc) 3.51 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; import React, { memo, useCallback, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import noop from 'lodash/noop'; import Icon from '../icon'; var Notice = function Notic(props) { var _classNames; var contentClassName = props.contentClassName, prefixCls = props.prefixCls, className = props.className, closable = props.closable, children = props.children, _props$closeIcon = props.closeIcon, closeIcon = _props$closeIcon === void 0 ? React.createElement(Icon, { className: "".concat(prefixCls, "-close-icon"), type: "close" }) : _props$closeIcon, style = props.style, duration = props.duration, _props$onClose = props.onClose, onClose = _props$onClose === void 0 ? noop : _props$onClose, foldable = props.foldable, _props$offset = props.offset, offset = _props$offset === void 0 ? 0 : _props$offset, _props$scrollHeight = props.scrollHeight, scrollHeight = _props$scrollHeight === void 0 ? 0 : _props$scrollHeight, eventKey = props.eventKey; var noticeRef = useRef(null); var closeTimer = useRef(null); var clearCloseTimer = useCallback(function () { var current = closeTimer.current; if (current) { window.clearTimeout(current); closeTimer.current = null; } }, []); var close = useCallback(function () { clearCloseTimer(); onClose(eventKey); }, [onClose, eventKey]); var startCloseTimer = useCallback(function () { if (duration) { closeTimer.current = window.setTimeout(close, duration * 1000); } }, [close]); useEffect(function () { startCloseTimer(); return clearCloseTimer; }, [startCloseTimer]); var hideShadow = false; var noticeRefCurrnet = noticeRef.current; if (noticeRefCurrnet && foldable && typeof scrollHeight === 'number') { var bottomH = scrollHeight + offset - noticeRefCurrnet.offsetTop - noticeRefCurrnet.offsetHeight; if (noticeRefCurrnet.offsetTop < offset || bottomH < 0) { hideShadow = true; } } var componentClass = "".concat(prefixCls, "-notice"); var classString = classNames(componentClass, className, (_classNames = {}, _defineProperty(_classNames, "".concat(componentClass, "-closable"), closable), _defineProperty(_classNames, "".concat(componentClass, "-hide-shadow"), hideShadow), _classNames)); return React.createElement("div", { className: classString, style: style, onMouseEnter: clearCloseTimer, onMouseLeave: startCloseTimer, ref: noticeRef }, React.createElement("div", { className: classNames("".concat(componentClass, "-content"), contentClassName) }, children), closable && React.createElement("a", { tabIndex: 0, onClick: !hideShadow ? close : undefined, className: "".concat(componentClass, "-close") }, closeIcon || React.createElement("span", { className: "".concat(componentClass, "-close-x") }))); }; Notice.propTypes = { duration: PropTypes.number, onClose: PropTypes.func, children: PropTypes.any, closeIcon: PropTypes.node, prefixCls: PropTypes.string, className: PropTypes.string, contentClassName: PropTypes.string, closable: PropTypes.bool, style: PropTypes.object }; Notice.defaultProps = { duration: 1.5, style: { right: '50%' } }; Notice.displayName = 'Notice'; export default memo(Notice); //# sourceMappingURL=Notice.js.map