import { useState, useMemo } from "react"; import { useConversationStore } from "../stores/conversation.ts"; import { useMemberStore } from "../stores/member.ts"; import { useServerStore } from "../stores/server.ts"; import { useAuthStore } from "../stores/auth.ts"; interface NewConversationModalProps { onClose: () => void; } export function NewConversationModal({ onClose }: NewConversationModalProps) { const [query, setQuery] = useState(""); const [selected, setSelected] = useState([]); const createConversation = useConversationStore((s) => s.createConversation); const activeServerId = useServerStore((s) => s.activeServerId); const membersByServer = useMemberStore((s) => s.membersByServer); const currentUserId = useAuthStore((s) => s.user?.id); const members = useMemo(() => { const map = new Map(); if (activeServerId && membersByServer[activeServerId]) { membersByServer[activeServerId].forEach((m) => map.set(m.id, m)); } else { // Global search if no active server Object.values(membersByServer).forEach((list) => { list.forEach((m) => map.set(m.id, m)); }); } return Array.from(map.values()); }, [activeServerId, membersByServer]); const filtered = useMemo(() => { const q = query.toLowerCase(); return members.filter( (m) => m.id !== currentUserId && (m.username.toLowerCase().includes(q) || (m.display_name || "").toLowerCase().includes(q)), ); }, [members, query, currentUserId]); const toggle = (id: string) => { setSelected((prev) => prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id], ); }; const handleCreate = async () => { if (selected.length === 0) return; await createConversation(selected); onClose(); }; return (
e.stopPropagation()} >
NEW DIRECT MESSAGE
setQuery(e.target.value)} placeholder="search members..." className="terminal-input w-full mb-3 text-sm" />
{filtered.map((m) => ( ))} {filtered.length === 0 && (

[no members found]

)}
); }