yuang-framework-ui-pc
Version:
yuang-framework-ui-pc Library
268 lines (267 loc) • 8.94 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const vue = require("vue");
const elementPlus = require("element-plus");
const receiver = require("../ele-config-provider/receiver");
const util = require("../ele-pro-layout/util");
const MessageBody = require("../ele-app/components/message-body");
const core = require("./core");
function blurCurrentFocus() {
var _a;
if (typeof ((_a = document == null ? void 0 : document.body) == null ? void 0 : _a.querySelector) === "function") {
const el = document.body.querySelector(":focus");
typeof (el == null ? void 0 : el.blur) === "function" && el.blur();
}
}
function getWrapEl(bodyEl, force, groupKey) {
const parent = bodyEl || document.body;
const className = "ele-message-wrapper";
const attr = "data-group";
const attrSelector = groupKey == null ? void 0 : [attr, groupKey];
const el = force ? void 0 : core.queryChild(parent, className, attrSelector);
if (el != null) {
return el;
}
const elem = document.createElement("div");
elem.classList.add(className);
if (groupKey) {
elem.setAttribute(attr, groupKey);
}
parent.appendChild(elem);
return elem;
}
function getDefaultGroupKey() {
const url = location == null ? void 0 : location.href;
const pi = url.indexOf("?");
return url.substring(0, pi < 0 ? void 0 : pi);
}
function getOffsetStyle(offset, userStyle) {
const mt = typeof offset === "number" ? `${offset}px` : offset;
return vue.mergeProps({ style: { marginTop: mt } }, { style: userStyle }).style;
}
function isObjOpt(params) {
return params != null && typeof params === "object" && !vue.isVNode(params);
}
function normalizeOption(params, globalOpt, onClose, type, loading, getWrapEl2, groupKey, messageId, onMessageDestroy) {
const opt = { ...globalOpt || {} };
if (isObjOpt(params)) {
Object.assign(opt, params);
} else {
opt.message = params;
}
opt.type = type ?? opt.type;
opt.appendTo = (opt.appendTo == null ? void 0 : vue.unref(opt.appendTo)) ?? (getWrapEl2 == null ? void 0 : getWrapEl2(opt.inner));
const classes = ["ele-message"];
if (opt.original === "plain") {
classes.push("is-plain-alert");
} else if (opt.original) {
classes.push("is-alert");
} else if (opt.plain) {
classes.push("is-plain");
}
if (loading) {
classes.push("is-loading");
opt.duration = opt.duration ?? 0;
if (opt.mask) {
classes.push("is-show-mask");
}
if (opt.centered) {
classes.push("is-centered");
}
}
if (opt.inner) {
classes.push("is-inner");
}
if (opt.customClass) {
classes.push(opt.customClass);
}
opt.customClass = classes.join(" ");
if (opt.offset != null && opt.offset !== "") {
opt.style = getOffsetStyle(opt.offset, opt.style);
}
const content = opt.message;
const isFn = typeof content === "function";
const isStr = !(isFn || vue.isVNode(content));
opt.icon = vue.h(
MessageBody,
{
message: isStr && content != null ? String(content) : void 0,
type: opt.type,
icon: opt.icon,
showClose: opt.showClose,
dangerouslyUseHTMLString: opt.dangerouslyUseHTMLString,
loading,
messageId,
onClose,
onMessageDestroy
},
{ default: isFn ? content : isStr ? void 0 : () => content }
);
const key = (opt.inner ? groupKey : void 0) ?? "";
opt.message = isStr ? `${key}_${content ?? ""}` : void 0;
opt.grouping = isStr ? opt.grouping : false;
return core.omit(opt, [
"showClose",
"dangerouslyUseHTMLString",
"offset",
"original",
"plain",
"mask",
"centered",
"inner",
"groupKey"
]);
}
const EleMessage = function(params, context) {
const onClose = () => ins.close();
const getWrap = () => getWrapEl();
const opt = normalizeOption(params, null, onClose, null, null, getWrap);
const ins = elementPlus.ElMessage(opt, context);
return ins;
};
EleMessage.success = function(params, context) {
const onClose = () => ins.close();
const getWrap = () => getWrapEl();
const opt = normalizeOption(params, null, onClose, "success", null, getWrap);
const ins = elementPlus.ElMessage(opt, context);
return ins;
};
EleMessage.warning = function(params, context) {
const onClose = () => ins.close();
const getWrap = () => getWrapEl();
const opt = normalizeOption(params, null, onClose, "warning", null, getWrap);
const ins = elementPlus.ElMessage(opt, context);
return ins;
};
EleMessage.error = function(params, context) {
const onClose = () => ins.close();
const getWrap = () => getWrapEl();
const opt = normalizeOption(params, null, onClose, "error", null, getWrap);
const ins = elementPlus.ElMessage(opt, context);
return ins;
};
EleMessage.info = function(params, context) {
const onClose = () => ins.close();
const getWrap = () => getWrapEl();
const opt = normalizeOption(params, null, onClose, null, null, getWrap);
const ins = elementPlus.ElMessage(opt, context);
return ins;
};
EleMessage.loading = function(params, context) {
blurCurrentFocus();
const onClose = () => ins.close();
const getWrap = () => getWrapEl();
const opt = normalizeOption(params, null, onClose, null, true, getWrap);
const ins = elementPlus.ElMessage(opt, context);
return ins;
};
EleMessage.closeAll = function(type) {
return elementPlus.ElMessage.closeAll(type);
};
const MESSAGE_KEY = Symbol("message");
function useMessage(globalOpt) {
var _a, _b;
const layoutState = util.useLayoutState();
const globalProps = receiver.useGlobalProps("message");
const appContext = (_b = (_a = vue.getCurrentInstance) == null ? void 0 : _a.call(vue)) == null ? void 0 : _b.appContext;
const groupKey = (globalOpt == null ? void 0 : globalOpt.groupKey) || getDefaultGroupKey();
const state = { wrapEl: null, isActivated: true, id: 0 };
const instances = /* @__PURE__ */ new Map();
const hideClass = "is-hide";
vue.provide(MESSAGE_KEY, { groupKey, getInnerWrap: () => getWrap(true) });
const parentMsg = vue.inject(MESSAGE_KEY, null);
vue.onActivated(() => {
state.isActivated = true;
state.wrapEl && state.wrapEl.classList.remove(hideClass);
});
vue.onDeactivated(() => {
state.isActivated = false;
state.wrapEl && state.wrapEl.classList.add(hideClass);
});
vue.onBeforeUnmount(() => {
for (const [_key, ins] of instances) {
ins && ins.close && ins.close();
}
instances.clear();
});
const getWrap = (inner) => {
if (inner) {
if (parentMsg != null && parentMsg.groupKey === groupKey) {
return parentMsg.getInnerWrap();
}
if (state.wrapEl == null && layoutState.modalsEl != null) {
state.wrapEl = getWrapEl(layoutState.modalsEl, false, groupKey);
if (!state.isActivated) {
state.wrapEl.classList.add(hideClass);
}
}
if (state.wrapEl != null) {
return state.wrapEl;
}
}
return getWrapEl();
};
const getOpt = function(params, onClose, type, loading) {
state.id++;
const msgId = `m_${state.id}`;
const opt = normalizeOption(
params,
{ ...globalProps.value || {}, ...globalOpt || {} },
onClose,
type,
loading,
getWrap,
groupKey,
msgId,
(messageId) => {
messageId && instances.delete(messageId);
}
);
return { opt, msgId };
};
const message = function(params) {
const { opt, msgId } = getOpt(params, () => ins.close());
const ins = elementPlus.ElMessage(opt, appContext);
instances.set(msgId, ins);
return ins;
};
message.success = function(params) {
const { opt, msgId } = getOpt(params, () => ins.close(), "success", false);
const ins = elementPlus.ElMessage(opt, appContext);
instances.set(msgId, ins);
return ins;
};
message.warning = function(params) {
const { opt, msgId } = getOpt(params, () => ins.close(), "warning", false);
const ins = elementPlus.ElMessage(opt, appContext);
instances.set(msgId, ins);
return ins;
};
message.error = function(params) {
const { opt, msgId } = getOpt(params, () => ins.close(), "error", false);
const ins = elementPlus.ElMessage(opt, appContext);
instances.set(msgId, ins);
return ins;
};
message.info = function(params) {
const { opt, msgId } = getOpt(params, () => ins.close());
const ins = elementPlus.ElMessage(opt, appContext);
instances.set(msgId, ins);
return ins;
};
message.loading = function(params) {
blurCurrentFocus();
const { opt, msgId } = getOpt(params, () => ins.close(), void 0, true);
const ins = elementPlus.ElMessage(opt, appContext);
instances.set(msgId, ins);
return ins;
};
message.closeAll = function(type) {
instances.clear();
return elementPlus.ElMessage.closeAll(type);
};
return message;
}
exports.EleMessage = EleMessage;
exports.MESSAGE_KEY = MESSAGE_KEY;
exports.useMessage = useMessage;