From 94471b6d07854ec1775cf6a2d1541ad3912b4ab1 Mon Sep 17 00:00:00 2001 From: Hiroyasu Nishiyama Date: Mon, 13 Jun 2022 08:47:41 +0900 Subject: [PATCH] fix conversion of junction to subflow --- .../@node-red/editor-client/src/js/nodes.js | 36 +++++++++++++++++++ .../editor-client/src/js/ui/subflow.js | 16 ++++++--- 2 files changed, 48 insertions(+), 4 deletions(-) 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 de6d5a2d8..ab31e5038 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 @@ -738,6 +738,10 @@ RED.nodes = (function() { moveGroupToTab(node,z); return; } + if (node.type === "junction") { + moveJunctionToTab(node,z); + return; + } var oldZ = node.z; allNodes.moveNode(node,z); var nl = nodeLinks[node.id]; @@ -772,6 +776,38 @@ RED.nodes = (function() { RED.events.emit("groups:change",group); } + function moveJunctionToTab(junction, z) { + var index = junctionsByZ[junction.z].indexOf(junction); + junctionsByZ[junction.z].splice(junction,1); + junctionsByZ[z] = junctionsByZ[z] || []; + junctionsByZ[z].push(junction); + junction.z = z; + + var oldZ = junction.z; + var nl = nodeLinks[junction.id]; + if (nl) { + nl.in.forEach(function(l) { + var idx = linkTabMap[oldZ].indexOf(l); + if (idx != -1) { + linkTabMap[oldZ].splice(idx, 1); + } + if ((l.source.z === z) && linkTabMap[z]) { + linkTabMap[z].push(l); + } + }); + nl.out.forEach(function(l) { + var idx = linkTabMap[oldZ].indexOf(l); + if (idx != -1) { + linkTabMap[oldZ].splice(idx, 1); + } + if ((l.target.z === z) && linkTabMap[z]) { + linkTabMap[z].push(l); + } + }); + } + RED.events.emit("junctions:change",junction); + } + function removeLink(l) { var index = links.indexOf(l); if (index != -1) { diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js b/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js index 58fca2cb4..3aeb7151f 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/subflow.js @@ -604,6 +604,14 @@ RED.subflow = (function() { return x; } + function nodeOrJunction(id) { + var node = RED.nodes.node(id); + if (node) { + return node; + } + return RED.nodes.junction(id); + } + function convertToSubflow() { var selection = RED.view.selection(); if (!selection.nodes) { @@ -792,14 +800,15 @@ RED.subflow = (function() { subflow.in.forEach(function(input) { input.wires.forEach(function(wire) { - var link = {source: input, sourcePort: 0, target: RED.nodes.node(wire.id) } + var link = {source: input, sourcePort: 0, target: nodeOrJunction(wire.id) } new_links.push(link); RED.nodes.addLink(link); }); }); + subflow.out.forEach(function(output,i) { output.wires.forEach(function(wire) { - var link = {source: RED.nodes.node(wire.id), sourcePort: wire.port , target: output } + var link = {source: nodeOrJunction(wire.id), sourcePort: wire.port , target: output } new_links.push(link); RED.nodes.addLink(link); }); @@ -815,7 +824,7 @@ RED.subflow = (function() { n.links = n.links.filter(function(id) { var isLocalLink = nodes.hasOwnProperty(id); if (!isLocalLink) { - var otherNode = RED.nodes.node(id); + var otherNode = nodeOrJunction(id); if (otherNode && otherNode.links) { var i = otherNode.links.indexOf(n.id); if (i > -1) { @@ -831,7 +840,6 @@ RED.subflow = (function() { RED.nodes.moveNodeToTab(n, subflow.id); } - var historyEvent = { t:'createSubflow', nodes:[subflowInstance.id],