From 93c22e844e5dbf2d568093678cdb882350ff3ba9 Mon Sep 17 00:00:00 2001 From: Daniel Arroyo Date: Tue, 7 Jul 2026 20:40:24 -0400 Subject: [PATCH] Add persistent navbar with SSH Keys link Refactor App.tsx to use Layout + Outlet pattern with sticky navbar containing: Dashboard | Machines | Sync Pairs | Jobs | SSH Keys | Settings. Clean up redundant button row from Dashboard and inline SSH Keys links. --- web/src/App.tsx | 66 ++++++++++++++++++++++++++++++++----- web/src/pages/Dashboard.tsx | 6 ---- web/src/pages/Machines.tsx | 6 +--- web/src/pages/Settings.tsx | 9 ----- 4 files changed, 59 insertions(+), 28 deletions(-) diff --git a/web/src/App.tsx b/web/src/App.tsx index 8a0fc58..ba9e1c4 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -1,4 +1,4 @@ -import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; +import { BrowserRouter, Routes, Route, Navigate, NavLink, Outlet } from 'react-router-dom'; import { useState, useEffect } from 'react'; import Login from './pages/Login'; import Dashboard from './pages/Dashboard'; @@ -20,18 +20,68 @@ function ProtectedRoute({ children }: { children: JSX.Element }) { return authed ? children : ; } +function NavBar() { + const navItems = [ + { to: '/', label: 'Dashboard' }, + { to: '/machines', label: 'Machines' }, + { to: '/sync-pairs', label: 'Sync Pairs' }, + { to: '/jobs', label: 'Jobs' }, + { to: '/ssh-keys', label: 'SSH Keys' }, + { to: '/settings', label: 'Settings' }, + ]; + + return ( + + ); +} + +function Layout() { + return ( +
+ +
+ +
+
+ ); +} + export default function App() { return ( } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> diff --git a/web/src/pages/Dashboard.tsx b/web/src/pages/Dashboard.tsx index de02c5c..363f672 100644 --- a/web/src/pages/Dashboard.tsx +++ b/web/src/pages/Dashboard.tsx @@ -1,5 +1,4 @@ import { useEffect, useState } from 'react'; -import { Link } from 'react-router-dom'; import { api, Machine, Job } from '../api/client'; export default function Dashboard() { @@ -66,11 +65,6 @@ export default function Dashboard() { )} -
- Machines - Sync Pairs - All Jobs -
); } diff --git a/web/src/pages/Machines.tsx b/web/src/pages/Machines.tsx index 6eafbb3..30c2ca3 100644 --- a/web/src/pages/Machines.tsx +++ b/web/src/pages/Machines.tsx @@ -1,5 +1,4 @@ import { useEffect, useState } from 'react'; -import { Link } from 'react-router-dom'; import { api, Machine, SSHKey } from '../api/client'; export default function Machines() { @@ -77,10 +76,7 @@ export default function Machines() { return (
-
-

Machines

- Manage SSH Keys -
+

Machines

diff --git a/web/src/pages/Settings.tsx b/web/src/pages/Settings.tsx index 3ee9592..9ba1cf2 100644 --- a/web/src/pages/Settings.tsx +++ b/web/src/pages/Settings.tsx @@ -1,5 +1,4 @@ import { useState, useEffect } from 'react'; -import { Link } from 'react-router-dom'; export default function Settings() { const [pubKey, setPubKey] = useState(''); @@ -36,14 +35,6 @@ export default function Settings() {
-
-

SSH Keys

-

- Manage SSH key pairs for authenticating to remote machines. Go to the{' '} - SSH Keys page. -

-
-

Quick Reference