Active Rooms
{room.name}
No active rooms
Share Your Code
Room Configuration
Statistics
Your meeting activity
import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { roomAPI } from '../utils/api'; import Navbar from './Navbar'; // --- Icons --- const CopyIcon = ({ className }) => ( ); const LinkIcon = ({ className }) => ( ); const LockIcon = ({ className }) => ( ); const MicIcon = ({ className }) => ( ); const TrashIcon = ({ className }) => ( ); const TrendingUpIcon = ({ className }) => ( ); // --- Components --- const Toggle = ({ enabled, onChange }) => ( ); const Dashboard = () => { const [rooms, setRooms] = useState([]); const [loading, setLoading] = useState(false); const [generatedCode, setGeneratedCode] = useState(''); const [joinCode, setJoinCode] = useState(''); // New state for joining const [isPasswordProtected, setIsPasswordProtected] = useState(false); const [waitingRoom, setWaitingRoom] = useState(false); const { user } = useAuth(); const navigate = useNavigate(); useEffect(() => { fetchRooms(); generateNewCode(); }, []); const generateNewCode = () => { const code = `J-${Math.floor(100 + Math.random() * 900)}K-${Math.floor(10 + Math.random() * 90)}D`; setGeneratedCode(code); }; const fetchRooms = async () => { try { const response = await roomAPI.getUserRooms(); setRooms(response.data.rooms); } catch (error) { console.error('Error fetching rooms:', error); } }; const handleCreateRoom = async () => { setLoading(true); const roomName = `Room ${generatedCode}`; try { const response = await roomAPI.createRoom({ name: roomName, settings: { passwordProtected: isPasswordProtected, muteOnEntry: waitingRoom } }); navigate(`/room/${response.data.room.roomId}`); } catch (error) { console.error('Error creating room:', error); alert('Failed to create room'); } finally { setLoading(false); } }; const handleJoinRoom = () => { if (!joinCode.trim()) return; // Check if it's a full URL or just a code let roomId = joinCode; try { if (joinCode.includes('http')) { const url = new URL(joinCode); // Assuming path is /room/:id, grab the last segment const pathParts = url.pathname.split('/'); if (pathParts.length > 0) { roomId = pathParts[pathParts.length - 1]; } } } catch (e) { // Not a valid URL, treat as code console.log("Input is not a URL, using as code"); } // Handle "room/XYZ" case if pasted without protocol if (roomId.includes('/room/')) { roomId = roomId.split('/room/')[1]; } navigate(`/room/${roomId}`); }; const copyToClipboard = (text) => { navigator.clipboard.writeText(text); alert("Copied to clipboard!"); }; const handleDeleteRoom = async (e, roomId) => { e.stopPropagation(); if(window.confirm("End this session?")) { try { await roomAPI.endRoom(roomId); fetchRooms(); alert("Room ended successfully"); } catch (error) { console.error("Error ending room:", error); } } }; return (
No active rooms
Your meeting activity