From d7a10328c047b2d9bad9733c79f1c5d536fe7fdf Mon Sep 17 00:00:00 2001 From: NetHans Date: Sun, 14 Aug 2022 20:20:59 +0200 Subject: [PATCH] function for group analysis added --- .../@node-red/runtime/lib/flows/Flow.js | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index b5685d3ec..6350755c5 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -128,6 +128,65 @@ class Flow { } this.parent.log(msg); } + + /** + * Checks if node A and node B are in the same group. + * Node B can also be placed in a subgroup. + * If node A is not in any group, false is returned + * @param {[type]} nodeIdA [description] + * @param {[type]} nodeIdB [description] + * @returns {[type]} Returns true if all nodes are in the same group. If not, then false or if node A is not in a group then also false. + */ + isNodeInSameGroup(nodeIdA, nodeIdB) { + const groups = this.global.groups; + let result = false; + for(let key in groups) { + let group = groups[key]; + + if(!group.nodes.includes(nodeIdA.id)) { + continue; + } + + if(group.nodes.includes(nodeIdB.id)) { + result = true; + break; + } + + /** + * Subfunction to recursively search the groups for matches + * @param {[type]} targetNode [description] + * @param {[type]} targetGroup [description] + * @returns Returns true if a match was found. Otherwise false. + */ + const isInSubGroup = (targetNode, targetGroup) => { + let _result = false; + if(targetGroup.nodes.includes(targetNode.id)) { + _result = true; + } else { + for(let nodeId of targetGroup.nodes) { + let node = this.getGroupNode(nodeId); + + if(!node){ + continue; + } + + if(node.type === "group"){ + let result = isInSubGroup(targetNode, node); + if(result === true){ + _result = true; + break; + } + } + } + } + + return _result; + }; + + result = isInSubGroup(nodeIdB, group); + } + return result; + } /** * Start this flow.