useTreeData.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import _typeof from "@babel/runtime/helpers/esm/typeof";
  2. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  3. import * as React from 'react';
  4. import { convertChildrenToData } from "../utils/legacyUtil";
  5. function buildTreeStructure(nodes, config) {
  6. var id = config.id,
  7. pId = config.pId,
  8. rootPId = config.rootPId;
  9. var nodeMap = new Map();
  10. var rootNodes = [];
  11. nodes.forEach(function (node) {
  12. var nodeKey = node[id];
  13. var clonedNode = _objectSpread(_objectSpread({}, node), {}, {
  14. key: node.key || nodeKey
  15. });
  16. nodeMap.set(nodeKey, clonedNode);
  17. });
  18. nodeMap.forEach(function (node) {
  19. var parentKey = node[pId];
  20. var parent = nodeMap.get(parentKey);
  21. if (parent) {
  22. parent.children = parent.children || [];
  23. parent.children.push(node);
  24. } else if (parentKey === rootPId || rootPId === null) {
  25. rootNodes.push(node);
  26. }
  27. });
  28. return rootNodes;
  29. }
  30. /**
  31. * 将 `treeData` 或 `children` 转换为格式化的 `treeData`。
  32. * 如果 `treeData` 或 `children` 没有变化,则不会重新计算。
  33. */
  34. export default function useTreeData(treeData, children, simpleMode) {
  35. return React.useMemo(function () {
  36. if (treeData) {
  37. if (simpleMode) {
  38. var config = _objectSpread({
  39. id: 'id',
  40. pId: 'pId',
  41. rootPId: null
  42. }, _typeof(simpleMode) === 'object' ? simpleMode : {});
  43. return buildTreeStructure(treeData, config);
  44. }
  45. return treeData;
  46. }
  47. return convertChildrenToData(children);
  48. }, [children, simpleMode, treeData]);
  49. }