UNPKG

naive-ui

Version:

A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast

97 lines (96 loc) 3.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const vue_1 = require("vue"); const _internal_1 = require("../../_internal"); const Message_1 = __importDefault(require("./Message")); const message_props_1 = require("./message-props"); exports.default = (0, vue_1.defineComponent)({ name: 'MessageEnvironment', props: Object.assign(Object.assign({}, message_props_1.messageProps), { duration: { type: Number, default: 3000 }, onAfterLeave: Function, onLeave: Function, internalKey: { type: String, required: true }, // private onInternalAfterLeave: Function, // deprecated onHide: Function, onAfterHide: Function }), setup(props) { let timerId = null; const showRef = (0, vue_1.ref)(true); (0, vue_1.onMounted)(() => { setHideTimeout(); }); function setHideTimeout() { const { duration } = props; if (duration) { timerId = window.setTimeout(hide, duration); } } function handleMouseenter(e) { if (e.currentTarget !== e.target) return; if (timerId !== null) { window.clearTimeout(timerId); timerId = null; } } function handleMouseleave(e) { if (e.currentTarget !== e.target) return; setHideTimeout(); } function hide() { const { onHide } = props; showRef.value = false; if (timerId) { window.clearTimeout(timerId); timerId = null; } // deprecated if (onHide) onHide(); } function handleClose() { const { onClose } = props; if (onClose) onClose(); hide(); } function handleAfterLeave() { const { onAfterLeave, onInternalAfterLeave, onAfterHide, internalKey } = props; if (onAfterLeave) onAfterLeave(); if (onInternalAfterLeave) onInternalAfterLeave(internalKey); // deprecated if (onAfterHide) onAfterHide(); } // deprecated function deactivate() { hide(); } return { show: showRef, hide, handleClose, handleAfterLeave, handleMouseleave, handleMouseenter, deactivate }; }, render() { return ((0, vue_1.h)(_internal_1.NFadeInExpandTransition, { appear: true, onAfterLeave: this.handleAfterLeave, onLeave: this.onLeave }, { default: () => [ this.show ? ((0, vue_1.h)(Message_1.default, { content: this.content, type: this.type, icon: this.icon, showIcon: this.showIcon, closable: this.closable, onClose: this.handleClose, onMouseenter: this.keepAliveOnHover ? this.handleMouseenter : undefined, onMouseleave: this.keepAliveOnHover ? this.handleMouseleave : undefined })) : null ] })); } });