element-plus
Version:
A Component Library for Vue 3
126 lines (121 loc) • 3.35 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var dom = require('../../../utils/dom.js');
function createLoadingComponent({
options,
globalLoadingOption
}) {
let vm = null;
let afterLeaveTimer = null;
const afterLeaveFlag = vue.ref(false);
const data = vue.reactive({
...options,
originalPosition: "",
originalOverflow: "",
visible: false
});
function setText(text) {
data.text = text;
}
function destroySelf() {
const target = data.parent;
if (!target.vLoadingAddClassList) {
let loadingNumber = target.getAttribute("loading-number");
loadingNumber = Number.parseInt(loadingNumber) - 1;
if (!loadingNumber) {
dom.removeClass(target, "el-loading-parent--relative");
target.removeAttribute("loading-number");
} else {
target.setAttribute("loading-number", loadingNumber.toString());
}
dom.removeClass(target, "el-loading-parent--hidden");
}
if (vm.el && vm.el.parentNode) {
vm.el.parentNode.removeChild(vm.el);
}
}
function close() {
const target = data.parent;
target.vLoadingAddClassList = null;
if (data.fullscreen) {
globalLoadingOption.fullscreenLoading = void 0;
}
afterLeaveFlag.value = true;
clearTimeout(afterLeaveTimer);
afterLeaveTimer = window.setTimeout(() => {
if (afterLeaveFlag.value) {
afterLeaveFlag.value = false;
destroySelf();
}
}, 400);
data.visible = false;
}
function handleAfterLeave() {
if (!afterLeaveFlag.value)
return;
afterLeaveFlag.value = false;
destroySelf();
}
const componentSetupConfig = {
...vue.toRefs(data),
setText,
close,
handleAfterLeave
};
const elLoadingComponent = {
name: "ElLoading",
setup() {
return componentSetupConfig;
},
render() {
const svg = this.spinner || this.svg;
const spinner = vue.h("svg", {
class: "circular",
viewBox: this.svgViewBox ? this.svgViewBox : "25 25 50 50",
...svg ? { innerHTML: svg } : {}
}, [
vue.h("circle", {
class: "path",
cx: "50",
cy: "50",
r: "20",
fill: "none"
})
]);
const spinnerText = vue.h("p", { class: "el-loading-text" }, [this.text]);
return vue.h(vue.Transition, {
name: "el-loading-fade",
onAfterLeave: this.handleAfterLeave
}, {
default: vue.withCtx(() => [
vue.withDirectives(vue.createVNode("div", {
style: {
backgroundColor: this.background || ""
},
class: [
"el-loading-mask",
this.customClass,
this.fullscreen ? "is-fullscreen" : ""
]
}, [
vue.h("div", {
class: "el-loading-spinner"
}, [spinner, this.text ? spinnerText : null])
]), [[vue.vShow, this.visible]])
])
});
}
};
vm = vue.createVNode(elLoadingComponent);
vue.render(vm, document.createElement("div"));
return {
...componentSetupConfig,
vm,
get $el() {
return vm.el;
}
};
}
exports.createLoadingComponent = createLoadingComponent;
//# sourceMappingURL=createLoadingComponent.js.map