import React from 'react'; import { network, ADMIN_PUBLIC_KEY } from '../p2p/index.js'; export default function OnlineUsers({ onlinePeers, knownUsers, dms, myKey, profile, activeView, servers, serverMembers, onClose }) { const handleSendRequest = (e, peer) => { e.stopPropagation(); network.sendDMRequest(peer.key, { displayName: peer.displayName, username: peer.username, avatar: peer.avatar }); }; const isCustomServer = activeView !== 'dms'; const serverObj = isCustomServer ? servers.find(s => s.topicHex === activeView) : null; const isGroupChat = serverObj?.isGroupChat; const currentMembers = isCustomServer ? new Set(serverMembers[activeView] ||[]) : null; if (isCustomServer && serverObj) { currentMembers.add(serverObj.owner); currentMembers.add(myKey); } const me = { key: myKey, displayName: profile.displayName, username: profile.username, avatar: profile.avatar }; const allOnlinePeers = [me, ...onlinePeers]; const filteredOnlinePeers = isCustomServer ? allOnlinePeers.filter(p => currentMembers.has(p.key)) : allOnlinePeers; const onlineKeys = new Set(filteredOnlinePeers.map(p => p.key)); const offlineUsers =[]; if (isCustomServer && currentMembers) { currentMembers.forEach(key => { if (!onlineKeys.has(key) && key !== myKey) { const known = knownUsers.find(u => u.key === key); if (known) offlineUsers.push(known); else offlineUsers.push({ key, displayName: 'Unknown User', username: 'unknown', avatar: null }); } }); } else { offlineUsers.push(...knownUsers.filter(u => !onlineKeys.has(u.key) && u.key !== myKey)); } const renderUser = (peer, isOnline) => { const dmState = dms[peer.key]?.status; let isPlatformAdmin = peer.key === ADMIN_PUBLIC_KEY; let isServerOwner = isCustomServer && !isGroupChat && serverObj?.owner === peer.key; let isGroupCreator = isGroupChat && serverObj?.owner === peer.key; return (