{"version":3,"file":"index.mjs","sources":["../../../../../../package/formily/form-drawer/src/index.ts"],"sourcesContent":["import { FormProvider, Fragment, h } from \"@formily/vue\";\nimport { toJS } from \"@formily/reactive\";\nimport { observer } from \"@formily/reactive-vue\";\nimport { createForm, Form, IFormProps } from \"@formily/core\";\nimport { isNum, isStr, isBool, isFn, IMiddleware, applyMiddleware } from \"@formily/shared\";\nimport { ElDrawer, ElButton } from \"element-plus\";\nimport type { ElDrawer as ElDrawerProps, ElButton as ElButtonProps } from \"element-plus\";\n\n// import { t } from 'element-plus/lib/locale'\nimport { Component, VNode, defineComponent, Teleport, createApp } from \"vue\";\nimport {\n  isValidElement,\n  resolveComponent,\n  createPortalProvider,\n  getPortalContext,\n  loading,\n  stylePrefix\n} from \"../../__builtins__\";\n\ntype FormDrawerContentProps = { form: Form };\n\ntype FormDrawerContent = Component | ((props: FormDrawerContentProps) => VNode);\n\ntype DrawerTitle = string | number | Component | VNode | (() => VNode);\n\ntype IFormDrawerProps = Omit<typeof ElDrawerProps, \"title\"> & {\n  title?: DrawerTitle;\n  footer?: null | Component | VNode | (() => VNode);\n  cancelText?: string | Component | VNode | (() => VNode);\n  cancelButtonProps?: typeof ElButtonProps;\n  okText?: string | Component | VNode | (() => VNode);\n  okButtonProps?: typeof ElButtonProps;\n  beforeClose?: (cb: Function) => void;\n  onOpen?: () => void;\n  onOpend?: () => void;\n  onClose?: () => void;\n  onClosed?: () => void;\n  onCancel?: () => void;\n  onOK?: () => void;\n  loadingText?: string;\n};\n\nconst PORTAL_TARGET_NAME = \"FormDrawerFooter\";\n\nconst isDrawerTitle = (props: any): props is DrawerTitle => {\n  return isNum(props) || isStr(props) || isBool(props) || isValidElement(props);\n};\n\nconst getDrawerProps = (props: any): IFormDrawerProps => {\n  if (isDrawerTitle(props)) {\n    return {\n      title: props\n    } as IFormDrawerProps;\n  } else {\n    return props;\n  }\n};\n\nexport interface IFormDrawer {\n  forOpen(middleware: IMiddleware<IFormProps>): IFormDrawer;\n  forConfirm(middleware: IMiddleware<IFormProps>): IFormDrawer;\n  forCancel(middleware: IMiddleware<IFormProps>): IFormDrawer;\n  open(props?: IFormProps): Promise<any>;\n  close(): void;\n}\n\nexport interface IFormDrawerComponentProps {\n  content: FormDrawerContent;\n  resolve: () => any;\n  reject: () => any;\n}\n\n// @ts-ignore\nexport function FormDrawer(\n  title: IFormDrawerProps | DrawerTitle,\n  content: FormDrawerContent\n): IFormDrawer;\n\nexport function FormDrawer(\n  title: IFormDrawerProps | DrawerTitle,\n  id: string | symbol,\n  content: FormDrawerContent\n): IFormDrawer;\n\nexport function FormDrawer(title: DrawerTitle, id: string, content: FormDrawerContent): IFormDrawer;\n\nexport function FormDrawer(\n  title: IFormDrawerProps | DrawerTitle,\n  id: string | symbol | FormDrawerContent,\n  content?: FormDrawerContent\n): {\n  forOpen: (middleware: IMiddleware<IFormProps>) => {\n    forOpen: (middleware: IMiddleware<IFormProps>) => any;\n    forConfirm: (middleware: IMiddleware<Form>) => any;\n    close: () => void;\n    open: (props: IFormProps) => never;\n    forCancel: (middleware: IMiddleware<Form>) => any;\n  };\n  forConfirm: (middleware: IMiddleware<Form>) => {\n    forOpen: (middleware: IMiddleware<IFormProps>) => any;\n    forConfirm: (middleware: IMiddleware<Form>) => any;\n    close: () => void;\n    open: (props: IFormProps) => never;\n    forCancel: (middleware: IMiddleware<Form>) => any;\n  };\n  close: () => void;\n  open: (props: IFormProps) => never;\n  forCancel: (middleware: IMiddleware<Form>) => {\n    forOpen: (middleware: IMiddleware<IFormProps>) => any;\n    forConfirm: (middleware: IMiddleware<Form>) => any;\n    close: () => void;\n    open: (props: IFormProps) => never;\n    forCancel: (middleware: IMiddleware<Form>) => any;\n  };\n} {\n  if (isFn(id) || isValidElement(id)) {\n    content = id as FormDrawerContent;\n    id = \"form-drawer\";\n  }\n\n  const prefixCls = `${stylePrefix}-form-drawer`;\n  const env: any = {\n    root: document.createElement(\"div\"),\n    form: null,\n    promise: null,\n    app: null,\n    instance: null,\n    openMiddlewares: [],\n    confirmMiddlewares: [],\n    cancelMiddlewares: []\n  };\n\n  document.body.appendChild(env.root);\n\n  const props = getDrawerProps(title);\n  const drawerProps = {\n    ...props,\n    onClosed: () => {\n      props.onClosed?.();\n      env.app.unmount();\n      env.app = null;\n      env.instance = null;\n      env.root?.parentNode?.removeChild(env.root);\n      env.root = undefined;\n    }\n  };\n\n  const component = observer(\n    defineComponent({\n      setup() {\n        return () =>\n          h(\n            Fragment,\n            {},\n            {\n              default: () =>\n                resolveComponent(content, {\n                  form: env.form\n                })\n            }\n          );\n      }\n    })\n  );\n\n  const render = (visible = true, resolve?: () => any, reject?: () => any) => {\n    if (!env.instance) {\n      const ComponentConstructor = defineComponent({\n        props: [\"drawerProps\"],\n        data() {\n          return {\n            visible: false\n          };\n        },\n        render() {\n          const {\n            onClose,\n            onClosed,\n            onOpen,\n            onOpend,\n            onOK,\n            onCancel,\n            title,\n            footer,\n            okText,\n            cancelText,\n            okButtonProps,\n            cancelButtonProps,\n            ...drawerProps\n          } = this.drawerProps;\n          return h(\n            FormProvider,\n            {\n              form: env.form\n            },\n            {\n              default: () =>\n                h(\n                  ElDrawer,\n                  {\n                    class: `${prefixCls}`,\n                    ...drawerProps,\n                    modelValue: this.visible,\n                    \"onUpdate:modelValue\": (val: any) => {\n                      this.visible = val;\n                    },\n                    onClose: () => {\n                      onClose?.();\n                    },\n                    onClosed: () => {\n                      onClosed?.();\n                    },\n                    onOpen: () => {\n                      onOpen?.();\n                    },\n                    onOpened: () => {\n                      onOpend?.();\n                    }\n                  },\n                  {\n                    default: () => [\n                      h(\n                        \"div\",\n                        {\n                          class: [`${prefixCls}-body`]\n                        },\n                        [h(component, {}, {})] as any\n                      ),\n                      h(\n                        \"div\",\n                        {\n                          class: [`${prefixCls}-footer`]\n                        },\n                        {\n                          default: () => {\n                            const FooterPortalTarget = h(\n                              \"span\",\n                              {\n                                id: PORTAL_TARGET_NAME\n                              },\n                              {}\n                            );\n\n                            if (footer === null) {\n                              return [null, FooterPortalTarget];\n                            } else if (footer) {\n                              return [resolveComponent(footer), FooterPortalTarget];\n                            }\n\n                            return [\n                              h(\n                                ElButton,\n                                {\n                                  ...cancelButtonProps,\n                                  onClick: (e: MouseEvent) => {\n                                    onCancel?.(e);\n                                    reject?.();\n                                  }\n                                },\n                                {\n                                  default: () =>\n                                    resolveComponent(\n                                      cancelText || \"取消\"\n                                      // t('el.popconfirm.cancelButtonText')\n                                    )\n                                }\n                              ),\n                              h(\n                                ElButton,\n                                {\n                                  type: \"primary\",\n                                  ...okButtonProps,\n                                  onClick: (e: MouseEvent) => {\n                                    onOK?.(e);\n                                    resolve?.();\n                                  }\n                                },\n                                {\n                                  default: () =>\n                                    resolveComponent(\n                                      okText || \"确定\"\n                                      // t('el.popconfirm.confirmButtonText')\n                                    )\n                                }\n                              ),\n                              FooterPortalTarget\n                            ];\n                          }\n                        }\n                      )\n                    ],\n                    title: () => h(\"div\", {}, { default: () => resolveComponent(title) })\n                  }\n                )\n            }\n          );\n        }\n      });\n      env.app = createApp(ComponentConstructor, {\n        drawerProps,\n        parent: getPortalContext(id as string | symbol)\n      });\n      env.instance = env.app.mount(env.root);\n    }\n    env.instance.visible = visible;\n  };\n\n  const formDrawer = {\n    forOpen: (middleware: IMiddleware<IFormProps>) => {\n      if (isFn(middleware)) {\n        env.openMiddlewares.push(middleware);\n      }\n      return formDrawer;\n    },\n    forConfirm: (middleware: IMiddleware<Form>) => {\n      if (isFn(middleware)) {\n        env.confirmMiddlewares.push(middleware);\n      }\n      return formDrawer;\n    },\n    forCancel: (middleware: IMiddleware<Form>) => {\n      if (isFn(middleware)) {\n        env.cancelMiddlewares.push(middleware);\n      }\n      return formDrawer;\n    },\n    open: (props: IFormProps) => {\n      if (env.promise) return env.promise;\n\n      env.promise = new Promise(async (resolve, reject) => {\n        try {\n          props = await loading(drawerProps.loadingText, () =>\n            applyMiddleware(props, env.openMiddlewares)\n          );\n          env.form = env.form || createForm(props);\n        } catch (e) {\n          reject(e);\n        }\n\n        render(\n          true,\n          () => {\n            env.form\n              .submit(async () => {\n                await applyMiddleware(env.form, env.confirmMiddlewares);\n                resolve(toJS(env.form.values));\n                if (drawerProps.beforeClose) {\n                  setTimeout(() => {\n                    drawerProps?.beforeClose?.(() => {\n                      formDrawer.close();\n                    });\n                  });\n                } else {\n                  formDrawer.close();\n                }\n              })\n              .catch(reject);\n          },\n          async () => {\n            await loading(drawerProps.loadingText, () =>\n              applyMiddleware(env.form, env.cancelMiddlewares)\n            );\n\n            if (drawerProps.beforeClose) {\n              drawerProps.beforeClose(() => {\n                formDrawer.close();\n              });\n            } else {\n              formDrawer.close();\n            }\n          }\n        );\n      });\n      return env.promise;\n    },\n    close: () => {\n      if (!env.root) return;\n      render(false);\n    }\n  };\n\n  return formDrawer as never;\n}\n\nconst FormDrawerFooter = defineComponent({\n  name: \"FFormDrawerFooter\",\n  setup(props, { slots }) {\n    return () => {\n      // 临时解决方案\n      if (document.querySelector(`#${PORTAL_TARGET_NAME}`)) {\n        return h(\n          Teleport,\n          {\n            to: `#${PORTAL_TARGET_NAME}`\n          },\n          slots\n        );\n      } else {\n        return null;\n      }\n    };\n  }\n});\n\nFormDrawer.Footer = FormDrawerFooter;\nFormDrawer.Portal = createPortalProvider(\"form-drawer\");\n\nexport default FormDrawer;\n"],"names":["title","drawerProps","props"],"mappings":"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"}