{"version":3,"file":"enhanced-table.mjs","sources":["../../src/table/enhanced-table.tsx"],"sourcesContent":["import { defineComponent, SetupContext, computed, ref, getCurrentInstance } from 'vue';\nimport baseTableProps from './base-table-props';\nimport primaryTableProps from './primary-table-props';\nimport enhancedTableProps from './enhanced-table-props';\nimport PrimaryTable from './primary-table';\nimport { TdEnhancedTableProps, PrimaryTableCol, TableRowData, DragSortContext, TdPrimaryTableProps } from './type';\nimport useTreeData from './hooks/useTreeData';\nimport useTreeSelect from './hooks/useTreeSelect';\nimport get from 'lodash/get';\nimport { ScrollToElementParams } from '../hooks/useVirtualScrollNew';\nimport { usePrefixClass } from '../hooks';\n\nexport default defineComponent({\n  name: 'XEnhancedTable',\n\n  props: {\n    ...baseTableProps,\n    ...primaryTableProps,\n    ...enhancedTableProps,\n  },\n\n  setup(props: TdEnhancedTableProps, context: SetupContext) {\n    const primaryTableRef = ref(null);\n    const { store, dataSource, formatTreeColumn, swapData, ...treeInstanceFunctions } = useTreeData(props, context);\n    const classPrefix = usePrefixClass();\n\n    const treeDataMap = ref(store.value.treeDataMap);\n\n    const { tIndeterminateSelectedRowKeys, onInnerSelectChange } = useTreeSelect(props, treeDataMap);\n\n    // 影响列和单元格内容的因素有：树形节点需要添加操作符 [+] [-]\n    const getColumns = (columns: PrimaryTableCol<TableRowData>[]) => {\n      const arr: PrimaryTableCol<TableRowData>[] = [];\n      for (let i = 0, len = columns.length; i < len; i++) {\n        let item = { ...columns[i] };\n        item = formatTreeColumn(item);\n        if (item.children?.length) {\n          item.children = getColumns(item.children);\n        }\n        // 多级表头和自定义列配置特殊逻辑：要么子节点不存在，要么子节点长度大于 1，方便做自定义列配置\n        if (!item.children || item.children?.length) {\n          arr.push(item);\n        }\n      }\n      return arr;\n    };\n\n    const tColumns = computed(() => {\n      // 暂时只有树形结构需要处理 column.cell\n      const isTreeData = !props.tree || !Object.keys(props.tree).length;\n      return isTreeData ? props.columns : getColumns(props.columns);\n    });\n\n    const onDragSortChange = (params: DragSortContext<TableRowData>) => {\n      if (props.beforeDragSort && !props.beforeDragSort(params)) return;\n      swapData({\n        current: params.current,\n        target: params.target,\n        currentIndex: params.currentIndex,\n        targetIndex: params.targetIndex,\n      });\n      props.onDragSort?.(params);\n    };\n\n    const onEnhancedTableRowClick: TdPrimaryTableProps['onRowClick'] = (p) => {\n      if (props.tree?.expandTreeNodeOnClick) {\n        treeInstanceFunctions.toggleExpandData(\n          {\n            row: p.row,\n            rowIndex: p.index,\n          },\n          'row-click',\n        );\n      }\n      props.onRowClick?.(p);\n    };\n\n    context.expose({\n      store: store.value,\n      dataSource: dataSource.value,\n      ...treeInstanceFunctions,\n      primaryTableRef,\n      validateRowData: (rowValue: any) => {\n        return primaryTableRef.value.validateRowData(rowValue);\n      },\n      validateTableData: () => {\n        return primaryTableRef.value.validateTableData();\n      },\n      clearValidateData: () => {\n        primaryTableRef.value.clearValidateData();\n      },\n      refreshTable: () => {\n        primaryTableRef.value.refreshTable();\n      },\n      scrollToElement: (data: ScrollToElementParams) => {\n        primaryTableRef.value.scrollToElement(data);\n      },\n    });\n\n    return () => {\n      const { vnode } = getCurrentInstance();\n      const enhancedProps: TdPrimaryTableProps = {\n        ...vnode.props,\n        rowKey: props.rowKey || 'id',\n        data: dataSource.value,\n        columns: tColumns.value,\n        // 半选状态节点\n        indeterminateSelectedRowKeys: tIndeterminateSelectedRowKeys.value,\n        // 树形结构不允许本地数据分页\n        disableDataPage: Boolean(props.tree && Object.keys(props.tree).length),\n        onSelectChange: onInnerSelectChange,\n        onDragSort: onDragSortChange,\n        rowClassName: ({ row }) => {\n          const rowValue = get(row, props.rowKey || 'id');\n          const rowState = treeDataMap.value.get(rowValue);\n          if (!rowState) return [props.rowClassName];\n          return [`${classPrefix.value}-table-tr--level-${rowState.level}`, props.rowClassName];\n        },\n      };\n      if (props.tree?.expandTreeNodeOnClick) {\n        enhancedProps.onRowClick = onEnhancedTableRowClick;\n      }\n      // @ts-ignore ref 顺序很重要，如果移动到 v-slots 前面，会让 EnhancedTable 所有实例方法失效，勿动\n      return <PrimaryTable v-slots={context.slots} {...enhancedProps} ref={primaryTableRef} />;\n    };\n  },\n});\n"],"names":["name","props","setup","treeInstanceFunctions","item","arr","swapData","context","primaryTableRef","validateRowData","scrollToElement","rowKey","disableDataPage","onSelectChange","onDragSort","rowClassName","_createVNode","PrimaryTable","_mergeProps"],"mappings":"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"}