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; }), });