From 1c919d89e7150685df23ccf2bb890669d3cb70a3 Mon Sep 17 00:00:00 2001 From: Jonas Bengtsson Date: Sat, 19 Sep 2026 10:08:13 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A7=20Refactor=20the=20UI=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/App.tsx | 82 +++++++++++++++++++++++++++-- frontend/src/pages/BrokerConfig.tsx | 4 +- frontend/src/styles.css | 34 ++++++++++++ 3 files changed, 114 insertions(+), 6 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 0bf7a02..382ec1d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -6,6 +6,63 @@ import { RolesPage } from "./pages/Roles"; import { GroupsPage } from "./pages/Groups"; import { BrokerConfigPage } from "./pages/BrokerConfig"; +// Navigation structure per spec section 57. Entries with a `to` route are +// implemented; entries without one are planned pages, rendered greyed out +// so the full target information architecture stays visible. +const NAV_SECTIONS: { + title: string; + items: { label: string; to?: string; hint?: string }[]; +}[] = [ + { + title: "Broker", + items: [ + { label: "Status", hint: "Dashboard / $SYS monitoring (Release 3)" }, + { label: "Configuration", to: "/broker" }, + { label: "Listeners", to: "/broker#listeners" }, + { label: "Bridges", hint: "Bridge management (post-MVP)" }, + { label: "Revisions", to: "/broker#revisions" }, + ], + }, + { + title: "MQTT Security", + items: [ + { label: "Clients", to: "/clients" }, + { label: "Groups", to: "/groups" }, + { label: "Roles", to: "/roles" }, + { label: "ACL Simulator", hint: "ACL simulator (post-MVP)" }, + { label: "Authentication", hint: "Auth mechanism configuration (Release 2)" }, + ], + }, + { + title: "Certificates", + items: [ + { label: "Authorities", hint: "PKI (Release 2)" }, + { label: "Server Certificates", hint: "PKI (Release 2)" }, + { label: "Client Certificates", hint: "PKI (Release 2)" }, + { label: "CSRs", hint: "CSR signing (Release 2)" }, + { label: "Revocations", hint: "CRL management (Release 2)" }, + ], + }, + { + title: "Tools", + items: [ + { label: "Topic Explorer", hint: "Test console (post-MVP)" }, + { label: "Connection Test", hint: "Connectivity tester (post-MVP)" }, + { label: "Client Provisioning", hint: "Provisioning wizard (post-MVP)" }, + ], + }, + { + title: "Administration", + items: [ + { label: "Users", hint: "User management page (Release 3)" }, + { label: "Roles", hint: "Management roles admin (Release 3)" }, + { label: "Audit Log", hint: "Audit viewer (Release 3)" }, + { label: "Backup", hint: "Backup/restore (Release 3)" }, + { label: "System", hint: "System settings (Release 3)" }, + ], + }, +]; + function Layout({ children }: { children: React.ReactNode }) { const { session, logout } = useAuth(); return ( @@ -13,10 +70,27 @@ function Layout({ children }: { children: React.ReactNode }) {