xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 44.3 kB
Source Map (JSON)
{"version":3,"file":"tree-store.mjs","sources":["../../../../src/_common/js/table/tree-store.ts"],"sourcesContent":["import isUndefined from 'lodash/isUndefined';\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-use-before-define */\nimport get from 'lodash/get';\nimport { isRowSelectedDisabled } from './utils';\nimport { PrimaryTableCol, TableRowState, TableRowValue, TableRowData } from './types';\nimport log from '../log';\n\nexport type TableTreeDataMap = Map<string | number, TableRowState>;\n\nexport interface TableRowModel<T> extends TableRowState<T> {\n setData?: (key: string | number, data: T) => void;\n}\n\nexport interface KeysType {\n rowKey: string;\n childrenKey: string;\n}\n\nexport interface SwapParams<T> {\n current: T;\n target: T;\n currentIndex: number;\n targetIndex: number;\n}\n\nexport const TABLE_TREE_ERROR_CODE_NOT_SAME_LEVEL = {\n code: 1001,\n reason: 'The same level of rows can not be swapped.',\n};\n\n/**\n * 表格树形结构处理器\n * Vue 和 React 可以通用\n * 关键函数有以下几个\n * @toggleExpandData 处理树形结构展开收起\n * @setData 更新当行数据\n * @getData 获取单行数据\n * @remove 移除行数据,及其子节点\n * @appendTo 追加子节点到末尾\n */\nclass TableTreeStore<T extends TableRowData = TableRowData> {\n /** 树形结构 Map 存储 */\n treeDataMap: TableTreeDataMap = new Map();\n\n expandAllRowIndex: 0;\n\n constructor() {\n this.treeDataMap = new Map();\n }\n\n /**\n * 初始化 treeDataMap,不会改变 dataSource\n * @param dataSource 树形数据源\n * @param columns 列配置\n * @param keys 字段别名\n */\n initialTreeStore(dataSource: T[], columns: PrimaryTableCol[], keys: KeysType) {\n this.treeDataMap?.clear();\n this.initialTreeDataMap(this.treeDataMap, dataSource, columns[0], keys);\n }\n\n /**\n * 获取所有节点的唯一标识\n */\n getAllUniqueKeys(data: T[], keys: KeysType, arr: T[] = []) {\n for (let i = 0, len = data.length; i < len; i++) {\n const item = data[i];\n arr.push(get(item, keys.rowKey));\n const children = get(item, keys.childrenKey);\n if (children?.length) {\n this.getAllUniqueKeys(children, keys, arr);\n }\n }\n return arr;\n }\n\n toggleExpandData(p: { rowIndex: number; row: T }, dataSource: T[], keys: KeysType) {\n if (!p) {\n log.error('EnhancedTable', 'the node you want to toggleExpand doest not exist in `data`');\n return dataSource;\n }\n const rowValue = get(p.row, keys.rowKey);\n if (isUndefined(rowValue)) {\n log.error('EnhancedTable', '`rowKey` could be wrong, can not get rowValue from `data` by `rowKey`.');\n return [];\n }\n const childrenNodes = get(p.row, keys.childrenKey);\n // childrenNodes = true,表示懒加载,直接返回,暂时不做展开处理\n if (childrenNodes === true) return dataSource;\n const r = this.treeDataMap.get(rowValue);\n r.rowIndex = p.rowIndex;\n r.expanded = !r.expanded;\n this.treeDataMap.set(rowValue, r);\n return this.updateExpandRow(r, dataSource, keys);\n }\n\n updateExpandRow(changeRow: TableRowState, dataSource: T[], keys: KeysType): T[] {\n const { row, rowIndex, expanded } = changeRow;\n const { treeDataMap } = this;\n const childrenNodes = get(row, keys.childrenKey);\n if (!row || !childrenNodes) return dataSource;\n if (expanded) {\n updateChildrenRowState(treeDataMap, changeRow, expanded, keys);\n updateRowExpandLength(treeDataMap, row, childrenNodes.length, 'expand', keys);\n // eslint-disable-next-line\n dataSource.splice.apply(dataSource, [rowIndex + 1, 0].concat(childrenNodes));\n } else {\n updateChildrenRowState<T>(treeDataMap, changeRow, expanded, keys);\n const len = changeRow.expandChildrenLength || childrenNodes.length;\n updateRowExpandLength(treeDataMap, row, -1 * len, 'fold', keys);\n dataSource.splice(rowIndex + 1, len);\n }\n // 展开或收起后,会影响后续节点的 rowIndex,需同步更新\n updateRowIndex(treeDataMap, dataSource, {\n rowKey: keys.rowKey,\n minRowIndex: rowIndex + 1,\n });\n return dataSource;\n }\n\n /**\n * 获取当前行全部数据\n * @param key 行唯一标识\n * @returns {TableRowState} 当前行数据\n */\n getData(key: TableRowValue): TableRowState {\n return this.treeDataMap.get(key);\n }\n\n /**\n * 更新当前行数据,并返回当前行下标\n * @param rowValue 当前行唯一标识值\n * @param newRowData 新行数据\n * @returns {number} rowIndex 设置的行下标\n */\n updateData(rowValue: TableRowValue, newRowData: T, dataSource: T[], keys: KeysType): number {\n const newRowValue = get(newRowData, keys.rowKey);\n const rowState = this.treeDataMap.get(rowValue);\n // Map 没有查询到,或者查询到的 rowIndex 值为 -1,均表示当前数据不在 dataSource 列表中,未显示在页面中\n if (!rowState || rowState.rowIndex === -1) {\n updateRowData(dataSource, rowValue, newRowData, {\n rowKey: keys.rowKey,\n childrenKey: keys.childrenKey,\n });\n return -1;\n }\n\n // 懒加载处理:children 为 true,则需清空子元素在 map 中的值,而后方便重新加载\n if (get(newRowData, keys.childrenKey) === true) {\n const oldChildren = get(rowState.row, keys.childrenKey);\n if (oldChildren?.length) {\n for (let i = 0, len = oldChildren.length; i < len; i++) {\n const rowValue = get(oldChildren[i], keys.rowKey);\n const state = this.treeDataMap.get(rowValue);\n if (state) {\n this.treeDataMap.delete(rowValue);\n }\n }\n }\n }\n\n const currentRowIndex = rowState.rowIndex;\n rowState.row = newRowData;\n rowState.id = newRowValue;\n\n // 更新父元素中存储的当前元素值\n if (rowState.parent) {\n // 更新直接子元素数组\n const siblings = get(rowState.parent.row, keys.childrenKey);\n const index = siblings.findIndex((item: T) => get(item, keys.rowKey) === rowValue);\n siblings[index] = newRowData;\n }\n\n this.treeDataMap.set(newRowValue, rowState);\n // rowValue 也发生了变化,需移除 旧 rowValue 数据\n if (rowValue !== newRowValue) {\n this.treeDataMap.delete(rowValue);\n }\n return currentRowIndex;\n }\n\n /**\n * 移除指定节点\n * @param key 行唯一标识\n */\n remove(key: TableRowValue, dataSource: T[], keys: KeysType): T[] {\n const r = this.treeDataMap.get(key);\n if (r && r.rowIndex >= 0) {\n // 移除当前节点时,展开的节点的子节点需同步移除\n const removeNumber = (r.expandChildrenLength || 0) + 1;\n dataSource.splice(r.rowIndex, removeNumber);\n\n if (r.parent) {\n const siblings = get(r.parent.row, keys.childrenKey);\n const index = siblings.findIndex((item: TableRowData) => get(item, keys.rowKey) === key);\n siblings.splice(index, 1);\n updateRowExpandLength(this.treeDataMap, r.parent.row, -1 * removeNumber, 'delete', keys);\n }\n\n this.treeDataMap.delete(key);\n\n // 更新 rowIndex 之后的下标\n updateRowIndex(this.treeDataMap, dataSource, {\n minRowIndex: r.rowIndex,\n rowKey: keys.rowKey,\n type: 'remove',\n });\n } else {\n log.warn('EnhancedTable', 'Do not remove this node, which is not appeared.');\n }\n return dataSource;\n }\n\n /**\n * 为当前节点添加子节点,默认添加到最后一个节点。允许添加单个或多个\n * @param rowValue 当前节点唯一标识\n * @param newData 待添加的新节点\n */\n appendTo(rowValue: string | number, newData: T | T[], dataSource: T[], keys: KeysType): T[] {\n const state = this.treeDataMap.get(rowValue);\n if (!this.validateDataExist(state, rowValue)) return dataSource;\n const children: T[] = get(state.row, keys.childrenKey);\n // 子节点不存在,则表示为叶子节点\n const isShowNewNode = state.expanded || !children?.length;\n // 添加多个子节点时,需去除重复子节点\n const tmpData = newData instanceof Array ? newData : [newData];\n const newChildrenData: T[] = [];\n const newChildrenStates: TableRowState[] = [];\n let firstNewChildrenIndex = -1;\n for (let i = 0, len = tmpData.length; i < len; i++) {\n const oneData = tmpData[i];\n const newRowValue = get(oneData, keys.rowKey);\n const mapState = this.treeDataMap.get(newRowValue);\n if (!this.validateDataDoubleExist(mapState, newRowValue)) {\n log.warn('Table', `Duplicated Data \\`${newRowValue}\\` has been removed.`);\n } else {\n const rowIndex = isShowNewNode ? state.rowIndex + (state.expandChildrenLength || 0) + (i + 1) : -1;\n if (i === 0) {\n firstNewChildrenIndex = rowIndex;\n }\n const newState = {\n id: newRowValue,\n row: oneData,\n rowIndex,\n level: state.level + 1,\n expanded: false,\n expandChildrenLength: 0,\n disabled: false,\n path: [...state.path],\n parent: state,\n };\n newState.path = newState.path.concat(newState);\n newChildrenData.push(oneData);\n newChildrenStates.push(newState);\n this.treeDataMap.set(newRowValue, newState);\n }\n }\n if (!newChildrenData.length) return dataSource;\n\n if (children?.length) {\n state.row[keys.childrenKey] = state.row[keys.childrenKey].concat(newChildrenData);\n } else {\n state.row[keys.childrenKey] = newChildrenData;\n state.expanded = true;\n }\n\n // 如果当前节点为展开状态,则需要继续处理\n if (isShowNewNode) {\n dataSource.splice(firstNewChildrenIndex, 0, ...newChildrenData);\n // 更新父元素及祖先元素展开子节点的数量\n const newChildrenCount = newChildrenData.length || 1;\n updateRowExpandLength(this.treeDataMap, state.row, newChildrenCount, 'insert', {\n rowKey: keys.rowKey,\n childrenKey: keys.childrenKey,\n });\n // 更新 rowIndex 之后的下标\n updateRowIndex(this.treeDataMap, dataSource, {\n minRowIndex: firstNewChildrenIndex + newChildrenData.length - 1,\n rowKey: keys.rowKey,\n type: 'add',\n count: 1,\n });\n }\n\n return dataSource;\n }\n\n appendToRoot(newData: T | T[], dataSource: T[], keys: KeysType) {\n const newDataSource = dataSource.concat(newData);\n const tmpNewData = newData instanceof Array ? newData : [newData];\n const dataSourceLen = dataSource.length;\n for (let i = 0, len = tmpNewData.length; i < len; i++) {\n const rowValue = get(tmpNewData[i], keys.rowKey);\n if (!rowValue) {\n log.error('Table', '`rowKey` could be wrong, can not get rowValue from `data` by `rowKey`.');\n continue;\n }\n const state: TableRowState = {\n id: rowValue,\n row: tmpNewData[i],\n rowIndex: dataSourceLen + i,\n level: 0,\n expanded: false,\n expandChildrenLength: 0,\n disabled: false,\n };\n state.path = [state];\n this.treeDataMap.set(rowValue, state);\n }\n return newDataSource;\n }\n\n /**\n * 在当前节点后,插入一个兄弟节点\n * @param rowValue 当前节点唯一标识\n * @param newData 待添加的新节点\n */\n insertAfter(rowValue: string | number, newData: T, dataSource: T[], keys: KeysType): T[] {\n return this.insert(rowValue, newData, dataSource, keys, 'after');\n }\n\n /**\n * 在当前节点前,插入一个兄弟节点\n * @param rowValue 当前节点唯一标识\n * @param newData 待添加的新节点\n */\n insertBefore(rowValue: string | number, newData: T, dataSource: T[], keys: KeysType): T[] {\n return this.insert(rowValue, newData, dataSource, keys, 'before');\n }\n\n insert(rowValue: string | number, newData: T, dataSource: T[], keys: KeysType, type: 'before' | 'after') {\n const state = this.treeDataMap.get(rowValue);\n if (!this.validateDataExist(state, rowValue)) return dataSource;\n const newRowValue = get(newData, keys.rowKey);\n const mapState = this.treeDataMap.get(newRowValue);\n if (!this.validateDataDoubleExist(mapState, newRowValue)) return dataSource;\n const rowIndex = type === 'after' ? state.rowIndex + 1 : state.rowIndex;\n const newState = {\n id: newRowValue,\n row: newData,\n rowIndex,\n level: state.level,\n expanded: false,\n expandChildrenLength: 0,\n disabled: false,\n path: state.path.slice(0, -1),\n parent: state.parent,\n };\n newState.path = newState.path.concat(newState);\n const dataIndex = type === 'after' ? state.rowIndex + (state.expandChildrenLength + 1) : state.rowIndex;\n dataSource.splice(dataIndex, 0, newData);\n const distance = type === 'after' ? 1 : 0;\n if (state.parent) {\n const childrenIndex = state.parent.row[keys.childrenKey].findIndex(\n (t: TableRowData) => rowValue === get(t, keys.rowKey),\n );\n state.parent.row[keys.childrenKey].splice(childrenIndex + distance, 0, newData);\n updateRowExpandLength(this.treeDataMap, state.parent.row, 1, 'insert', keys);\n }\n this.treeDataMap.set(newRowValue, newState);\n\n // 更新 rowIndex 之后的下标\n updateRowIndex(this.treeDataMap, dataSource, {\n rowKey: keys.rowKey,\n minRowIndex: state.rowIndex + 1,\n type: 'add',\n });\n\n return dataSource;\n }\n\n /**\n * 交换数据行\n * @returns 交换失败返回 false\n */\n swapData(\n dataSource: T[],\n params: SwapParams<T>,\n keys: KeysType,\n ): { dataSource: T[]; result: boolean; code?: number; reason?: string } {\n const startIndex = params.currentIndex;\n const endIndex = params.targetIndex;\n if (startIndex === endIndex) return { dataSource, result: true };\n const startRowValue = get(params.current, keys.rowKey);\n const endRowValue = get(params.target, keys.rowKey);\n const startState = this.treeDataMap.get(startRowValue);\n const endState = this.treeDataMap.get(endRowValue);\n if (startState.level !== endState.level) {\n return {\n dataSource,\n result: false,\n code: TABLE_TREE_ERROR_CODE_NOT_SAME_LEVEL.code,\n reason: TABLE_TREE_ERROR_CODE_NOT_SAME_LEVEL.reason,\n };\n }\n const startLastIndex = startIndex + startState.expandChildrenLength + 1;\n const endLastIndex = endIndex + endState.expandChildrenLength + 1;\n const startRowList = dataSource.slice(startIndex, startLastIndex);\n const endRowList = dataSource.slice(endIndex, endLastIndex);\n if (startIndex > endIndex) {\n const middleRowList = dataSource.slice(endLastIndex, startIndex);\n const allSwapList = startRowList.concat(endRowList, middleRowList);\n dataSource.splice(endIndex, allSwapList.length);\n dataSource.splice(endIndex, 0, ...allSwapList);\n updateRowIndex(this.treeDataMap, dataSource, {\n rowKey: keys.rowKey,\n minRowIndex: endIndex,\n maxRowIndex: startLastIndex,\n });\n } else {\n const middleRowList = dataSource.slice(startLastIndex, endIndex);\n const allSwapList = middleRowList.concat(endRowList, startRowList);\n dataSource.splice(startIndex, allSwapList.length);\n dataSource.splice(startIndex, 0, ...allSwapList);\n updateRowIndex(this.treeDataMap, dataSource, {\n rowKey: keys.rowKey,\n minRowIndex: startIndex,\n maxRowIndex: endLastIndex,\n });\n }\n\n // 交换父元素中的两个元素位置\n if (startState.parent) {\n const children = startState.parent.row[keys.childrenKey];\n let count = 0;\n let targetIndex = -1;\n let currentIndex = -1;\n for (let i = 0, len = children.length; i < len; i++) {\n if (get(children[i], keys.rowKey) === startRowValue) {\n targetIndex = i;\n count += 1;\n }\n if (get(children[i], keys.rowKey) === endRowValue) {\n currentIndex = i;\n count += 1;\n }\n if (count >= 2) break;\n }\n children[targetIndex] = params.target;\n children[currentIndex] = params.current;\n }\n\n return { dataSource, result: true };\n }\n\n /**\n * 展开所有节点\n */\n expandAll(dataSource: T[], keys: KeysType) {\n this.expandAllRowIndex = 0;\n const expandLoop = (\n dataSource: T[],\n keys: KeysType,\n newData: T[] = [],\n parentExpanded = false,\n parent: TableRowState = null,\n ) => {\n for (let i = 0, len = dataSource.length; i < len; i++) {\n const item = dataSource[i];\n const rowValue = get(item, keys.rowKey);\n const state = this.treeDataMap.get(rowValue);\n const children = get(item, keys.childrenKey);\n const originalExpanded = state.expanded;\n state.rowIndex = this.expandAllRowIndex;\n if (children !== true && children?.length) {\n state.expanded = true;\n }\n state.expandChildrenLength = children?.length || 0;\n this.expandAllRowIndex += 1;\n if (!parentExpanded) {\n newData.push(item);\n }\n this.treeDataMap.set(rowValue, state);\n if (children?.length && !originalExpanded) {\n // 同步更新父元素的展开数量\n let tmpParent = parent;\n while (tmpParent?.row) {\n tmpParent.expandChildrenLength += children.length;\n this.treeDataMap.set(tmpParent.id, tmpParent);\n tmpParent = tmpParent.parent;\n }\n // 继续子元素\n expandLoop(children, keys, newData, originalExpanded, state);\n }\n }\n return newData;\n };\n return expandLoop(dataSource, keys);\n }\n\n /**\n * 收起所有节点\n */\n foldAll(dataSource: T[], keys: KeysType) {\n const newData: T[] = [];\n for (let i = 0, len = dataSource.length; i < len; i++) {\n const item = dataSource[i];\n const rowValue = get(item, keys.rowKey);\n const state = this.treeDataMap.get(rowValue);\n state.rowIndex = state.level === 0 ? i : -1;\n state.expanded = false;\n state.expandChildrenLength = 0;\n if (state.level === 0) {\n newData.push(item);\n }\n const children = get(item, keys.childrenKey);\n if (children?.length) {\n this.foldAll(children, keys);\n }\n }\n return newData;\n }\n\n /** 获取整个树形结构 */\n getTreeNode(dataSource: T[], keys: KeysType): T[] {\n // let isStarted = false;\n const treeData: T[] = [];\n for (let i = 0, len = dataSource.length; i < len; i++) {\n const item = dataSource[i];\n const rowValue = get(item, keys.rowKey);\n const state = this.treeDataMap.get(rowValue);\n // 只需要压入第一层数据\n if (state.level === 0) {\n treeData.push(item);\n }\n }\n return treeData;\n }\n\n /**\n * 获取展开的树形节点\n * @param dataSource 平铺的树形结构数据\n * @param keys 行唯一标识和子节点的字段名\n * @param type 'unique' 标识获取展开节点的行唯一标识值,'data' 表示获取展开节点的数据,'all' 表示获取行节点包含展开状态的全部数据\n * @returns 展开的树形节点\n */\n getTreeExpandedRow(dataSource: T[], keys: KeysType, type: 'unique' | 'data' | 'all' = 'data') {\n const arr: (T | any)[] = [];\n dataSource.forEach((item) => {\n const rowValue = get(item, keys.rowKey);\n const rowState = this.treeDataMap.get(rowValue);\n if (!rowState.expanded) return;\n if (type === 'unique') {\n arr.push(rowValue);\n } else if (type === 'data') {\n arr.push(item);\n } else {\n arr.push(rowState);\n }\n });\n return arr;\n }\n\n /**\n * 初始化树形结构 Map\n * @param treeDataMap 树形结构 Map\n * @param dataSource 数据源\n * @param column 树形结构列\n * @param keys 字段映射关系\n * @param level 层级\n * @param parent 父元素\n * @returns void\n */\n initialTreeDataMap(\n treeDataMap: TableTreeDataMap,\n dataSource: T[],\n column: PrimaryTableCol,\n keys: KeysType,\n level = 0,\n parent: TableRowState = null,\n ) {\n for (let i = 0, len = dataSource.length; i < len; i++) {\n const item = dataSource[i];\n const rowValue = get(item, keys.rowKey);\n if (isUndefined(rowValue)) {\n log.error('EnhancedTable', '`rowKey` could be wrong, can not get rowValue from `data` by `rowKey`.');\n return;\n }\n const children = get(item, keys.childrenKey);\n const state: TableRowState = {\n id: rowValue,\n row: item,\n rowIndex: level === 0 ? i : -1,\n level,\n expanded: false,\n expandChildrenLength: 0,\n disabled: isRowSelectedDisabled(column, item, i),\n parent,\n };\n state.path = parent ? parent.path.concat(state) : [state];\n treeDataMap.set(rowValue, state);\n if (children?.length) {\n this.initialTreeDataMap(treeDataMap, children, column, keys, level + 1, state);\n }\n }\n }\n\n // column.checkProps 和 column.disabled 会影响行的禁用状态,因此当列发生变化时,需要重置禁用状态\n updateDisabledState(dataSource: T[], column: PrimaryTableCol, keys: KeysType) {\n for (let i = 0, len = dataSource.length; i < len; i++) {\n const item = dataSource[i];\n const rowValue = get(item, keys.rowKey);\n if (isUndefined(rowValue)) {\n log.error('EnhancedTable', '`rowKey` could be wrong, can not get rowValue from `data` by `rowKey`.');\n return;\n }\n const state = this.treeDataMap.get(rowValue);\n state.disabled = isRowSelectedDisabled(column, item, i);\n this.treeDataMap.set(rowValue, state);\n const children = get(item, keys.childrenKey);\n if (children?.length) {\n this.updateDisabledState(children, column, keys);\n }\n }\n }\n\n /**\n * 校验数据合法性\n */\n validateDataExist(state: TableRowState, rowValue: string | number) {\n if (!state) {\n log.warn('EnhancedTable', `${rowValue} does not exist.`);\n return false;\n }\n return true;\n }\n\n /**\n * 校验数据是否已存在\n */\n validateDataDoubleExist(state: TableRowState, rowValue: string | number) {\n if (state) {\n log.warn('EnhancedTable', `Duplicated Key. ${rowValue} already exists.`);\n return false;\n }\n return true;\n }\n}\n\nexport default TableTreeStore;\n\n/**\n * 更新展开的子节点数量\n * @param rowSate 行数据和状态\n * @param distance 需要调整的展开子节点长度数量,展开时增加,收起时减少。值为负数,表示减\n * @param expanded 展开/收起\n */\nexport function updateRowExpandLength(\n treeDataMap: TableTreeDataMap,\n row: TableRowData,\n distance: number,\n type: 'expand' | 'fold' | 'delete' | 'insert',\n keys: KeysType,\n) {\n let tmp = row;\n while (tmp) {\n const state = treeDataMap.get(get(tmp, keys.rowKey));\n const expandLen = (state.expandChildrenLength || 0) + distance;\n state.expandChildrenLength = Math.max(0, expandLen);\n tmp = state?.parent?.row;\n }\n // 如果是收起状态,子节点需全部收起,清空子节点展开行数量,设置 expandChildrenLength 为 0\n if (type === 'fold') {\n clearRowExpandLength(treeDataMap, row, keys);\n }\n}\n\nexport function clearRowExpandLength<T>(treeDataMap: TableTreeDataMap, row: T, keys: KeysType) {\n const children = get(row, keys.childrenKey);\n if (children?.length) {\n children.forEach((item: T[]) => {\n const state = treeDataMap.get(get(item, keys.rowKey));\n if (!state) return;\n state.expandChildrenLength = 0;\n clearRowExpandLength(treeDataMap, state.row, keys);\n });\n }\n}\n\n/**\n * 更新子节点行状态,行数据、父节点、层级、路径等数据\n * @param rowState 行状态数据\n * @param expanded 展开或收起\n * @param keys\n */\nexport function updateChildrenRowState<T>(\n treeDataMap: TableTreeDataMap,\n rowState: TableRowState,\n expanded: boolean,\n keys: KeysType,\n) {\n const { row, rowIndex } = rowState;\n const childrenNodes = get(row, keys.childrenKey);\n childrenNodes.forEach((item: T, kidRowIndex: number) => {\n const rowValue = get(item, keys.rowKey);\n const index = expanded ? rowIndex + 1 + kidRowIndex : -1;\n const curState = treeDataMap.get(rowValue);\n const newState: TableRowState = {\n ...curState,\n row: item,\n rowIndex: index,\n expanded: false,\n parent: rowState,\n };\n treeDataMap.set(rowValue, newState);\n // 父节点展开,子节点不一定展开;父节点收起,则所有子节点收起\n if (!expanded) {\n const children = get(item, keys.childrenKey);\n if (children?.length) {\n updateChildrenRowState(\n treeDataMap,\n {\n ...newState,\n rowIndex: -1,\n expanded: false,\n } as any,\n expanded,\n keys,\n );\n }\n }\n });\n}\n\nexport function updateRowData<T extends TableRowData = TableRowData>(\n data: T[],\n key: string | number,\n newData: T,\n keys: KeysType,\n) {\n for (let i = 0, len = data.length; i < len; i++) {\n const item = data[i];\n if (get(item, keys.rowKey) === key) {\n // eslint-disable-next-line no-param-reassign\n data[i] = newData;\n return;\n }\n const children: T[] = get(item, keys.childrenKey) || [];\n if (children?.length) {\n updateRowData(children, key, newData, keys);\n }\n }\n}\n\nexport function updateRowIndex<T>(\n treeDataMap: TableTreeDataMap,\n dataSource: T[],\n extra: {\n rowKey: string;\n minRowIndex?: number;\n maxRowIndex?: number;\n type?: 'add' | 'remove';\n count?: number;\n },\n) {\n const start = extra.minRowIndex || 0;\n const end = extra.maxRowIndex || dataSource.length;\n for (let rowIndex = start; rowIndex < end; rowIndex++) {\n const item = dataSource[rowIndex];\n const state = treeDataMap.get(get(item, extra.rowKey));\n if (!state) {\n log.warn('Table', 'tree map went wrong');\n }\n state.rowIndex = rowIndex + (extra?.count || 1) - 1;\n }\n}\n\nexport type TreeDataMapType = InstanceType<typeof TableTreeStore>['treeDataMap'];\n"],"names":["code","reason","_classCallCheck","_defineProperty","_createClass","value","log","isUndefined","r","updateRowExpandLength","dataSource","updateRowIndex","updateRowData","get","siblings","type","firstNewChildrenIndex","id","row","rowIndex","level","expanded","expandChildrenLength","disabled","path","parent","newChildrenData","newChildrenStates","minRowIndex","count","state","result","maxRowIndex","targetIndex","currentIndex","children","newData","tmpParent","treeData","arr","treeDataMap","tmp","clearRowExpandLength","childrenNodes","updateChildrenRowState","data"],"mappings":"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"}