mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-21 20:16:26 +08:00
chore: merge blocksuite source code (#9213)
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import type { MindmapNode } from './mindmap.js';
|
||||
|
||||
export function findInfiniteLoop(
|
||||
root: MindmapNode,
|
||||
nodeMap: Map<string, MindmapNode>
|
||||
) {
|
||||
const visited = new Set<string>();
|
||||
const loop: {
|
||||
detached: boolean;
|
||||
chain: MindmapNode[];
|
||||
}[] = [];
|
||||
|
||||
const traverse = (
|
||||
node: MindmapNode,
|
||||
traverseChain: MindmapNode[] = [],
|
||||
detached = false
|
||||
) => {
|
||||
if (visited.has(node.id)) {
|
||||
loop.push({
|
||||
detached,
|
||||
chain: traverseChain,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
visited.add(node.id);
|
||||
|
||||
traverseChain.push(node);
|
||||
|
||||
node.children.forEach(child =>
|
||||
traverse(child, traverseChain.slice(), detached)
|
||||
);
|
||||
};
|
||||
|
||||
traverse(root);
|
||||
|
||||
nodeMap.forEach(node => {
|
||||
if (visited.has(node.id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
traverse(node, [], true);
|
||||
});
|
||||
|
||||
return loop;
|
||||
}
|
||||
Reference in New Issue
Block a user