UNPKG

hongluan-business-ui

Version:
153 lines (148 loc) 4.04 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var isServer = require('../../../utils/isServer.js'); var hongluanUi = require('hongluan-ui'); var modelessDialog = require('./modeless-dialog.js'); const ModelessDialogInstances = {}; const ModelessDialogListeners = []; let seed = 1; const { nextZIndex } = hongluanUi.useZIndex(); function show(options = {}) { if (isServer["default"]) return; if (ModelessDialogInstances[options.id]) return ModelessDialogInstances[options.id]; const id = options.id || `modeless_dialog_${seed++}`; const props = { zIndex: nextZIndex(), ...options, id, modelValue: true }; const container = document.createElement("div"); const slots = {}; if (props.header) { slots.header = () => props.header; } if (props.body) { slots.default = () => props.body; } if (props.footer) { slots.footer = () => props.footer; } const vm = vue.createVNode(modelessDialog["default"], props, Object.keys(slots).length ? slots : null); vm.props.onDestroy = () => { ModelessDialogInstances[id] = null; delete ModelessDialogInstances[id]; }; vue.render(vm, container); const proxy = vm.component.proxy; if (vue.isReactive(options)) { vue.watch(options, (newVal) => { Object.assign(vm.component.props, options); if (vue.isVNode(newVal.header)) { vm.component.slots.header = () => [newVal.header]; } if (vue.isVNode(newVal.body)) { vm.component.slots.default = () => [newVal.body]; } if (vue.isVNode(newVal.footer)) { vm.component.slots.footer = () => [newVal.footer]; } const { panelStyle, panelClass, headerClass: panelHeaderClass, bodyClass: panelBodyClass, footerClass: panelFooterClass } = hongluanUi.usePanelProps(newVal); Object.assign(proxy, { panelClass, panelStyle, panelHeaderClass, panelBodyClass, panelFooterClass }); vm.component.proxy.$forceUpdate(); }); } const returnVal = { close: () => { proxy.visible = false; proxy.$emit("destroy"); }, toggleShow: (shown) => { proxy.shown = shown != null ? shown : !proxy.shown; }, toggleCollapse: (collapsable) => { proxy.collapseDialog(collapsable); }, toggleMaximize: (maximizable) => { proxy.maximizeDialog(maximizable); }, isShown: () => { return proxy.shown; }, isClosed: () => { return !!ModelessDialogInstances[id]; }, isCollapsed: () => { return proxy.collapse; }, isMaximized: () => { return proxy.maximize; }, title: props.title, snapshot: props.snapshot }; ModelessDialogInstances[id] = returnVal; return returnVal; } function callAllDialogMethods(name, ...args) { for (const vm of Object.values(ModelessDialogInstances)) { vm[name](...args); } } function closeAll() { callAllDialogMethods("close"); } function showAll() { callAllDialogMethods("toggleShow", true); } function hideAll() { callAllDialogMethods("toggleShow", false); } function collapseAll() { callAllDialogMethods("toggleCollapse", true); } function expandAll() { callAllDialogMethods("toggleCollapse", false); } function get(id) { return ModelessDialogInstances[id]; } function has(id) { return !!ModelessDialogInstances[id]; } function addEventListener(listener) { !ModelessDialogListeners.includes(listener) && ModelessDialogListeners.push(listener); return () => { ModelessDialogListeners.splice(ModelessDialogListeners.indexOf(listener), 1); }; } function triggerEvent(name, id) { id && ModelessDialogListeners.forEach((listener) => { if (listener[name]) { listener[name](id); } }); } const ModelessDialogManager = { get, has, show, closeAll, showAll, hideAll, collapseAll, expandAll, addEventListener, triggerEvent }; exports.ModelessDialogManager = ModelessDialogManager; //# sourceMappingURL=manager.js.map