UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 3.94 kB
{"version":3,"file":"plugin.mjs","sources":["../../src/loading/plugin.tsx"],"sourcesContent":["import { App, Plugin, createApp, defineComponent, h, reactive } from 'vue';\nimport LoadingComponent from './loading';\nimport { getAttach, removeClass, addClass } from '../utils/dom';\nimport { TdLoadingProps, LoadingInstance, LoadingMethod } from './type';\nimport { usePrefixClass } from '../hooks/useConfig';\n\nlet fullScreenLoadingInstance: LoadingInstance = null;\n\nfunction createLoading(props: TdLoadingProps): LoadingInstance {\n const component = defineComponent({\n setup() {\n const loadingOptions = reactive(props);\n return {\n loadingOptions,\n };\n },\n render() {\n return h(LoadingComponent, {\n ...this.loadingOptions,\n });\n },\n });\n\n const attach = getAttach(props.attach);\n\n const loading = createApp(component).mount(document.createElement('div'));\n const parentRelativeClass = usePrefixClass('loading__parent--relative').value;\n const prefixClass = usePrefixClass('loading');\n\n if (attach) {\n addClass(attach, parentRelativeClass);\n } else {\n console.error('attach is not exist');\n }\n\n const loadingInstance: LoadingInstance = {\n hide: () => {\n loading.loading = false;\n attach.querySelectorAll(`.${prefixClass.value}`)?.forEach((item) => {\n item.remove();\n });\n removeClass(attach, parentRelativeClass);\n },\n };\n return loadingInstance;\n}\n\nfunction produceLoading(props: boolean | TdLoadingProps): LoadingInstance {\n const lockClass = usePrefixClass('loading--lock');\n\n // 全屏加载\n if (props === true) {\n fullScreenLoadingInstance = createLoading({\n fullscreen: true,\n loading: true,\n attach: 'body',\n });\n return fullScreenLoadingInstance;\n }\n removeClass(document.body, lockClass.value);\n\n if (props === false) {\n // 销毁全屏实例\n removeClass(document.body, lockClass.value);\n fullScreenLoadingInstance.hide();\n fullScreenLoadingInstance = null;\n return;\n }\n return createLoading(props);\n}\n\nexport type LoadingPluginType = Plugin & LoadingMethod;\n\nconst LoadingPlugin: LoadingPluginType = produceLoading as LoadingPluginType;\n\nLoadingPlugin.install = (app: App) => {\n // eslint-disable-next-line no-param-reassign\n app.config.globalProperties.$loading = produceLoading;\n};\n\nexport default LoadingPlugin;\n"],"names":["loadingOptions","addClass","console","removeClass","fullscreen","loading","attach","fullScreenLoadingInstance","LoadingPlugin","app"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAA,yBAAA,GAAA,IAAA,CAAA;AAEA,SAAA,aAAA,CAAA,KAAA,EAAA;;;AAGY,MAAA,IAAA,cAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;;AAEJA,QAAAA,cAAAA,EAAAA,cAAAA;;;;;AAOJ,KAAA;AACF,GAAA,CAAA,CAAA;AAEM,EAAA,IAAA,MAAA,GAAA,SAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA;AAEA,EAAA,IAAA,OAAA,GAAA,SAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACA,EAAA,IAAA,mBAAA,GAAA,cAAA,CAAA,2BAAA,CAAA,CAAA,KAAA,CAAA;AACA,EAAA,IAAA,WAAA,GAAA,cAAA,CAAA,SAAA,CAAA,CAAA;AAEN,EAAA,IAAA,MAAA,EAAA;AACEC,IAAAA,QAAAA,CAAAA,MAAAA,EAAAA,mBAAAA,CAAAA,CAAAA;AACF,GAAA,MAAA;AACEC,IAAAA,OAAAA,CAAAA,KAAAA,CAAAA,qBAAAA,CAAAA,CAAAA;AACF,GAAA;AAEA,EAAA,IAAA,eAAA,GAAA;;AACc,MAAA,IAAA,qBAAA,CAAA;;;;AAIV,OAAA,CAAA,CAAA;AACAC,MAAAA,WAAAA,CAAAA,MAAAA,EAAAA,mBAAAA,CAAAA,CAAAA;AACF,KAAA;;AAEK,EAAA,OAAA,eAAA,CAAA;AACT,CAAA;AAEA,SAAA,cAAA,CAAA,KAAA,EAAA;AACQ,EAAA,IAAA,SAAA,GAAA,cAAA,CAAA,eAAA,CAAA,CAAA;;;AAKFC,MAAAA,UAAAA,EAAAA,IAAAA;AACAC,MAAAA,OAAAA,EAAAA,IAAAA;AACAC,MAAAA,MAAAA,EAAAA,MAAAA;AACF,KAAA,CAAA,CAAA;AACO,IAAA,OAAA,yBAAA,CAAA;AACT,GAAA;;;;;AAO8BC,IAAAA,yBAAAA,GAAAA,IAAAA,CAAAA;AAC5B,IAAA,OAAA;AACF,GAAA;;AAEF,CAAA;AAIA,IAAA,aAAA,GAAA,eAAA;AAEAC,aAAAA,CAAAA,OAAAA,GAAAA,UAAAA,GAAAA,EAAAA;AAEMC,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,QAAAA,GAAAA,cAAAA,CAAAA;AACN,CAAA;;;;"}