import { useEffect, useState } from "react"; import { useServerStore } from "../stores/server.ts"; import { useAuthStore } from "../stores/auth.ts"; import { useMemberStore, type Member } from "../stores/member.ts"; import { usePresenceStore } from "../stores/presence.ts"; import type { UserStatus } from "../stores/auth.ts"; import { MemberContextMenu } from "./MemberContextMenu.tsx"; import { useConversationStore } from "../stores/conversation.ts"; import { useLayoutStore } from "../stores/layout.ts"; import { useNavigate } from "react-router-dom"; function statusIcon(status: UserStatus): string { switch (status) { case "online": return "\u25cf"; case "idle": return "\u25d0"; case "dnd": return "\u26d5"; default: return "\u25cb"; } } function statusColor(status: UserStatus): string { switch (status) { case "online": return "text-gb-green"; case "idle": return "text-gb-yellow"; case "dnd": return "text-gb-red"; default: return "text-gb-gray"; } } function usernameColor(status: UserStatus): string { switch (status) { case "online": return "text-gb-aqua"; case "idle": return "text-gb-yellow"; case "dnd": return "text-gb-red"; default: return "text-gb-fg-f"; } } function MemberRow({ member }: { member: Member }) { const presence = usePresenceStore((s) => s.presences[member.id]); const status = presence?.status ?? member.status; const [menuOpen, setMenuOpen] = useState(false); const currentUser = useAuthStore((s) => s.user); const userPerms = useServerStore((s) => s.userPermissions); const activeServerId = useServerStore((s) => s.activeServerId); const setActiveServer = useServerStore((s) => s.setActiveServer); const createConversation = useConversationStore((s) => s.createConversation); const setDM = useLayoutStore((s) => s.setDM); const navigate = useNavigate(); const canKick = userPerms?.kick_members ?? false; const canBan = userPerms?.ban_members ?? false; const canMute = userPerms?.mute_members ?? false; const isSelf = currentUser?.id === member.id; return (
[select a server]
)} {activeServerId && members.length === 0 && ([no members]
)} {online.length > 0 && (