import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { useConversationStore } from "../stores/conversation.ts"; import { useAuthStore } from "../stores/auth.ts"; import { useReadStatesStore } from "../stores/readStates.ts"; import { NewConversationModal } from "./NewConversationModal.tsx"; function otherMemberName(conv: { members: { id: string; username: string }[] }, currentUserId: string) { const other = conv.members.find((m) => m.id !== currentUserId); return other?.username || "unknown"; } function isSelfDM(conv: { members: { id: string }[] }, currentUserId: string) { return conv.members.length === 1 && conv.members[0].id === currentUserId; } export function ConversationList() { const conversations = useConversationStore((s) => s.conversations); const activeId = useConversationStore((s) => s.activeConversationId); const fetchConversations = useConversationStore((s) => s.fetchConversations); const createConversation = useConversationStore((s) => s.createConversation); const messagesByConv = useConversationStore((s) => s.messagesByConversation); const currentUser = useAuthStore((s) => s.user); const hasConvUnread = useReadStatesStore((s) => s.hasConvUnread); const markConvRead = useReadStatesStore((s) => s.markConvRead); const navigate = useNavigate(); const [showNew, setShowNew] = useState(false); const [notesError, setNotesError] = useState(null); useEffect(() => { fetchConversations(); }, [fetchConversations]); const openConversation = (convId: string) => { // mark as read when opening const msgs = messagesByConv[convId] || []; if (msgs.length > 0) { markConvRead(convId, msgs[msgs.length - 1].id); } navigate(`/dm/${convId}`); }; const openNotes = async () => { setNotesError(null); const existing = conversations.find((c) => isSelfDM(c, currentUser?.id || "")); if (existing) { openConversation(existing.id); return; } try { const conv = await createConversation([]); if (conv) { navigate(`/dm/${conv.id}`); } } catch (err) { console.error("Failed to create notes:", err); setNotesError(err instanceof Error ? err.message : "Failed to create notes"); } }; const getLatestMessageId = (convId: string): string | undefined => { const msgs = messagesByConv[convId] || []; return msgs.length > 0 ? msgs[msgs.length - 1].id : undefined; }; return (
[DIRECT MESSAGES]
{conversations.length === 0 && (

[no conversations]

)} {conversations.map((conv) => { const self = isSelfDM(conv, currentUser?.id || ""); const name = self ? "Notes" : conv.type === "group_dm" ? conv.name || conv.members.map((m) => m.username).join(", ") : otherMemberName(conv, currentUser?.id || ""); const unread = hasConvUnread(conv.id, getLatestMessageId(conv.id)); return ( ); })}
{notesError && (
ERR: {notesError}
)} {showNew && setShowNew(false)} />}
); }