{"version":3,"file":"utils.mjs","sources":["../../../../../packages/components/data-table/src/utils.ts"],"sourcesContent":["import { last } from 'lodash'\nimport { shallowReactive } from 'vue'\nimport type { DataTableColumn } from './data-table'\n\nexport interface InternalColumn extends DataTableColumn {\n  index?: number\n  left?: number\n  right?: number\n}\n\nexport interface FixedColumn extends InternalColumn {\n  width: number\n  fixed: 'left' | 'right'\n  index: number\n}\n\nexport interface StaticColumn extends InternalColumn {\n  index: number\n}\n\nexport interface TableHeader {\n  /** 节点数据 */\n  data: InternalColumn\n  /** 子节点 */\n  children?: TableHeader[]\n  /** 父节点 */\n  parent: TableHeader | null\n  /** 深度 */\n  depth: number\n  /** 是否是叶子节点 */\n  isLeaf: boolean\n  /** 以当前节点为根的子树的size */\n  size: number\n  /** 是否是前置通用列 */\n  isPre: boolean\n  /** 节点的索引 */\n  index?: number\n}\n\nconst dataToNodes = (\n  data: DataTableColumn[],\n  depth: number,\n  parent: TableHeader | null = null\n): TableHeader[] => {\n  return data.map(item => {\n    const isLeaf = !item.children?.length\n    return {\n      data: item,\n      parent: parent,\n      depth: depth,\n      isPre: item.key.startsWith('$_'),\n      isLeaf,\n      size: 0\n    }\n  })\n}\n\n/**\n * 广度优先遍历\n * @param treeData 构成树的数据\n * @returns 返回每层的节点\n */\nexport function bfs(treeData: DataTableColumn[]) {\n  // 初始第一层\n  let result = [\n    dataToNodes(\n      treeData.filter(item => item.visible !== false),\n      0\n    )\n  ]\n  let ending = false\n  while (!ending) {\n    // 尝试结束\n    ending = true\n    let nextNodes: TableHeader[] = []\n    // 遍历最后一层\n    last(result)?.forEach(node => {\n      let { children } = node.data\n      if (children) {\n        children = children.filter(item => item.visible !== false)\n      }\n      if (children?.length) {\n        let childrenNodes = dataToNodes(children, node.depth + 1, node)\n        node.children = childrenNodes\n        nextNodes = nextNodes.concat(childrenNodes)\n        // 遍历没有结束, 继续\n        ending = false\n      }\n    })\n\n    nextNodes.length && result.push(nextNodes)\n  }\n\n  // 从最后一层开始从下往上获取所有子树的叶子节点数量\n  let len = result.length\n  while (--len > 0) {\n    result[len].forEach(node => {\n      node.parent!.size += node.size || 1\n    })\n  }\n  return result\n}\n\n/**\n * 将树的节点转化为浅响应对象\n * @param tree 树\n */\nexport function shallowReactiveWithDFS(tree: DataTableColumn) {\n  let ret = shallowReactive(tree)\n  if (tree.children) {\n    ret.children = tree.children.map(item => shallowReactiveWithDFS(item))\n  }\n  return ret\n}\n"],"names":[],"mappings":";;;AAuCA,MAAM,WAAc,GAAA,CAClB,IACA,EAAA,KAAA,EACA,SAA6B,IACX,KAAA;AAClB,EAAO,OAAA,IAAA,CAAK,IAAI,CAAQ,IAAA,KAAA;AA5C1B,IAAA,IAAA,EAAA,CAAA;AA6CI,IAAA,MAAM,MAAS,GAAA,EAAA,CAAC,EAAK,GAAA,IAAA,CAAA,QAAA,KAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAC/B,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,IAAA,CAAK,GAAI,CAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MAC/B,MAAA;AAAA,MACA,IAAM,EAAA,CAAA;AAAA,KACR,CAAA;AAAA,GACD,CAAA,CAAA;AACH,CAAA,CAAA;AAOO,SAAS,IAAI,QAA6B,EAAA;AA9DjD,EAAA,IAAA,EAAA,CAAA;AAgEE,EAAA,IAAI,MAAS,GAAA;AAAA,IACX,WAAA;AAAA,MACE,QAAS,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,MAC9C,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AACA,EAAA,IAAI,MAAS,GAAA,KAAA,CAAA;AACb,EAAA,OAAO,CAAC,MAAQ,EAAA;AAEd,IAAS,MAAA,GAAA,IAAA,CAAA;AACT,IAAA,IAAI,YAA2B,EAAC,CAAA;AAEhC,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAM,CAAA,KAAX,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA;AAC5B,MAAI,IAAA,EAAE,QAAS,EAAA,GAAI,IAAK,CAAA,IAAA,CAAA;AACxB,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,QAAA,GAAW,QAAS,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA,IAAA,CAAK,YAAY,KAAK,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,IAAI,qCAAU,MAAQ,EAAA;AACpB,QAAA,IAAI,gBAAgB,WAAY,CAAA,QAAA,EAAU,IAAK,CAAA,KAAA,GAAQ,GAAG,IAAI,CAAA,CAAA;AAC9D,QAAA,IAAA,CAAK,QAAW,GAAA,aAAA,CAAA;AAChB,QAAY,SAAA,GAAA,SAAA,CAAU,OAAO,aAAa,CAAA,CAAA;AAE1C,QAAS,MAAA,GAAA,KAAA,CAAA;AAAA,OACX;AAAA,KACF,CAAA,CAAA;AAEA,IAAU,SAAA,CAAA,MAAA,IAAU,MAAO,CAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAAA,GAC3C;AAGA,EAAA,IAAI,MAAM,MAAO,CAAA,MAAA,CAAA;AACjB,EAAO,OAAA,EAAE,MAAM,CAAG,EAAA;AAChB,IAAO,MAAA,CAAA,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAQ,IAAA,KAAA;AAC1B,MAAK,IAAA,CAAA,MAAA,CAAQ,IAAQ,IAAA,IAAA,CAAK,IAAQ,IAAA,CAAA,CAAA;AAAA,KACnC,CAAA,CAAA;AAAA,GACH;AACA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAMO,SAAS,uBAAuB,IAAuB,EAAA;AAC5D,EAAI,IAAA,GAAA,GAAM,gBAAgB,IAAI,CAAA,CAAA;AAC9B,EAAA,IAAI,KAAK,QAAU,EAAA;AACjB,IAAA,GAAA,CAAI,WAAW,IAAK,CAAA,QAAA,CAAS,IAAI,CAAQ,IAAA,KAAA,sBAAA,CAAuB,IAAI,CAAC,CAAA,CAAA;AAAA,GACvE;AACA,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}