mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Merge pull request #4811 from GogoVega/handle-bad-subflow
Handle the import of an incomplete Subflow
This commit is contained in:
		| @@ -1064,6 +1064,8 @@ RED.nodes = (function() { | ||||
|             sf.name = subflowName; | ||||
|         } | ||||
|  | ||||
|         sf.instances = []; | ||||
|  | ||||
|         subflows[sf.id] = sf; | ||||
|         allNodes.addTab(sf.id); | ||||
|         linkTabMap[sf.id] = []; | ||||
| @@ -1116,7 +1118,7 @@ RED.nodes = (function() { | ||||
|                 module: "node-red" | ||||
|             } | ||||
|         }); | ||||
|         sf.instances = []; | ||||
|  | ||||
|         sf._def = RED.nodes.getType("subflow:"+sf.id); | ||||
|         RED.events.emit("subflows:add",sf); | ||||
|     } | ||||
| @@ -1758,7 +1760,8 @@ RED.nodes = (function() { | ||||
|             // Remove the old subflow definition - but leave the instances in place | ||||
|             var removalResult = RED.subflow.removeSubflow(n.id, true); | ||||
|             // Create the list of nodes for the new subflow def | ||||
|             var subflowNodes = [n].concat(zMap[n.id]); | ||||
|             // Need to sort the list in order to remove missing nodes | ||||
|             var subflowNodes = [n].concat(zMap[n.id]).filter((s) => !!s); | ||||
|             // Import the new subflow - no clashes should occur as we've removed | ||||
|             // the old version | ||||
|             var result = importNodes(subflowNodes); | ||||
| @@ -2187,7 +2190,7 @@ RED.nodes = (function() { | ||||
|                         x:parseFloat(n.x || 0), | ||||
|                         y:parseFloat(n.y || 0), | ||||
|                         z:n.z, | ||||
|                         type:0, | ||||
|                         type: n.type, | ||||
|                         info: n.info, | ||||
|                         changed:false, | ||||
|                         _config:{} | ||||
| @@ -2248,7 +2251,6 @@ RED.nodes = (function() { | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                     node.type = n.type; | ||||
|                     node._def = def; | ||||
|                     if (node.type === "group") { | ||||
|                         node._def = RED.group.def; | ||||
| @@ -2278,6 +2280,15 @@ RED.nodes = (function() { | ||||
|                                 outputs: n.outputs|| (n.wires && n.wires.length) || 0, | ||||
|                                 set: registry.getNodeSet("node-red/unknown") | ||||
|                             } | ||||
|                             var orig = {}; | ||||
|                             for (var p in n) { | ||||
|                                 if (n.hasOwnProperty(p) && p!="x" && p!="y" && p!="z" && p!="id" && p!="wires") { | ||||
|                                     orig[p] = n[p]; | ||||
|                                 } | ||||
|                             } | ||||
|                             node._orig = orig; | ||||
|                             node.name = n.type; | ||||
|                             node.type = "unknown"; | ||||
|                         } else { | ||||
|                             if (subflow_denylist[parentId] || createNewIds || options.importMap[n.id] === "copy") { | ||||
|                                 parentId = subflow.id; | ||||
| @@ -2475,9 +2486,11 @@ RED.nodes = (function() { | ||||
|             n = new_subflows[i]; | ||||
|             n.in.forEach(function(input) { | ||||
|                 input.wires.forEach(function(wire) { | ||||
|                     var link = {source:input, sourcePort:0, target:node_map[wire.id]}; | ||||
|                     addLink(link); | ||||
|                     new_links.push(link); | ||||
|                     if (node_map.hasOwnProperty(wire.id)) { | ||||
|                         var link = {source:input, sourcePort:0, target:node_map[wire.id]}; | ||||
|                         addLink(link); | ||||
|                         new_links.push(link); | ||||
|                     } | ||||
|                 }); | ||||
|                 delete input.wires; | ||||
|             }); | ||||
| @@ -2486,11 +2499,13 @@ RED.nodes = (function() { | ||||
|                     var link; | ||||
|                     if (subflow_map[wire.id] && subflow_map[wire.id].id == n.id) { | ||||
|                         link = {source:n.in[wire.port], sourcePort:wire.port,target:output}; | ||||
|                     } else { | ||||
|                     } else if (node_map.hasOwnProperty(wire.id) || subflow_map.hasOwnProperty(wire.id)) { | ||||
|                         link = {source:node_map[wire.id]||subflow_map[wire.id], sourcePort:wire.port,target:output}; | ||||
|                     } | ||||
|                     addLink(link); | ||||
|                     new_links.push(link); | ||||
|                     if (link) { | ||||
|                         addLink(link); | ||||
|                         new_links.push(link); | ||||
|                     } | ||||
|                 }); | ||||
|                 delete output.wires; | ||||
|             }); | ||||
| @@ -2499,11 +2514,13 @@ RED.nodes = (function() { | ||||
|                     var link; | ||||
|                     if (subflow_map[wire.id] && subflow_map[wire.id].id == n.id) { | ||||
|                         link = {source:n.in[wire.port], sourcePort:wire.port,target:n.status}; | ||||
|                     } else { | ||||
|                     } else if (node_map.hasOwnProperty(wire.id) || subflow_map.hasOwnProperty(wire.id)) { | ||||
|                         link = {source:node_map[wire.id]||subflow_map[wire.id], sourcePort:wire.port,target:n.status}; | ||||
|                     } | ||||
|                     addLink(link); | ||||
|                     new_links.push(link); | ||||
|                     if (link) { | ||||
|                         addLink(link); | ||||
|                         new_links.push(link); | ||||
|                     } | ||||
|                 }); | ||||
|                 delete n.status.wires; | ||||
|             } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user