element-plus
Version:
A Component Library for Vue 3
1 lines • 8.57 kB
Source Map (JSON)
{"version":3,"file":"loading.mjs","sources":["../../../../../../packages/components/loading/src/loading.ts"],"sourcesContent":["import {\n Transition,\n createApp,\n createVNode,\n defineComponent,\n h,\n reactive,\n ref,\n toRefs,\n vShow,\n withCtx,\n withDirectives,\n} from 'vue'\nimport { removeClass } from '@element-plus/utils'\nimport { useGlobalComponentSettings } from '@element-plus/components/config-provider'\n\nimport type { AppContext, VNode } from 'vue'\nimport type { UseNamespaceReturn } from '@element-plus/hooks'\nimport type { LoadingOptionsResolved } from './types'\n\nexport function createLoadingComponent(\n options: LoadingOptionsResolved,\n appContext: AppContext | null\n) {\n let afterLeaveTimer: ReturnType<typeof setTimeout>\n // IMPORTANT NOTE: this is only a hacking way to expose the injections on an\n // instance, DO NOT FOLLOW this pattern in your own code.\n const afterLeaveFlag = ref(false)\n const data = reactive({\n ...options,\n originalPosition: '',\n originalOverflow: '',\n visible: false,\n })\n\n function setText(text: string | VNode | VNode[]) {\n data.text = text\n }\n\n function destroySelf() {\n const target = data.parent\n const ns = (vm as any).ns as UseNamespaceReturn\n if (!target.vLoadingAddClassList) {\n let loadingNumber: number | string | null =\n target.getAttribute('loading-number')\n loadingNumber = Number.parseInt(loadingNumber as any) - 1\n if (!loadingNumber) {\n removeClass(target, ns.bm('parent', 'relative'))\n target.removeAttribute('loading-number')\n } else {\n target.setAttribute('loading-number', loadingNumber.toString())\n }\n removeClass(target, ns.bm('parent', 'hidden'))\n }\n removeElLoadingChild()\n loadingInstance.unmount()\n }\n function removeElLoadingChild(): void {\n vm.$el?.parentNode?.removeChild(vm.$el)\n }\n function close() {\n if (options.beforeClose && !options.beforeClose()) return\n\n afterLeaveFlag.value = true\n clearTimeout(afterLeaveTimer)\n\n afterLeaveTimer = setTimeout(handleAfterLeave, 400)\n data.visible = false\n\n options.closed?.()\n }\n\n function handleAfterLeave() {\n if (!afterLeaveFlag.value) return\n const target = data.parent\n afterLeaveFlag.value = false\n target.vLoadingAddClassList = undefined\n destroySelf()\n }\n\n const elLoadingComponent = defineComponent({\n name: 'ElLoading',\n setup(_, { expose }) {\n const { ns, zIndex } = useGlobalComponentSettings('loading')\n\n expose({\n ns,\n zIndex,\n })\n\n return () => {\n const svg = data.spinner || data.svg\n const spinner = h(\n 'svg',\n {\n class: 'circular',\n viewBox: data.svgViewBox ? data.svgViewBox : '0 0 50 50',\n ...(svg ? { innerHTML: svg } : {}),\n },\n [\n h('circle', {\n class: 'path',\n cx: '25',\n cy: '25',\n r: '20',\n fill: 'none',\n }),\n ]\n )\n\n const spinnerText = data.text\n ? h('p', { class: ns.b('text') }, [data.text])\n : undefined\n\n return h(\n Transition,\n {\n name: ns.b('fade'),\n onAfterLeave: handleAfterLeave,\n },\n {\n default: withCtx(() => [\n withDirectives(\n createVNode(\n 'div',\n {\n style: {\n backgroundColor: data.background || '',\n },\n class: [\n ns.b('mask'),\n data.customClass,\n ns.is('fullscreen', data.fullscreen),\n ],\n },\n [\n h(\n 'div',\n {\n class: ns.b('spinner'),\n },\n [spinner, spinnerText]\n ),\n ]\n ),\n [[vShow, data.visible]]\n ),\n ]),\n }\n )\n }\n },\n })\n\n const loadingInstance = createApp(elLoadingComponent)\n Object.assign(loadingInstance._context, appContext ?? {})\n const vm = loadingInstance.mount(document.createElement('div'))\n\n return {\n ...toRefs(data),\n setText,\n removeElLoadingChild,\n close,\n handleAfterLeave,\n vm,\n get $el(): HTMLElement {\n return vm.$el\n },\n }\n}\n\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>\n"],"names":[],"mappings":"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"}