xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 20.3 kB
Source Map (JSON)
{"version":3,"file":"useTreeData.mjs","sources":["../../../src/table/hooks/useTreeData.tsx"],"sourcesContent":["import { SetupContext, ref, watch, toRefs, onUnmounted, computed, h, shallowRef } from 'vue';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport TableTreeStore, { SwapParams } from '../../_common/js/table/tree-store';\nimport {\n TdEnhancedTableProps,\n PrimaryTableCol,\n TableRowData,\n TableRowValue,\n TableRowState,\n PrimaryTableCellParams,\n} from '../type';\nimport useClassName from './useClassName';\nimport { renderCell } from '../tr';\nimport { useConfig } from '../../hooks/useConfig';\nimport { useTNodeDefault } from '../../hooks';\n\nexport default function useTreeData(props: TdEnhancedTableProps, context: SetupContext) {\n const { data, columns } = toRefs(props);\n const { t, globalConfig } = useConfig('table');\n\n const store = ref(new TableTreeStore());\n const treeNodeCol = shallowRef<PrimaryTableCol>();\n const dataSource = ref<TdEnhancedTableProps['data']>([]);\n const { tableTreeClasses } = useClassName();\n const renderTNode = useTNodeDefault();\n\n const rowDataKeys = computed(() => ({\n rowKey: props.rowKey || 'id',\n childrenKey: props.tree?.childrenKey || 'children',\n }));\n\n const checkedColumn = computed(() => columns.value.find((col) => col.colKey === 'row-select'));\n\n watch(checkedColumn, (column) => {\n if (!store.value) return;\n store.value.updateDisabledState(dataSource.value, column, rowDataKeys.value);\n });\n\n const foldIcon = (context: PrimaryTableCellParams<TableRowData>) => {\n const params = { ...context, type: 'fold' };\n const defaultFoldIcon = t(globalConfig.value.treeExpandAndFoldIcon, h, params) || <icon-ri-checkbox-indeterminate-line />;\n return renderTNode('treeExpandAndFoldIcon', {\n defaultNode: defaultFoldIcon,\n params,\n });\n };\n\n const expandIcon = (context: PrimaryTableCellParams<TableRowData>) => {\n const params = { ...context, type: 'expand' };\n const defaultExpandIcon = t(globalConfig.value.treeExpandAndFoldIcon, h, params) || <icon-ri-add-box-line />;\n return renderTNode('treeExpandAndFoldIcon', {\n defaultNode: defaultExpandIcon,\n params,\n });\n };\n\n const uniqueKeys = computed(() => store.value?.getAllUniqueKeys(data.value, rowDataKeys.value)?.join() || '');\n\n watch(\n [uniqueKeys],\n () => {\n if (!data.value) return;\n // 如果没有树形解构,则不需要相关逻辑\n if (!props.tree) {\n dataSource.value = data.value;\n return;\n }\n resetData(data.value);\n },\n { immediate: true },\n );\n\n // 不能启用这部分代码。如果启用,会导致选中树形结构子节点时数据被重置,全部节点收起\n // watch([columns, rowDataKeys], ([columns, rowDataKeys]) => {\n // store.value.initialTreeStore(data.value, columns, rowDataKeys);\n // });\n\n onUnmounted(() => {\n if (!props.tree) return;\n store.value.treeDataMap?.clear();\n store.value = null;\n });\n\n watch(\n () => [columns, props.tree?.treeNodeColumnIndex],\n () => {\n treeNodeCol.value = getTreeNodeColumnCol();\n },\n { immediate: true },\n );\n\n function resetData(data: TableRowData[]) {\n let newVal = cloneDeep(data);\n store.value.initialTreeStore(newVal, props.columns, rowDataKeys.value);\n if (props.tree?.defaultExpandAll) {\n newVal = store.value.expandAll(newVal, rowDataKeys.value);\n }\n dataSource.value = newVal;\n }\n\n function getTreeNodeStyle(level: number) {\n if (level === undefined) return;\n const indent = props.tree?.indent === undefined ? 24 : props.tree?.indent;\n // 默认 1px 是为了临界省略\n return indent ? { paddingLeft: `${level * indent || 1}px` } : {};\n }\n\n /**\n * 组件实例方法,展开或收起某一行\n * @param p 行数据\n */\n function toggleExpandData(p: { row: TableRowData; rowIndex: number }, trigger?: 'expand-fold-icon' | 'row-click') {\n const currentData = { ...p };\n if (p.row.__VIRTUAL_SCROLL_INDEX !== undefined) {\n currentData.rowIndex = p.row.__VIRTUAL_SCROLL_INDEX;\n }\n dataSource.value = [...store.value.toggleExpandData(currentData, dataSource.value, rowDataKeys.value)];\n const rowValue = get(p.row, rowDataKeys.value.rowKey);\n const rowState = store.value?.treeDataMap?.get(rowValue);\n props.onTreeExpandChange?.({\n row: p.row,\n rowIndex: p.rowIndex,\n rowState,\n trigger,\n });\n }\n\n function getTreeNodeColumnCol() {\n const { columns } = props;\n let treeNodeColumnIndex = props.tree?.treeNodeColumnIndex || 0;\n // type 存在,则表示表格内部渲染的特殊列,比如:展开行按钮、复选框、单选按钮等,不能作为树结点列。因此树结点展开列向后顺移\n while (\n columns[treeNodeColumnIndex]?.type ||\n columns[treeNodeColumnIndex]?.colKey === '__EXPAND_ROW_ICON_COLUMN__'\n ) {\n treeNodeColumnIndex += 1;\n }\n return columns[treeNodeColumnIndex];\n }\n\n function formatTreeColumn(col: PrimaryTableCol): PrimaryTableCol {\n if (!props.tree || col.colKey !== treeNodeCol.value.colKey) return col;\n const newCol = { ...treeNodeCol.value };\n newCol.cell = (h, p) => {\n const cellInfo = renderCell({ ...p, col: { ...treeNodeCol.value } }, context.slots, {\n cellEmptyContent: props.cellEmptyContent,\n });\n const currentState = store.value.treeDataMap.get(get(p.row, rowDataKeys.value.rowKey));\n const colStyle = getTreeNodeStyle(currentState?.level);\n const classes = { [tableTreeClasses.inlineCol]: !!col.ellipsis };\n const childrenNodes = get(p.row, rowDataKeys.value.childrenKey);\n if ((childrenNodes && childrenNodes instanceof Array) || childrenNodes === true) {\n const iconNode = store.value.treeDataMap.get(get(p.row, rowDataKeys.value.rowKey))?.expanded\n ? foldIcon(p)\n : expandIcon(p);\n return (\n <div class={[tableTreeClasses.col, classes]} style={colStyle}>\n {!!(childrenNodes.length || childrenNodes === true) && (\n <span\n class={tableTreeClasses.icon}\n onClick={(e: MouseEvent) => {\n toggleExpandData(p, 'expand-fold-icon');\n e.stopPropagation();\n }}\n >\n {iconNode}\n </span>\n )}\n {cellInfo}\n </div>\n );\n }\n return (\n <div style={colStyle} class={[classes, tableTreeClasses.leafNode]}>\n <span class={tableTreeClasses.icon}></span>\n {cellInfo}\n </div>\n );\n };\n // 树形节点会显示操作符号 [+] 和 [-],但省略显示的浮层中不需要操作符\n if (newCol.ellipsis === true) {\n newCol.ellipsis = (h, p) => renderCell({ ...p, col: { ...treeNodeCol.value } }, context.slots);\n }\n return newCol;\n }\n\n /**\n * 对外暴露的组件实例方法,设置行数据,自动刷新界面\n * @param key 当前行唯一标识值\n * @param newRowData 新行数据\n */\n function setData<T>(key: TableRowValue, newRowData: T) {\n const rowIndex = store.value.updateData(key, newRowData, dataSource.value, rowDataKeys.value);\n const newData = [...dataSource.value];\n newData[rowIndex] = newRowData;\n dataSource.value = newData;\n }\n\n /**\n * 对外暴露的组件实例方法,获取当前行全部数据\n * @param key 行唯一标识\n * @returns {TableRowState} 当前行数据\n */\n function getData(key: TableRowValue): TableRowState {\n return store.value.getData(key);\n }\n\n /**\n * 对外暴露的组件实例方法,移除指定节点\n * @param key 行唯一标识\n */\n function remove(key: TableRowValue) {\n // 引用传值,可自动更新 dataSource。(dataSource 本是内部变量,可以在任何地方进行任何改变)\n dataSource.value = [...store.value.remove(key, dataSource.value, rowDataKeys.value)];\n }\n\n /**\n * 对外暴露的组件实例方法,为当前节点添加子节点,默认添加到最后一个节点\n * @param key 当前节点唯一标识,值为空,则表示给根节点添加元素\n * @param newData 待添加的新节点\n */\n function appendTo<T>(key: TableRowValue = '', newData: T | T[]) {\n if (!key) {\n dataSource.value = store.value.appendToRoot(newData, dataSource.value, rowDataKeys.value);\n return;\n }\n // 引用传值,可自动更新 dataSource。(dataSource 本是内部变量,可以在任何地方进行任何改变)\n dataSource.value = [...store.value.appendTo(key, newData, dataSource.value, rowDataKeys.value)];\n }\n\n /**\n * 对外暴露的组件实例方法,当前节点之后,插入节点\n */\n function insertAfter<T>(rowValue: TableRowValue, newData: T) {\n dataSource.value = [...store.value.insertAfter(rowValue, newData, dataSource.value, rowDataKeys.value)];\n }\n\n /**\n * 对外暴露的组件实例方法,当前节点之后,插入节点\n */\n function insertBefore<T>(rowValue: TableRowValue, newData: T) {\n dataSource.value = [...store.value.insertBefore(rowValue, newData, dataSource.value, rowDataKeys.value)];\n }\n\n /**\n * 对外暴露的组件实例方法,展开所有节点\n */\n function expandAll() {\n dataSource.value = [...store.value.expandAll(dataSource.value, rowDataKeys.value)];\n }\n\n /**\n * 对外暴露的组件实例方法,收起所有节点\n */\n function foldAll() {\n dataSource.value = [...store.value.foldAll(dataSource.value, rowDataKeys.value)];\n }\n\n /**\n * 对外暴露的组件实例方法,交换行数据\n */\n function swapData(params: SwapParams<TableRowData>) {\n const r = store.value.swapData(dataSource.value, params, rowDataKeys.value);\n if (r.result) {\n dataSource.value = [...r.dataSource];\n } else {\n const params = {\n code: r.code,\n reason: r.reason,\n };\n props.onAbnormalDragSort?.(params);\n }\n }\n\n /**\n * 对外暴露的组件实例方法,获取全部数据的树形结构\n * @param key 节点唯一标识\n */\n function getTreeNode() {\n return store.value.getTreeNode(dataSource.value, rowDataKeys.value);\n }\n\n /**\n * 对外暴露的组件实例方法,获取树形结构展开的节点\n */\n function getTreeExpandedRow(type: 'unique' | 'data' | 'all' = 'data') {\n return store.value.getTreeExpandedRow(dataSource.value, rowDataKeys.value, type);\n }\n\n return {\n store,\n rowDataKeys,\n dataSource,\n swapData,\n setData,\n getData,\n remove,\n appendTo,\n insertAfter,\n insertBefore,\n formatTreeColumn,\n toggleExpandData,\n expandAll,\n foldAll,\n getTreeNode,\n resetData,\n getTreeExpandedRow,\n };\n}\n"],"names":["rowKey","childrenKey","watch","store","type","_createVNode","_resolveComponent","defaultNode","params","dataSource","resetData","immediate","onUnmounted","treeNodeCol","cloneDeep","newVal","paddingLeft","currentData","get","rowState","trigger","treeNodeColumnIndex","newCol","col","toggleExpandData","newData","rowDataKeys","swapData","setData","getData","remove","appendTo","insertAfter","insertBefore","formatTreeColumn","expandAll","foldAll","getTreeNode","getTreeExpandedRow"],"mappings":"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"}