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 05A731FF16F for ; Tue, 19 Aug 2025 15:24:26 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 919E616353; Tue, 19 Aug 2025 15:26:10 +0200 (CEST) From: Stefan Hanreich To: pdm-devel@lists.proxmox.com Date: Tue, 19 Aug 2025 15:25:35 +0200 Message-ID: <20250819132538.223207-1-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.2 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.193 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 KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [column.rs] Subject: [pdm-devel] [PATCH proxmox-yew-widget-toolkit 1/1] data table: add get_property helper for displaying optional values X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" In some cases, particularly for tree views, it might make sense to not show values for some cells. In order to simplify handling optional values, add a get_property helper that can work with optional values. It renders the values if it exists and nothing otherwise. Since Option implements Ord, the widget can use its Ord implementation for sorting. The current helpers cannot be used, since Option does not implement Display, so the trait bounds are not satisfied. Signed-off-by: Stefan Hanreich --- src/widget/data_table/column.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/widget/data_table/column.rs b/src/widget/data_table/column.rs index 016be99..770d7c7 100644 --- a/src/widget/data_table/column.rs +++ b/src/widget/data_table/column.rs @@ -5,7 +5,7 @@ use derivative::Derivative; use yew::html::IntoPropValue; use yew::prelude::*; -use yew::virtual_dom::Key; +use yew::virtual_dom::{Key, VNode}; use crate::props::{CallbackMut, IntoEventCallbackMut, IntoSorterFn, RenderFn, SorterFn}; use crate::state::TreeStore; @@ -328,6 +328,22 @@ impl DataTableColumn { .render(move |item: &T| html! {{get_property_fn(item)}}) } + /// Builder style method to set a get_property_fn for renderer and sorter + /// the given fn must return the value as an Option + pub fn get_property_optional( + self, + get_property_fn: impl 'static + Fn(&T) -> Option<&E>, + ) -> Self { + let get_property_fn = Rc::new(get_property_fn); + self.sorter({ + let get_property_fn = get_property_fn.clone(); + move |itema: &T, itemb: &T| get_property_fn(itema).cmp(&get_property_fn(itemb)) + }) + .render( + move |item: &T| html! {{get_property_fn(item).map(VNode::from).unwrap_or_default()}}, + ) + } + /// Builder style method for [`Self::set_tree_column`] pub fn tree_column(mut self, store: impl IntoPropValue>>) -> Self { self.set_tree_column(store); -- 2.47.2 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel