transformGraphdata.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // 删除无用字段
  2. const deletsNoUseKey = (node) => {
  3. delete node.id;
  4. delete node.preNodeId;
  5. delete node.x;
  6. delete node.y;
  7. delete node.style;
  8. delete node.size;
  9. delete node.depth;
  10. delete node.selected;
  11. delete node.anchorPoints;
  12. delete node.contentHover;
  13. return node;
  14. };
  15. // 给节点添加结构id
  16. function setNodeIdByList(nodeList, preNodeId, nodeMap) {
  17. if (!Array.isArray(nodeList) || nodeList.length <= 0) return;
  18. for (let i = 0; i < nodeList.length; i++) {
  19. const node = nodeList[i];
  20. // 把节点存入 nodeMap
  21. nodeMap.set(String(node.id), node);
  22. node.nodeId = preNodeId ? preNodeId + "-" + i : i + "";
  23. setNodeIdByList(node.children, String(node.nodeId), nodeMap);
  24. }
  25. }
  26. // 修改节点的data数据中指向节点
  27. const setNextNodeId = (node, nodeMap) => {
  28. const nodeData = node.data;
  29. // 修改选项的对应节点
  30. if (node.nodeType === "root-node" || node.nodeType === "plot-node") {
  31. const optionsList = nodeData.optionsList || [];
  32. optionsList.forEach((optionItem) => {
  33. const nextNode = nodeMap.get(optionItem.nodeId) || {};
  34. optionItem.nextNodeId = nextNode.nodeId;
  35. });
  36. } else if (node.nodeType === "jumpNodeId") {
  37. const nextNode = nodeMap.get(node.jumpNodeId) || {};
  38. node.nextNodeId = nextNode.nodeId;
  39. }
  40. };
  41. // 对节点的自定义数据 data 进行修改
  42. function transformNodeDataByList(nodeList, nodeMap) {
  43. if (!Array.isArray(nodeList) || nodeList.length <= 0) return;
  44. for (let i = 0; i < nodeList.length; i++) {
  45. const node = nodeList[i];
  46. node.nodeType = node.type;
  47. node.data.nodeName = node.data.name;
  48. setNextNodeId(node, nodeMap);
  49. transformNodeDataByList(node.children, nodeMap);
  50. }
  51. }
  52. // 修改数据
  53. export const transformGraphdata = (graphData) => {
  54. // 记录id和节点的映射
  55. let nodeMap = new Map();
  56. // 先给所有数据添加 nodeId
  57. setNodeIdByList([graphData], "", nodeMap);
  58. // 处理节点的 data 数据
  59. transformNodeDataByList([graphData], nodeMap);
  60. // nodeMap 里面有所有的节点,在这里把所有节点的无用字段去除一下
  61. nodeMap.forEach((node) => {
  62. deletsNoUseKey(node);
  63. });
  64. return graphData;
  65. };
  66. export const transfromReturnGraphdata = (graphData) => {
  67. // 记录id和节点的映射
  68. let nodeMap = new Map();
  69. // 先给所有数据添加 nodeId
  70. setNodeIdByList([graphData], "", nodeMap);
  71. // 处理节点的 data 数据
  72. transformReturnNodeDataByList([graphData], nodeMap);
  73. return graphData;
  74. };
  75. // 对节点的自定义数据 data 进行修改
  76. function transformReturnNodeDataByList(nodeList, nodeMap) {
  77. if (!Array.isArray(nodeList) || nodeList.length <= 0) return;
  78. for (let i = 0; i < nodeList.length; i++) {
  79. const node = nodeList[i];
  80. node.id = String(node.id);
  81. node.type = node.nodeType;
  82. node.data.name = node.data.nodeName;
  83. setNextNodeId(node, nodeMap);
  84. transformReturnNodeDataByList(node.children, nodeMap);
  85. }
  86. }