fix grouping functionality
This commit is contained in:
28
frontend/src/nodeHierarchy.js
Normal file
28
frontend/src/nodeHierarchy.js
Normal file
@@ -0,0 +1,28 @@
|
||||
export function sortNodesForParentOrder(nodes) {
|
||||
const list = Array.isArray(nodes) ? nodes.filter(Boolean) : [];
|
||||
const entries = list.map((node) => ({ id: String(node.id), node }));
|
||||
const byId = new Map(entries.map((entry) => [entry.id, entry]));
|
||||
const visiting = new Set();
|
||||
const visited = new Set();
|
||||
const ordered = [];
|
||||
|
||||
function visit(entry) {
|
||||
if (!entry) return;
|
||||
const { id, node } = entry;
|
||||
if (visited.has(id) || visiting.has(id)) return;
|
||||
|
||||
visiting.add(id);
|
||||
|
||||
const parentId = node?.parentId ? String(node.parentId) : null;
|
||||
if (parentId) {
|
||||
visit(byId.get(parentId));
|
||||
}
|
||||
|
||||
visiting.delete(id);
|
||||
visited.add(id);
|
||||
ordered.push(node);
|
||||
}
|
||||
|
||||
entries.forEach((entry) => visit(entry));
|
||||
return ordered;
|
||||
}
|
||||
Reference in New Issue
Block a user