import { useAuthStore } from '@/store/authStore'; import { usePlayerStore } from '@/store/playerStore'; import { useConnectionStatus } from '@/hooks/useConnectionStatus'; import { useNavidromeAdminRole } from '@/hooks/useNavidromeAdminRole'; import { serverListDisplayLabel } from '@/utils/server/serverDisplayName'; import { findServerByIdOrIndexKey } from '@/utils/server/serverLookup'; import { PerfProbeMetricSection } from '@/features/sidebar/components/perfProbe/PerfProbeMetricCard'; import PerfProbeDetailList from '@/features/sidebar/components/perfProbe/PerfProbeDetailList'; import PerfProbeStatusBadge, { type PerfProbeBadgeTone } from '@/features/sidebar/components/perfProbe/PerfProbeStatusBadge'; import SidebarPerfProbeServerSection from '@/features/sidebar/components/perfProbe/SidebarPerfProbeServerSection'; function connectionStatusBadge(status: string): { tone: PerfProbeBadgeTone; label: string } { switch (status) { case 'connected': return { tone: 'ok', label: 'Connected' }; case 'disconnected': return { tone: 'error', label: 'Disconnected' }; case 'checking': return { tone: 'warn', label: 'Checking…' }; default: return { tone: 'muted', label: status }; } } function sessionBadge(loggedIn: boolean): { tone: PerfProbeBadgeTone; label: string } { return loggedIn ? { tone: 'ok', label: 'Logged in' } : { tone: 'muted', label: 'Not logged in' }; } function adminRoleBadge(role: ReturnType): { tone: PerfProbeBadgeTone; label: string } { switch (role) { case 'admin': return { tone: 'ok', label: 'Admin' }; case 'user': return { tone: 'neutral', label: 'Standard user' }; case 'checking': case 'idle': return { tone: 'warn', label: 'Checking…' }; case 'error': return { tone: 'error', label: 'Could not verify' }; case 'na': default: return { tone: 'muted', label: 'N/A (not Navidrome)' }; } } function endpointBadge(isLan: boolean): { tone: PerfProbeBadgeTone; label: string } { return isLan ? { tone: 'ok', label: 'LAN' } : { tone: 'neutral', label: 'Public / remote' }; } export default function SidebarPerfProbeConnectionsTab() { const { status, isLan, serverName } = useConnectionStatus(); const isLoggedIn = useAuthStore(s => s.isLoggedIn); const activeServerId = useAuthStore(s => s.activeServerId); const servers = useAuthStore(s => s.servers); const connectUrl = useAuthStore(s => s.getBaseUrl()); const queueServerId = usePlayerStore(s => s.queueServerId); const adminRole = useNavidromeAdminRole(); const queueServer = queueServerId ? findServerByIdOrIndexKey(queueServerId) : undefined; const queueDiffersFromActive = Boolean( queueServerId && activeServerId && queueServerId !== activeServerId, ); const connBadge = connectionStatusBadge(status); const sessBadge = sessionBadge(isLoggedIn); const roleBadge = adminRoleBadge(adminRole); return (
Link {connBadge.label}
Session {sessBadge.label}
{isLoggedIn && (
Role {roleBadge.label}
)}
{connBadge.label}, }, { label: 'Session', value: {sessBadge.label}, }, ...(isLoggedIn ? [{ label: 'Navidrome role', value: {roleBadge.label}, }] : []), ...(serverName ? [{ label: 'Browse label', value: serverName }] : []), ...(connectUrl ? [{ label: 'Connect URL', value: {connectUrl} }] : []), ...(status === 'connected' ? [{ label: 'Endpoint', value: ( {endpointBadge(isLan).label} ), }] : []), ]} /> {queueDiffersFromActive && queueServer && ( {queueServerId} }, ]} /> )}
); }