From 70ea5c839af7b1f26f8f19cdce1ac049f5b3e70d Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sat, 16 Dec 2023 17:02:18 +0900 Subject: [PATCH 1/3] Add handling to disable items on context menu --- .../@node-red/editor-client/src/js/ui/contextMenu.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js index cf3e56f8c..d29998c75 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js @@ -31,7 +31,9 @@ RED.contextMenu = (function () { const canEdit = !RED.workspaces.isLocked() const canRemoveFromGroup = hasSelection && !!selection.nodes[0].g const isAllGroups = hasSelection && selection.nodes.filter(n => n.type !== 'group').length === 0 - const hasGroup = hasSelection && selection.nodes.filter(n => n.type === 'group' ).length > 0 + const hasGroup = hasSelection && selection.nodes.filter(n => n.type === 'group').length > 0 + const hasDisabledNode = hasSelection && selection.nodes.filter(e => e.d).length > 0; + const hasEnabledNode = hasSelection && selection.nodes.filter(e => !e.d).length > 0; const offset = $("#red-ui-workspace-chart").offset() let addX = options.x - offset.left + $("#red-ui-workspace-chart").scrollLeft() @@ -113,8 +115,8 @@ RED.contextMenu = (function () { ) } nodeOptions.push( - { onselect: 'core:enable-selected-nodes', label: RED._('menu.label.enableSelectedNodes') }, - { onselect: 'core:disable-selected-nodes', label: RED._('menu.label.disableSelectedNodes') }, + { onselect: 'core:enable-selected-nodes', label: RED._('menu.label.enableSelectedNodes'), disabled: !hasDisabledNode }, + { onselect: 'core:disable-selected-nodes', label: RED._('menu.label.disableSelectedNodes'), disabled: !hasEnabledNode }, null, { onselect: 'core:show-selected-node-labels', label: RED._('menu.label.showSelectedNodeLabels') }, { onselect: 'core:hide-selected-node-labels', label: RED._('menu.label.hideSelectedNodeLabels') } From aaed9882b89d2dc0a44539de8875660db47f4cd7 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Fri, 29 Dec 2023 17:51:03 +0900 Subject: [PATCH 2/3] Add handling to disable items on context menu for node labels --- .../@node-red/editor-client/src/js/ui/contextMenu.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js index d29998c75..63fb04a28 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js @@ -34,6 +34,8 @@ RED.contextMenu = (function () { const hasGroup = hasSelection && selection.nodes.filter(n => n.type === 'group').length > 0 const hasDisabledNode = hasSelection && selection.nodes.filter(e => e.d).length > 0; const hasEnabledNode = hasSelection && selection.nodes.filter(e => !e.d).length > 0; + const hasUnlabeledNode = hasSelection && selection.nodes.filter(e => e.l === false).length > 0; + const hasLabeledNode = hasSelection && selection.nodes.filter(e => e.l || e.l === undefined).length > 0; const offset = $("#red-ui-workspace-chart").offset() let addX = options.x - offset.left + $("#red-ui-workspace-chart").scrollLeft() @@ -118,8 +120,8 @@ RED.contextMenu = (function () { { onselect: 'core:enable-selected-nodes', label: RED._('menu.label.enableSelectedNodes'), disabled: !hasDisabledNode }, { onselect: 'core:disable-selected-nodes', label: RED._('menu.label.disableSelectedNodes'), disabled: !hasEnabledNode }, null, - { onselect: 'core:show-selected-node-labels', label: RED._('menu.label.showSelectedNodeLabels') }, - { onselect: 'core:hide-selected-node-labels', label: RED._('menu.label.hideSelectedNodeLabels') } + { onselect: 'core:show-selected-node-labels', label: RED._('menu.label.showSelectedNodeLabels'), disabled: !hasUnlabeledNode }, + { onselect: 'core:hide-selected-node-labels', label: RED._('menu.label.hideSelectedNodeLabels'), disabled: !hasLabeledNode } ) menuItems.push({ label: RED._('sidebar.info.node'), From 84ed88c8ddda29ef33f86ead0790fc2ff506d24d Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 7 Jan 2024 18:40:39 +0900 Subject: [PATCH 3/3] Use single `forEach` instead of multiple `filter` --- .../editor-client/src/js/ui/contextMenu.js | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js index 63fb04a28..9286cc547 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js @@ -30,12 +30,26 @@ RED.contextMenu = (function () { const isGroup = hasSelection && selection.nodes.length === 1 && selection.nodes[0].type === 'group' const canEdit = !RED.workspaces.isLocked() const canRemoveFromGroup = hasSelection && !!selection.nodes[0].g - const isAllGroups = hasSelection && selection.nodes.filter(n => n.type !== 'group').length === 0 - const hasGroup = hasSelection && selection.nodes.filter(n => n.type === 'group').length > 0 - const hasDisabledNode = hasSelection && selection.nodes.filter(e => e.d).length > 0; - const hasEnabledNode = hasSelection && selection.nodes.filter(e => !e.d).length > 0; - const hasUnlabeledNode = hasSelection && selection.nodes.filter(e => e.l === false).length > 0; - const hasLabeledNode = hasSelection && selection.nodes.filter(e => e.l || e.l === undefined).length > 0; + let hasGroup, isAllGroups = true, hasDisabledNode, hasEnabledNode, hasLabeledNode, hasUnlabeledNode; + if (hasSelection) { + selection.nodes.forEach(n => { + if (n.type === 'group') { + hasGroup = true; + } else { + isAllGroups = false; + } + if (n.d) { + hasDisabledNode = true; + } else { + hasEnabledNode = true; + } + if (n.l === undefined || n.l) { + hasLabeledNode = true; + } else { + hasUnlabeledNode = true; + } + }); + } const offset = $("#red-ui-workspace-chart").offset() let addX = options.x - offset.left + $("#red-ui-workspace-chart").scrollLeft()