From b0ac0cec83591cb0564560e89c990610bd06c9be Mon Sep 17 00:00:00 2001 From: Yongtae Park Date: Tue, 4 Mar 2025 10:02:17 +0900 Subject: [PATCH] fix(project-tree): implement project-tree-data converting code and solve cyclic dependencies issue Signed-off-by: samuel.park --- .../project-v1/components/ProjectMainTree.vue | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/web/src/services/project-v1/components/ProjectMainTree.vue b/apps/web/src/services/project-v1/components/ProjectMainTree.vue index 863f7a97fa..a77dfff930 100644 --- a/apps/web/src/services/project-v1/components/ProjectMainTree.vue +++ b/apps/web/src/services/project-v1/components/ProjectMainTree.vue @@ -106,28 +106,32 @@ const state = reactive({ }); const rootNodes: TreeNode[] = []; - const setDepth = (node, depth) => { - node.depth = depth; - if (!node.children) return; - node.children.forEach((child) => { - setDepth(child, depth + 1); - }); - }; Object.values(nodes).forEach((node) => { const parentGroupId = node.data?.parentGroupId; if (!parentGroupId) { rootNodes.push(node); - setDepth(node, 0); } else { const parentNode = nodes[parentGroupId]; if (parentNode) { parentNode.children = parentNode.children || []; parentNode.children.push(node); - setDepth(node, parentNode.depth + 1); } } }); + const visited = new Set(); + const setDepth = (node: TreeNode, depth: number) => { + if (visited.has(node.id)) return; + visited.add(node.id); + + node.depth = depth; + if (!node.children) return; + node.children.forEach((child) => { + setDepth(child, depth + 1); + }); + }; + rootNodes.forEach((node) => setDepth(node, 0)); + return rootNodes; }), });