Skip to content

Commit

Permalink
Fix issue with deleting a member from a relation with a duplicate ent…
Browse files Browse the repository at this point in the history
…ity but different roles (close #6504)
  • Loading branch information
quincylvania committed Jun 11, 2019
1 parent e82beb8 commit aa7bf74
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions modules/core/graph.js
Original file line number Diff line number Diff line change
Expand Up @@ -226,25 +226,30 @@ coreGraph.prototype = {
}

} else if (type === 'relation') { // Update parentRels

// diff only on the IDs since the same entity can be a member multiple times with different roles
var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m) { return m.id; }) : [];
var entityMemberIDs = entity ? entity.members.map(function(m) { return m.id; }) : [];

if (oldentity && entity) {
removed = utilArrayDifference(oldentity.members, entity.members);
added = utilArrayDifference(entity.members, oldentity.members);
removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
} else if (oldentity) {
removed = oldentity.members;
removed = oldentityMemberIDs;
added = [];
} else if (entity) {
removed = [];
added = entity.members;
added = entityMemberIDs;
}
for (i = 0; i < removed.length; i++) {
// make a copy of prototype property, store as own property, and update..
parentRels[removed[i].id] = new Set(parentRels[removed[i].id]);
parentRels[removed[i].id].delete(oldentity.id);
parentRels[removed[i]] = new Set(parentRels[removed[i]]);
parentRels[removed[i]].delete(oldentity.id);
}
for (i = 0; i < added.length; i++) {
// make a copy of prototype property, store as own property, and update..
parentRels[added[i].id] = new Set(parentRels[added[i].id]);
parentRels[added[i].id].add(entity.id);
parentRels[added[i]] = new Set(parentRels[added[i]]);
parentRels[added[i]].add(entity.id);
}
}
},
Expand Down

0 comments on commit aa7bf74

Please sign in to comment.