diff --git a/packages/node_modules/@node-red/runtime/lib/nodes/flows/util.js b/packages/node_modules/@node-red/runtime/lib/nodes/flows/util.js index e06cc5ede..d5a8cba9f 100644 --- a/packages/node_modules/@node-red/runtime/lib/nodes/flows/util.js +++ b/packages/node_modules/@node-red/runtime/lib/nodes/flows/util.js @@ -263,7 +263,7 @@ module.exports = { } } } - // This node has been removed + // This node has been removed or its flow disabled if (removed[node.z] || !newConfig.allNodes.hasOwnProperty(id)) { removed[id] = node; // Mark the container as changed @@ -278,6 +278,11 @@ module.exports = { if (added[node.z]) { added[id] = node; } else { + var currentState = node.d; + var newState = newConfig.allNodes[id].d; + if (!currentState && newState) { + removed[id] = node; + } // This node has a material configuration change if (diffNodes(node,newConfig.allNodes[id]) || newConfig.allNodes[id].credentials) { changed[id] = newConfig.allNodes[id]; diff --git a/test/unit/@node-red/runtime/lib/nodes/flows/util_spec.js b/test/unit/@node-red/runtime/lib/nodes/flows/util_spec.js index c20d222e2..b83a37660 100644 --- a/test/unit/@node-red/runtime/lib/nodes/flows/util_spec.js +++ b/test/unit/@node-red/runtime/lib/nodes/flows/util_spec.js @@ -777,5 +777,26 @@ describe('flows/util', function() { diffResult.removed.sort().should.eql(["1","2"]); diffResult.rewired.should.have.length(0); }); + + it('marks a node as removed when its state changes enabled to disabled', function() { + var config = [{id:"1",type:"tab",disabled:false,label:"fred"},{id:"2",type:"test",bar:"b",wires:[["1"]],z:"1"},{id:"3",type:"test"}]; + var newConfig = clone(config); + newConfig[1].d = true; + + var originalConfig = flowUtil.parseConfig(config); + var changedConfig = flowUtil.parseConfig(newConfig); + + originalConfig.missingTypes.should.have.length(0); + + var diffResult = flowUtil.diffConfigs(originalConfig,changedConfig); + + diffResult.added.should.have.length(0); + diffResult.changed.should.have.length(2); + diffResult.changed.sort().should.eql(["1","2"]); + diffResult.removed.should.have.length(1); + diffResult.removed.sort().should.eql(["2"]); + diffResult.rewired.should.have.length(0); + }); + }); });