notify: change 'Remove' button to 'Reset to default' for built-ins

A HTTP DELETE for a built-in target/matcher acts as a reset to its
defaults. This patch changes the 'Remove' button text based on the
selected target/matcher. If it is a built-in, the button text is
changed to 'Reset to default'. Also, if the built-in is not actually
modified, the button is disabled.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
This commit is contained in:
Lukas Wagner 2023-12-14 10:48:44 +01:00 committed by Thomas Lamprecht
parent 26e2aa7ce4
commit 83bae06cae

View File

@ -1,3 +1,32 @@
Ext.define('Proxmox.panel.NotificationConfigViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.pmxNotificationConfigPanel',
formulas: {
builtinSelected: function(get) {
let origin = get('selection')?.get('origin');
return origin === 'modified-builtin' || origin === 'builtin';
},
removeButtonText: function(get) {
if (get('builtinSelected')) {
return gettext('Reset to default');
} else {
return gettext('Remove');
}
},
removeButtonConfirmMessage: function(get) {
if (get('builtinSelected')) {
return gettext('Do you want to reset {0} to its default settings?');
} else {
// Use default message provided by the button
return undefined;
}
},
},
});
Ext.define('Proxmox.panel.NotificationConfigView', { Ext.define('Proxmox.panel.NotificationConfigView', {
extend: 'Ext.panel.Panel', extend: 'Ext.panel.Panel',
alias: 'widget.pmxNotificationConfigView', alias: 'widget.pmxNotificationConfigView',
@ -36,6 +65,14 @@ Ext.define('Proxmox.panel.NotificationEndpointView', {
title: gettext('Notification Targets'), title: gettext('Notification Targets'),
viewModel: {
type: 'pmxNotificationConfigPanel',
},
bind: {
selection: '{selection}',
},
controller: { controller: {
xclass: 'Ext.app.ViewController', xclass: 'Ext.app.ViewController',
@ -70,6 +107,7 @@ Ext.define('Proxmox.panel.NotificationEndpointView', {
let me = this; let me = this;
let view = me.getView(); let view = me.getView();
view.getStore().rstore.load(); view.getStore().rstore.load();
this.getView().setSelection(null);
}, },
testEndpoint: function() { testEndpoint: function() {
@ -205,9 +243,17 @@ Ext.define('Proxmox.panel.NotificationEndpointView', {
{ {
xtype: 'proxmoxStdRemoveButton', xtype: 'proxmoxStdRemoveButton',
callback: 'reload', callback: 'reload',
bind: {
text: '{removeButtonText}',
customConfirmationMessage: '{removeButtonConfirmMessage}',
},
getUrl: function(rec) { getUrl: function(rec) {
return `${me.baseUrl}/endpoints/${rec.data.type}/${rec.getId()}`; return `${me.baseUrl}/endpoints/${rec.data.type}/${rec.getId()}`;
}, },
enableFn: (rec) => {
let origin = rec.get('origin');
return origin === 'user-created' || origin === 'modified-builtin';
},
}, },
'-', '-',
{ {
@ -260,9 +306,18 @@ Ext.define('Proxmox.panel.NotificationMatcherView', {
reload: function() { reload: function() {
this.getView().getStore().rstore.load(); this.getView().getStore().rstore.load();
this.getView().setSelection(null);
}, },
}, },
viewModel: {
type: 'pmxNotificationConfigPanel',
},
bind: {
selection: '{selection}',
},
listeners: { listeners: {
itemdblclick: 'openEditForSelectedItem', itemdblclick: 'openEditForSelectedItem',
activate: 'reload', activate: 'reload',
@ -342,7 +397,15 @@ Ext.define('Proxmox.panel.NotificationMatcherView', {
{ {
xtype: 'proxmoxStdRemoveButton', xtype: 'proxmoxStdRemoveButton',
callback: 'reload', callback: 'reload',
bind: {
text: '{removeButtonText}',
customConfirmationMessage: '{removeButtonConfirmMessage}',
},
baseurl: `${me.baseUrl}/matchers`, baseurl: `${me.baseUrl}/matchers`,
enableFn: (rec) => {
let origin = rec.get('origin');
return origin === 'user-created' || origin === 'modified-builtin';
},
}, },
], ],
}); });