'use client' import { useMissionControl } from '@/store' import { Button } from '@/components/ui/button' interface ConnectionStatusProps { isConnected: boolean onConnect: () => void onDisconnect: () => void onReconnect?: () => void } export function ConnectionStatus({ isConnected, onConnect, onDisconnect, onReconnect }: ConnectionStatusProps) { const { connection } = useMissionControl() const displayUrl = connection.url || 'ws://:' const isGatewayOptional = process.env.NEXT_PUBLIC_GATEWAY_OPTIONAL === 'true' const getStatusColor = () => { if (isConnected) return 'bg-green-500 animate-pulse' if (connection.reconnectAttempts > 0) return 'bg-yellow-500' if (isGatewayOptional && !isConnected) return 'bg-blue-500' return 'bg-red-500' } const getStatusText = () => { if (isConnected) { return 'Connected' } if (connection.reconnectAttempts > 0) { return `Reconnecting... (${connection.reconnectAttempts}/10)` } if (isGatewayOptional && !isConnected) { return 'Gateway Optional (Standalone)' } return 'Disconnected' } return (
{/* Connection Status Indicator */}
{getStatusText()} {displayUrl}
{/* Connection Controls */}
{isConnected ? ( ) : connection.reconnectAttempts > 0 ? ( ) : (
{onReconnect && ( )}
)}
{/* Real-time Status */}
{connection.latency ? ( <> Latency: {connection.latency}ms ) : connection.lastConnected ? ( <> Last connected: {new Date(connection.lastConnected).toLocaleTimeString()} ) : ( <> Status: Not connected )}
) }