/** * StatusPill — connection + stale-data indicator. * * Shows: * - WS connection state (open / connecting / closed / fallback) * - "Data may be stale" warning if lastUpdate > STALE_THRESHOLD_S * - Number of messages received */ import { Pill } from '@kerbal-rt/ui'; import type { ConnectionState } from '../hooks/useLiveState.js'; export interface StatusPillProps { status: ConnectionState; lastUpdate: string | null; messageCount: number; vesselCount: number; bodyCount: number; } const STALE_THRESHOLD_S = 60; export function StatusPill({ status, lastUpdate, messageCount, vesselCount, bodyCount, }: StatusPillProps) { const isStale = lastUpdate ? (Date.now() - new Date(lastUpdate).getTime()) / 1000 > STALE_THRESHOLD_S : true; const tone = status === 'open' && !isStale ? 'success' : status === 'connecting' || status === 'fallback' ? 'warn' : 'danger'; const label = status === 'open' ? isStale ? 'STALE' : 'LIVE' : status === 'connecting' ? 'CONNECTING' : status === 'fallback' ? 'POLLING' : 'OFFLINE'; return (
{label} {bodyCount} bodies {vesselCount} vessels {messageCount} msgs
); }