From 20c46e54690f7c7befb7059960447935231d86be Mon Sep 17 00:00:00 2001 From: "Alex Pooley (@zuedev)" Date: Sat, 25 Jul 2026 17:45:15 +0100 Subject: 2-col layout --- 174bg/manager/package-lock.json | 48 +++++++- 174bg/manager/package.json | 3 +- 174bg/manager/src/App.jsx | 98 +++++++++++----- 174bg/manager/src/components/Sidebar.jsx | 56 +++++++++ 174bg/manager/src/main.jsx | 5 +- 174bg/manager/src/pages/Overview.jsx | 11 ++ 174bg/manager/src/theme.css | 194 +++++++++++++++++++++++++++++-- 7 files changed, 372 insertions(+), 43 deletions(-) create mode 100644 174bg/manager/src/components/Sidebar.jsx create mode 100644 174bg/manager/src/pages/Overview.jsx (limited to '174bg/manager') diff --git a/174bg/manager/package-lock.json b/174bg/manager/package-lock.json index 505b3ad..1f14e69 100644 --- a/174bg/manager/package-lock.json +++ b/174bg/manager/package-lock.json @@ -7,7 +7,8 @@ "dependencies": { "pocketbase": "^0.27.0", "react": "^19.1.0", - "react-dom": "^19.1.0" + "react-dom": "^19.1.0", + "react-router-dom": "^7.1.1" }, "devDependencies": { "@vitejs/plugin-react": "^4.3.4", @@ -2071,7 +2072,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -2431,6 +2431,44 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.1.tgz", + "integrity": "sha512-GDLgg3i3uM0aeJO3Fm+TCS+sDQ7gu12T6x0qdTEzcwqEfleci7JwugVNIF3U//0FWKnJT7ptG+20B2jfDqnZAg==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.1.tgz", + "integrity": "sha512-KaZh+X/6UtEp28x51AUYZDMg9NGoz2ja3dNHa+ta/tk40vCzKhQ/RypCWBMLbmDr6//E24Vv5uPsrqXFozdkAg==", + "license": "MIT", + "dependencies": { + "react-router": "7.18.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/rollup": { "version": "4.62.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", @@ -2555,6 +2593,12 @@ "node": ">=10" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", diff --git a/174bg/manager/package.json b/174bg/manager/package.json index 0e4769e..d863c0a 100644 --- a/174bg/manager/package.json +++ b/174bg/manager/package.json @@ -9,7 +9,8 @@ "dependencies": { "pocketbase": "^0.27.0", "react": "^19.1.0", - "react-dom": "^19.1.0" + "react-dom": "^19.1.0", + "react-router-dom": "^7.1.1" }, "devDependencies": { "@vitejs/plugin-react": "^4.3.4", diff --git a/174bg/manager/src/App.jsx b/174bg/manager/src/App.jsx index 5f455bb..095506a 100644 --- a/174bg/manager/src/App.jsx +++ b/174bg/manager/src/App.jsx @@ -1,7 +1,8 @@ import { useCallback, useEffect, useState } from "react"; +import { Navigate, Route, Routes } from "react-router-dom"; import { pb } from "./lib/pocketbase"; -import Welcome from "./components/Welcome.jsx"; -import RequiredInfo from "./components/RequiredInfo.jsx"; +import Sidebar from "./components/Sidebar.jsx"; +import Overview from "./pages/Overview.jsx"; import RolePreferences from "./components/RolePreferences.jsx"; import OnCallSchedule from "./components/OnCallSchedule.jsx"; import Ledger from "./components/Ledger.jsx"; @@ -143,40 +144,75 @@ export default function App() { return ( <> -

174th Battle Group: Manager

- {!loggedIn && ( -
-

You are not logged in. Please log in to access this site:

- -
- )} - - {oauthStatus.text && ( -

- {oauthStatus.text} -

+
+

174th Battle Group: Manager

+
+

You are not logged in. Please log in to access this site:

+ +
+ {oauthStatus.text && ( +

+ {oauthStatus.text} +

+ )} +
)} {loggedIn && ( -
- - - - - -
- -
-
+ )} ); } + +function DashboardLayout({ record, onLogout, onUpdate }) { + const [navOpen, setNavOpen] = useState(false); + + return ( +
+ setNavOpen(false)} + onLogout={onLogout} + /> +
+
+ + 174th Battle Group: Manager +
+
+ + } /> + + } + /> + } + /> + } /> + } /> + +
+
+
+ ); +} diff --git a/174bg/manager/src/components/Sidebar.jsx b/174bg/manager/src/components/Sidebar.jsx new file mode 100644 index 0000000..64f0cf5 --- /dev/null +++ b/174bg/manager/src/components/Sidebar.jsx @@ -0,0 +1,56 @@ +import { NavLink } from "react-router-dom"; + +const NAV_ITEMS = [ + { to: "/", label: "Overview", end: true }, + { to: "/preferences", label: "Role Preferences" }, + { to: "/oncall", label: "On-Call Schedule" }, + { to: "/ledger", label: "Ledger" }, +]; + +export default function Sidebar({ record, open, onClose, onLogout }) { + const name = record?.RSI_Handle || record?.name || "Pilot"; + + return ( + <> + {open && ( +