{"version":3,"file":"main.mjs","sources":["../../../../../packages/components/multiple-form/src/main.tsx"],"sourcesContent":["import {\n  defineComponent,\n  onBeforeUnmount,\n  shallowRef,\n  watch,\n  inject\n} from 'vue'\nimport { useNamespace } from '@element-ultra/hooks'\nimport { multipleFormEmits, multipleFormProps } from './type'\nimport { ElTable } from '@element-ultra/components/table'\nimport { ElFormDialog } from '@element-ultra/components/form-dialog'\nimport { ElForm } from '@element-ultra/components/form'\nimport useRows from './use-rows'\nimport useColumns from './use-columns'\nimport useInlineEdit from './use-inline-edit'\nimport useDialogEdit from './use-dialog-edit'\nimport { flatTree } from './utils'\nimport { formInjectionKey } from '@element-ultra/tokens'\n\nexport default defineComponent({\n  name: 'ElMultipleForm',\n\n  inheritAttrs: false,\n\n  props: multipleFormProps,\n\n  emits: multipleFormEmits,\n\n  setup(props, { emit, slots }) {\n    const ns = useNamespace('multiple-form')\n\n    // 表格引用\n    const tableRef = shallowRef<InstanceType<typeof ElTable>>()\n\n    // 行数据\n    const { root, delRow, find, insertTo, update, emitChange } = useRows({\n      props,\n      emit,\n      tableRef\n    })\n\n    // 弹框编辑\n    const { dialog, submit, form, rules, open } = useDialogEdit({\n      props,\n      insertTo,\n      root,\n      emit\n    })\n\n    // 行内编辑\n    const { errorTips, validate, clearValidate } = useInlineEdit({\n      props\n    })\n\n    /** 列 */\n    const { cols, handleCreate } = useColumns({\n      props,\n      ns,\n      errorTips,\n      root,\n      slots,\n      tableRef,\n      validate,\n      emit,\n      open,\n      delRow,\n      insertTo,\n      emitChange\n    })\n\n    const changeDialog = (visible: boolean) => {\n      dialog.visible = visible\n    }\n\n    // 计算表格的高度\n\n    /** title和tools的累积高度 */\n    const accHeight = shallowRef(0)\n    const titleDom = shallowRef<HTMLElement>()\n    const toolsDom = shallowRef<HTMLElement>()\n\n    const obs = new ResizeObserver(entries => {\n      accHeight.value = entries.reduce(\n        (acc, cur) => acc + cur.contentRect.height,\n        0\n      )\n    })\n\n    watch(titleDom, (dom, oldDom) => {\n      oldDom && obs.unobserve(oldDom)\n      dom && obs.observe(dom)\n    })\n\n    watch(toolsDom, (dom, oldDom) => {\n      oldDom && obs.unobserve(oldDom)\n      dom && obs.observe(dom)\n    })\n\n    onBeforeUnmount(() => {\n      titleDom.value && obs.unobserve(titleDom.value)\n      toolsDom.value && obs.unobserve(toolsDom.value)\n      obs.disconnect()\n    })\n\n    // 尝试往formDialog, page组件中注册自己\n    const formInjection = inject(formInjectionKey, null)\n\n    const exposed = {\n      /** 校验数据 */\n      validate: () => validate(root.children!)\n    }\n\n    if (formInjection) {\n      formInjection.addMultipleForm?.(exposed)\n\n      onBeforeUnmount(() => {\n        formInjection.deleteMultipleForm?.(exposed)\n      })\n    }\n\n    return {\n      ns,\n      changeDialog,\n      /** 查找数据 */\n      find,\n      /** 删除数据 */\n      delete: delRow,\n      /** 插入数据 */\n      insertTo,\n      /** 更新数据 */\n      update,\n      ...exposed,\n      /** 清楚校验 */\n      clearValidate,\n      open,\n      /** 新增 */\n      handleCreate,\n      cols,\n      root,\n      submit,\n      form,\n      rules,\n      dialog,\n      slots,\n      /** 表格ref */\n      tableRef,\n      toolsDom,\n      titleDom,\n      accHeight\n    }\n  },\n\n  render() {\n    const {\n      title,\n      ns,\n      cols,\n      root,\n      dialog,\n      form,\n      submit,\n      changeDialog,\n      handleCreate,\n      dialogWidth,\n      rules,\n      slots,\n      accHeight,\n      mode,\n      disabled,\n      tree\n    } = this\n\n    const slotsIn: Record<string, () => any> = {}\n\n    if (!disabled && this.actionAdd) {\n      slotsIn['append'] = () => (\n        <div class={ns.e('btn-add')} onClick={handleCreate}>\n          <span>新 增</span>\n        </div>\n      )\n    }\n\n    return (\n      <>\n        <div {...this.$attrs} class={ns.b()}>\n          {title ? (\n            <div class={ns.e('title')} ref='titleDom'>\n              {title}\n            </div>\n          ) : null}\n          {slots.tools ? (\n            <div class={ns.e('tools')} ref='toolsDom'>\n              {slots.tools()}\n            </div>\n          ) : null}\n\n          <ElTable\n            columns={cols}\n            data={tree ? flatTree(root.children!) : root.children}\n            ref='tableRef'\n            rowClass={this.rowClass}\n            style={{\n              height: (this.$attrs.style as any)?.height\n                ? `calc(100% - ${accHeight}px)`\n                : undefined\n            }}\n            rowKey='uid'\n            v-slots={slotsIn}\n          ></ElTable>\n        </div>\n\n        {mode === 'dialog' ? (\n          <ElFormDialog\n            modelValue={dialog.visible}\n            onUpdate:modelValue={changeDialog}\n            title={dialog.title}\n            confirm={submit}\n            continue={dialog.type === 'create'}\n            width={dialogWidth}\n          >\n            <ElForm data={form} rules={rules} label-width='100px'>\n              {slots.default?.({ form })}\n            </ElForm>\n\n            {slots.dialog?.({ form })}\n          </ElFormDialog>\n        ) : null}\n      </>\n    )\n  }\n})\n"],"names":["name","inheritAttrs","props","multipleFormProps","emits","multipleFormEmits","setup","emit","slots","ns","useNamespace","tableRef","shallowRef","root","delRow","find","insertTo","update","emitChange","useRows","dialog","submit","form","rules","open","useDialogEdit","errorTips","validate","clearValidate","useInlineEdit","cols","handleCreate","useColumns","changeDialog","visible","accHeight","titleDom","toolsDom","obs","ResizeObserver","entries","value","reduce","acc","cur","contentRect","height","watch","dom","oldDom","unobserve","observe","onBeforeUnmount","disconnect","formInjection","inject","formInjectionKey","exposed","children","addMultipleForm","deleteMultipleForm","delete","render","title","dialogWidth","mode","disabled","tree","slotsIn","actionAdd","_createVNode","e","_createTextVNode","_Fragment","_mergeProps","$attrs","b","tools","ElTable","flatTree","rowClass","style","undefined","ElFormDialog","type","default","ElForm"],"mappings":"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"}