'use client'; import { useEffect, useState } from 'react'; import { Wifi, WifiOff, RefreshCw } from 'lucide-react'; import { onConnectionChange, getConnectionStatus, checkHealth } from '@/lib/api'; import { cn } from '@/lib/utils'; export function ConnectionStatus() { const [isConnected, setIsConnected] = useState(true); const [isReconnecting, setIsReconnecting] = useState(false); const [showBanner, setShowBanner] = useState(false); useEffect(() => { // Get initial status setIsConnected(getConnectionStatus()); // Subscribe to connection changes const unsubscribe = onConnectionChange((connected) => { setIsConnected(connected); if (!connected) { setShowBanner(true); } else { // Hide banner after a short delay when reconnected setTimeout(() => setShowBanner(false), 2000); } }); return unsubscribe; }, []); const handleReconnect = async () => { setIsReconnecting(true); try { await checkHealth(); setIsConnected(true); setTimeout(() => setShowBanner(false), 1000); } catch { setIsConnected(false); } finally { setIsReconnecting(false); } }; if (!showBanner) return null; return (
{isConnected ? ( <> Connected to backend ) : ( <> Cannot connect to backend server )}
); }