From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 8F6641FF185 for ; Mon, 17 Nov 2025 16:00:21 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id DBE561D2CE; Mon, 17 Nov 2025 16:00:24 +0100 (CET) Mime-Version: 1.0 Date: Mon, 17 Nov 2025 15:59:49 +0100 Message-Id: To: "Dominik Csapak" X-Mailer: aerc 0.20.0 References: <20251117125041.1931382-1-d.csapak@proxmox.com> <20251117125041.1931382-11-d.csapak@proxmox.com> In-Reply-To: <20251117125041.1931382-11-d.csapak@proxmox.com> From: "Shannon Sterz" X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1763391560127 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.064 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: Re: [pdm-devel] [PATCH datacenter-manager v3 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 Cc: 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" one comment in-line. On Mon Nov 17, 2025 at 1:44 PM CET, Dominik Csapak wrote: > 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 4191ce90..ad38db26 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) } > }); is there a reason you are wrapping this future in an extra block here? > > 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( _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel