mirror of
https://git.proxmox.com/git/proxmox-widget-toolkit
synced 2025-05-23 19:57:32 +00:00
notification: add ui for managing notification filters
This commit adds a new dialog window, containing all fields necessary to configure notification filters. Signed-off-by: Lukas Wagner <l.wagner@proxmox.com> Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
90dbb2d359
commit
5d1b587fdd
@ -89,7 +89,8 @@ JSSRC= \
|
|||||||
window/ACMEAccount.js \
|
window/ACMEAccount.js \
|
||||||
window/ACMEPluginEdit.js \
|
window/ACMEPluginEdit.js \
|
||||||
window/ACMEDomains.js \
|
window/ACMEDomains.js \
|
||||||
window/EndpointEditBase.js \
|
window/EndpointEditBase.js \
|
||||||
|
window/NotificationFilterEdit.js \
|
||||||
window/FileBrowser.js \
|
window/FileBrowser.js \
|
||||||
window/AuthEditBase.js \
|
window/AuthEditBase.js \
|
||||||
window/AuthEditOpenId.js \
|
window/AuthEditOpenId.js \
|
||||||
|
@ -6,3 +6,12 @@ Ext.define('proxmox-notification-endpoints', {
|
|||||||
},
|
},
|
||||||
idProperty: 'name',
|
idProperty: 'name',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Ext.define('proxmox-notification-filters', {
|
||||||
|
extend: 'Ext.data.Model',
|
||||||
|
fields: ['name', 'comment'],
|
||||||
|
proxy: {
|
||||||
|
type: 'proxmox',
|
||||||
|
},
|
||||||
|
idProperty: 'name',
|
||||||
|
});
|
||||||
|
@ -15,6 +15,17 @@ Ext.define('Proxmox.panel.NotificationConfigView', {
|
|||||||
baseUrl: '{baseUrl}',
|
baseUrl: '{baseUrl}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
region: 'south',
|
||||||
|
height: '50%',
|
||||||
|
border: false,
|
||||||
|
collapsible: true,
|
||||||
|
animCollapse: false,
|
||||||
|
xtype: 'pmxNotificationFilterView',
|
||||||
|
cbind: {
|
||||||
|
baseUrl: '{baseUrl}',
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -198,3 +209,111 @@ Ext.define('Proxmox.panel.NotificationEndpointView', {
|
|||||||
me.store.rstore.proxy.setUrl(`/api2/json/${me.baseUrl}/targets`);
|
me.store.rstore.proxy.setUrl(`/api2/json/${me.baseUrl}/targets`);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Ext.define('Proxmox.panel.NotificationFilterView', {
|
||||||
|
extend: 'Ext.grid.Panel',
|
||||||
|
alias: 'widget.pmxNotificationFilterView',
|
||||||
|
|
||||||
|
title: gettext('Notification Filters'),
|
||||||
|
|
||||||
|
controller: {
|
||||||
|
xclass: 'Ext.app.ViewController',
|
||||||
|
|
||||||
|
openEditWindow: function(filter) {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
Ext.create('Proxmox.window.NotificationFilterEdit', {
|
||||||
|
baseUrl: me.getView().baseUrl,
|
||||||
|
name: filter,
|
||||||
|
autoShow: true,
|
||||||
|
listeners: {
|
||||||
|
destroy: () => me.reload(),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
openEditForSelectedItem: function() {
|
||||||
|
let me = this;
|
||||||
|
let view = me.getView();
|
||||||
|
|
||||||
|
let selection = view.getSelection();
|
||||||
|
if (selection.length < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
me.openEditWindow(selection[0].data.name);
|
||||||
|
},
|
||||||
|
|
||||||
|
reload: function() {
|
||||||
|
this.getView().getStore().rstore.load();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
itemdblclick: 'openEditForSelectedItem',
|
||||||
|
activate: 'reload',
|
||||||
|
},
|
||||||
|
|
||||||
|
emptyText: gettext('No notification filters configured'),
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
dataIndex: 'name',
|
||||||
|
text: gettext('Filter Name'),
|
||||||
|
renderer: Ext.String.htmlEncode,
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'comment',
|
||||||
|
text: gettext('Comment'),
|
||||||
|
renderer: Ext.String.htmlEncode,
|
||||||
|
flex: 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
store: {
|
||||||
|
type: 'diff',
|
||||||
|
autoDestroy: true,
|
||||||
|
autoDestroyRstore: true,
|
||||||
|
rstore: {
|
||||||
|
type: 'update',
|
||||||
|
storeid: 'proxmox-notification-filters',
|
||||||
|
model: 'proxmox-notification-filters',
|
||||||
|
autoStart: true,
|
||||||
|
},
|
||||||
|
sorters: 'name',
|
||||||
|
},
|
||||||
|
|
||||||
|
initComponent: function() {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
if (!me.baseUrl) {
|
||||||
|
throw "baseUrl is not set!";
|
||||||
|
}
|
||||||
|
|
||||||
|
Ext.apply(me, {
|
||||||
|
tbar: [
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxButton',
|
||||||
|
text: gettext('Add'),
|
||||||
|
handler: () => me.getController().openEditWindow(),
|
||||||
|
selModel: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxButton',
|
||||||
|
text: gettext('Modify'),
|
||||||
|
handler: 'openEditForSelectedItem',
|
||||||
|
disabled: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxStdRemoveButton',
|
||||||
|
callback: 'reload',
|
||||||
|
baseurl: `${me.baseUrl}/filters`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
me.callParent();
|
||||||
|
me.store.rstore.proxy.setUrl(`/api2/json/${me.baseUrl}/filters`);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
109
src/window/NotificationFilterEdit.js
Normal file
109
src/window/NotificationFilterEdit.js
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
Ext.define('Proxmox.panel.NotificationFilterEditPanel', {
|
||||||
|
extend: 'Proxmox.panel.InputPanel',
|
||||||
|
xtype: 'pmxNotificationFilterEditPanel',
|
||||||
|
mixins: ['Proxmox.Mixin.CBind'],
|
||||||
|
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
xtype: 'pmxDisplayEditField',
|
||||||
|
name: 'name',
|
||||||
|
cbind: {
|
||||||
|
value: '{name}',
|
||||||
|
editable: '{isCreate}',
|
||||||
|
},
|
||||||
|
fieldLabel: gettext('Filter Name'),
|
||||||
|
allowBlank: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxKVComboBox',
|
||||||
|
name: 'min-severity',
|
||||||
|
fieldLabel: gettext('Minimum Severity'),
|
||||||
|
value: null,
|
||||||
|
cbind: {
|
||||||
|
deleteEmpty: '{!isCreate}',
|
||||||
|
},
|
||||||
|
comboItems: [
|
||||||
|
['info', 'info'],
|
||||||
|
['notice', 'notice'],
|
||||||
|
['warning', 'warning'],
|
||||||
|
['error', 'error'],
|
||||||
|
],
|
||||||
|
triggers: {
|
||||||
|
clear: {
|
||||||
|
cls: 'pmx-clear-trigger',
|
||||||
|
weight: -1,
|
||||||
|
hidden: false,
|
||||||
|
handler: function() {
|
||||||
|
this.setValue('');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxcheckbox',
|
||||||
|
fieldLabel: gettext('Invert match'),
|
||||||
|
name: 'invert-match',
|
||||||
|
uncheckedValue: 0,
|
||||||
|
defaultValue: 0,
|
||||||
|
cbind: {
|
||||||
|
deleteDefaultValue: '{!isCreate}',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxtextfield',
|
||||||
|
name: 'comment',
|
||||||
|
fieldLabel: gettext('Comment'),
|
||||||
|
cbind: {
|
||||||
|
deleteEmpty: '{!isCreate}',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
Ext.define('Proxmox.window.NotificationFilterEdit', {
|
||||||
|
extend: 'Proxmox.window.Edit',
|
||||||
|
|
||||||
|
isAdd: true,
|
||||||
|
|
||||||
|
fieldDefaults: {
|
||||||
|
labelWidth: 120,
|
||||||
|
},
|
||||||
|
|
||||||
|
width: 500,
|
||||||
|
|
||||||
|
initComponent: function() {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
me.isCreate = !me.name;
|
||||||
|
|
||||||
|
if (!me.baseUrl) {
|
||||||
|
throw "baseUrl not set";
|
||||||
|
}
|
||||||
|
|
||||||
|
me.url = `/api2/extjs${me.baseUrl}/filters`;
|
||||||
|
|
||||||
|
if (me.isCreate) {
|
||||||
|
me.method = 'POST';
|
||||||
|
} else {
|
||||||
|
me.url += `/${me.name}`;
|
||||||
|
me.method = 'PUT';
|
||||||
|
}
|
||||||
|
|
||||||
|
me.subject = gettext('Notification Filter');
|
||||||
|
|
||||||
|
Ext.apply(me, {
|
||||||
|
items: [{
|
||||||
|
name: me.name,
|
||||||
|
xtype: 'pmxNotificationFilterEditPanel',
|
||||||
|
isCreate: me.isCreate,
|
||||||
|
baseUrl: me.baseUrl,
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
|
||||||
|
me.callParent();
|
||||||
|
|
||||||
|
if (!me.isCreate) {
|
||||||
|
me.load();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user