feat(dashboard): parallel MT/MC nav order + symmetric connection links

Order both nav groups Connection/Routing/Mesh(Contacts)/Sources(Companion).
Replace the prominent MeshCore block on the Meshtastic Connection page with
a single subtle cross-link, mirrored on the MeshCore Connection page.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matt Johnson 2026-07-03 04:13:56 +00:00
commit 719ec4861d
3 changed files with 18 additions and 15 deletions

View file

@ -55,17 +55,17 @@ const navGroups: NavGroup[] = [
{
header: 'Meshtastic',
items: [
{ path: '/mesh', label: 'Mesh', icon: Radio },
{ path: '/notifications', label: 'Routing', icon: BellRing },
{ path: '/config?section=connection', label: 'Connection', icon: Wifi },
{ path: '/notifications', label: 'Routing', icon: BellRing },
{ path: '/mesh', label: 'Mesh', icon: Radio },
{ path: '/config?section=mesh_sources', label: 'Sources', icon: Layers },
],
},
{
header: 'MeshCore',
items: [
{ path: '/meshcore/routing', label: 'Routing', icon: BellRing },
{ path: '/meshcore/connection', label: 'Connection', icon: Network },
{ path: '/meshcore/routing', label: 'Routing', icon: BellRing },
{ path: '/meshcore/contacts', label: 'Contacts', icon: Users },
{ path: '/meshcore/companion', label: 'Companion', icon: Bot },
],

View file

@ -753,20 +753,15 @@ function ConnectionSection({ data, onChange }: { data: ConnectionConfig; onChang
/>
</div>
)}
{/* MeshCore transport mode + host/port now live on their own first-class
page (/meshcore/connection) to avoid two divergent live-editing copies. */}
<div className="pt-2 border-t border-[#1e2a3a]">
<div className="text-xs text-slate-500 uppercase tracking-wide mb-2">MeshCore Connection</div>
{/* MeshCore transport + host/port live on their own first-class page
(/meshcore/connection). Subtle cross-link only no editable fields here. */}
<div className="pt-2">
<Link
to="/meshcore/connection"
className="inline-flex items-center gap-2 px-3 py-2 bg-[#0a0e17] border border-[#1e2a3a] rounded text-sm text-accent hover:border-accent transition-colors"
className="inline-flex items-center gap-1 text-xs text-slate-500 hover:text-accent transition-colors"
>
<ExternalLink size={14} />
Configure MeshCore transport, host &amp; port
&rarr; MeshCore transport &amp; connection
</Link>
<p className="text-xs text-slate-600 mt-2">
Transport mode (Meshtastic / MeshCore / Both) and the MeshCore host &amp; port are managed on the MeshCore &rarr; Connection page.
</p>
</div>
</div>
)

View file

@ -1,4 +1,5 @@
import { useState, useEffect, useCallback } from 'react'
import { Link } from 'react-router-dom'
import { Save, RotateCcw, RefreshCw, Check } from 'lucide-react'
import { TextInput, NumberInput, SelectInput } from './Config'
import { notifyRestartRequired } from '@/components/RestartBanner'
@ -107,8 +108,7 @@ export default function MeshCoreConnection() {
<div className="flex items-center justify-between">
<div>
<p className="text-sm text-slate-500">
Transport mode and MeshCore node connection. Meshtastic connection settings live on the
Config &rarr; Connection page.
Transport mode and MeshCore node connection.
</p>
</div>
<div className="flex items-center gap-2">
@ -184,6 +184,14 @@ export default function MeshCoreConnection() {
/>
</div>
</div>
<div className="pt-2">
<Link
to="/config?section=connection"
className="inline-flex items-center gap-1 text-xs text-slate-500 hover:text-accent transition-colors"
>
&rarr; Meshtastic connection
</Link>
</div>
</div>
</div>
)