@opensig/opendesign
Version:
61 lines (60 loc) • 1.83 kB
JavaScript
import { render, isReactive, watch, h } from "vue";
import _sfc_main from "./OLoading.vue.mjs";
import { isObject } from "../_utils/is.mjs";
let globalLoadingOptions = {};
const setVLoadingOption = (option) => {
globalLoadingOptions = option;
};
const WATCH_HANDLE = Symbol("watch-handle");
const VNODE = Symbol("vnode");
const renderLoading = (el, value, modifiers, shouldWatch) => {
var _a;
const selfOption = {};
if (isObject(value)) {
Object.assign(selfOption, value);
selfOption.wrapper = value.wrapper ?? null;
if (shouldWatch) {
(_a = el[WATCH_HANDLE]) == null ? void 0 : _a.call(el);
el[WATCH_HANDLE] = void 0;
if (isReactive(value)) {
el[WATCH_HANDLE] = watch(value, (newValue) => {
renderLoading(el, newValue, modifiers, false);
});
}
}
} else {
selfOption.visible = value;
selfOption.wrapper = modifiers.body ? "body" : null;
selfOption.mask = !modifiers.nomask;
}
const vnode = h(_sfc_main, Object.assign({}, globalLoadingOptions, selfOption));
el[VNODE] = vnode;
render(vnode, el);
};
const vLoading = {
mounted(el, binding) {
renderLoading(el, binding.value, binding.modifiers, true);
},
updated(el, binding) {
var _a, _b, _c;
if (binding.value === binding.oldValue) return;
if (isObject(binding.value)) {
renderLoading(el, binding.value, binding.modifiers, true);
} else {
(_c = (_b = (_a = el[VNODE]) == null ? void 0 : _a.component) == null ? void 0 : _b.exposed) == null ? void 0 : _c.toggle(Boolean(binding.value));
}
},
beforeUnmount(el) {
var _a;
(_a = el[WATCH_HANDLE]) == null ? void 0 : _a.call(el);
render(null, el);
el[VNODE] = void 0;
el[WATCH_HANDLE] = void 0;
}
};
export {
VNODE,
WATCH_HANDLE,
setVLoadingOption,
vLoading
};