/** * BridgeStatusPanel — Shows the connection status of a Teams meeting bridge. * * Displays: * - Connected/disconnected state with visual indicator * - Meeting chat ID * - Messages ingested count * - Voice detection toggle (chat-only vs chat+voice) * - Disconnect button * * This is a compact panel meant to sit inside the MeetingRoom right rail * or as an overlay badge. */ import React, { useState } from 'react'; import { Wifi, Mic, MessageSquare, Unplug, RefreshCw, ChevronDown, ChevronUp, } from 'lucide-react'; // --------------------------------------------------------------------------- // Component // --------------------------------------------------------------------------- export function BridgeStatusPanel({ status, onDisconnect, onToggleVoice, onRefresh, loading, }) { const [expanded, setExpanded] = useState(false); if (!status || !status.connected) { return null; // Don't render if not connected } const bridge = status.bridge; const voiceEnabled = bridge?.voice_enabled ?? false; const messagesSeen = bridge?.messages_seen ?? 0; const chatId = bridge?.chat_id || '(resolving...)'; return (
{/* Header — always visible */} {/* Expanded details */} {expanded && (
{/* Chat ID */}

Meeting Chat

{chatId}

{/* Stats */}

Messages

{messagesSeen}

Poll Rate

{bridge?.poll_interval || 5}s

{/* Voice toggle */}

Input Mode

{/* Actions */}
)}
); } // --------------------------------------------------------------------------- // Compact badge variant (for inline use in headers) // --------------------------------------------------------------------------- export function BridgeBadge({ status, onClick, }) { if (!status?.connected) return null; const voiceEnabled = status.bridge?.voice_enabled ?? false; const messagesSeen = status.bridge?.messages_seen ?? 0; return (); }