@meve/ui
Version:
Argon design system components library
82 lines (74 loc) • 2.54 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import DialogPlugin from './Dialog';
import Vue from 'vue';
import { inBrowser, isNumber, isString } from '../utils/shared';
import { mountComponent } from '../utils/components';
var singletonInstance;
function Dialog(options) {
if (!inBrowser()) {
return Promise.resolve();
}
return new Promise(function (resolve) {
Dialog.close();
var dialogOptions = isString(options) || isNumber(options) ? {
message: String(options)
} : options;
var _mountComponent = mountComponent(DialogPlugin, 'body', {
propsData: _extends({}, dialogOptions, {
beforeClose: dialogOptions.onBeforeClose
})
}),
instance = _mountComponent.instance,
unmount = _mountComponent.unmount;
instance.value = true;
singletonInstance = instance;
instance.$on('input', function (value) {
instance.value = value;
});
instance.$on('open', function () {
return dialogOptions.onOpen == null ? void 0 : dialogOptions.onOpen();
});
instance.$on('opened', function () {
return dialogOptions.onOpened == null ? void 0 : dialogOptions.onOpened();
});
instance.$on('click-overlay', function () {
return dialogOptions.onClickOverlay == null ? void 0 : dialogOptions.onClickOverlay();
});
instance.$on('close', function () {
dialogOptions.onClose == null ? void 0 : dialogOptions.onClose();
resolve('close');
});
instance.$on('closed', function () {
dialogOptions.onClosed == null ? void 0 : dialogOptions.onClosed();
unmount();
singletonInstance === instance && (singletonInstance = null);
});
instance.$on('confirm', function () {
dialogOptions.onConfirm == null ? void 0 : dialogOptions.onConfirm();
resolve('confirm');
});
instance.$on('cancel', function () {
dialogOptions.onCancel == null ? void 0 : dialogOptions.onCancel();
resolve('cancel');
});
instance.$on('route-change', function () {
unmount();
singletonInstance === instance && (singletonInstance = null);
});
});
}
Dialog.close = function () {
if (singletonInstance != null) {
var prevSingletonInstance = singletonInstance;
singletonInstance = null;
Vue.nextTick(function () {
prevSingletonInstance.show = false;
});
}
};
Dialog.Component = DialogPlugin;
Dialog.install = function (Vue) {
Vue.use(DialogPlugin);
};
export var _DialogComponent = DialogPlugin;
export default Dialog;