]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - src/node/APTRepositories.js
node: repos: add online help
[proxmox-widget-toolkit.git] / src / node / APTRepositories.js
index e30396b98020e10fc06d0614e25ed4476fb4b8b7..2622f5c1099a5390588c70a2af5a4056f9969487 100644 (file)
@@ -141,6 +141,7 @@ Ext.define('Proxmox.node.APTRepositoriesErrors', {
 Ext.define('Proxmox.node.APTRepositoriesGrid', {
     extend: 'Ext.grid.GridPanel',
     xtype: 'proxmoxNodeAPTRepositoriesGrid',
+    mixins: ['Proxmox.Mixin.CBind'],
 
     title: gettext('APT Repositories'),
 
@@ -162,6 +163,9 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', {
            name: 'addRepo',
            disabled: true,
            repoInfo: undefined,
+           cbind: {
+               onlineHelp: '{onlineHelp}',
+           },
            handler: function(button, event, record) {
                Proxmox.Utils.checked_command(() => {
                    let me = this;
@@ -177,6 +181,7 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', {
                        url: `/api2/extjs/nodes/${panel.nodename}/apt/repositories`,
                        method: 'PUT',
                        extraRequestParams: extraParams,
+                       onlineHelp: me.onlineHelp,
                        listeners: {
                            destroy: function() {
                                panel.reload();
@@ -360,7 +365,7 @@ Ext.define('Proxmox.node.APTRepositoriesGrid', {
                let cls = 'fa fa-fw fa-question-circle-o';
                if (value.match(/^\s*Proxmox\s*$/i)) {
                    cls = 'pmx-itype-icon pmx-itype-icon-proxmox-x';
-               } else if (value.match(/^\s*Debian\s*$/i)) {
+               } else if (value.match(/^\s*Debian\s*(:?Backports)?$/i)) {
                    cls = 'pmx-itype-icon pmx-itype-icon-debian-swirl';
                }
                return `<i class='${cls}'></i> ${value}`;
@@ -410,6 +415,8 @@ Ext.define('Proxmox.node.APTRepositories', {
 
     digest: undefined,
 
+    onlineHelp: undefined,
+
     product: 'Proxmox VE', // default
 
     controller: {
@@ -436,17 +443,7 @@ Ext.define('Proxmox.node.APTRepositories', {
            let status = 'good'; // start with best, the helper below will downgrade if needed
            let text = gettext('All OK, you have production-ready repositories configured!');
 
-           let errors = vm.get('errors');
-           errors.forEach((error) => {
-               status = 'critical';
-               store.add({
-                   status: 'critical',
-                   message: `${error.path} - ${error.error}`,
-               });
-           });
-
            let addGood = message => store.add({ status: 'good', message });
-
            let addWarn = (message, important) => {
                if (status !== 'critical') {
                    status = 'warning';
@@ -454,6 +451,14 @@ Ext.define('Proxmox.node.APTRepositories', {
                }
                store.add({ status: 'warning', message });
            };
+           let addCritical = (message, important) => {
+               status = 'critical';
+               text = important ? message : gettext('Error');
+               store.add({ status: 'critical', message });
+           };
+
+           let errors = vm.get('errors');
+           errors.forEach(error => addCritical(`${error.path} - ${error.error}`));
 
            let activeSubscription = vm.get('subscriptionActive');
            let enterprise = vm.get('enterpriseRepo');
@@ -462,12 +467,11 @@ Ext.define('Proxmox.node.APTRepositories', {
            let wrongSuites = vm.get('suitesWarning');
 
            if (!enterprise && !nosubscription && !test) {
-               status = 'critical';
-               text = gettext('Error');
-               store.add({
-                   status: 'critical',
-                   message: Ext.String.format(gettext('No {0} repository is enabled, you do not get any updates!'), vm.get('product')),
-               });
+               addCritical(
+                   Ext.String.format(gettext('No {0} repository is enabled, you do not get any updates!'), vm.get('product')),
+               );
+           } else if (errors.length > 0) {
+               // nothing extra, just avoid that we show "get updates"
            } else if (enterprise && !nosubscription && !test && activeSubscription) {
                addGood(Ext.String.format(gettext('You get supported updates for {0}'), vm.get('product')));
            } else if (nosubscription || test) {
@@ -491,7 +495,7 @@ Ext.define('Proxmox.node.APTRepositories', {
            }
 
            if (errors.length > 0) {
-               text = gettext('Fatal error when parsing at least one repository');
+               text = gettext('Fatal parsing error for at least one repository');
            }
 
            let iconCls = Proxmox.Utils.get_health_icon(status, true);
@@ -578,6 +582,7 @@ Ext.define('Proxmox.node.APTRepositories', {
            flex: 1,
            cbind: {
                nodename: '{nodename}',
+               onlineHelp: '{onlineHelp}',
            },
            majorUpgradeAllowed: false, // TODO get release information from an API call?
            listeners: {
@@ -668,9 +673,6 @@ Ext.define('Proxmox.node.APTRepositories', {
                        (info.kind === 'ignore-pre-upgrade-warning' && !repoGrid.majorUpgradeAllowed)
                    ) {
                        infos[path][idx].warnings.push(info);
-                       if (!suitesWarning && info.property === 'Suites') {
-                           suitesWarning = true;
-                       }
                    } else {
                        throw 'unknown info';
                    }
@@ -685,6 +687,10 @@ Ext.define('Proxmox.node.APTRepositories', {
                        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 || [];
+
+                           if (repo.Enabled && repo.warnings.some(w => w.property === 'Suites')) {
+                               suitesWarning = true;
+                           }
                        }
                        gridData.push(repo);
                    }