winbox-ui-next
Version:
We Design Vue 2.0: A Vue.js 3 UI Library
112 lines (111 loc) • 3.73 kB
JavaScript
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
import { render, createVNode } from "vue";
import { setGlobalConfig, getComponentPrefix } from "../_utils/global-config.js";
import { MESSAGE_TYPES } from "../_utils/constant.js";
import { getOverlay } from "../_utils/dom.js";
import { isFunction } from "../_utils/is.js";
import _Modal from "./modal.js";
import { omit } from "../_utils/omit.js";
import { getSlotFunction } from "../_utils/vue-utils.js";
const open = (config, appContext) => {
let container = getOverlay("modal");
const handleOk = () => {
if (vm.component) {
vm.component.props.visible = false;
}
if (isFunction(config.onOk)) {
config.onOk();
}
};
const handleCancel = () => {
if (vm.component) {
vm.component.props.visible = false;
}
if (isFunction(config.onCancel)) {
config.onCancel();
}
};
const handleClose = () => {
if (container) {
render(null, container);
document.body.removeChild(container);
}
container = null;
if (isFunction(config.onClose)) {
config.onClose();
}
};
const defaultConfig = {
visible: true,
renderToBody: false,
onOk: handleOk,
onCancel: handleCancel,
onClose: handleClose
};
const vm = createVNode(_Modal, __spreadValues(__spreadValues(__spreadValues({}, omit(config, ["content", "title", "footer"])), {
footer: typeof config.footer === "boolean" ? config.footer : void 0
}), defaultConfig), {
default: getSlotFunction(config.content),
title: getSlotFunction(config.title),
footer: typeof config.footer !== "boolean" ? getSlotFunction(config.footer) : void 0
});
if (appContext != null ? appContext : Modal._context) {
vm.appContext = appContext != null ? appContext : Modal._context;
}
render(vm, container);
document.body.appendChild(container);
return {
close: handleClose
};
};
const modal = __spreadValues({
open,
confirm: (config, appContext) => {
const _config = __spreadValues({
simple: true
}, config);
return open(_config, appContext);
}
}, MESSAGE_TYPES.reduce((pre, value) => {
pre[value] = (config, appContext) => {
const _config = __spreadValues({
simple: true,
hideCancel: true,
messageType: value
}, config);
return open(_config, appContext);
};
return pre;
}, {}));
const Modal = Object.assign(_Modal, __spreadProps(__spreadValues({}, modal), {
install: (app, options) => {
setGlobalConfig(app, options);
const componentPrefix = getComponentPrefix(options);
app.component(componentPrefix + _Modal.name, _Modal);
const modalWithContext = {};
for (const key of Object.keys(modal)) {
modalWithContext[key] = (config, appContext = app._context) => modal[key](config, appContext);
}
app.config.globalProperties.$modal = modalWithContext;
},
_context: null
}));
export { Modal as default };