choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
109 lines (93 loc) • 3.97 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _icon = _interopRequireDefault(require("../icon"));
var Notice = function Notice(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 ? /*#__PURE__*/_react["default"].createElement(_icon["default"], {
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["default"] : _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 = (0, _react.useRef)(null);
var closeTimer = (0, _react.useRef)(null);
var clearCloseTimer = (0, _react.useCallback)(function () {
var current = closeTimer.current;
if (current) {
window.clearTimeout(current);
closeTimer.current = null;
}
}, []);
var close = (0, _react.useCallback)(function () {
clearCloseTimer();
onClose(eventKey);
}, [onClose, eventKey]);
var startCloseTimer = (0, _react.useCallback)(function () {
if (duration) {
closeTimer.current = window.setTimeout(close, duration * 1000);
}
}, [close]);
(0, _react.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 = (0, _classnames["default"])(componentClass, className, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(componentClass, "-closable"), closable), (0, _defineProperty2["default"])(_classNames, "".concat(componentClass, "-hide-shadow"), hideShadow), _classNames));
return /*#__PURE__*/_react["default"].createElement("div", {
className: classString,
style: style,
onMouseEnter: clearCloseTimer,
onMouseLeave: startCloseTimer,
ref: noticeRef
}, /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])("".concat(componentClass, "-content"), contentClassName)
}, children), closable && /*#__PURE__*/_react["default"].createElement("a", {
tabIndex: 0,
onClick: !hideShadow ? close : undefined,
className: "".concat(componentClass, "-close")
}, closeIcon || /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(componentClass, "-close-x")
})));
};
Notice.displayName = 'Notice';
var MemoNotice = /*#__PURE__*/(0, _react.memo)(Notice);
MemoNotice.defaultProps = {
duration: 1.5,
style: {
right: '50%'
}
};
var _default = MemoNotice;
exports["default"] = _default;
//# sourceMappingURL=Notice.js.map