[pdm-devel] [PATCH datacenter-manager] ui: remotes: add navigation router to tab panels

Dominik Csapak d.csapak at proxmox.com
Fri Nov 28 11:46:23 CET 2025


that way the state is preserved across reloads and the changes are
recorded in the browser history.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 ui/src/pbs/datastore.rs | 3 +++
 ui/src/pbs/mod.rs       | 2 ++
 ui/src/pbs/node/mod.rs  | 1 +
 ui/src/pve/lxc/mod.rs   | 1 +
 ui/src/pve/mod.rs       | 1 +
 ui/src/pve/node/mod.rs  | 1 +
 ui/src/pve/qemu/mod.rs  | 1 +
 7 files changed, 10 insertions(+)

diff --git a/ui/src/pbs/datastore.rs b/ui/src/pbs/datastore.rs
index 3d4e6b6e..274c6ef9 100644
--- a/ui/src/pbs/datastore.rs
+++ b/ui/src/pbs/datastore.rs
@@ -46,10 +46,12 @@ impl Component for DatastorePanelComp {
     fn view(&self, ctx: &yew::Context<Self>) -> yew::Html {
         let props = ctx.props();
         pwt::widget::TabPanel::new()
+            .router(true)
             .class(FlexFit)
             .title(tr!("Datastore {0}", props.config.name))
             .with_item_builder(
                 TabBarItem::new()
+                    .key("overview")
                     .label(tr!("Overview"))
                     .icon_class("fa fa-tachometer"),
                 {
@@ -60,6 +62,7 @@ impl Component for DatastorePanelComp {
             )
             .with_item_builder(
                 TabBarItem::new()
+                    .key("content")
                     .label(tr!("Content"))
                     .icon_class("fa fa-th"),
                 {
diff --git a/ui/src/pbs/mod.rs b/ui/src/pbs/mod.rs
index 75ed9926..d14809c2 100644
--- a/ui/src/pbs/mod.rs
+++ b/ui/src/pbs/mod.rs
@@ -114,6 +114,8 @@ impl LoadableComponent for PbsRemoteComp {
             }
         };
 
+        let content = NavigationContainer::new().with_child(content);
+
         let title: Html = Row::new()
             .gap(2)
             .class(AlignItems::Center)
diff --git a/ui/src/pbs/node/mod.rs b/ui/src/pbs/node/mod.rs
index bab5727c..2033bb14 100644
--- a/ui/src/pbs/node/mod.rs
+++ b/ui/src/pbs/node/mod.rs
@@ -64,6 +64,7 @@ impl yew::Component for PbsNodePanelComp {
             .into();
 
         TabPanel::new()
+            .router(true)
             .class(pwt::css::FlexFit)
             .title(title)
             .class(ColorScheme::Neutral)
diff --git a/ui/src/pve/lxc/mod.rs b/ui/src/pve/lxc/mod.rs
index 3d983a08..97c4d083 100644
--- a/ui/src/pve/lxc/mod.rs
+++ b/ui/src/pve/lxc/mod.rs
@@ -60,6 +60,7 @@ impl yew::Component for LxcPanelComp {
             .into();
 
         TabPanel::new()
+            .router(true)
             .class(pwt::css::FlexFit)
             .title(title)
             .with_item_builder(
diff --git a/ui/src/pve/mod.rs b/ui/src/pve/mod.rs
index 4629077e..afbed5a8 100644
--- a/ui/src/pve/mod.rs
+++ b/ui/src/pve/mod.rs
@@ -200,6 +200,7 @@ impl LoadableComponent for PveRemoteComp {
                     .into()
             }
         };
+        let content = NavigationContainer::new().with_child(content);
 
         let link = ctx.link();
 
diff --git a/ui/src/pve/node/mod.rs b/ui/src/pve/node/mod.rs
index de79185a..66ce8dda 100644
--- a/ui/src/pve/node/mod.rs
+++ b/ui/src/pve/node/mod.rs
@@ -68,6 +68,7 @@ impl yew::Component for PveNodePanelComp {
             .into();
 
         TabPanel::new()
+            .router(true)
             .class(pwt::css::FlexFit)
             .title(title)
             .class(ColorScheme::Neutral)
diff --git a/ui/src/pve/qemu/mod.rs b/ui/src/pve/qemu/mod.rs
index 3b5f01b2..b3388f41 100644
--- a/ui/src/pve/qemu/mod.rs
+++ b/ui/src/pve/qemu/mod.rs
@@ -59,6 +59,7 @@ impl yew::Component for QemuPanelComp {
             .into();
 
         TabPanel::new()
+            .router(true)
             .class(pwt::css::FlexFit)
             .title(title)
             .with_item_builder(
-- 
2.47.3





More information about the pdm-devel mailing list