import { Users, Play, Trash2, Radio, Loader2, Share2, Copy, Link } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { useState, useEffect, useRef } from 'react'; import api from '../services/api'; import { useLanguage } from '../contexts/LanguageContext'; import toast from 'react-hot-toast'; export default function RoomCard({ room, onDelete }) { const navigate = useNavigate(); const { t } = useLanguage(); const [status, setStatus] = useState({ running: false, participantCount: 0 }); const [starting, setStarting] = useState(false); const [showCopyMenu, setShowCopyMenu] = useState(false); const copyMenuRef = useRef(null); useEffect(() => { const handleClickOutside = (e) => { if (copyMenuRef.current && !copyMenuRef.current.contains(e.target)) { setShowCopyMenu(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const copyToClipboard = (url) => { navigator.clipboard.writeText(url); toast.success(t('room.linkCopied')); setShowCopyMenu(false); }; useEffect(() => { const checkStatus = async () => { try { const res = await api.get(`/rooms/${room.uid}/status`); setStatus(res.data); } catch { // Ignore errors } }; checkStatus(); const interval = setInterval(checkStatus, 15000); return () => clearInterval(interval); }, [room.uid]); return (
navigate(`/rooms/${room.uid}`)}>

{room.name}

{status.running && ( {t('common.live')} )} {room.shared ? ( {t('room.shared')} ) : null}

{room.shared ? room.owner_name : `${room.uid.substring(0, 8)}...`}

{/* Room info */}
{status.running ? t('room.participants', { count: status.participantCount }) : t('common.offline')} {room.max_participants > 0 && ( Max: {room.max_participants} )} {room.access_code && ( {t('common.protected')} )}
{/* Actions */}
e.stopPropagation()}>
{showCopyMenu && (
)}
{onDelete && !room.shared && ( )}
); }