{"version":3,"file":"plugin.mjs","sources":["../../../components/loading/plugin.tsx"],"sourcesContent":["import { App, Plugin, createVNode, defineComponent, h, reactive, render, AppContext, ref } from 'vue';\nimport { merge } from 'lodash-es';\nimport LoadingComponent from './loading';\nimport { usePrefixClass } from '@tdesign/shared-hooks';\nimport { getAttach, removeClass, addClass } from '@tdesign/shared-utils';\nimport { TdLoadingProps, LoadingInstance, LoadingMethod } from './type';\n\nlet fullScreenLoadingInstance: LoadingInstance = null;\n\nfunction mergeDefaultProps(props: TdLoadingProps): TdLoadingProps {\n  const options: TdLoadingProps = merge(\n    {\n      fullscreen: false,\n      attach: 'body',\n      loading: true,\n      preventScrollThrough: true,\n    },\n    props,\n  );\n\n  return options;\n}\n\nfunction createLoading(props: TdLoadingProps, context?: AppContext): LoadingInstance {\n  const mergedProps = mergeDefaultProps(props);\n\n  if (mergedProps.fullscreen && fullScreenLoadingInstance) {\n    return fullScreenLoadingInstance;\n  }\n\n  // Store class names that will be set inside component's setup context\n  const parentRelativeClass = ref('');\n  const lockClass = ref('');\n\n  const component = defineComponent({\n    setup() {\n      const loadingOptions = reactive(mergedProps);\n\n      // Get prefix class inside component setup context to access ConfigProvider's classPrefix\n      parentRelativeClass.value = usePrefixClass('loading__parent--relative').value;\n      lockClass.value = usePrefixClass('loading--lock').value;\n\n      return () => h(LoadingComponent, loadingOptions);\n    },\n  });\n\n  const attach = getAttach(mergedProps.fullscreen ? 'body' : mergedProps.attach);\n\n  const instance = createVNode(component);\n\n  // eslint-disable-next-line no-underscore-dangle\n  if (context ?? LoadingPlugin._context) {\n    // eslint-disable-next-line no-underscore-dangle\n    instance.appContext = context ?? LoadingPlugin._context;\n  }\n\n  const wrapper = document.createElement('div');\n  render(instance, wrapper);\n\n  const lockFullscreen = mergedProps.preventScrollThrough && mergedProps.fullscreen;\n\n  if (lockFullscreen) {\n    addClass(document.body, lockClass.value);\n  }\n\n  if (attach) {\n    addClass(attach, parentRelativeClass.value);\n  } else {\n    console.error('attach is not exist');\n  }\n\n  const loadingInstance: LoadingInstance = {\n    hide: () => {\n      removeClass(attach, parentRelativeClass.value);\n      removeClass(document.body, lockClass.value);\n      // 卸载组件渲染\n      render(null, wrapper);\n      wrapper.remove();\n    },\n  };\n  return loadingInstance;\n}\n\nfunction produceLoading(props: boolean | TdLoadingProps, context?: AppContext): LoadingInstance {\n  // 全屏加载\n  if (props === true) {\n    fullScreenLoadingInstance = createLoading(\n      {\n        fullscreen: true,\n        loading: true,\n        attach: 'body',\n        preventScrollThrough: true,\n      },\n      context,\n    );\n    return fullScreenLoadingInstance;\n  }\n\n  if (props === false) {\n    // 销毁全屏实例\n    fullScreenLoadingInstance?.hide();\n    fullScreenLoadingInstance = null;\n    return;\n  }\n  return createLoading(props);\n}\n\nexport type LoadingPluginType = Plugin &\n  LoadingMethod & {\n    _context?: AppContext;\n  };\n\nexport const 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  // eslint-disable-next-line no-underscore-dangle\n  LoadingPlugin._context = app._context;\n};\n\nexport default LoadingPlugin;\n"],"names":["fullScreenLoadingInstance","mergeDefaultProps","props","options","merge","fullscreen","attach","loading","preventScrollThrough","createLoading","context","mergedProps","parentRelativeClass","ref","lockClass","component","defineComponent","setup","loadingOptions","reactive","value","usePrefixClass","h","LoadingComponent","getAttach","instance","createVNode","LoadingPlugin","_context","appContext","wrapper","document","createElement","render","lockFullscreen","addClass","body","console","error","loadingInstance","hide","removeClass","remove","produceLoading","_fullScreenLoadingIns","install","app","config","globalProperties","$loading"],"mappings":"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"}