element-plus
Version:
A Component Library for Vue 3
1 lines • 8.91 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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"}