diff --git a/src/pages/MeetingRoom.tsx b/src/pages/MeetingRoom.tsx index efca7b3..91a0211 100644 --- a/src/pages/MeetingRoom.tsx +++ b/src/pages/MeetingRoom.tsx @@ -640,6 +640,7 @@ export default function MeetingRoom() { // Estados do Lobby const [inRoom, setInRoom] = useState(false); + const [isConnecting, setIsConnecting] = useState(false); const [name, setName] = useState(''); const [cargo, setCargo] = useState(''); const [empresa, setEmpresa] = useState(''); @@ -713,7 +714,7 @@ export default function MeetingRoom() { // --- ESCUTA DO LOBBY EM TEMPO REAL --- // Conecta ao canal antes do lobby finalizar para ler assentos e avatares ocupados na sala digitada useEffect(() => { - if (!inputRoomId || inputRoomId.trim().length < 3) { + if (!inputRoomId || inputRoomId.trim().length < 3 || inRoom || isConnecting) { setPeers({}); return; } @@ -747,9 +748,11 @@ export default function MeetingRoom() { .subscribe(); return () => { + console.log(`šŸ”Œ [Lobby Watcher] Desinscrevendo escuta passiva da sala: ${roomIdUpper}`); tempChannel.unsubscribe(); + supabase.removeChannel(tempChannel); }; - }, [inputRoomId, inRoom]); + }, [inputRoomId, inRoom, isConnecting]); // Envia as atualizaƧƵes de apresentação via Broadcast para a sala inteira const handlePresentationChange = (updatedFields: Partial) => { @@ -785,6 +788,10 @@ export default function MeetingRoom() { return; } + // Ativa o estado de conexĆ£o e aguarda 120ms para a escuta do lobby se desmontar totalmente + setIsConnecting(true); + await new Promise((resolve) => setTimeout(resolve, 120)); + const finalRoomId = targetRoomId.trim().toUpperCase() || Math.random().toString(36).substring(3, 8).toUpperCase(); setRoomCode(finalRoomId); @@ -877,9 +884,11 @@ export default function MeetingRoom() { } setInRoom(true); + setIsConnecting(false); toast.success(`Entrou na sala de reuniĆ£o: ${finalRoomId}`); navigate(`/meeting/${finalRoomId}`, { replace: true }); } else if (status === 'CHANNEL_ERROR') { + setIsConnecting(false); toast.error('Erro ao conectar ao canal de reuniƵes.'); } }); @@ -905,6 +914,7 @@ export default function MeetingRoom() { await supabase.removeChannel(channelRef.current); } setInRoom(false); + setIsConnecting(false); setPeers({}); setChatMessages([]); navigate('/');