From 84cc2ad0fafe16b579fe6ca6a20e55c6fbbf1a52 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 18 Dec 2018 10:57:33 +0000 Subject: [PATCH] Allow TypeSearch to include a filter option --- .../editor-client/src/js/ui/typeSearch.js | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) 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 0e0ce98b3..532d84274 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 @@ -200,7 +200,7 @@ RED.typeSearch = (function() { dialog.hide(); searchResultsDiv.hide(); } - refreshTypeList(); + refreshTypeList(opts); addCallback = opts.add; closeCallback = opts.close; RED.events.emit("type-search:open"); @@ -254,21 +254,29 @@ RED.typeSearch = (function() { return 1; } } - function refreshTypeList() { + function applyFilter(filter,type,def) { + return !filter || + ( + (!filter.type || type === filter.type) && + (!filter.input || def.inputs > 0) && + (!filter.output || def.outputs > 0) + ) + } + function refreshTypeList(opts) { var i; searchResults.editableList('empty'); searchInput.searchBox('value',''); selected = -1; var common = [ 'inject','debug','function','change','switch' - ]; + ].filter(function(t) { return applyFilter(opts.filter,t,RED.nodes.getType(t)); }); var recentlyUsed = Object.keys(typesUsed); recentlyUsed.sort(function(a,b) { return typesUsed[b]-typesUsed[a]; }); recentlyUsed = recentlyUsed.filter(function(t) { - return common.indexOf(t) === -1; + return applyFilter(opts.filter,t,RED.nodes.getType(t)) && common.indexOf(t) === -1; }); var items = []; @@ -313,8 +321,10 @@ RED.typeSearch = (function() { searchResults.editableList('addItem', item); } for (i=0;i