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 E56241FF179 for ; Wed, 26 Nov 2025 16:19:06 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B8879102D7; Wed, 26 Nov 2025 16:19:09 +0100 (CET) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Date: Wed, 26 Nov 2025 16:18:12 +0100 Message-ID: <20251126151833.3637080-20-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251126151833.3637080-1-d.csapak@proxmox.com> References: <20251126151833.3637080-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 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 Subject: [pdm-devel] [PATCH datacenter-manager v5 19/26] ui: dashboard: add current view to search terms 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" by providing a `ViewContext` that contains the name of the current view and utilizing that in the dashboard widget when searching for some term. Signed-off-by: Dominik Csapak --- lib/pdm-search/src/lib.rs | 9 +++++++ ui/src/dashboard/guest_panel.rs | 4 +++- ui/src/dashboard/node_status_panel.rs | 4 +++- ui/src/dashboard/pbs_datastores_panel.rs | 4 +++- ui/src/dashboard/remote_panel.rs | 4 +++- ui/src/dashboard/sdn_zone_panel.rs | 8 +++++-- ui/src/dashboard/view.rs | 30 +++++++++++++++++++++++- 7 files changed, 56 insertions(+), 7 deletions(-) diff --git a/lib/pdm-search/src/lib.rs b/lib/pdm-search/src/lib.rs index fa484cf4..cb9119f6 100644 --- a/lib/pdm-search/src/lib.rs +++ b/lib/pdm-search/src/lib.rs @@ -68,6 +68,15 @@ impl Search { true } + + /// Add a term to the search + pub fn add_term(&mut self, term: SearchTerm) { + if term.is_optional() { + self.optional_terms.push(term); + } else { + self.required_terms.push(term); + } + } } impl fmt::Display for Search { diff --git a/ui/src/dashboard/guest_panel.rs b/ui/src/dashboard/guest_panel.rs index 8b97fa2b..32c41c22 100644 --- a/ui/src/dashboard/guest_panel.rs +++ b/ui/src/dashboard/guest_panel.rs @@ -16,6 +16,7 @@ use pdm_api_types::resource::{GuestStatusCount, ResourceType, ResourcesStatus}; use pdm_search::{Search, SearchTerm}; use crate::dashboard::create_title_with_icon; +use crate::dashboard::view::add_current_view_to_search; use crate::pve::GuestType; use crate::search_provider::get_search_provider; use crate::LoadResult; @@ -59,8 +60,9 @@ impl yew::Component for PdmGuestPanel { Self {} } - fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + fn update(&mut self, ctx: &Context, mut msg: Self::Message) -> bool { if let Some(provider) = get_search_provider(ctx) { + add_current_view_to_search(ctx, &mut msg); provider.search(msg); } false diff --git a/ui/src/dashboard/node_status_panel.rs b/ui/src/dashboard/node_status_panel.rs index 60648ef0..032719f2 100644 --- a/ui/src/dashboard/node_status_panel.rs +++ b/ui/src/dashboard/node_status_panel.rs @@ -14,6 +14,7 @@ use pdm_api_types::resource::NodeStatusCount; use pdm_api_types::{remotes::RemoteType, resource::ResourcesStatus}; use crate::dashboard::create_title_with_icon; +use crate::dashboard::view::add_current_view_to_search; use crate::search_provider::get_search_provider; use crate::LoadResult; @@ -60,8 +61,9 @@ impl yew::Component for NodeStatusPanelComponent { Self {} } - fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + fn update(&mut self, ctx: &Context, mut msg: Self::Message) -> bool { if let Some(provider) = get_search_provider(ctx) { + add_current_view_to_search(ctx, &mut msg); provider.search(msg); } false diff --git a/ui/src/dashboard/pbs_datastores_panel.rs b/ui/src/dashboard/pbs_datastores_panel.rs index 32193ae4..afc83b30 100644 --- a/ui/src/dashboard/pbs_datastores_panel.rs +++ b/ui/src/dashboard/pbs_datastores_panel.rs @@ -12,6 +12,7 @@ use pwt::state::SharedState; use pwt::widget::{Container, Fa, List, ListTile, Panel}; use crate::dashboard::create_title_with_icon; +use crate::dashboard::view::add_current_view_to_search; use crate::search_provider::get_search_provider; use crate::LoadResult; @@ -55,8 +56,9 @@ impl yew::Component for PbsDatastoresPanelComponent { Self {} } - fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + fn update(&mut self, ctx: &Context, mut msg: Self::Message) -> bool { if let Some(provider) = get_search_provider(ctx) { + add_current_view_to_search(ctx, &mut msg); provider.search(msg); } diff --git a/ui/src/dashboard/remote_panel.rs b/ui/src/dashboard/remote_panel.rs index a5682d7a..16125a9b 100644 --- a/ui/src/dashboard/remote_panel.rs +++ b/ui/src/dashboard/remote_panel.rs @@ -15,6 +15,7 @@ use pwt::widget::{error_message, Column, Container, Fa, Panel}; use pdm_api_types::resource::ResourcesStatus; +use crate::dashboard::view::add_current_view_to_search; use crate::LoadResult; use crate::{dashboard::create_title_with_icon, search_provider::get_search_provider}; @@ -49,8 +50,9 @@ impl Component for PdmRemotePanel { Self {} } - fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + fn update(&mut self, ctx: &Context, mut msg: Self::Message) -> bool { if let Some(search) = get_search_provider(ctx) { + add_current_view_to_search(ctx, &mut msg); search.search(msg); } false diff --git a/ui/src/dashboard/sdn_zone_panel.rs b/ui/src/dashboard/sdn_zone_panel.rs index ed734f6f..e5aa8c1a 100644 --- a/ui/src/dashboard/sdn_zone_panel.rs +++ b/ui/src/dashboard/sdn_zone_panel.rs @@ -15,7 +15,10 @@ use yew::{ Properties, }; -use crate::{dashboard::create_title_with_icon, search_provider::get_search_provider, LoadResult}; +use crate::dashboard::create_title_with_icon; +use crate::dashboard::view::add_current_view_to_search; +use crate::search_provider::get_search_provider; +use crate::LoadResult; use super::loading_column; @@ -72,8 +75,9 @@ impl yew::Component for SdnZonePanelComponent { Self {} } - fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + fn update(&mut self, ctx: &Context, mut msg: Self::Message) -> bool { if let Some(provider) = get_search_provider(ctx) { + add_current_view_to_search(ctx, &mut msg); provider.search(msg); } diff --git a/ui/src/dashboard/view.rs b/ui/src/dashboard/view.rs index 962afb9b..ff287db8 100644 --- a/ui/src/dashboard/view.rs +++ b/ui/src/dashboard/view.rs @@ -39,6 +39,7 @@ use pdm_api_types::views::{ }; use pdm_api_types::TaskStatistics; use pdm_client::types::TopEntities; +use pdm_search::{Search, SearchTerm}; mod row_view; pub use row_view::RowView; @@ -70,6 +71,12 @@ impl View { } } +#[derive(PartialEq, Clone)] +/// Used to provide the current view name via a [`ContextProvider`] +pub struct ViewContext { + pub name: Option, +} + pub enum LoadingResult { Resources(Result), TopEntities(Result), @@ -541,7 +548,15 @@ impl Component for ViewComp { view.add_optional_child(self.subscriptions_dialog.clone()); - view.into() + let view_context = ViewContext { + name: props.view.clone(), + }; + + html! { + context={view_context}> + {view} + > + } } } @@ -640,3 +655,16 @@ async fn load_template(view: Option) -> Result { Ok(template) } + +/// This adds the current view from the context to the given [`Search`] if any +pub fn add_current_view_to_search(ctx: &yew::Context, search: &mut Search) { + if let Some((context, _)) = ctx.link().context::(Callback::from(|_| {})) { + if let Some(name) = context.name { + search.add_term( + SearchTerm::new(name.to_string()) + .category(Some("view")) + .optional(false), + ); + } + } +} -- 2.47.3 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel