diff --git a/src/pages/MeetingRoom.tsx b/src/pages/MeetingRoom.tsx index bc7cca1..b14cfd0 100644 --- a/src/pages/MeetingRoom.tsx +++ b/src/pages/MeetingRoom.tsx @@ -236,12 +236,12 @@ function MiiAvatarBackup({ return ( - + - + - + {username} @@ -253,9 +253,9 @@ function MiiAvatarBackup({ )} - {/* Cabeça do Avatar: Toon Head do Dicebear em HTML Billboard para resiliência contra erros de CORS/Rede */} + {/* Cabeça do Avatar: Toon Head do Dicebear em HTML Transformado em 3D Plano (olhando para a mesa) */} - +
+ {/* Balão de Nome acima da cabeça */} - + - + - + {username} @@ -832,12 +832,38 @@ export default function MeetingRoom() { // Estados da Sala (Conexão Supabase) const [peers, setPeers] = useState>({}); + + const mergedPeers = useMemo(() => { + if (!inRoom) return peers; + + // Se o usuário local já estiver no peers (via sync do Supabase), usamos o peers original + if (peers[selectedChair]) { + return peers; + } + + // Caso contrário, injetamos o usuário local no dicionário temporário + return { + ...peers, + [selectedChair]: { + presence_ref: 'local_user', + username: name, + avatarId: selectedAvatar, + chairId: selectedChair, + role: isPresenter ? 'presenter' : 'guest', + cargo: cargo || 'Apresentador', + empresa: empresa || 'SteelXR Corp', + joinedAt: new Date().toISOString() + } as unknown as PeerData + }; + }, [peers, inRoom, selectedChair, name, selectedAvatar, isPresenter, cargo, empresa]); + + const activeUsersCount = useMemo(() => Object.keys(mergedPeers).length, [mergedPeers]); + const [chatMessages, setChatMessages] = useState<{ id: string; sender: string; text: string; time: string }[]>([]); const [newMessage, setNewMessage] = useState(''); const [lastChatSender, setLastChatSender] = useState(null); const [isMuted, setIsMuted] = useState(false); const [isTalking, setIsTalking] = useState(false); - const [activeUsersCount, setActiveUsersCount] = useState(1); const [roomCode, setRoomCode] = useState(roomId || ''); const [activeTab, setActiveTab] = useState<'chat' | 'participants'>('participants'); @@ -1050,7 +1076,6 @@ export default function MeetingRoom() { }); console.log("👥 [Presence Sync] Peers formatados:", formattedPeers); setPeers(formattedPeers); - setActiveUsersCount(count); }) .on('presence', { event: 'join' }, ({ key, newPresences }) => { if (key.startsWith('lobby_watcher_')) return; @@ -1405,8 +1430,8 @@ export default function MeetingRoom() { {/* Renderizar avatares de TODOS na sala - Ocultados se modo foco */} - {!isFocusMode && Object.keys(peers).map((chairKey) => { - const peer = peers[chairKey]; + {!isFocusMode && Object.keys(mergedPeers).map((chairKey) => { + const peer = mergedPeers[chairKey]; const chairConf = CHAIRS.find((c) => c.id === peer.chairId); if (!chairConf) return null; @@ -1414,14 +1439,14 @@ export default function MeetingRoom() { return ( 0.5)} isLastChatSender={peer.username === lastChatSender} - scale={1.2} + scale={4.8} /> ); })} @@ -1711,13 +1736,13 @@ export default function MeetingRoom() { Quem está na sala
- {Object.keys(peers).map((chairKey) => { - const peer = peers[chairKey]; + {Object.keys(mergedPeers).map((chairKey) => { + const peer = mergedPeers[chairKey]; const isHost = peer.role === 'presenter'; const isMe = peer.chairId === selectedChair; return ( -
+
{/* Indicador da cor do avatar do Mii via classe estática Tailwind */}
{peer.username.substring(0, 2).toUpperCase()}