all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes
@ 2025-11-20 10:36 Lukas Wagner
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 1/4] ui: move pbs node overview panel from pbs::remote to pbs::node::overview Lukas Wagner
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Lukas Wagner @ 2025-11-20 10:36 UTC (permalink / raw)
  To: pdm-devel

This is achieved by moving the existing node overview to a new 'Overview' tab and
then adding a new 'Updates' tab - the same way it is already implemented
for PVE remotes.

Moved and renamed some things as they made sense to me, mostly for
consistency reasons.

Lukas Wagner (4):
  ui: move pbs node overview panel from pbs::remote to
    pbs::node::overview
  ui: pbs: rename RemoteOverviewPanel to PbsNodeOverviewPanel
  ui: pbs: move node overview to tab and add update tab
  ui: pve: rename NodePanel to PveNodePanel

 ui/src/pbs/mod.rs                          |   6 +-
 ui/src/pbs/node/mod.rs                     | 115 +++++++++++++++++++++
 ui/src/pbs/{remote.rs => node/overview.rs} |  31 +++---
 ui/src/pve/mod.rs                          |   2 +-
 ui/src/pve/node/mod.rs                     |  20 ++--
 ui/src/pve/node/overview.rs                |  20 ++--
 6 files changed, 151 insertions(+), 43 deletions(-)
 create mode 100644 ui/src/pbs/node/mod.rs
 rename ui/src/pbs/{remote.rs => node/overview.rs} (92%)

-- 
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [pdm-devel] [PATCH datacenter-manager 1/4] ui: move pbs node overview panel from pbs::remote to pbs::node::overview
  2025-11-20 10:36 [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Lukas Wagner
@ 2025-11-20 10:36 ` Lukas Wagner
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 2/4] ui: pbs: rename RemoteOverviewPanel to PbsNodeOverviewPanel Lukas Wagner
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Lukas Wagner @ 2025-11-20 10:36 UTC (permalink / raw)
  To: pdm-devel

So that the structure as somewhat symmetric to how the code is structure
for PVE. The code itself is also very similar to the one PVE one, in the
future we should check if we can share the implementation between both
- might not be trivial, since PVE and PBS use different types for e.g.
metrics.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 ui/src/pbs/mod.rs                          | 4 ++--
 ui/src/pbs/node/mod.rs                     | 1 +
 ui/src/pbs/{remote.rs => node/overview.rs} | 0
 3 files changed, 3 insertions(+), 2 deletions(-)
 create mode 100644 ui/src/pbs/node/mod.rs
 rename ui/src/pbs/{remote.rs => node/overview.rs} (100%)

diff --git a/ui/src/pbs/mod.rs b/ui/src/pbs/mod.rs
index 04243e22..6d71bafc 100644
--- a/ui/src/pbs/mod.rs
+++ b/ui/src/pbs/mod.rs
@@ -23,12 +23,12 @@ pub use datastore::DatastorePanel;
 
 mod namespace_selector;
 
-mod remote;
+mod node;
+use node::overview::RemoteOverviewPanel;
 
 mod snapshot_list;
 pub use snapshot_list::SnapshotList;
 
-use crate::pbs::remote::RemoteOverviewPanel;
 use crate::pbs::tree::PbsTree;
 use crate::{get_deep_url, pdm_client};
 
diff --git a/ui/src/pbs/node/mod.rs b/ui/src/pbs/node/mod.rs
new file mode 100644
index 00000000..8468a02a
--- /dev/null
+++ b/ui/src/pbs/node/mod.rs
@@ -0,0 +1 @@
+pub(crate) mod overview;
diff --git a/ui/src/pbs/remote.rs b/ui/src/pbs/node/overview.rs
similarity index 100%
rename from ui/src/pbs/remote.rs
rename to ui/src/pbs/node/overview.rs
-- 
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [pdm-devel] [PATCH datacenter-manager 2/4] ui: pbs: rename RemoteOverviewPanel to PbsNodeOverviewPanel
  2025-11-20 10:36 [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Lukas Wagner
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 1/4] ui: move pbs node overview panel from pbs::remote to pbs::node::overview Lukas Wagner
@ 2025-11-20 10:36 ` Lukas Wagner
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 3/4] ui: pbs: move node overview to tab and add update tab Lukas Wagner
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Lukas Wagner @ 2025-11-20 10:36 UTC (permalink / raw)
  To: pdm-devel

