UNPKG

song-ui-u

Version:

vue3 + js的PC前端组件库

88 lines (83 loc) 2.16 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var types = require('../../../utils/types.cjs'); require('song-ui-pro-icon'); var messageBox = require('./message-box.vue.cjs'); const messageInstances = vue.shallowReactive([]); const messageTheme = ["info", "success", "warning", "danger"]; const messageDefaults = { type: "info", onClose: null }; let onlyId = 0; const initOptions = (params) => { const options = !params || types.types().isString(params) ? { message: params } : params; const config = { ...messageDefaults, ...options }; return config; }; const createMessage = (options = {}) => { const container = document.createElement("div"); const appendTo = document.body; const id = `message_${onlyId++}`; const userOnClose = options.onClose; const vnode = vue.createVNode( messageBox, { ...options, id, onClose() { userOnClose?.(); closeMessage(instance); }, onUnmount() { vue.render(null, container); } } ); vue.render(vnode, container); appendTo.appendChild(container.firstElementChild); const vm = vnode.component; const instance = { id, vnode, vm, handler: { close: () => { vm.setupState.visible = false; } }, props: vm.props }; return instance; }; const closeMessage = (instance) => { const idx = messageInstances.indexOf(instance); if (idx === -1) return; messageInstances.splice(idx, 1); instance?.handler.close(); }; function closeAll() { for (const instance of messageInstances) { instance.handler.close(); } } const message = (params = {}) => { const normalized = initOptions(params); const message2 = createMessage(normalized); messageInstances.push(message2); }; messageTheme.forEach((theme) => { message[theme] = (options = {}) => { const config = initOptions(options); return message({ ...config, type: theme }); }; }); message.closeAll = closeAll; exports.closeAll = closeAll; exports.default = message; exports.messageInstances = messageInstances; //# sourceMappingURL=method.cjs.map