{"version":3,"file":"dep-92c31517.mjs","sources":["../../../common/js/table/tree-store.ts","../../../components/table/hooks/useTreeDataExpand.ts"],"sourcesContent":["import { isUndefined, get, set } from 'lodash-es';\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-use-before-define */\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 * @param row 行数据\n * @param colKey 列字段\n * @param rowIndex 行下标\n * @param level 层级\n */\nexport function getUniqueRowValue(row: TableRowData, colKey: string, rowIndex: number = 0, level: number = 0) {\n  const rowValue = get(row, colKey);\n  return rowIndex || level ? `${rowValue}_${rowIndex || 0}_${level || 0}}` : rowValue;\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(\n      this.treeDataMap,\n      dataSource,\n      columns.find((col) => col.colKey === 'row-select'),\n      keys\n    );\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(getUniqueRowValue(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  getExpandedChildrenKeys(data: T[], keys: KeysType, arr: (string | number)[] = []) {\n    for (let i = 0, len = data.length; i < len; i++) {\n      const item = data[i];\n      const rowValue = getUniqueRowValue(item, keys.rowKey);\n      const rowState = this.treeDataMap.get(rowValue);\n      if (rowState.expanded) {\n        arr.push(rowValue);\n      }\n      const children = get(item, keys.childrenKey);\n      if (children?.length) {\n        this.getExpandedChildrenKeys(children, keys, arr);\n      }\n    }\n    return arr;\n  }\n\n  expandTreeNode(rowList: (string | number)[], dataSource: T[], keys: KeysType) {\n    if (!rowList.length) return dataSource;\n    rowList.forEach((rowValue) => {\n      const rowState = this.treeDataMap.get(rowValue);\n      if (!rowState) return;\n      this.toggleExpandData({ row: rowState.row as T, rowIndex: rowState.rowIndex }, dataSource, keys, 'expand');\n    });\n    return dataSource;\n  }\n\n  foldTreeNode(rowList: (string | number)[], dataSource: T[], keys: KeysType) {\n    if (!rowList.length) return dataSource;\n    rowList.forEach((rowValue) => {\n      const rowState = this.treeDataMap.get(rowValue);\n      if (!rowState) return;\n      this.toggleExpandData({ row: rowState.row as T, rowIndex: rowState.rowIndex }, dataSource, keys, 'fold');\n    });\n    return dataSource;\n  }\n\n  toggleExpandData(p: { rowIndex: number; row: T }, dataSource: T[], keys: KeysType, type?: 'expand' | 'fold') {\n    if (!p) {\n      log.error('EnhancedTable', 'the node toggleExpanded 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    if (type === 'expand' && r.expanded) return dataSource;\n    if (type === 'fold' && !r.expanded) return dataSource;\n    r.rowIndex = 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 = getUniqueRowValue(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 = getUniqueRowValue(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) => getUniqueRowValue(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', 'Can not remove this node, which is not appeared.');\n    }\n    return dataSource;\n  }\n\n  /**\n   * 清除子节点\n   * @param key\n   * @param dataSource\n   * @param keys\n   */\n  removeChildren(key: TableRowValue, dataSource: T[], keys: KeysType): T[] {\n    const r = this.treeDataMap.get(key);\n    if (r && r.rowIndex >= 0) {\n      const removeNumber = r.expandChildrenLength || 0;\n      if (removeNumber) {\n        dataSource.splice(r.rowIndex + 1, removeNumber);\n      }\n      if (r.parent) {\n        updateRowExpandLength(this.treeDataMap, r.parent.row, -1 * removeNumber, 'delete', keys);\n      }\n      r.expandChildrenLength = 0;\n      r.expanded = false;\n      set(r.row, keys.childrenKey, undefined);\n      this.treeDataMap.set(key, r);\n      // 更新 rowIndex 之后的下标\n      if (removeNumber) {\n        updateRowIndex(this.treeDataMap, dataSource, {\n          minRowIndex: r.rowIndex + 1,\n          rowKey: keys.rowKey,\n          type: 'remove',\n        });\n      }\n    } else {\n      log.warn('EnhancedTable', \"Can not remove this node's children, 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 = getUniqueRowValue(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          currentIndex = i;\n          count += 1;\n        }\n        if (get(children[i], keys.rowKey) === endRowValue) {\n          targetIndex = i;\n          count += 1;\n        }\n        if (count >= 2) break;\n      }\n      // 向后拖拽\n      if (currentIndex < targetIndex) {\n        children.splice(targetIndex + 1, 0, params.current);\n        children.splice(currentIndex, 1);\n      } else {\n        // 向前拖拽\n        children.splice(currentIndex, 1);\n        children.splice(targetIndex, 0, params.current);\n      }\n    }\n\n    return { dataSource, result: true };\n  }\n\n  /**\n   * 展开所有节点\n   */\n  expandAll(dataSource: T[], keys: KeysType) {\n    this.expandAllRowIndex = 0;\n    const newData: T[] = [];\n    const expandLoop = (dataSource: T[], keys: KeysType, parent: TableRowState = null) => {\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        state.rowIndex = this.expandAllRowIndex;\n        // children = true is async load\n        if (children !== true && children?.length) {\n          state.expanded = true;\n        }\n        state.expandChildrenLength = children?.length || 0;\n        this.expandAllRowIndex += 1;\n        newData.push(item);\n        this.treeDataMap.set(rowValue, state);\n        if (children?.length) {\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, state);\n        }\n      }\n    };\n    expandLoop(dataSource, keys);\n    return newData;\n  }\n\n  /**\n   * 收起所有节点\n   */\n  foldAll(dataSource: T[], keys: KeysType) {\n    const newData: T[] = [];\n    let index = 0;\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 ? index : -1;\n      state.expanded = false;\n      state.expandChildrenLength = 0;\n      if (state.level === 0) {\n        newData.push(item);\n        index += 1;\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 = getUniqueRowValue(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 function diffExpandedTreeNode(\n  newExpandedNode: (number | string)[] = [],\n  oldExpandedNode: (number | string)[] = []\n) {\n  const removedList: (number | string)[] = [];\n  const addedList: (number | string)[] = [];\n  const newExpandedNodeMap: Map<any, boolean> = new Map();\n  const oldExpandedNodeMap: Map<any, boolean> = new Map();\n  for (let i = 0, len = newExpandedNode.length; i < len; i++) {\n    newExpandedNodeMap.set(newExpandedNode[i], true);\n  }\n  for (let i = 0, len = oldExpandedNode.length; i < len; i++) {\n    oldExpandedNodeMap.set(oldExpandedNode[i], true);\n  }\n  for (let i = 0, len = newExpandedNode.length; i < len; i++) {\n    if (!oldExpandedNodeMap.get(newExpandedNode[i])) {\n      addedList.push(newExpandedNode[i]);\n    }\n  }\n  for (let i = 0, len = oldExpandedNode.length; i < len; i++) {\n    if (!newExpandedNodeMap.get(oldExpandedNode[i])) {\n      removedList.push(oldExpandedNode[i]);\n    }\n  }\n  return {\n    removedList,\n    addedList,\n  };\n}\n\nexport type TreeDataMapType = InstanceType<typeof TableTreeStore>['treeDataMap'];\n","import { ComputedRef, nextTick, ref, Ref, toRefs, watch } from 'vue';\nimport { TdEnhancedTableProps, TableRowData } from '../type';\nimport { useDefaultValue } from '@tdesign/shared-hooks';\nimport TableTreeStore, { diffExpandedTreeNode, getUniqueRowValue } from '@tdesign/common-js/table/tree-store';\nimport { TableTreeExpandType } from '../types';\n\nexport function useTreeDataExpand(\n  props: TdEnhancedTableProps,\n  params: {\n    store: Ref<InstanceType<typeof TableTreeStore>>;\n    dataSource: Ref<TdEnhancedTableProps['data']>;\n    rowDataKeys: ComputedRef<{ rowKey: string; childrenKey: string }>;\n  },\n) {\n  const { store, dataSource, rowDataKeys } = params;\n  const { data, expandedTreeNodes, tree } = toRefs(props);\n\n  const isDefaultExpandAllExecute = ref(false);\n  const isDefaultExpandedTreeNodesExecute = ref(false);\n  const [tExpandedTreeNode, setTExpandedTreeNode] = useDefaultValue(\n    expandedTreeNodes,\n    props.defaultExpandedTreeNodes,\n    props.onExpandedTreeNodesChange,\n    'expandedTreeNodes',\n  );\n\n  const changedExpandTreeNode = ref<{\n    type?: TableTreeExpandType;\n    row?: TableRowData;\n    rowIndex?: number;\n  }>({ type: 'props-change' });\n\n  /**\n   * 对外暴露的组件实例方法，展开所有节点\n   */\n  function expandAll(type: 'expand-all' | 'default-expand-all' = 'expand-all', list?: TableRowData[]) {\n    const newData = list || data.value;\n    dataSource.value = store.value.expandAll(newData, rowDataKeys.value);\n    const expandedNode = dataSource.value.map((t) => getUniqueRowValue(t, rowDataKeys.value.rowKey));\n    setTExpandedTreeNode(expandedNode, {\n      row: undefined,\n      rowState: undefined,\n      rowIndex: undefined,\n      type: 'expand',\n      trigger: type,\n    });\n    changedExpandTreeNode.value.type = 'expand-all';\n  }\n\n  /**\n   * 对外暴露的组件实例方法，收起所有节点\n   */\n  function foldAll() {\n    dataSource.value = [...store.value.foldAll(dataSource.value, rowDataKeys.value)];\n    setTExpandedTreeNode([], {\n      row: undefined,\n      rowState: undefined,\n      rowIndex: undefined,\n      type: 'fold',\n      trigger: 'fold-all',\n    });\n  }\n\n  function onExpandFoldIconClick(\n    p: { row: TableRowData; rowIndex: number },\n    trigger?: 'expand-fold-icon' | 'row-click',\n  ) {\n    const { row, rowIndex } = p;\n    changedExpandTreeNode.value = {\n      type: 'user-reaction-change',\n      ...p,\n    };\n    const rowValue = getUniqueRowValue(row, rowDataKeys.value.rowKey);\n    const rowState = store.value.treeDataMap.get(rowValue);\n    let expandedNodes = [...tExpandedTreeNode.value];\n    if (rowState.expanded) {\n      const expandedChildrenKeys = store.value.getExpandedChildrenKeys([row], rowDataKeys.value);\n      for (let i = 0, len = expandedNodes.length; i < len; i++) {\n        const nodeValue = expandedNodes[i];\n        if (expandedChildrenKeys.includes(nodeValue)) {\n          expandedNodes[i] = undefined;\n        }\n      }\n      expandedNodes = expandedNodes.filter(Boolean);\n    } else {\n      expandedNodes.push(rowValue);\n    }\n    const params = {\n      row,\n      rowIndex,\n      rowState,\n      trigger,\n    };\n    setTExpandedTreeNode(expandedNodes, {\n      ...params,\n      type: rowState.expanded ? 'fold' : 'expand',\n    });\n    props.onTreeExpandChange?.(params);\n  }\n\n  function updateExpandState(\n    data: TableRowData[],\n    tExpandedTreeNode: (string | number)[],\n    oldExpandedTreeNode: (string | number)[] = [],\n  ) {\n    const { addedList, removedList } = diffExpandedTreeNode(tExpandedTreeNode, oldExpandedTreeNode);\n    store.value.expandTreeNode(addedList, data, rowDataKeys.value);\n    store.value.foldTreeNode(removedList, data, rowDataKeys.value);\n    return [...data];\n  }\n\n  watch([tExpandedTreeNode, data], ([tExpandedTreeNode], [oldExpandedTreeNode]) => {\n    if (!store.value.treeDataMap.size || !data.value.length) return;\n    if (changedExpandTreeNode.value.type === 'user-reaction-change') {\n      const { row, rowIndex } = changedExpandTreeNode.value || {};\n      dataSource.value = [...store.value.toggleExpandData({ row, rowIndex }, [...dataSource.value], rowDataKeys.value)];\n    } else if (changedExpandTreeNode.value.type === 'props-change') {\n      updateExpandState(dataSource.value, tExpandedTreeNode, oldExpandedTreeNode);\n    }\n    changedExpandTreeNode.value.type = 'props-change';\n  });\n\n  const updateExpandOnDataChange = (data: TableRowData[]) => {\n    if (tree.value?.defaultExpandAll && !isDefaultExpandAllExecute.value) {\n      expandAll('default-expand-all', [...data]);\n      isDefaultExpandAllExecute.value = true;\n    } else if (tExpandedTreeNode.value?.length) {\n      nextTick(() => {\n        dataSource.value = updateExpandState([...data], tExpandedTreeNode.value, []);\n      });\n    }\n  };\n\n  return {\n    tExpandedTreeNode,\n    isDefaultExpandAllExecute,\n    isDefaultExpandedTreeNodesExecute,\n    expandAll,\n    foldAll,\n    onExpandFoldIconClick,\n    updateExpandOnDataChange,\n  };\n}\n\nexport default useTreeDataExpand;\n"],"names":["TABLE_TREE_ERROR_CODE_NOT_SAME_LEVEL","code","reason","getUniqueRowValue","row","colKey","rowIndex","arguments","length","undefined","level","rowValue","get","concat","TableTreeStore","_classCallCheck","_defineProperty","Map","treeDataMap","_createClass","key","value","initialTreeStore","dataSource","columns","keys","_this$treeDataMap","clear","initialTreeDataMap","find","col","getAllUniqueKeys","data","arr","i","len","item","push","rowKey","children","childrenKey","getExpandedChildrenKeys","rowState","expanded","expandTreeNode","rowList","_this","forEach","toggleExpandData","foldTreeNode","_this2","p","type","_r$rowIndex","log","error","isUndefined","childrenNodes","r","set","updateExpandRow","changeRow","updateChildrenRowState","updateRowExpandLength","splice","apply","expandChildrenLength","updateRowIndex","minRowIndex","getData","updateData","newRowData","newRowValue","updateRowData","oldChildren","state","currentRowIndex","id","parent","siblings","index","findIndex","remove","removeNumber","warn","removeChildren","appendTo","newData","validateDataExist","isShowNewNode","tmpData","Array","newChildrenData","newChildrenStates","firstNewChildrenIndex","oneData","mapState","validateDataDoubleExist","newState","disabled","path","_toConsumableArray","newChildrenCount","count","appendToRoot","newDataSource","tmpNewData","dataSourceLen","insertAfter","insert","insertBefore","slice","dataIndex","distance","childrenIndex","t","swapData","params","startIndex","currentIndex","endIndex","targetIndex","result","startRowValue","current","endRowValue","target","startState","endState","startLastIndex","endLastIndex","startRowList","endRowList","middleRowList","allSwapList","maxRowIndex","expandAll","_this3","expandAllRowIndex","expandLoop","tmpParent","_tmpParent","foldAll","getTreeNode","treeData","getTreeExpandedRow","_this4","column","isRowSelectedDisabled","updateDisabledState","tmp","_state$parent","expandLen","Math","max","clearRowExpandLength","kidRowIndex","curState","_objectSpread","extra","start","end","diffExpandedTreeNode","newExpandedNode","oldExpandedNode","removedList","addedList","newExpandedNodeMap","oldExpandedNodeMap","useTreeDataExpand","props","store","rowDataKeys","_toRefs","toRefs","expandedTreeNodes","tree","isDefaultExpandAllExecute","ref","isDefaultExpandedTreeNodesExecute","_useDefaultValue","useDefaultValue","defaultExpandedTreeNodes","onExpandedTreeNodesChange","_useDefaultValue2","_slicedToArray","tExpandedTreeNode","setTExpandedTreeNode","changedExpandTreeNode","list","expandedNode","map","trigger","onExpandFoldIconClick","_props$onTreeExpandCh","expandedNodes","expandedChildrenKeys","nodeValue","includes","filter","Boolean","onTreeExpandChange","call","updateExpandState","oldExpandedTreeNode","_diffExpandedTreeNode","watch","_ref","_ref2","_ref3","_ref4","size","_ref5","updateExpandOnDataChange","_tree$value","_tExpandedTreeNode$va","defaultExpandAll","nextTick"],"mappings":"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"}