From a2cb730a520c02c6fcf2d797b2c864db5b9294a7 Mon Sep 17 00:00:00 2001 From: Joe Pavitt Date: Tue, 15 Apr 2025 17:11:25 +0100 Subject: [PATCH] Handle no info.downloads use case for custom catalogues --- .../editor-client/src/js/ui/palette-editor.js | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js index 20729d5ff..a37e2db87 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/palette-editor.js @@ -597,10 +597,26 @@ RED.palette.editor = (function() { } } function sortModulesRelevance(A,B) { - return sortModulesDownloads(A,B); + const defaultSort = sortModulesDownloads(A,B); + const currentFilter = searchInput.searchBox('value').trim(); + if (defaultSort === 0) { + // same number of downloads + if (currentFilter === "") { + return sortModulesAZ(A,B); + } + var i = A.info.index.indexOf(currentFilter) - B.info.index.indexOf(currentFilter); + if (i === 0) { + return sortModulesAZ(A,B); + } + return i; + } + return defaultSort; } function sortModulesDownloads(A,B) { - return B.info.downloads.week - A.info.downloads.week; + // check A has the info.downloads property - if not exising, prioritise it (likely a custom user catalogue) + const a = A.info && typeof A.info.downloads !== 'undefined' ? A.info.downloads.week : Number.MAX_SAFE_INTEGER; + const b = B.info && typeof B.info.downloads !== 'undefined' ? B.info.downloads.week : Number.MAX_SAFE_INTEGER; + return b - a; } function sortModulesAZ(A,B) { return A.info.id.localeCompare(B.info.id);