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 cba3f4ba6..0546c315e 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 @@ -1839,7 +1839,7 @@ RED.palette.editor = (function() { interactive: true, direction: "bottom", content: function () { - const count = updateAvailable.length || 0; + const count = moduleUpdates.length || 0 const content = $('
'); if (updateStatusState.version) { $(`${RED._("telemetry.updateAvailableDesc", updateStatusState)}`).appendTo(content) @@ -1849,7 +1849,7 @@ RED.palette.editor = (function() { updateStatusWidgetPopover.close() RED.actions.invoke("core:manage-palette", { view: "nodes", - filter: '"' + updateAvailable.join('", "') + '"' + filter: '"' + moduleUpdates.map(u => u.package).join('", "') + '"' }); }).appendTo(content) } @@ -1871,7 +1871,7 @@ RED.palette.editor = (function() { function refreshUpdateStatus() { clearTimeout(pendingRefreshTimeout) pendingRefreshTimeout = setTimeout(() => { - updateAvailable = []; + moduleUpdates.length = 0 for (const module of Object.keys(nodeEntries)) { if (loadedIndex.hasOwnProperty(module)) { const moduleInfo = nodeEntries[module].info; @@ -1879,35 +1879,49 @@ RED.palette.editor = (function() { // Module updated continue; } + const current = moduleInfo.version + const latest = loadedIndex[module].version if (updateAllowed && - semVerCompare(loadedIndex[module].version, moduleInfo.version) > 0 && + semVerCompare(latest, current) > 0 && RED.utils.checkModuleAllowed(module, null, updateAllowList, updateDenyList) ) { - updateAvailable.push(module); + moduleUpdates.push({ package: module, current, latest }) } } } - updateStatusState.moduleCount = updateAvailable.length; + updateStatusState.moduleCount = moduleUpdates.length updateStatus(); }, 200) } function updateStatus() { - if (updateStatusState.moduleCount || updateStatusState.version) { + const updates = RED.palette.editor.updates + if (updates.count > 0) { updateStatusWidget.empty(); - let count = updateStatusState.moduleCount || 0; - if (updateStatusState.version) { - count ++ - } - $(` ${RED._("telemetry.updateAvailable", { count: count })}`).appendTo(updateStatusWidget); + $(` ${RED._("telemetry.updateAvailable", { count: updates.count })}`).appendTo(updateStatusWidget); RED.statusBar.show("red-ui-status-package-update"); } else { RED.statusBar.hide("red-ui-status-package-update"); } + RED.events.emit("registry:updates-available", updates) } return { init: init, - install: install + install: install, + get updates() { + const palette = [...moduleUpdates] + let core = null + let count = palette.length + if (updateStatusState.version) { + core = { current: RED.settings.version, latest: updateStatusState.version } + count ++ + } + return { + count, + core, + palette + } + } } })();