getRoot = (source) => {
const node = data.get(source);
let root = {};
const visited = new Map();
if (node) {
root = { ...node };
visited.set(root.id, true);
if (node.connectsTo) {
root.children = node.connectsTo.map((d) => {
visited.set(d.id, true);
const n = data.get(d);
return {
...n,
children: []
};
});
root.children.forEach((d) => {
const n = data.get(d.id);
if (n) {
d.children = n.connectsTo
.filter((id) => {
return id !== source && id !== d.id && !visited.get(id);
})
.map((id) => {
visited.set(id, true);
const m = data.get(id);
return data.get(id) || {};
});
}
});
}
}
return root;
}