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 138AB1FF179 for ; Wed, 12 Nov 2025 17:19:23 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 204A9982F; Wed, 12 Nov 2025 17:20:06 +0100 (CET) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Date: Wed, 12 Nov 2025 17:11:45 +0100 Message-ID: <20251112161900.75032-11-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251112161900.75032-1-d.csapak@proxmox.com> References: <20251112161900.75032-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.029 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 10/18] ui: views: make 'view' name property optional 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" and make the default dashboard the default case Signed-off-by: Dominik Csapak --- ui/src/dashboard/view.rs | 61 +++++++++++++++++++++------------------- ui/src/main_menu.rs | 2 +- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/ui/src/dashboard/view.rs b/ui/src/dashboard/view.rs index b3e827ec..4ab66e08 100644 --- a/ui/src/dashboard/view.rs +++ b/ui/src/dashboard/view.rs @@ -51,7 +51,7 @@ pub enum EditingMessage { #[derive(Properties, PartialEq)] pub struct View { - view: AttrValue, + view: Option, } impl From for VNode { @@ -62,7 +62,7 @@ impl From for VNode { } impl View { - pub fn new(view: impl Into) -> Self { + pub fn new(view: impl Into>) -> Self { Self { view: view.into() } } } @@ -259,14 +259,17 @@ impl Component for ViewComp { type Properties = View; fn create(ctx: &yew::Context) -> Self { - let refresh_config: PersistentState = PersistentState::new( - StorageLocation::local(refresh_config_id(ctx.props().view.as_str())), - ); + let view = ctx.props().view.clone(); + let refresh_id = match view.as_ref() { + Some(view) => format!("view-{view}"), + None => "dashboard".to_string(), + }; + let refresh_config: PersistentState = + PersistentState::new(StorageLocation::local(refresh_config_id(&refresh_id))); let async_pool = AsyncPool::new(); - let view = ctx.props().view.clone(); - async_pool.send_future(ctx.link().clone(), async move { - Msg::ViewTemplateLoaded(load_template(Some(view)).await) + async_pool.send_future(ctx.link().clone(), { + async move { Msg::ViewTemplateLoaded(load_template(view).await) } }); Self { @@ -355,7 +358,7 @@ impl Component for ViewComp { self.load_finished_time = None; let view = ctx.props().view.clone(); self.async_pool.send_future(ctx.link().clone(), async move { - Msg::ViewTemplateLoaded(load_template(Some(view)).await) + Msg::ViewTemplateLoaded(load_template(view).await) }); true } @@ -379,9 +382,7 @@ impl Component for ViewComp { ctx.link().callback(Msg::Reload), ctx.link().callback(|_| Msg::ConfigWindow(true)), ) - .editing_state( - (props.view != "dashboard").then_some(self.editing_state.clone()), - ), + .editing_state(props.view.is_some().then_some(self.editing_state.clone())), ), ); @@ -435,24 +436,26 @@ impl Component for ViewComp { .as_ref() .map(|err| error_message(&err.to_string())), ); - view.add_optional_child( - self.show_config_window.then_some( - create_refresh_config_edit_window(&ctx.props().view) - .on_close(ctx.link().callback(|_| Msg::ConfigWindow(false))) - .on_submit({ - let link = ctx.link().clone(); - move |ctx: FormContext| { - let link = link.clone(); - async move { - let data: RefreshConfig = - serde_json::from_value(ctx.get_submit_data())?; - link.send_message(Msg::UpdateConfig(data)); - Ok(()) - } + view.add_optional_child(self.show_config_window.then_some({ + let refresh_config_id = match &props.view { + Some(view) => format!("view-{view}"), + None => "dashboard".to_string(), + }; + create_refresh_config_edit_window(&refresh_config_id) + .on_close(ctx.link().callback(|_| Msg::ConfigWindow(false))) + .on_submit({ + let link = ctx.link().clone(); + move |ctx: FormContext| { + let link = link.clone(); + async move { + let data: RefreshConfig = + serde_json::from_value(ctx.get_submit_data())?; + link.send_message(Msg::UpdateConfig(data)); + Ok(()) } - }), - ), - ); + } + }) + })); view.add_optional_child(self.show_create_wizard.map(|remote_type| { AddWizard::new(remote_type) .on_close(ctx.link().callback(|_| Msg::CreateWizard(None))) diff --git a/ui/src/main_menu.rs b/ui/src/main_menu.rs index 43cc2923..883c482a 100644 --- a/ui/src/main_menu.rs +++ b/ui/src/main_menu.rs @@ -142,7 +142,7 @@ impl Component for PdmMainMenu { tr!("Dashboard"), "dashboard", Some("fa fa-tachometer"), - move |_| View::new("dashboard").into(), + move |_| View::new(None).into(), ); register_view( -- 2.47.3 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel