diff --git a/work/dashboard-frontend/src/App.tsx b/work/dashboard-frontend/src/App.tsx index 2fbde71..a0a8785 100644 --- a/work/dashboard-frontend/src/App.tsx +++ b/work/dashboard-frontend/src/App.tsx @@ -1,20 +1,14 @@ import { Routes, Route, Navigate } from 'react-router-dom' import Layout from './components/Layout' import Dashboard from './pages/Dashboard' -import Mesh from './pages/Mesh' import Environment from './pages/Environment' import Config from './pages/Config' import ActivityLog from './pages/ActivityLog' import Notifications from './pages/Notifications' import Reference from './pages/Reference' -import AdapterConfig from './pages/AdapterConfig' -import GaugeSites from './pages/GaugeSites' -import TownAnchors from './pages/TownAnchors' import MeshCoreRouting from './pages/MeshCoreRouting' import MeshCoreConnection from './pages/MeshCoreConnection' -import MeshCoreCompanion from './pages/MeshCoreCompanion' import MeshtasticConnection from './pages/MeshtasticConnection' -import MeshtasticSources from './pages/MeshtasticSources' import Places from './pages/Places' import MeshtasticNodes from './pages/MeshtasticNodes' import MeshCoreContactsCompanion from './pages/MeshCoreContactsCompanion' @@ -41,7 +35,6 @@ function App() { {/* Legacy /notifications -> Meshtastic Routing */} } /> } /> - } /> {/* New aggregated pages */} } /> @@ -49,14 +42,17 @@ function App() { {/* Custom sources folded into Data Feeds; keep old bookmark working */} } /> - {/* De-navved routes still work */} - } /> - } /> - } /> + {/* Legacy /gauge-sites -> Places (Gauge Sites tab) */} + } /> + {/* Legacy /town-anchors -> Places (lands on first tab, no ?tab= deep-link) */} + } /> + {/* Legacy /mesh -> Meshtastic Nodes & Health (Nodes tab) */} + } /> {/* Meshtastic routes */} } /> - } /> + {/* Legacy /meshtastic/sources -> Nodes & Health (lands on first tab, no ?tab= deep-link) */} + } /> } /> } /> } /> @@ -66,7 +62,8 @@ function App() { } /> } /> } /> - } /> + {/* Legacy /meshcore/companion -> Contacts & Companion (lands on first tab, no ?tab= deep-link) */} + } /> } /> diff --git a/work/dashboard-frontend/src/components/Layout.tsx b/work/dashboard-frontend/src/components/Layout.tsx index 626e896..8a55d4e 100644 --- a/work/dashboard-frontend/src/components/Layout.tsx +++ b/work/dashboard-frontend/src/components/Layout.tsx @@ -3,19 +3,14 @@ import { Link, useLocation, useNavigate } from 'react-router-dom' import { useDirty } from '@/context/DirtyContext' import { LayoutDashboard, - Radio, Cloud, BellRing, BookOpen, - Sliders, - Droplets, MapPin, Map, Wifi, - Layers, Network, Users, - Bot, Settings, Calendar, Activity, @@ -85,14 +80,7 @@ const navGroups: NavGroup[] = [ // Flattened view of every nav item for title lookup. // Also include de-navved routes so they still resolve a title. -const extraTitleItems: NavItem[] = [ - { path: '/adapter-config', label: 'Adapter Config', icon: Sliders }, - { path: '/gauge-sites', label: 'Gauge Sites', icon: Droplets }, - { path: '/town-anchors', label: 'Town Anchors', icon: MapPin }, - { path: '/mesh', label: 'Mesh', icon: Radio }, - { path: '/meshtastic/sources', label: 'Sources', icon: Layers }, - { path: '/meshcore/companion', label: 'Companion', icon: Bot }, -] +const extraTitleItems: NavItem[] = [] const allNavItems: NavItem[] = [ ...navGroups.flatMap((g) => g.items), @@ -108,7 +96,6 @@ const pathTitles: Record = { '/meshtastic/danger-zones': 'Danger Zones', '/meshcore/danger-zones': 'Danger Zones', '/meshcore/contacts': 'Contacts & Companion', - '/meshcore/companion': 'Contacts & Companion', } function formatUptime(seconds: number): string { diff --git a/work/meshai/dashboard/api/config_routes.py b/work/meshai/dashboard/api/config_routes.py index 5a28311..104de0f 100644 --- a/work/meshai/dashboard/api/config_routes.py +++ b/work/meshai/dashboard/api/config_routes.py @@ -411,8 +411,10 @@ def _refresh_mesh_context(app, new_ctx_cfg) -> bool: @router.post("/notifications/refresh-toggles") async def refresh_toggles(request: Request): - """Explicit refresh endpoint (kept for backwards-compat with the - dashboard's manual ping path).""" + """Explicit refresh endpoint. Not called by the dashboard frontend -- + the _auto_refresh_toggle_filter middleware below already refreshes the + ToggleFilter automatically on every successful notifications config PUT. + Kept for ops/debug use (manually forcing a refresh outside that path).""" bus = getattr(request.app.state, "bus", None) config = getattr(request.app.state, "config", None) if bus is None or config is None: