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 1b73430dc..9b3c8d731 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 @@ -341,8 +341,9 @@ RED.editor = (function() { nodeValue = node[property] } - const buttonId = `${prefix}-lookup-${property}` - const selectId = prefix + '-' + property + const addBtnId = `${prefix}-btn-${property}-add`; + const editBtnId = `${prefix}-btn-${property}-edit`; + const selectId = prefix + '-' + property; const input = $(`#${selectId}`); if (input.length === 0) { return; @@ -365,40 +366,68 @@ RED.editor = (function() { select.css({ 'flex-grow': 1 }); + updateConfigNodeSelect(property, type, nodeValue, prefix, filter); - const disableButton = function(disabled) { - btn.prop( "disabled", !!disabled) - btn.toggleClass("disabled", !!disabled) - } + // create the edit button - const btn = $('') + const editButton = $('') .css({ "margin-left": "10px" }) .appendTo(outerWrap); + RED.popover.tooltip(editButton, RED._('editor.editConfig', { type })); + + // create the add button + const addButton = $('') + .css({ "margin-left": "10px" }) + .appendTo(outerWrap); + RED.popover.tooltip(addButton, RED._('editor.addNewConfig', { type })); + + const disableButton = function(button, disabled) { + $(button).prop("disabled", !!disabled) + $(button).toggleClass("disabled", !!disabled) + }; + // add the click handler - btn.on("click", function (e) { + addButton.on("click", function (e) { + if (addButton.prop("disabled")) { return } + showEditConfigNodeDialog(property, type, "_ADD_", prefix, node); + e.preventDefault(); + }); + editButton.on("click", function (e) { const selectedOpt = select.find(":selected") if (selectedOpt.data('env')) { return } // don't show the dialog for env vars items (MVP. Future enhancement: lookup the env, if present, show the associated edit dialog) - if (btn.prop("disabled")) { return } + if (editButton.prop("disabled")) { return } showEditConfigNodeDialog(property, type, selectedOpt.val(), prefix, node); e.preventDefault(); }); // dont permit the user to click the button if the selected option is an env var select.on("change", function () { - const selectedOpt = select.find(":selected") + const selectedOpt = select.find(":selected"); + const optionsLength = select.find("option").length; if (selectedOpt?.data('env')) { - disableButton(true) + disableButton(addButton, true); + disableButton(editButton, true); + // disable the edit button if no options available + } else if (optionsLength === 1 && selectedOpt.val() === "_ADD_") { + disableButton(addButton, false); + disableButton(editButton, true); + } else if (selectedOpt.val() === "") { + disableButton(addButton, false); + disableButton(editButton, true); } else { - disableButton(false) + disableButton(addButton, false); + disableButton(editButton, false); } }); + var label = ""; var configNode = RED.nodes.node(nodeValue); if (configNode) { label = RED.utils.getNodeLabel(configNode, configNode.id); } + input.val(label); } @@ -892,7 +921,12 @@ RED.editor = (function() { } } - select.append(''); + if (!configNodes.length) { + select.append(''); + } else { + select.append(''); + } + window.setTimeout(function() { select.trigger("change");},50); } }