diff --git a/app/imports/api/engine/computation/utility/assignDependencyGroups.js b/app/imports/api/engine/computation/utility/assignDependencyGroups.js deleted file mode 100644 index 7a660adf..00000000 --- a/app/imports/api/engine/computation/utility/assignDependencyGroups.js +++ /dev/null @@ -1,73 +0,0 @@ -import { union } from "lodash"; - -export function assignDependencyGroups(graph) { - console.log('assigning dep group ids'); - graph.forEachLink(function (link) { - console.dir(link); - }); - // Iterate through all the nodes - graph.forEachNode(node => { - if (node._depGroupVisited) { - return; - } - - // DFS all the connected nodes to this node, mark visited, put in a group, - // store the lowest ordered id - const group = []; - const stack = [node]; - let top, lowestOrderId, lowestOrder; - while (stack.length) { - top = stack.pop(); - if (top._depGroupVisited) continue; - if (top.data?._id && ( - lowestOrderId === undefined || - top.data?.order < lowestOrder - )) { - lowestOrderId = top.data._id; - lowestOrder = top.data.order; - } - group.push(top) - top._depGroupVisited = true; - graph.forEachLinkedNode(top.id, linkedNode => stack.push(linkedNode)); - } - // Assign group id - group.forEach(node => { - if (!node.data?._id) return; - if (group.length > 1) { - node.data.depGroupId = lowestOrderId; - } else { - delete node.data.depGroupId; - } - }); - }); -} - - -export default function assignDependencyGroups2(graph) { - const groups = new Set(); - graph.forEachLink(function (link) { - const from = graph.getNode(link.fromId); - const to = graph.getNode(link.toId); - let depGroup; - if (from._depGroup) { - depGroup = from._depGroup; - groups.delete(to._depGroup); - } else if (to._depGroup) { - depGroup = to._depGroup; - } else { - depGroup = {}; - groups.add(depGroup); - } - depGroup.nodes = union(from._depGroup?.nodes, to._depGroup?.nodes, [from, to]) - from._depGroup = depGroup; - to._depGroup = depGroup; - }); - groups.forEach(g => { - if (!g.nodes.length) return; - const rootId = g.nodes[0].id; - g.nodes.forEach(n => { - if (!n.data?._id) return; - n.data.depGroupId = rootId; - }); - }); -} diff --git a/app/imports/api/engine/loadCreatures.js b/app/imports/api/engine/loadCreatures.js index c6021b22..e6336680 100644 --- a/app/imports/api/engine/loadCreatures.js +++ b/app/imports/api/engine/loadCreatures.js @@ -107,6 +107,7 @@ class LoadedCreature { } changeMap(id, fields, map) { const doc = map.get(id); + if (!doc) return; for (let key in fields) { if (key === undefined) { delete doc[key];