From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 97CB01FF142 for ; Tue, 21 Apr 2026 14:04:33 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2DFB1201CF; Tue, 21 Apr 2026 14:01:05 +0200 (CEST) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Subject: [PATCH datacenter-manager] ui: views: correctly set filter values on edit Date: Tue, 21 Apr 2026 13:59:56 +0200 Message-ID: <20260421120002.2411373-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.050 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 Message-ID-Hash: XNWLEH4AKUESFVXAB3KTPPMZE3EU337U X-Message-ID-Hash: XNWLEH4AKUESFVXAB3KTPPMZE3EU337U X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: There were two issues here: * use of 'default' instead of 'value': this triggered an unnecessary change and did not properly track the value for reset * change of the filter even if the old type was the same. This lead to a change from e.g. "remote:foo" to "remote:" which overwrote the filter value with an empty string. This happens on reset, when the type was changed, as we force the value to the original one which triggers an on_change. With these two fixed, the view edit window works properly now. Signed-off-by: Dominik Csapak --- ui/src/widget/view_filter_selector.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/ui/src/widget/view_filter_selector.rs b/ui/src/widget/view_filter_selector.rs index 9d3fb7c7..9db83b25 100644 --- a/ui/src/widget/view_filter_selector.rs +++ b/ui/src/widget/view_filter_selector.rs @@ -231,27 +231,35 @@ fn columns( Combobox::new() .placeholder(tr!("Select")) .required(true) - .default(filter_type.map(AttrValue::from)) + .value(filter_type.map(AttrValue::from)) .on_change({ let link = link.clone(); move |value: String| { - let filter = match FilterRuleType::from_str(value.as_str()) { - Ok(FilterRuleType::ResourceType) => { + let Ok(new_filter_type) = FilterRuleType::from_str(value.as_str()) + else { + return; + }; + if Some(new_filter_type) == filter_type { + // this can happen on reset, since we force the value ourselves + return; + } + + let filter = match new_filter_type { + FilterRuleType::ResourceType => { FilterRule::ResourceType(EnumMatcher(ResourceType::Node)) } - Ok(FilterRuleType::ResourcePool) => FilterRule::ResourcePool( + FilterRuleType::ResourcePool => FilterRule::ResourcePool( StringMatcher::Exact(String::new()), ), - Ok(FilterRuleType::ResourceId) => { + FilterRuleType::ResourceId => { FilterRule::ResourceId(StringMatcher::Exact(String::new())) } - Ok(FilterRuleType::Tag) => { + FilterRuleType::Tag => { FilterRule::Tag(StringMatcher::Exact(String::new())) } - Ok(FilterRuleType::Remote) => { + FilterRuleType::Remote => { FilterRule::Remote(StringMatcher::Exact(String::new())) } - Err(_) => return, }; link.send_message(Msg::ChangeFilter(filter, index)); -- 2.47.3