| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import { isVNode, render, markRaw, createVNode } from 'vue';
- import MessageBoxConstructor from './index.mjs';
- import { isClient } from '@vueuse/core';
- import { isString, isObject, hasOwn, isFunction } from '@vue/shared';
- import { isUndefined, isElement } from '../../../utils/types.mjs';
- const messageInstance = /* @__PURE__ */ new Map();
- const getAppendToElement = (props) => {
- let appendTo = document.body;
- if (props.appendTo) {
- if (isString(props.appendTo)) {
- appendTo = document.querySelector(props.appendTo);
- }
- if (isElement(props.appendTo)) {
- appendTo = props.appendTo;
- }
- if (!isElement(appendTo)) {
- appendTo = document.body;
- }
- }
- return appendTo;
- };
- const initInstance = (props, container, appContext = null) => {
- const vnode = createVNode(MessageBoxConstructor, props, isFunction(props.message) || isVNode(props.message) ? {
- default: isFunction(props.message) ? props.message : () => props.message
- } : null);
- vnode.appContext = appContext;
- render(vnode, container);
- getAppendToElement(props).appendChild(container.firstElementChild);
- return vnode.component;
- };
- const genContainer = () => {
- return document.createElement("div");
- };
- const showMessage = (options, appContext) => {
- const container = genContainer();
- options.onVanish = () => {
- render(null, container);
- messageInstance.delete(vm);
- };
- options.onAction = (action) => {
- const currentMsg = messageInstance.get(vm);
- let resolve;
- if (options.showInput) {
- resolve = { value: vm.inputValue, action };
- } else {
- resolve = action;
- }
- if (options.callback) {
- options.callback(resolve, instance.proxy);
- } else {
- if (action === "cancel" || action === "close") {
- if (options.distinguishCancelAndClose && action !== "cancel") {
- currentMsg.reject("close");
- } else {
- currentMsg.reject("cancel");
- }
- } else {
- currentMsg.resolve(resolve);
- }
- }
- };
- const instance = initInstance(options, container, appContext);
- const vm = instance.proxy;
- for (const prop in options) {
- if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) {
- if (prop === "closeIcon" && isObject(options[prop])) {
- vm[prop] = markRaw(options[prop]);
- } else {
- vm[prop] = options[prop];
- }
- }
- }
- vm.visible = true;
- return vm;
- };
- function MessageBox(options, appContext = null) {
- if (!isClient)
- return Promise.reject();
- let callback;
- if (isString(options) || isVNode(options)) {
- options = {
- message: options
- };
- } else {
- callback = options.callback;
- }
- return new Promise((resolve, reject) => {
- const vm = showMessage(options, appContext != null ? appContext : MessageBox._context);
- messageInstance.set(vm, {
- options,
- callback,
- resolve,
- reject
- });
- });
- }
- const MESSAGE_BOX_VARIANTS = ["alert", "confirm", "prompt"];
- const MESSAGE_BOX_DEFAULT_OPTS = {
- alert: { closeOnPressEscape: false, closeOnClickModal: false },
- confirm: { showCancelButton: true },
- prompt: { showCancelButton: true, showInput: true }
- };
- MESSAGE_BOX_VARIANTS.forEach((boxType) => {
- MessageBox[boxType] = messageBoxFactory(boxType);
- });
- function messageBoxFactory(boxType) {
- return (message, title, options, appContext) => {
- let titleOrOpts = "";
- if (isObject(title)) {
- options = title;
- titleOrOpts = "";
- } else if (isUndefined(title)) {
- titleOrOpts = "";
- } else {
- titleOrOpts = title;
- }
- return MessageBox(Object.assign({
- title: titleOrOpts,
- message,
- type: "",
- ...MESSAGE_BOX_DEFAULT_OPTS[boxType]
- }, options, {
- boxType
- }), appContext);
- };
- }
- MessageBox.close = () => {
- messageInstance.forEach((_, vm) => {
- vm.doClose();
- });
- messageInstance.clear();
- };
- MessageBox._context = null;
- export { MessageBox as default };
- //# sourceMappingURL=messageBox.mjs.map
|