{"version":3,"file":"use-dialog.mjs","sources":["../../../../../packages/hooks/dialog/use-dialog.tsx"],"sourcesContent":["import { useTemplatePromise } from '../use-template-promise'\nimport { h, getCurrentInstance, render as vRender, inject, nextTick } from 'vue'\nimport type { ComponentInternalInstance } from 'vue'\nimport {\n  ElDialog,\n  ElButton,\n  configProviderContextKey,\n  ElConfigProvider,\n} from 'element-plus'\nimport type { VNode } from 'vue'\nimport type { DialogProps } from 'element-plus'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { prepareProps } from '@el-plus/utils/props'\nimport { useLocale } from '../use-locale'\n\nexport type DialogOptions = Partial<\n  DialogProps & {\n    instance: ComponentInternalInstance | null\n    render: (props) => VNode\n    scopedSlots: Record<string, (props) => VNode>\n    class: string\n    templatePromiseClass: string\n    onCancel: (reject) => void\n    onBeforeCancel: (reject) => void\n    cancelText?: string\n    onConfirm: (resolve) => void\n    onBeforeConfirm: (resolve) => void\n    confirmText?: string\n    showFooter: boolean\n  }\n>\nexport type ExpandDialogOptions = {\n  title?: string\n  dialogProps?: DialogOptions\n}\nconst bem = createNameSpace('dialog')\n\nexport const useDialog = (options: DialogOptions = {}) => {\n  const { t } = useLocale()\n  const {\n    scopedSlots = {},\n    instance,\n    render,\n    destroyOnClose,\n    onConfirm,\n    onBeforeConfirm,\n    confirmText,\n    onCancel,\n    onBeforeCancel,\n    cancelText,\n    showFooter = true,\n    templatePromiseClass,\n    ...dialogProps\n  } = options\n\n  const Dialog = useTemplatePromise<any>({\n    destroy: destroyOnClose,\n    class: templatePromiseClass,\n    render: (promiseOptions, ctx) => {\n      // 插槽参数增加promiseOptions\n      for (const key in scopedSlots) {\n        scopedSlots[key] = scopedSlots[key].bind(null, promiseOptions)\n      }\n      const { resolve, reject, isResolving } = promiseOptions\n      const renderFunc = () => {\n        return render\n          ? render(promiseOptions)\n          : ctx.slots.default?.(promiseOptions)\n      }\n      const slots: DialogOptions['scopedSlots'] = {}\n      if (showFooter) {\n        slots.footer = () => (\n          <div class={bem.e('footer')}>\n            {scopedSlots.footerPrepend?.(promiseOptions)}\n            <ElButton\n              size=\"default\"\n              onClick={async () => {\n                if (onBeforeCancel) {\n                  await onBeforeCancel(reject)\n                }\n                if (onCancel) {\n                  onCancel(reject)\n                } else {\n                  reject('cancel')\n                }\n              }}\n            >\n              {cancelText || t('ep.dialog.cancel')}\n            </ElButton>\n            {scopedSlots.footerInner?.(promiseOptions)}\n            <ElButton\n              type=\"primary\"\n              onClick={async () => {\n                if (onBeforeConfirm) {\n                  await onBeforeConfirm(resolve)\n                }\n                if (onConfirm) {\n                  onConfirm(resolve)\n                } else {\n                  resolve('confirm')\n                }\n              }}\n              loading={isResolving}\n            >\n              {confirmText || t('ep.dialog.confirm')}\n            </ElButton>\n            {scopedSlots.footerAppend?.(promiseOptions)}\n          </div>\n        )\n      }\n      return (\n        <ElDialog\n          class={bem.b()}\n          modelValue={true}\n          {...{\n            closeOnClickModal: false,\n            closeOnPressEscape: false,\n            title: t('ep.dialog.title'),\n            center: false,\n            // 'append-to-body': true,\n            beforeClose: () => {\n              reject('cancel')\n            },\n            ...prepareProps(dialogProps, ['modelValue']),\n          }}\n          v-slots={{\n            ...slots,\n            ...scopedSlots,\n          }}\n        >\n          {renderFunc()}\n        </ElDialog>\n      )\n    },\n  })\n  if (render) {\n    // const app = createApp(component)\n    // Object.assign(app._context, parentInstance.appContext)\n    // app.mount(container)\n    const container = document.createElement('div')\n    // container.setAttribute('id', 'ep-dialog-container')\n    const newInstance = instance || getCurrentInstance()\n    const config = inject(configProviderContextKey) as any\n    // const parentConfig =\n    //   newInstance?.provides[configProviderContextKey] ||\n    //   newInstance?.appContext?.provides[configProviderContextKey]\n    // const vnode = h(Dialog)\n    const vnode = h(\n      ElConfigProvider,\n      { locale: config?.locale },\n      { default: () => h(Dialog) },\n    )\n    if (newInstance && newInstance.appContext) {\n      // 强制继承父应用的全局组件、指令和插件\n      vnode.appContext = newInstance.appContext\n    }\n    nextTick(() => {\n      vRender(vnode, container)\n      document.body.appendChild(container)\n    })\n  }\n\n  return Dialog\n}\n"],"names":["bem","createNameSpace","useDialog","options","t","useLocale","scopedSlots","instance","render","destroyOnClose","onConfirm","onBeforeConfirm","confirmText","onCancel","onBeforeCancel","cancelText","showFooter","templatePromiseClass","dialogProps","Dialog","useTemplatePromise","destroy","class","promiseOptions","ctx","key","bind","resolve","reject","isResolving","renderFunc","slots","default","footer","_createVNode","e","footerPrepend","ElButton","footerInner","footerAppend","ElDialog","_mergeProps","b","closeOnClickModal","closeOnPressEscape","title","center","beforeClose","prepareProps","container","document","createElement","newInstance","getCurrentInstance","config","inject","configProviderContextKey","vnode","h","ElConfigProvider","locale","appContext","nextTick","vRender","body","appendChild"],"mappings":"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"}