From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 6A07F940BE for ; Wed, 21 Feb 2024 14:01:42 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 46D9E17A4A for ; Wed, 21 Feb 2024 14:01:42 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 21 Feb 2024 14:01:41 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 0D76C44470 for ; Wed, 21 Feb 2024 14:01:41 +0100 (CET) From: Dominik Csapak To: pmg-devel@lists.proxmox.com Date: Wed, 21 Feb 2024 14:01:39 +0100 Message-Id: <20240221130139.1950462-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.019 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [rec.data, defines.mk, me.store] Subject: [pmg-devel] [PATCH pmg-gui v2] fix #4510: add filter box to many grids X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Feb 2024 13:01:42 -0000 namely relay domains, transports, trusted networks, smtp whitelist + when/what/who object grids. Adds a new 'FilterField', that takes a store and a list of columns to filter, and filters on every change. Signed-off-by: Dominik Csapak --- changes from v1: * lookup store automatically * add ability to add a renderer so that we can match that what is displayed * add that for the ObjectGroup's otype filter (previously otype_text) js/Makefile | 1 + js/MyNetworks.js | 5 ++++ js/ObjectGroup.js | 11 ++++++++ js/RelayDomains.js | 5 ++++ js/Transport.js | 5 ++++ js/form/FilterField.js | 58 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 85 insertions(+) create mode 100644 js/form/FilterField.js diff --git a/js/Makefile b/js/Makefile index 78f2b57..5f57e0d 100644 --- a/js/Makefile +++ b/js/Makefile @@ -2,6 +2,7 @@ include ../defines.mk JSSRC= \ Utils.js \ + form/FilterField.js \ FilterProxy.js \ LoginView.js \ RoleSelector.js \ diff --git a/js/MyNetworks.js b/js/MyNetworks.js index 22a8577..9976e6e 100644 --- a/js/MyNetworks.js +++ b/js/MyNetworks.js @@ -106,6 +106,11 @@ Ext.define('PMG.MyNetworks', { }, }, remove_btn, + '->', + { + xtype: 'pmgFilterField', + filteredFields: ['cidr', 'comment'], + }, ]; Proxmox.Utils.monStoreErrors(me, store, true); diff --git a/js/ObjectGroup.js b/js/ObjectGroup.js index 2223ffa..387fd54 100644 --- a/js/ObjectGroup.js +++ b/js/ObjectGroup.js @@ -199,6 +199,17 @@ Ext.define('PMG.ObjectGroup', { handler: run_editor, }, remove_btn, + '->', + { + xtype: 'pmgFilterField', + filteredFields: [ + { + name: 'otype', + renderer: (otype) => PMG.Utils.object_editors[otype].subject, + }, + 'descr', + ], + }, ], }); diff --git a/js/RelayDomains.js b/js/RelayDomains.js index ec43aa1..68395db 100644 --- a/js/RelayDomains.js +++ b/js/RelayDomains.js @@ -111,6 +111,11 @@ Ext.define('PMG.RelayDomains', { }, }, remove_btn, + '->', + { + xtype: 'pmgFilterField', + filteredFields: ['domain', 'comment'], + }, ]; Proxmox.Utils.monStoreErrors(me, store, true); diff --git a/js/Transport.js b/js/Transport.js index 141fde1..2758918 100644 --- a/js/Transport.js +++ b/js/Transport.js @@ -72,6 +72,11 @@ Ext.define('PMG.Transport', { callback: reload, waitMsgTarget: me, }, + '->', + { + xtype: 'pmgFilterField', + filteredFields: ['domain', 'host', 'port', 'protocol', 'comment'], + }, ], viewConfig: { trackOver: false, diff --git a/js/form/FilterField.js b/js/form/FilterField.js new file mode 100644 index 0000000..53fdfbf --- /dev/null +++ b/js/form/FilterField.js @@ -0,0 +1,58 @@ +Ext.define('PMG.form.FilterField', { + extend: 'Ext.form.field.Text', + alias: 'widget.pmgFilterField', + + // the store to filter + // optional, if not given the first parent grids store will be used + store: undefined, + + // a list of fields of the records that will be searched + // a field can be a string (dataIndex) or an object with 'name' and 'renderer' + // the renderer will be used before testing the field + filteredFields: [], + + fieldLabel: gettext('Filter'), + labelAlign: 'right', + + triggers: { + clear: { + cls: 'pmx-clear-trigger', + hidden: true, + handler: function() { + let me = this; + me.setValue(''); + me.triggers.clear.setVisible(false); + }, + }, + }, + + listeners: { + change: function(field, value) { + let me = this; + let grid = me.up('grid'); + if (!me.store) { + me.store = grid.getStore(); + } + + if (value) { + me.store.filterBy((rec) => me.filteredFields.some((fieldDef) => { + let fieldname, renderer; + if (Ext.isObject(fieldDef)) { + fieldname = fieldDef.name; + renderer = fieldDef.renderer; + } else { + fieldname = fieldDef; + renderer = Ext.identityFn; + } + let testedValue = renderer(rec.data[fieldname]); + return testedValue.toString().toLowerCase().indexOf(value.toLowerCase()) !== -1; + })); + field.triggers.clear.setVisible(true); + } else { + me.store.clearFilter(); + field.triggers.clear.setVisible(false); + } + }, + }, + +}); -- 2.30.2