diff --git a/js/id/actions/delete_member.js b/js/id/actions/delete_member.js new file mode 100644 index 000000000..50b331e14 --- /dev/null +++ b/js/id/actions/delete_member.js @@ -0,0 +1,5 @@ +iD.actions.DeleteMember = function(relationId, memberIndex) { + return function(graph) { + return graph.replace(graph.entity(relationId).removeMember(memberIndex)); + }; +}; diff --git a/js/id/core/relation.js b/js/id/core/relation.js index 460b8ee43..e65862704 100644 --- a/js/id/core/relation.js +++ b/js/id/core/relation.js @@ -73,6 +73,12 @@ _.extend(iD.Relation.prototype, { return this.update({members: members}); }, + removeMember: function(index) { + var members = this.members.slice(); + members.splice(index, 1); + return this.update({members: members}); + }, + removeMembersWithID: function(id) { var members = _.reject(this.members, function(m) { return m.id === id; }); return this.update({members: members}); diff --git a/test/index.html b/test/index.html index 91dc1c5f9..580885630 100644 --- a/test/index.html +++ b/test/index.html @@ -105,6 +105,7 @@ + @@ -188,6 +189,7 @@ + diff --git a/test/index_packaged.html b/test/index_packaged.html index cf745ce5b..15bcef8df 100644 --- a/test/index_packaged.html +++ b/test/index_packaged.html @@ -30,6 +30,7 @@ + diff --git a/test/spec/actions/delete_member.js b/test/spec/actions/delete_member.js new file mode 100644 index 000000000..bb6e9c85c --- /dev/null +++ b/test/spec/actions/delete_member.js @@ -0,0 +1,9 @@ +describe("iD.actions.DeleteMember", function () { + it("removes the member at the specified index", function () { + var node = iD.Node(), + relation = iD.Relation({members: [node.id]}), + action = iD.actions.DeleteMember(relation.id, 0), + graph = action(iD.Graph([node, relation])); + expect(graph.entity(relation.id).members).to.eql([]); + }); +}); diff --git a/test/spec/core/relation.js b/test/spec/core/relation.js index 6af273aeb..23e549b0d 100644 --- a/test/spec/core/relation.js +++ b/test/spec/core/relation.js @@ -128,6 +128,13 @@ describe('iD.Relation', function () { }); }); + describe("#removeMember", function () { + it("removes the member at the specified index", function () { + var r = iD.Relation({members: [{id: 'a'}, {id: 'b'}, {id: 'c'}]}); + expect(r.removeMember(1).members).to.eql([{id: 'a'}, {id: 'c'}]); + }); + }); + describe("#removeMembersWithID", function () { it("removes members with the given ID", function () { var r = iD.Relation({members: [{id: 'a'}, {id: 'b'}, {id: 'a'}]});