diff --git a/src/Makefile b/src/Makefile index 829081d..f661bb6 100644 --- a/src/Makefile +++ b/src/Makefile @@ -44,6 +44,7 @@ JSSRC= \ form/RoleSelector.js \ form/DiskSelector.js \ form/MultiDiskSelector.js \ + form/NotificationFilterSelector.js \ form/TaskTypeSelector.js \ form/ACME.js \ form/UserSelector.js \ diff --git a/src/form/NotificationFilterSelector.js b/src/form/NotificationFilterSelector.js new file mode 100644 index 0000000..d2ab8be --- /dev/null +++ b/src/form/NotificationFilterSelector.js @@ -0,0 +1,58 @@ +Ext.define('Proxmox.form.NotificationFilterSelector', { + extend: 'Proxmox.form.ComboGrid', + alias: ['widget.pmxNotificationFilterSelector'], + + // set default value to empty array, else it inits it with + // null and after the store load it is an empty array, + // triggering dirtychange + value: [], + valueField: 'name', + displayField: 'name', + deleteEmpty: true, + skipEmptyText: true, + allowBlank: true, + editable: false, + autoSelect: false, + + listConfig: { + columns: [ + { + header: gettext('Filter'), + dataIndex: 'name', + sortable: true, + hideable: false, + flex: 1, + }, + { + header: gettext('Comment'), + dataIndex: 'comment', + sortable: true, + hideable: false, + flex: 2, + }, + ], + }, + + initComponent: function() { + let me = this; + + Ext.apply(me, { + store: { + fields: ['name', 'comment'], + proxy: { + type: 'proxmox', + url: `/api2/json/${me.baseUrl}/filters`, + }, + sorters: [ + { + property: 'name', + direction: 'ASC', + }, + ], + autoLoad: true, + }, + }); + + me.callParent(); + }, +}); diff --git a/src/panel/GotifyEditPanel.js b/src/panel/GotifyEditPanel.js index 5d814e5..3ddcc4d 100644 --- a/src/panel/GotifyEditPanel.js +++ b/src/panel/GotifyEditPanel.js @@ -32,6 +32,15 @@ Ext.define('Proxmox.panel.GotifyEditPanel', { allowBlank: '{!isCreate}', }, }, + { + xtype: 'pmxNotificationFilterSelector', + name: 'filter', + fieldLabel: gettext('Filter'), + cbind: { + deleteEmpty: '{!isCreate}', + baseUrl: '{baseUrl}', + }, + }, { xtype: 'proxmoxtextfield', name: 'comment', diff --git a/src/panel/NotificationConfigView.js b/src/panel/NotificationConfigView.js index 9282ccd..80e38f1 100644 --- a/src/panel/NotificationConfigView.js +++ b/src/panel/NotificationConfigView.js @@ -145,6 +145,10 @@ Ext.define('Proxmox.panel.NotificationEndpointView', { initComponent: function() { let me = this; + if (!me.baseUrl) { + throw "baseUrl is not set!"; + } + let menuItems = []; for (const [endpointType, config] of Object.entries( Proxmox.Schema.notificationEndpointTypes).sort()) { diff --git a/src/panel/NotificationGroupEditPanel.js b/src/panel/NotificationGroupEditPanel.js index 910d15a..aa76810 100644 --- a/src/panel/NotificationGroupEditPanel.js +++ b/src/panel/NotificationGroupEditPanel.js @@ -21,6 +21,15 @@ Ext.define('Proxmox.panel.NotificationGroupEditPanel', { name: 'endpoint', allowBlank: false, }, + { + xtype: 'pmxNotificationFilterSelector', + name: 'filter', + fieldLabel: gettext('Filter'), + cbind: { + deleteEmpty: '{!isCreate}', + baseUrl: '{baseUrl}', + }, + }, { xtype: 'proxmoxtextfield', name: 'comment', diff --git a/src/panel/SendmailEditPanel.js b/src/panel/SendmailEditPanel.js index 33ac482..b814f39 100644 --- a/src/panel/SendmailEditPanel.js +++ b/src/panel/SendmailEditPanel.js @@ -88,6 +88,15 @@ Ext.define('Proxmox.panel.SendmailEditPanel', { return this.up('pmxSendmailEditPanel').mailValidator(); }, }, + { + xtype: 'pmxNotificationFilterSelector', + name: 'filter', + fieldLabel: gettext('Filter'), + cbind: { + deleteEmpty: '{!isCreate}', + baseUrl: '{baseUrl}', + }, + }, { xtype: 'proxmoxtextfield', name: 'comment', diff --git a/src/window/EndpointEditBase.js b/src/window/EndpointEditBase.js index 9230b99..f42d0ea 100644 --- a/src/window/EndpointEditBase.js +++ b/src/window/EndpointEditBase.js @@ -43,6 +43,7 @@ Ext.define('Proxmox.window.EndpointEditBase', { name: me.name, xtype: endpointConfig.ipanel, isCreate: me.isCreate, + baseUrl: me.baseUrl, type: me.type, }], });