diff --git a/03_implementation/ui/src/app/AppShell.tsx b/03_implementation/ui/src/app/AppShell.tsx index 4bc3b5cc..c8448a31 100644 --- a/03_implementation/ui/src/app/AppShell.tsx +++ b/03_implementation/ui/src/app/AppShell.tsx @@ -21,7 +21,7 @@ export function AppShell({ children }: { children?: ReactNode }) {
-
+
{children}
diff --git a/03_implementation/ui/src/components/layout/Sidebar.tsx b/03_implementation/ui/src/components/layout/Sidebar.tsx index e011351a..74d9c980 100644 --- a/03_implementation/ui/src/components/layout/Sidebar.tsx +++ b/03_implementation/ui/src/components/layout/Sidebar.tsx @@ -32,7 +32,9 @@ export function Sidebar() { /> ))} - +
+ +
); } diff --git a/03_implementation/ui/src/components/layout/TopBar.tsx b/03_implementation/ui/src/components/layout/TopBar.tsx index dbe7d4e6..bdc04f64 100644 --- a/03_implementation/ui/src/components/layout/TopBar.tsx +++ b/03_implementation/ui/src/components/layout/TopBar.tsx @@ -27,17 +27,26 @@ export function TopBar({ activeLabel }: { activeLabel: string }) { useEffect(() => { let mounted = true; - void adapters.getSystemSnapshot().then((snapshot) => { - if (mounted) setSys(snapshot); - }); - void adapters.getNotifications().then((items) => { - if (mounted) setNotifications(items); - }); - void adapters.getLatestProofBundle().then((bundle) => { - if (mounted) setLatestProof(bundle); - }); + + const fetchAll = () => { + void adapters.getSystemSnapshot().then((snapshot) => { + if (mounted) setSys(snapshot); + }); + void adapters.getNotifications().then((items) => { + if (mounted) setNotifications(items); + }); + void adapters.getLatestProofBundle().then((bundle) => { + if (mounted) setLatestProof(bundle); + }); + }; + + fetchAll(); + // Refresh system status every 10 s — non-critical display data; 10 s avoids render churn. + const timer = window.setInterval(fetchAll, 10_000); + return () => { mounted = false; + window.clearInterval(timer); }; }, []);