diff --git a/packages/node_modules/@node-red/editor-client/src/js/history.js b/packages/node_modules/@node-red/editor-client/src/js/history.js index c653ac239..dc7107c30 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/history.js +++ b/packages/node_modules/@node-red/editor-client/src/js/history.js @@ -395,7 +395,9 @@ RED.history = (function() { if (ev.nodes) { inverseEv.movedNodes = []; var z = ev.activeWorkspace; - RED.nodes.filterNodes({z:ev.subflow.subflow.id}).forEach(function(n) { + var fullNodeList = RED.nodes.filterNodes({z:ev.subflow.subflow.id}); + fullNodeList = fullNodeList.concat(RED.nodes.groups(ev.subflow.subflow.id)) + fullNodeList.forEach(function(n) { n.x += ev.subflow.offsetX; n.y += ev.subflow.offsetY; n.dirty = true; @@ -447,6 +449,9 @@ RED.history = (function() { if (ev.movedNodes) { ev.movedNodes.forEach(function(nid) { nn = RED.nodes.node(nid); + if (!nn) { + nn = RED.nodes.group(nid); + } nn.x -= ev.subflow.offsetX; nn.y -= ev.subflow.offsetY; nn.dirty = true; @@ -554,6 +559,9 @@ RED.history = (function() { list: function() { return undoHistory; }, + listRedo: function() { + return redoHistory; + }, depth: function() { return undoHistory.length; }, 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 af79a3a3b..8e56fd5be 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 @@ -305,6 +305,10 @@ RED.nodes = (function() { } function moveNodeToTab(node, z) { + if (node.type === "group") { + moveGroupToTab(node,z); + return; + } if (nodeTabMap[node.z]) { delete nodeTabMap[node.z][node.id]; } @@ -314,6 +318,13 @@ RED.nodes = (function() { nodeTabMap[z][node.id] = node; node.z = z; } + function moveGroupToTab(group, z) { + var index = groupsByZ[group.z].indexOf(group); + groupsByZ[group.z].splice(index,1); + groupsByZ[z] = groupsByZ[z] || []; + groupsByZ[z].push(group); + group.z = z; + } function removeLink(l) { var index = links.indexOf(l); 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 01356c3f6..f2fae549d 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 @@ -567,6 +567,19 @@ RED.subflow = (function() { return; } var i,n; + var nodeList = new Set(); + var tmplist = selection.nodes.slice(); + while(tmplist.length > 0) { + n = tmplist.shift(); + if (n.type === "group") { + tmplist = tmplist.concat(n.nodes); + } + nodeList.add(n); + } + + nodeList = Array.from(nodeList); + + var nodes = {}; var new_links = []; var removedLinks = []; @@ -575,13 +588,13 @@ RED.subflow = (function() { var candidateOutputs = []; var candidateInputNodes = {}; - var boundingBox = [selection.nodes[0].x, - selection.nodes[0].y, - selection.nodes[0].x, - selection.nodes[0].y]; + var boundingBox = [nodeList[0].x, + nodeList[0].y, + nodeList[0].x, + nodeList[0].y]; - for (i=0;i