Mainly for consistency with the PVE components.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 ui/src/pbs/mod.rs           |  4 ++--
 ui/src/pbs/node/overview.rs | 20 ++++++++++----------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/ui/src/pbs/mod.rs b/ui/src/pbs/mod.rs
index 6d71bafc..1fdb417f 100644
--- a/ui/src/pbs/mod.rs
+++ b/ui/src/pbs/mod.rs
@@ -24,7 +24,7 @@ pub use datastore::DatastorePanel;
 mod namespace_selector;
 
 mod node;
-use node::overview::RemoteOverviewPanel;
+use node::overview::PbsNodeOverviewPanel;
 
 mod snapshot_list;
 pub use snapshot_list::SnapshotList;
@@ -108,7 +108,7 @@ impl LoadableComponent for PbsRemoteComp {
         let props = ctx.props();
 
         let content: Html = match &self.view {
-            tree::PbsTreeNode::Root => RemoteOverviewPanel::new(props.remote.clone()).into(),
+            tree::PbsTreeNode::Root => PbsNodeOverviewPanel::new(props.remote.clone()).into(),
             tree::PbsTreeNode::Datastore(data_store_config) => {
                 DatastorePanel::new(props.remote.clone(), data_store_config.clone()).into()
             }
diff --git a/ui/src/pbs/node/overview.rs b/ui/src/pbs/node/overview.rs
index bba57dad..d15eda04 100644
--- a/ui/src/pbs/node/overview.rs
+++ b/ui/src/pbs/node/overview.rs
@@ -20,7 +20,7 @@ use pdm_api_types::rrddata::PbsNodeDataPoint;
 use crate::{renderer::separator, LoadResult};
 
 #[derive(Clone, Debug, Eq, PartialEq, Properties)]
-pub struct RemoteOverviewPanel {
+pub struct PbsNodeOverviewPanel {
     /// The remote to show
     pub remote: String,
 
@@ -33,19 +33,19 @@ pub struct RemoteOverviewPanel {
     pub status_interval: u32,
 }
 
-impl RemoteOverviewPanel {
+impl PbsNodeOverviewPanel {
     pub fn new(remote: String) -> Self {
         yew::props!(Self { remote })
     }
 }
 
-impl From<RemoteOverviewPanel> for VNode {
-    fn from(val: RemoteOverviewPanel) -> Self {
-        VComp::new::<RemoteOverviewPanelComp>(Rc::new(val), None).into()
+impl From<PbsNodeOverviewPanel> for VNode {
+    fn from(val: PbsNodeOverviewPanel) -> Self {
+        VComp::new::<PbsNodeOverviewPanelComp>(Rc::new(val), None).into()
     }
 }
 
-pub enum Msg {
+enum Msg {
     ReloadRrd,
     ReloadStatus,
     LoadFinished(Result<Vec<PbsNodeDataPoint>, proxmox_client::Error>),
@@ -53,7 +53,7 @@ pub enum Msg {
     UpdateRrdTimeframe(RRDTimeframe),
 }
 
-pub struct RemoteOverviewPanelComp {
+struct PbsNodeOverviewPanelComp {
     time_data: Rc<Vec<i64>>,
     cpu_data: Rc<Series>,
     load_data: Rc<Series>,
@@ -70,7 +70,7 @@ pub struct RemoteOverviewPanelComp {
     _status_timeout: Option<gloo_timers::callback::Timeout>,
 }
 
-impl RemoteOverviewPanelComp {
+impl PbsNodeOverviewPanelComp {
     async fn reload_rrd(remote: &str, rrd_time_frame: RRDTimeframe) -> Msg {
         let res = crate::pdm_client()
             .pbs_node_rrddata(remote, rrd_time_frame.mode, rrd_time_frame.timeframe)
@@ -85,9 +85,9 @@ impl RemoteOverviewPanelComp {
     }
 }
 
-impl yew::Component for RemoteOverviewPanelComp {
+impl yew::Component for PbsNodeOverviewPanelComp {
     type Message = Msg;
-    type Properties = RemoteOverviewPanel;
+    type Properties = PbsNodeOverviewPanel;
 
     fn create(ctx: &yew::Context<Self>) -> Self {
         ctx.link().send_message(Msg::ReloadRrd);
-- 
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [pdm-devel] [PATCH datacenter-manager 3/4] ui: pbs: move node overview to tab and add update tab
  2025-11-20 10:36 [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Lukas Wagner
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 1/4] ui: move pbs node overview panel from pbs::remote to pbs::node::overview Lukas Wagner
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 2/4] ui: pbs: rename RemoteOverviewPanel to PbsNodeOverviewPanel Lukas Wagner
@ 2025-11-20 10:36 ` Lukas Wagner
  2025-11-20 15:52   ` Michael Köppl
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 4/4] ui: pve: rename NodePanel to PveNodePanel Lukas Wagner
  2025-11-20 15:56 ` [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Michael Köppl
  4 siblings, 1 reply; 7+ messages in thread
From: Lukas Wagner @ 2025-11-20 10:36 UTC (permalink / raw)
  To: pdm-devel

PVE remote had an 'Updates' tab for a while now. This commit adds the
same thing for PBS remotes.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 ui/src/pbs/mod.rs           |   4 +-
 ui/src/pbs/node/mod.rs      | 114 ++++++++++++++++++++++++++++++++++++
 ui/src/pbs/node/overview.rs |  11 +---
 3 files changed, 118 insertions(+), 11 deletions(-)

diff --git a/ui/src/pbs/mod.rs b/ui/src/pbs/mod.rs
index 1fdb417f..75ed9926 100644
--- a/ui/src/pbs/mod.rs
+++ b/ui/src/pbs/mod.rs
@@ -24,11 +24,11 @@ pub use datastore::DatastorePanel;
 mod namespace_selector;
 
 mod node;
-use node::overview::PbsNodeOverviewPanel;
 
 mod snapshot_list;
 pub use snapshot_list::SnapshotList;
 
+use crate::pbs::node::PbsNodePanel;
 use crate::pbs::tree::PbsTree;
 use crate::{get_deep_url, pdm_client};
 
@@ -108,7 +108,7 @@ impl LoadableComponent for PbsRemoteComp {
         let props = ctx.props();
 
         let content: Html = match &self.view {
-            tree::PbsTreeNode::Root => PbsNodeOverviewPanel::new(props.remote.clone()).into(),
+            tree::PbsTreeNode::Root => PbsNodePanel::new(props.remote.clone()).into(),
             tree::PbsTreeNode::Datastore(data_store_config) => {
                 DatastorePanel::new(props.remote.clone(), data_store_config.clone()).into()
             }
diff --git a/ui/src/pbs/node/mod.rs b/ui/src/pbs/node/mod.rs
index 8468a02a..5cd210f8 100644
--- a/ui/src/pbs/node/mod.rs
+++ b/ui/src/pbs/node/mod.rs
@@ -1 +1,115 @@
+use std::rc::Rc;
+
+use proxmox_yew_comp::AptPackageManager;
+use yew::{
+    virtual_dom::{VComp, VNode},
+    Context,
+};
+
+use pwt::{
+    css::{AlignItems, ColorScheme},
+    prelude::*,
+    props::{ContainerBuilder, WidgetBuilder},
+    widget::{Fa, Row, TabBarItem, TabPanel},
+};
+
 pub(crate) mod overview;
+
+use overview::PbsNodeOverviewPanel;
+
+use crate::get_deep_url_low_level;
+
+#[derive(Clone, Debug, Eq, PartialEq, Properties)]
+pub struct PbsNodePanel {
+    /// The remote to show
+    pub remote: String,
+}
+
+impl PbsNodePanel {
+    pub fn new(remote: String) -> Self {
+        yew::props!(Self { remote })
+    }
+}
+
+impl From<PbsNodePanel> for VNode {
+    fn from(val: PbsNodePanel) -> Self {
+        VComp::new::<PbsNodePanelComp>(Rc::new(val), None).into()
+    }
+}
+
+struct PbsNodePanelComp;
+
+impl yew::Component for PbsNodePanelComp {
+    type Message = ();
+    type Properties = PbsNodePanel;
+
+    fn create(_ctx: &yew::Context<Self>) -> Self {
+        Self
+    }
+
+    fn changed(&mut self, ctx: &Context<Self>, old_props: &Self::Properties) -> bool {
+        let props = ctx.props();
+
+        props.remote != old_props.remote
+    }
+
+    fn view(&self, ctx: &yew::Context<Self>) -> yew::Html {
+        let props = ctx.props();
+
+        let title: Html = Row::new()
+            .gap(2)
+            .class(AlignItems::Baseline)
+            .with_child(Fa::new("building"))
+            .with_child(tr!("Node"))
+            .into();
+
+        TabPanel::new()
+            .class(pwt::css::FlexFit)
+            .title(title)
+            .class(ColorScheme::Neutral)
+            .with_item_builder(
+                TabBarItem::new()
+                    .key("status_view")
+                    .label(tr!("Overview"))
+                    .icon_class("fa fa-tachometer"),
+                {
+                    let remote = props.remote.clone();
+                    move |_| PbsNodeOverviewPanel::new(remote.clone()).into()
+                },
+            )
+            .with_item_builder(
+                TabBarItem::new()
+                    .key("update_view")
+                    .label(tr!("Updates"))
+                    .icon_class("fa fa-refresh"),
+                {
+                    let remote = props.remote.clone();
+                    let link = ctx.link().clone();
+                    move |_| {
+                        let base_url = format!("/pbs/remotes/{remote}/nodes/localhost/apt");
+                        let task_base_url = format!("/pbs/remotes/{remote}/tasks");
+
+                        AptPackageManager::new()
+                            .base_url(base_url)
+                            .task_base_url(task_base_url)
+                            .enable_upgrade(true)
+                            .on_upgrade({
+                                let remote = remote.clone();
+                                let link = link.clone();
+
+                                move |_| {
+                                    let hash = "#pbsServerAdministration:updates";
+                                    if let Some(url) =
+                                        get_deep_url_low_level(&link, &remote, None, hash)
+                                    {
+                                        let _ = gloo_utils::window().open_with_url(&url.href());
+                                    }
+                                }
+                            })
+                            .into()
+                    }
+                },
+            )
+            .into()
+    }
+}
diff --git a/ui/src/pbs/node/overview.rs b/ui/src/pbs/node/overview.rs
index d15eda04..da5a4085 100644
--- a/ui/src/pbs/node/overview.rs
+++ b/ui/src/pbs/node/overview.rs
@@ -7,10 +7,10 @@ use yew::{
 
 use proxmox_yew_comp::{node_info, RRDGraph, RRDTimeframe, RRDTimeframeSelector, Series};
 use pwt::{
-    css::{AlignItems, ColorScheme, FlexFit, JustifyContent},
+    css::{ColorScheme, FlexFit, JustifyContent},
     prelude::*,
     props::{ContainerBuilder, WidgetBuilder},
-    widget::{error_message, Column, Container, Fa, Panel, Progress, Row},
+    widget::{error_message, Column, Container, Panel, Progress, Row},
     AsyncPool,
 };
 
@@ -197,14 +197,7 @@ impl yew::Component for PbsNodeOverviewPanelComp {
     fn view(&self, ctx: &yew::Context<Self>) -> yew::Html {
         let status_comp = node_info(self.status.data.as_ref().map(|s| s.into()));
 
-        let title: Html = Row::new()
-            .gap(2)
-            .class(AlignItems::Baseline)
-            .with_child(Fa::new("tachometer"))
-            .with_child(tr! {"Overview"})
-            .into();
         Panel::new()
-            .title(title)
             .class(FlexFit)
             .class(ColorScheme::Neutral)
             .with_child(
-- 
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [pdm-devel] [PATCH datacenter-manager 4/4] ui: pve: rename NodePanel to PveNodePanel
  2025-11-20 10:36 [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Lukas Wagner
                   ` (2 preceding siblings ...)
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 3/4] ui: pbs: move node overview to tab and add update tab Lukas Wagner
@ 2025-11-20 10:36 ` Lukas Wagner
  2025-11-20 15:56 ` [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Michael Köppl
  4 siblings, 0 replies; 7+ messages in thread
From: Lukas Wagner @ 2025-11-20 10:36 UTC (permalink / raw)
  To: pdm-devel

For consistency with the PBS variants of those components.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 ui/src/pve/mod.rs           |  2 +-
 ui/src/pve/node/mod.rs      | 20 ++++++++++----------
 ui/src/pve/node/overview.rs | 20 ++++++++++----------
 3 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/ui/src/pve/mod.rs b/ui/src/pve/mod.rs
index c0759f18..a3448ae1 100644
--- a/ui/src/pve/mod.rs
+++ b/ui/src/pve/mod.rs
@@ -178,7 +178,7 @@ impl LoadableComponent for PveRemoteComp {
                 .with_child(RemoteTaskList::new().remote(remote.clone()))
                 .into(),
             PveTreeNode::Node(node) => {
-                node::NodePanel::new(remote.clone(), node.node.clone()).into()
+                node::PveNodePanel::new(remote.clone(), node.node.clone()).into()
             }
             PveTreeNode::Qemu(qemu) => {
                 qemu::QemuPanel::new(remote.clone(), qemu.node.clone(), qemu.clone()).into()
diff --git a/ui/src/pve/node/mod.rs b/ui/src/pve/node/mod.rs
index aba5d327..de79185a 100644
--- a/ui/src/pve/node/mod.rs
+++ b/ui/src/pve/node/mod.rs
@@ -16,12 +16,12 @@ use pwt::{
 
 mod overview;
 
-use overview::NodeOverviewPanel;
+use overview::PveNodeOverviewPanel;
 
 use crate::get_deep_url;
 
 #[derive(Clone, Debug, Eq, PartialEq, Properties)]
-pub struct NodePanel {
+pub struct PveNodePanel {
     /// The remote to show
     pub remote: String,
 
@@ -29,23 +29,23 @@ pub struct NodePanel {
     pub node: String,
 }
 
-impl NodePanel {
+impl PveNodePanel {
     pub fn new(remote: String, node: String) -> Self {
         yew::props!(Self { remote, node })
     }
 }
 
-impl From<NodePanel> for VNode {
-    fn from(val: NodePanel) -> Self {
-        VComp::new::<NodePanelComp>(Rc::new(val), None).into()
+impl From<PveNodePanel> for VNode {
+    fn from(val: PveNodePanel) -> Self {
+        VComp::new::<PveNodePanelComp>(Rc::new(val), None).into()
     }
 }
 
-pub struct NodePanelComp;
+struct PveNodePanelComp;
 
-impl yew::Component for NodePanelComp {
+impl yew::Component for PveNodePanelComp {
     type Message = ();
-    type Properties = NodePanel;
+    type Properties = PveNodePanel;
 
     fn create(_ctx: &yew::Context<Self>) -> Self {
         Self
@@ -79,7 +79,7 @@ impl yew::Component for NodePanelComp {
                 {
                     let remote = props.remote.clone();
                     let node = props.node.clone();
-                    move |_| NodeOverviewPanel::new(remote.clone(), node.clone()).into()
+                    move |_| PveNodeOverviewPanel::new(remote.clone(), node.clone()).into()
                 },
             )
             .with_item_builder(
diff --git a/ui/src/pve/node/overview.rs b/ui/src/pve/node/overview.rs
index 3803f189..cd9bc014 100644
--- a/ui/src/pve/node/overview.rs
+++ b/ui/src/pve/node/overview.rs
@@ -20,7 +20,7 @@ use pdm_client::types::NodeStatus;
 use crate::{renderer::separator, LoadResult};
 
 #[derive(Clone, Debug, Eq, PartialEq, Properties)]
-pub struct NodeOverviewPanel {
+pub struct PveNodeOverviewPanel {
     /// The remote to show
     pub remote: String,
 
@@ -36,19 +36,19 @@ pub struct NodeOverviewPanel {
     pub status_interval: u32,
 }
 
-impl NodeOverviewPanel {
+impl PveNodeOverviewPanel {
     pub fn new(remote: String, node: String) -> Self {
         yew::props!(Self { remote, node })
     }
 }
 
-impl From<NodeOverviewPanel> for VNode {
-    fn from(val: NodeOverviewPanel) -> Self {
-        VComp::new::<NodeOverviewPanelComp>(Rc::new(val), None).into()
+impl From<PveNodeOverviewPanel> for VNode {
+    fn from(val: PveNodeOverviewPanel) -> Self {
+        VComp::new::<PveNodeOverviewPanelComp>(Rc::new(val), None).into()
     }
 }
 
-pub enum Msg {
+enum Msg {
     ReloadRrd,
     ReloadStatus,
     LoadFinished(Result<Vec<NodeDataPoint>, proxmox_client::Error>),
@@ -56,7 +56,7 @@ pub enum Msg {
     UpdateRrdTimeframe(RRDTimeframe),
 }
 
-pub struct NodeOverviewPanelComp {
+struct PveNodeOverviewPanelComp {
     time_data: Rc<Vec<i64>>,
     cpu_data: Rc<Series>,
     load_data: Rc<Series>,
@@ -73,7 +73,7 @@ pub struct NodeOverviewPanelComp {
     _status_timeout: Option<gloo_timers::callback::Timeout>,
 }
 
-impl NodeOverviewPanelComp {
+impl PveNodeOverviewPanelComp {
     async fn reload_rrd(remote: &str, node: &str, rrd_time_frame: RRDTimeframe) -> Msg {
         let res = crate::pdm_client()
             .pve_node_rrddata(remote, node, rrd_time_frame.mode, rrd_time_frame.timeframe)
@@ -88,9 +88,9 @@ impl NodeOverviewPanelComp {
     }
 }
 
-impl yew::Component for NodeOverviewPanelComp {
+impl yew::Component for PveNodeOverviewPanelComp {
     type Message = Msg;
-    type Properties = NodeOverviewPanel;
+    type Properties = PveNodeOverviewPanel;
 
     fn create(ctx: &yew::Context<Self>) -> Self {
         ctx.link().send_message(Msg::ReloadRrd);
-- 
2.47.3



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [pdm-devel] [PATCH datacenter-manager 3/4] ui: pbs: move node overview to tab and add update tab
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 3/4] ui: pbs: move node overview to tab and add update tab Lukas Wagner
@ 2025-11-20 15:52   ` Michael Köppl
  0 siblings, 0 replies; 7+ messages in thread
From: Michael Köppl @ 2025-11-20 15:52 UTC (permalink / raw)
  To: Proxmox Datacenter Manager development discussion; +Cc: pdm-devel

1 nit inline

On Thu Nov 20, 2025 at 11:36 AM CET, Lukas Wagner wrote:
> PVE remote had an 'Updates' tab for a while now. This commit adds the
> same thing for PBS remotes.
>
> Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
> ---
>  ui/src/pbs/mod.rs           |   4 +-
>  ui/src/pbs/node/mod.rs      | 114 ++++++++++++++++++++++++++++++++++++
>  ui/src/pbs/node/overview.rs |  11 +---
>  3 files changed, 118 insertions(+), 11 deletions(-)
>
> diff --git a/ui/src/pbs/mod.rs b/ui/src/pbs/mod.rs
> index 1fdb417f..75ed9926 100644
> --- a/ui/src/pbs/mod.rs
> +++ b/ui/src/pbs/mod.rs
> @@ -24,11 +24,11 @@ pub use datastore::DatastorePanel;
>  mod namespace_selector;
>  
>  mod node;
> -use node::overview::PbsNodeOverviewPanel;
>  
>  mod snapshot_list;
>  pub use snapshot_list::SnapshotList;
>  
> +use crate::pbs::node::PbsNodePanel;
>  use crate::pbs::tree::PbsTree;
>  use crate::{get_deep_url, pdm_client};
>  
> @@ -108,7 +108,7 @@ impl LoadableComponent for PbsRemoteComp {
>          let props = ctx.props();
>  
>          let content: Html = match &self.view {
> -            tree::PbsTreeNode::Root => PbsNodeOverviewPanel::new(props.remote.clone()).into(),
> +            tree::PbsTreeNode::Root => PbsNodePanel::new(props.remote.clone()).into(),
>              tree::PbsTreeNode::Datastore(data_store_config) => {
>                  DatastorePanel::new(props.remote.clone(), data_store_config.clone()).into()
>              }
> diff --git a/ui/src/pbs/node/mod.rs b/ui/src/pbs/node/mod.rs
> index 8468a02a..5cd210f8 100644
> --- a/ui/src/pbs/node/mod.rs
> +++ b/ui/src/pbs/node/mod.rs
> @@ -1 +1,115 @@
> +use std::rc::Rc;
> +
> +use proxmox_yew_comp::AptPackageManager;
> +use yew::{
> +    virtual_dom::{VComp, VNode},
> +    Context,
> +};
> +
> +use pwt::{
> +    css::{AlignItems, ColorScheme},
> +    prelude::*,
> +    props::{ContainerBuilder, WidgetBuilder},
> +    widget::{Fa, Row, TabBarItem, TabPanel},
> +};
> +
>  pub(crate) mod overview;
> +
> +use overview::PbsNodeOverviewPanel;
> +
> +use crate::get_deep_url_low_level;
> +
> +#[derive(Clone, Debug, Eq, PartialEq, Properties)]
> +pub struct PbsNodePanel {
> +    /// The remote to show
> +    pub remote: String,
> +}
> +
> +impl PbsNodePanel {
> +    pub fn new(remote: String) -> Self {
> +        yew::props!(Self { remote })
> +    }
> +}
> +
> +impl From<PbsNodePanel> for VNode {
> +    fn from(val: PbsNodePanel) -> Self {
> +        VComp::new::<PbsNodePanelComp>(Rc::new(val), None).into()
> +    }
> +}
> +
> +struct PbsNodePanelComp;
> +
> +impl yew::Component for PbsNodePanelComp {
> +    type Message = ();
> +    type Properties = PbsNodePanel;
> +
> +    fn create(_ctx: &yew::Context<Self>) -> Self {
> +        Self
> +    }
> +
> +    fn changed(&mut self, ctx: &Context<Self>, old_props: &Self::Properties) -> bool {
> +        let props = ctx.props();
> +
> +        props.remote != old_props.remote
> +    }
> +
> +    fn view(&self, ctx: &yew::Context<Self>) -> yew::Html {
> +        let props = ctx.props();
> +
> +        let title: Html = Row::new()
> +            .gap(2)
> +            .class(AlignItems::Baseline)
> +            .with_child(Fa::new("building"))
> +            .with_child(tr!("Node"))

nit: I might not be entirely up-to-date on the nomenclature, but is
"Node" correct here? IMO it also looked a bit off, having
"Remote '<name>'" on the left panel and then just "Node" on the right
panel. Perhaps "Backup Server", "Proxmox Backup Server", or the name of
the PBS might fit better in this case? Was there a reason to use "Node"?

> +            .into();
> +
> +        TabPanel::new()
> +            .class(pwt::css::FlexFit)



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes
  2025-11-20 10:36 [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Lukas Wagner
                   ` (3 preceding siblings ...)
  2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 4/4] ui: pve: rename NodePanel to PveNodePanel Lukas Wagner
@ 2025-11-20 15:56 ` Michael Köppl
  4 siblings, 0 replies; 7+ messages in thread
From: Michael Köppl @ 2025-11-20 15:56 UTC (permalink / raw)
  To: Proxmox Datacenter Manager development discussion; +Cc: pdm-devel

Added my local PBS to test the update tab. Then:
- update packages through the UI
- checked that the upgrade button opens the correct page on my PBS
- changelogs per package are displayed correctly

Everything seemed to work as expected. Also had a look at the code.
Since it's mostly similar code to the PVE implementation, I mainly
focused on PBS specifics like API endpoints, etc. Noted 1 nit on the
individual patch, but other than that lgtm!

Tested-by: Michael Köppl <m.koeppl@proxmox.com>
Reviewed-by: Michael Köppl <m.koeppl@proxmox.com>

On Thu Nov 20, 2025 at 11:36 AM CET, Lukas Wagner wrote:
> This is achieved by moving the existing node overview to a new 'Overview' tab and
> then adding a new 'Updates' tab - the same way it is already implemented
> for PVE remotes.
>
> Moved and renamed some things as they made sense to me, mostly for
> consistency reasons.
>
> Lukas Wagner (4):
>   ui: move pbs node overview panel from pbs::remote to
>     pbs::node::overview
>   ui: pbs: rename RemoteOverviewPanel to PbsNodeOverviewPanel
>   ui: pbs: move node overview to tab and add update tab
>   ui: pve: rename NodePanel to PveNodePanel
>
>  ui/src/pbs/mod.rs                          |   6 +-
>  ui/src/pbs/node/mod.rs                     | 115 +++++++++++++++++++++
>  ui/src/pbs/{remote.rs => node/overview.rs} |  31 +++---
>  ui/src/pve/mod.rs                          |   2 +-
>  ui/src/pve/node/mod.rs                     |  20 ++--
>  ui/src/pve/node/overview.rs                |  20 ++--
>  6 files changed, 151 insertions(+), 43 deletions(-)
>  create mode 100644 ui/src/pbs/node/mod.rs
>  rename ui/src/pbs/{remote.rs => node/overview.rs} (92%)



_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-11-20 15:56 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-20 10:36 [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Lukas Wagner
2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 1/4] ui: move pbs node overview panel from pbs::remote to pbs::node::overview Lukas Wagner
2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 2/4] ui: pbs: rename RemoteOverviewPanel to PbsNodeOverviewPanel Lukas Wagner
2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 3/4] ui: pbs: move node overview to tab and add update tab Lukas Wagner
2025-11-20 15:52   ` Michael Köppl
2025-11-20 10:36 ` [pdm-devel] [PATCH datacenter-manager 4/4] ui: pve: rename NodePanel to PveNodePanel Lukas Wagner
2025-11-20 15:56 ` [pdm-devel] [PATCH datacenter-manager 0/4] add 'Updates' tab for PBS remotes Michael Köppl

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal