UNPKG

@aplus-frontend/antdv

Version:

Vue basic component library maintained based on ant-design-vue

119 lines 3.7 kB
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import { Teleport, computed, defineComponent, onMounted, watch, onUnmounted, ref, createVNode as _createVNode } from 'vue'; import classNames from '../_util/classNames'; export default defineComponent({ name: 'Notice', inheritAttrs: false, props: ['prefixCls', 'duration', 'updateMark', 'noticeKey', 'closeIcon', 'closable', 'props', 'onClick', 'onClose', 'holder', 'visible', 'onMouseenter', 'onMouseleave'], setup(props, _ref) { let { attrs, slots, expose } = _ref; let closeTimer; let isUnMounted = false; const rootRef = ref(); expose({ rootRef }); const duration = computed(() => props.duration === undefined ? 4.5 : props.duration); const startCloseTimer = () => { var _a; if (duration.value && !isUnMounted) { closeTimer = setTimeout(() => { close(); }, duration.value * 1000); } (_a = props.onMouseleave) === null || _a === void 0 ? void 0 : _a.call(props); }; const clearCloseTimer = () => { var _a; if (closeTimer) { clearTimeout(closeTimer); closeTimer = null; } (_a = props.onMouseenter) === null || _a === void 0 ? void 0 : _a.call(props); }; const close = e => { if (e) { e.stopPropagation(); } clearCloseTimer(); const { onClose, noticeKey } = props; if (onClose) { onClose(noticeKey); } }; const restartCloseTimer = () => { clearCloseTimer(); startCloseTimer(); }; onMounted(() => { startCloseTimer(); }); onUnmounted(() => { isUnMounted = true; clearCloseTimer(); }); watch([duration, () => props.updateMark, () => props.visible], (_ref2, _ref3) => { let [preDuration, preUpdateMark, preVisible] = _ref2; let [newDuration, newUpdateMark, newVisible] = _ref3; if (preDuration !== newDuration || preUpdateMark !== newUpdateMark || preVisible !== newVisible && newVisible) { restartCloseTimer(); } }, { flush: 'post' }); return () => { var _a, _b; const { prefixCls, closable, closeIcon = (_a = slots.closeIcon) === null || _a === void 0 ? void 0 : _a.call(slots), onClick, holder } = props; const { class: className, style } = attrs; const componentClass = `${prefixCls}-notice`; const dataOrAriaAttributeProps = Object.keys(attrs).reduce((acc, key) => { if (key.startsWith('data-') || key.startsWith('aria-') || key === 'role') { acc[key] = attrs[key]; } return acc; }, {}); const node = _createVNode("div", _objectSpread({ "ref": rootRef, "class": classNames(componentClass, className, { [`${componentClass}-closable`]: closable }), "style": style, "onMouseenter": clearCloseTimer, "onMouseleave": startCloseTimer, "onClick": onClick }, dataOrAriaAttributeProps), [_createVNode("div", { "class": `${componentClass}-content` }, [(_b = slots.default) === null || _b === void 0 ? void 0 : _b.call(slots)]), closable ? _createVNode("a", { "tabindex": 0, "onClick": close, "class": `${componentClass}-close` }, [closeIcon || _createVNode("span", { "class": `${componentClass}-close-x` }, null)]) : null]); if (holder) { return _createVNode(Teleport, { "to": holder }, { default: () => node }); } return node; }; } });