diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/typeSearch.js b/packages/node_modules/@node-red/editor-client/src/js/ui/typeSearch.js index 06e09ca19..089898a95 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/typeSearch.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/typeSearch.js @@ -26,6 +26,11 @@ RED.typeSearch = (function() { selected = 0; searchResults.children().removeClass('selected'); searchResults.children(":visible:first").addClass('selected'); + const children = searchResults.children(":visible"); + const n = $(children[selected]).find(".red-ui-editableList-item-content").data('data'); + if (n) { + updateSuggestion(n) + } },100); } @@ -64,7 +69,7 @@ RED.typeSearch = (function() { } }); searchInput.on('keydown',function(evt) { - var children = searchResults.children(":visible"); + const children = searchResults.children(":visible"); if (evt.keyCode === 40 && evt.shiftKey) { evt.preventDefault(); moveDialog(0,10); @@ -87,9 +92,14 @@ RED.typeSearch = (function() { selected++; } $(children[selected]).addClass('selected'); + const n = $(children[selected]).find(".red-ui-editableList-item-content").data('data'); + if (n) { + updateSuggestion(n) + } ensureSelectedIsVisible(); evt.preventDefault(); } else if (evt.keyCode === 38) { + // Up if (selected > 0) { if (selected < children.length) { $(children[selected]).removeClass('selected'); @@ -97,6 +107,10 @@ RED.typeSearch = (function() { selected--; } $(children[selected]).addClass('selected'); + const n = $(children[selected]).find(".red-ui-editableList-item-content").data('data'); + if (n) { + updateSuggestion(n) + } ensureSelectedIsVisible(); evt.preventDefault(); } else if ((evt.metaKey || evt.ctrlKey) && evt.keyCode === 13 ) { @@ -104,7 +118,7 @@ RED.typeSearch = (function() { // (ctrl or cmd) and enter var index = Math.max(0,selected); if (index < children.length) { - var n = $(children[index]).find(".red-ui-editableList-item-content").data('data'); + const n = $(children[index]).find(".red-ui-editableList-item-content").data('data'); if (!n.nodes && !/^_action_:/.test(n.type)) { typesUsed[n.type] = Date.now(); } @@ -233,35 +247,42 @@ RED.typeSearch = (function() { confirm(nodeItem); }); div.on('mouseenter', function() { - if (suggestCallback) { - if (nodeItem.nodes) { - // This is a multi-node suggestion - suggestCallback({ - nodes: nodeItem.nodes - }); - } else if (nodeItem.type) { - // Single node suggestion - suggestCallback({ - nodes: [{ - x: 0, - y: 0, - type: nodeItem.type - }] - }); - } + const children = searchResults.children(":visible"); + if (selected > -1 && selected < children.length) { + $(children[selected]).removeClass('selected'); } + const editableListItem = container.parent() + selected = children.index(editableListItem); + $(children[selected]).addClass('selected'); + updateSuggestion(nodeItem); }) - div.on('mouseleave', function() { - if (suggestCallback) { - suggestCallback(null); - } - }) - }, scrollOnAdd: false }); } + + function updateSuggestion(nodeItem) { + if (suggestCallback) { + if (!nodeItem) { + suggestCallback(null); + } else if (nodeItem.nodes) { + // This is a multi-node suggestion + suggestCallback({ + nodes: nodeItem.nodes + }); + } else if (nodeItem.type) { + // Single node suggestion + suggestCallback({ + nodes: [{ + x: 0, + y: 0, + type: nodeItem.type + }] + }); + } + } + } function confirm(def) { hide(); if (!def.nodes && !/^_action_:/.test(def.type)) { @@ -338,6 +359,9 @@ RED.typeSearch = (function() { },200); } function hide(fast) { + if (suggestCallback) { + suggestCallback(null); + } if (visible) { visible = false; if (dialog !== null) {