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 895c659ef..8c2de37ed 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 @@ -331,10 +331,12 @@ RED.history = (function() { var currentConfigNode = RED.nodes.node(ev.node[i]); if (currentConfigNode) { currentConfigNode.users.splice(currentConfigNode.users.indexOf(ev.node),1); + RED.events.emit("nodes:change",currentConfigNode); } var newConfigNode = RED.nodes.node(ev.changes[i]); if (newConfigNode) { newConfigNode.users.push(ev.node); + RED.events.emit("nodes:change",newConfigNode); } } ev.node[i] = ev.changes[i]; diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index e0ac736d0..c59e02d0e 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -1283,10 +1283,12 @@ RED.editor = (function() { if (configNode) { var users = configNode.users; users.splice(users.indexOf(editing_node),1); + RED.events.emit("nodes:change",configNode); } configNode = RED.nodes.node(newValue); if (configNode) { configNode.users.push(editing_node); + RED.events.emit("nodes:change",configNode); } } changes[d] = editing_node[d]; @@ -1911,10 +1913,12 @@ RED.editor = (function() { if (configNode) { var users = configNode.users; users.splice(users.indexOf(editing_config_node),1); + RED.events.emit("nodes:change",configNode); } configNode = RED.nodes.node(newValue); if (configNode) { configNode.users.push(editing_config_node); + RED.events.emit("nodes:change",configNode); } } editing_config_node[d] = newValue; @@ -2503,10 +2507,12 @@ RED.editor = (function() { if (configNode) { var users = configNode.users; users.splice(users.indexOf(editing_node),1); + RED.events.emit("nodes:change",configNode); } configNode = RED.nodes.node(newValue); if (configNode) { configNode.users.push(editing_node); + RED.events.emit("nodes:change",configNode); } } changes[d] = editing_node[d]; diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js index 3ac418be9..dd450d65c 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/search.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/search.js @@ -79,6 +79,18 @@ RED.search = (function() { return val; } + function extractValue(val, flagName, flags) { + // flagName:XYZ + var regEx = new RegExp("(?:^| )"+flagName+":([^ ]+)(?: |$)"); + var m + while(m = regEx.exec(val)) { + val = val.replace(regEx," ").trim(); + flags[flagName] = flags[flagName] || []; + flags[flagName].push(m[1]); + } + return val; + } + function search(val) { var results = []; var keys = Object.keys(index); @@ -93,6 +105,8 @@ RED.search = (function() { val = extractFlag(val,"unused",flags); val = extractFlag(val,"config",flags); val = extractFlag(val,"subflow",flags); + // uses: + val = extractValue(val,"uses",flags); var hasFlags = Object.keys(flags).length > 0; diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js index 239ef5790..e9e7ca1f9 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info-outliner.js @@ -145,6 +145,16 @@ RED.sidebar.info.outliner = (function() { function addControls(n,div) { var controls = $('
',{class:"red-ui-info-outline-item-controls red-ui-info-outline-item-hover-controls"}).appendTo(div); + + if (n._def.category === "config" && n.type !== "group") { + var userCountBadge = $('').text(n.users.length).appendTo(controls).on("click",function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + RED.search.show("uses:"+n.id); + }) + RED.popover.tooltip(userCountBadge,function() { return RED._('editor.nodesUse',{count:n.users.length})}); + } + if (n._def.button) { var triggerButton = $('').appendTo(controls).on("click",function(evt) { evt.preventDefault(); @@ -405,7 +415,7 @@ RED.sidebar.info.outliner = (function() { if (parentItem.config) { // this is a config parentItem.treeList.remove(); - console.log("Removing",n.type,"from",parentItem.parent.id||parentItem.parent.parent.id) + // console.log("Removing",n.type,"from",parentItem.parent.id||parentItem.parent.parent.id) delete configNodeTypes[parentItem.parent.id||parentItem.parent.parent.id].types[n.type]; @@ -446,6 +456,11 @@ RED.sidebar.info.outliner = (function() { // } } existingObject.element.toggleClass("red-ui-info-outline-item-disabled", !!n.d) + + if (n._def.category === "config" && n.type !== 'group') { + existingObject.element.find(".red-ui-info-outline-item-control-users").text(n.users.length); + } + updateSearch(); } function onObjectRemove(n) { @@ -488,7 +503,7 @@ RED.sidebar.info.outliner = (function() { } function createFlowConfigNode(parent,type) { - console.log("createFlowConfig",parent,type,configNodeTypes[parent]); + // console.log("createFlowConfig",parent,type,configNodeTypes[parent]); if (empties[parent]) { empties[parent].treeList.remove(); delete empties[parent]; @@ -502,7 +517,7 @@ RED.sidebar.info.outliner = (function() { children: [] } objects[parent].treeList.insertChildAt(configNodeTypes[parent],0); - console.log("CREATED", parent) + // console.log("CREATED", parent) } if (!configNodeTypes[parent].types[type]) { configNodeTypes[parent].types[type] = { @@ -511,7 +526,7 @@ RED.sidebar.info.outliner = (function() { children: [] } configNodeTypes[parent].treeList.addChild(configNodeTypes[parent].types[type]); - console.log("CREATED", parent,type) + // console.log("CREATED", parent,type) } } function onNodeAdd(n) {