{"version":3,"file":"useMultiHeader.mjs","sources":["../../../src/table/hooks/useMultiHeader.ts"],"sourcesContent":["/**\n * 多级表头相关逻辑\n ** */\n\nimport { RowspanColspan } from '../type';\nimport { BaseTableColumns, ThRowspanAndColspan } from '../interface';\n\n// 获取节点深度，即表头总层级\nexport function getNodeDepth(columns: BaseTableColumns, depthMap: Map<any, number>, depth = 1): number {\n  let maxDepth = depth;\n  // 树形结构递归已有较多函数上下文，此处不使用 forEach 迭代\n  for (let i = 0, len = columns.length; i < len; i++) {\n    const col = columns[i];\n    depthMap.set(col, depth);\n    if (col?.children?.length) {\n      const deep = getNodeDepth(col.children, depthMap, depth + 1);\n      if (deep > maxDepth) {\n        maxDepth = deep;\n      }\n    }\n  }\n  return maxDepth;\n}\n\n// 或当前节点的叶子结点宽度\nexport function getChildrenNodeWidth(node: BaseTableColumns[0], count = 0) {\n  let countNew = count;\n  const childrenList = node?.children || [];\n  for (let i = 0, len = childrenList.length; i < len; i++) {\n    const item = childrenList[i];\n    if (item.children) {\n      countNew = getChildrenNodeWidth(item, countNew);\n    } else {\n      countNew += 1;\n    }\n  }\n  return countNew;\n}\n\n// 获取多级表头对应的 colspan 和 rowspan，以及叶子节点\nexport function getThRowspanAndColspan(columns: BaseTableColumns) {\n  const depthMap = new Map<any, number>();\n  const columnsDepth = getNodeDepth(columns, depthMap);\n  const rowspanAndColspanMap: ThRowspanAndColspan = new Map();\n  const loop = (nodes: BaseTableColumns, leafColumns: BaseTableColumns) => {\n    for (let i = 0, len = nodes.length; i < len; i++) {\n      const col = nodes[i];\n      const rowspan = col.children ? 1 : columnsDepth - depthMap.get(col) + 1;\n      const colspan = col.children ? getChildrenNodeWidth(col) : 1;\n      // 避免存在 rowspan 或者 colspan 空属性\n      const span: RowspanColspan = {};\n      rowspan > 1 && (span.rowspan = rowspan);\n      colspan > 1 && (span.colspan = colspan);\n      rowspanAndColspanMap.set(col, span);\n      if (col?.children?.length) {\n        loop(col.children, leafColumns);\n      } else {\n        leafColumns.push(col);\n      }\n    }\n  };\n  const leafColumns: BaseTableColumns = [];\n  loop(columns, leafColumns);\n  return { rowspanAndColspanMap, leafColumns };\n}\n\n// 表头渲染所需的二维数据\nexport function getThList(columns: BaseTableColumns): Array<BaseTableColumns> {\n  const loop = (nodes: BaseTableColumns, thRows: Array<BaseTableColumns>) => {\n    let thRowData: BaseTableColumns = [];\n    let children: BaseTableColumns = [];\n    for (let i = 0, len = nodes.length; i < len; i++) {\n      const node = nodes[i];\n      const thList = [node];\n      thRowData = thRowData.concat(thList);\n      if (node?.children?.length) {\n        children = children.concat(node.children);\n      }\n    }\n    if (children?.length) {\n      loop(children, thRows);\n    }\n    thRows.push(thRowData);\n    return thRowData;\n  };\n  let list: Array<BaseTableColumns> = [];\n  loop(columns, list);\n  list = list.reverse();\n  return list;\n}\n"],"names":["depthMap","maxDepth","countNew","rowspanAndColspanMap","loop","leafColumns","thRowData","thRows","list"],"mappings":"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"}