song-ui-u
Version:
vue3 + js的PC前端组件库
92 lines (87 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var types = require('../../../utils/types.cjs');
require('song-ui-pro-icon');
var message$1 = require('./message.vue.cjs');
var instance = require('./instance.cjs');
const messageTheme = ["info", "success", "warning", "error"];
const messageDefaults = {
type: "info",
content: "",
offset: 16,
duration: 3e3,
onClose: null,
onUnmount: null,
showClose: false
};
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(
message$1,
{
...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$1) => {
const idx = instance.messageInstances.indexOf(instance$1);
if (idx === -1) return;
instance.messageInstances.splice(idx, 1);
instance$1?.handler.close();
};
function closeAll() {
for (const instance$1 of instance.messageInstances) {
instance$1.handler.close();
}
}
const message = (params = {}) => {
const normalized = initOptions(params);
const message2 = createMessage(normalized);
instance.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;
//# sourceMappingURL=method.cjs.map