diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js index 84a290b59..dacd6eeae 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js +++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js @@ -2406,15 +2406,25 @@ RED.nodes = (function() { } else { delete n.g } - // If importing a subflow, ensure an outbound-link doesn't get added + // If importing a link node, ensure both ends of each link are either: + // - not in a subflow + // - both in the same subflow if (/^link /.test(n.type) && n.links) { - const isSubflow = !!getSubflow(n.z); - if (isSubflow) { - n.links = n.links.filter(function(id) { - const otherNode = node_map[id] || RED.nodes.node(id); - return (otherNode && otherNode.z === n.z); - }); - } + n.links = n.links.filter(function(id) { + const otherNode = node_map[id] || RED.nodes.node(id); + if (!otherNode) { + // Cannot find other end - remove the link + return false + } + if (otherNode.z === n.z) { + // Both ends in the same flow/subflow + return true + } else if (!!getSubflow(n.z) || !!getSubflow(otherNode.z)) { + // One end is in a subflow - remove the link + return false + } + return true + }); } for (var d3 in n._def.defaults) { if (n._def.defaults.hasOwnProperty(d3)) {