From e71fc6e43852be81ea1df4f0dc0b49363ae71801 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Wed, 30 Jun 2021 17:14:58 +0200 Subject: [PATCH] APTRepositories: make the Suites warnings inline errors by iterating only once over the info array and adding them directly to the records this way we can avoid iterating over the records again Signed-off-by: Dominik Csapak --- src/node/APTRepositories.js | 100 +++++++++++++++++------------------- 1 file changed, 46 insertions(+), 54 deletions(-) diff --git a/src/node/APTRepositories.js b/src/node/APTRepositories.js index bb2bde0..8743be9 100644 --- a/src/node/APTRepositories.js +++ b/src/node/APTRepositories.js @@ -264,8 +264,20 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', { { header: gettext('Suites'), dataIndex: 'Suites', - renderer: function(suites, cell, record) { - return suites.join(' '); + renderer: function(suites, metaData, record) { + let err = ''; + if (record.data.warnings && record.data.warnings.length > 0) { + let txt = [gettext('Warning')]; + record.data.warnings.forEach((warning) => { + if (warning.property === 'Suites') { + txt.push(warning.message); + } + }); + metaData.tdAttr = `data-qtip="${Ext.htmlEncode(txt.join('
'))}"`; + metaData.tdCls = 'proxmox-invalid-row'; + err = ' '; + } + return suites.join(' ') + err; }, width: 130, }, @@ -325,53 +337,6 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', { }, ], - addAdditionalInfos: function(gridData, infos) { - let me = this; - - let warnings = {}; - let origins = {}; - - let addLine = function(obj, key, line) { - if (obj[key]) { - obj[key] += "\n"; - obj[key] += line; - } else { - obj[key] = line; - } - }; - - for (const info of infos) { - const key = `${info.path}:${info.index}`; - if (info.kind === 'warning' || - (info.kind === 'ignore-pre-upgrade-warning' && !me.majorUpgradeAllowed) - ) { - addLine(warnings, key, gettext('Warning') + ": " + info.message); - } else if (info.kind === 'origin') { - origins[key] = info.message; - } - } - - gridData.forEach(function(record) { - const key = `${record.Path}:${record.Index}`; - record.Origin = origins[key]; - }); - - me.rowBodyFeature.getAdditionalData = function(innerData, rowIndex, record, orig) { - let headerCt = this.view.headerCt; - let colspan = headerCt.getColumnCount(); - - const key = `${innerData.Path}:${innerData.Index}`; - const warning_text = warnings[key]; - - return { - rowBody: '
' + - Ext.String.htmlEncode(warning_text) + '
', - rowBodyCls: warning_text ? '' : Ext.baseCSSPrefix + 'grid-row-body-hidden', - rowBodyColspan: colspan, - }; - }; - }, - initComponent: function() { let me = this; @@ -390,8 +355,6 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', { ], }); - let rowBodyFeature = Ext.create('Ext.grid.feature.RowBody', {}); - let groupingFeature = Ext.create('Ext.grid.feature.Grouping', { groupHeaderTpl: '{[ "File: " + values.name ]} ({rows.length} ' + 'repositor{[values.rows.length > 1 ? "ies" : "y"]})', @@ -403,8 +366,7 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', { Ext.apply(me, { store: store, selModel: sm, - rowBodyFeature: rowBodyFeature, - features: [groupingFeature, rowBodyFeature], + features: [groupingFeature], }); me.callParent(); @@ -576,16 +538,46 @@ Ext.define('Proxmox.node.APTRepositories', { errors = data.errors; digest = data.digest; + let infos = {}; + for (const info of data.infos) { + let path = info.path; + let idx = info.index; + + if (!infos[path]) { + infos[path] = {}; + } + if (!infos[path][idx]) { + infos[path][idx] = { + origin: '', + warnings: [], + }; + } + + if (info.kind === 'origin') { + infos[path][idx].origin = info.message; + } else if (info.kind === 'warning' || + (info.kind === 'ignore-pre-upgrade-warning' && !repoGrid.majorUpgradeAllowed) + ) { + infos[path][idx].warnings.push(info); + } else { + throw 'unknown info'; + } + } + + files.forEach(function(file) { for (let n = 0; n < file.repositories.length; n++) { let repo = file.repositories[n]; repo.Path = file.path; repo.Index = n; + if (infos[file.path] && infos[file.path][n]) { + repo.Origin = infos[file.path][n].origin || Proxmox.Utils.UnknownText; + repo.warnings = infos[file.path][n].warnings || []; + } gridData.push(repo); } }); - repoGrid.addAdditionalInfos(gridData, data.infos); repoGrid.store.loadData(gridData); me.updateStandardRepos(data['standard-repos']); -- 2.39.2