import { createFileRoute } from '@tanstack/react-router' import { useQueryClient } from '@tanstack/react-query' import { Video, Volume2, MonitorPlay, ZapOff, RefreshCw } from 'lucide-react' import { useGetStatus, getGetStatusQueryKey, } from '@/api/gen/host/host' import { useStopSession, useRequestIdr } from '@/api/gen/session/session' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { QueryState } from '@/components/query-state' import { m } from '@/paraglide/messages' import { useLocale } from '@/lib/i18n' export const Route = createFileRoute('/')({ component: Dashboard }) function Dashboard() { useLocale() const qc = useQueryClient() // Poll live status every 2s so the console tracks an active session. const status = useGetStatus({ query: { refetchInterval: 2_000 } }) const stop = useStopSession() const idr = useRequestIdr() const invalidate = () => qc.invalidateQueries({ queryKey: getGetStatusQueryKey() }) const s = status.data return (

{m.status_title()}

{s && ( <>
} label={m.status_video()} on={s.video_streaming} /> } label={m.status_audio()} on={s.audio_streaming} /> {m.status_paired_count()} {s.paired_clients} {m.status_pin_pending()} {s.pin_pending ? '●' : '—'}
{m.status_session()}
{s.stream ? (
) : (

{m.status_no_session()}

)}
)}
) } function StatCard({ icon, label, on }: { icon: React.ReactNode; label: string; on: boolean }) { return ( {icon} {label} {on ? m.status_streaming() : m.status_idle()} ) } function Field({ label, value }: { label: string; value: string }) { return (
{label}
{value}
) }