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 C98DC93C1D for ; Wed, 21 Feb 2024 10:49:56 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AFB6B139EC for ; Wed, 21 Feb 2024 10:49:56 +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 10:49:55 +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 6359F443AC for ; Wed, 21 Feb 2024 10:49:55 +0100 (CET) Message-ID: Date: Wed, 21 Feb 2024 10:49:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pmg-devel@lists.proxmox.com References: <20240213132846.3318535-1-d.csapak@proxmox.com> From: Mira Limbeck In-Reply-To: <20240213132846.3318535-1-d.csapak@proxmox.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.301 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] Subject: Re: [pmg-devel] [PATCH pmg-gui] 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 09:49:56 -0000 On 2/13/24 14:28, Dominik Csapak wrote: > 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 > --- > js/Makefile | 1 + > js/MyNetworks.js | 6 ++++++ > js/ObjectGroup.js | 6 ++++++ > js/RelayDomains.js | 6 ++++++ > js/Transport.js | 6 ++++++ > js/form/FilterField.js | 46 ++++++++++++++++++++++++++++++++++++++++++ > 6 files changed, 71 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..e8b3e19 100644 > --- a/js/MyNetworks.js > +++ b/js/MyNetworks.js > @@ -106,6 +106,12 @@ Ext.define('PMG.MyNetworks', { > }, > }, > remove_btn, > + '->', > + { > + xtype: 'pmgFilterField', > + store: store, > + filteredFields: ['cidr', 'comment'], > + }, > ]; > > Proxmox.Utils.monStoreErrors(me, store, true); > diff --git a/js/ObjectGroup.js b/js/ObjectGroup.js > index 2223ffa..7041084 100644 > --- a/js/ObjectGroup.js > +++ b/js/ObjectGroup.js > @@ -199,6 +199,12 @@ Ext.define('PMG.ObjectGroup', { > handler: run_editor, > }, > remove_btn, > + '->', > + { > + xtype: 'pmgFilterField', > + store: me.store, > + filteredFields: ['otype_text', 'descr'], This behavior is kind of unexpected, since otype_text doesn't match the visible text. When an object group contains a single mail address, and you type `address` even though none of the visible texts contain it, it still matches since the otype_text contains address. It only shows `E-Mail` though in the GUI (English language). > + }, > ], > }); > > diff --git a/js/RelayDomains.js b/js/RelayDomains.js > index ec43aa1..19e953a 100644 > --- a/js/RelayDomains.js > +++ b/js/RelayDomains.js > @@ -111,6 +111,12 @@ Ext.define('PMG.RelayDomains', { > }, > }, > remove_btn, > + '->', > + { > + xtype: 'pmgFilterField', > + store: store, > + filteredFields: ['domain', 'comment'], > + }, > ]; > > Proxmox.Utils.monStoreErrors(me, store, true); > diff --git a/js/Transport.js b/js/Transport.js > index 141fde1..fc3c28c 100644 > --- a/js/Transport.js > +++ b/js/Transport.js > @@ -72,6 +72,12 @@ Ext.define('PMG.Transport', { > callback: reload, > waitMsgTarget: me, > }, > + '->', > + { > + xtype: 'pmgFilterField', > + store: store, > + 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..0593d94 > --- /dev/null > +++ b/js/form/FilterField.js > @@ -0,0 +1,46 @@ > +Ext.define('PMG.form.FilterField', { > + extend: 'Ext.form.field.Text', > + alias: 'widget.pmgFilterField', > + > + // the store to filter > + store: undefined, > + > + // a list of fields of the records that will be searched > + 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; > + if (!me.store) { > + return; > + } > + > + if (value) { > + me.store.filterBy((rec) => me.filteredFields.some((fieldname) => > + rec.data[fieldname].toString().toLowerCase().indexOf(value.toLowerCase()) !== -1, > + ), > + ); > + field.triggers.clear.setVisible(true); > + } else { > + me.store.clearFilter(); > + field.triggers.clear.setVisible(false); > + } > + }, > + }, > + > +}); Other than the unexpected behavior mentioned above, it behaved as expected.