"use client"; import { useState, useEffect } from "react"; import { MessageSquare, Plus, Trash2 } from "lucide-react"; type Conversation = { id: string; title: string; model: string; updated_at: number; }; type ConversationSidebarProps = { currentConversationId: string | null; onSelectConversation: (id: string) => void; onNewConversation: () => void; refreshTrigger?: number; // Para forçar atualização }; export function ConversationSidebar({ currentConversationId, onSelectConversation, onNewConversation, refreshTrigger, }: ConversationSidebarProps) { const [conversations, setConversations] = useState([]); const [loading, setLoading] = useState(true); const [creating, setCreating] = useState(false); const [query, setQuery] = useState(""); useEffect(() => { loadConversations(); }, []); // Recarregar conversas quando refreshTrigger mudar useEffect(() => { if (refreshTrigger !== undefined) { loadConversations(); } }, [refreshTrigger]); const loadConversations = async () => { try { const response = await fetch("/api/conversations"); const data = await response.json(); setConversations(data); } catch (error) { console.error("Erro ao carregar conversas:", error); } finally { setLoading(false); } }; const handleDelete = async (id: string, e: React.MouseEvent) => { e.stopPropagation(); if (!confirm("Deletar esta conversa?")) return; try { await fetch(`/api/conversations/${id}`, { method: "DELETE" }); setConversations((prev) => prev.filter((c) => c.id !== id)); if (currentConversationId === id) { onNewConversation(); } } catch (error) { console.error("Erro ao deletar conversa:", error); } }; const filteredConversations = conversations.filter((c) => c.title.toLowerCase().includes(query.toLowerCase()) ); return (
{/* Header */}
setQuery(e.target.value)} placeholder="Buscar conversa..." className="w-full px-3 py-2 text-sm rounded-md bg-[var(--background)] border border-[var(--border)] outline-none focus:border-[var(--accent)] transition-colors" />
{/* Lista de Conversas */}
{loading ? (
Carregando...
) : conversations.length === 0 ? (
Nenhuma conversa ainda
) : filteredConversations.length === 0 ? (
Nenhum resultado para "{query}"
) : ( filteredConversations.map((conv) => (
onSelectConversation(conv.id)} className={`w-full flex items-center gap-2 p-3 rounded-lg mb-1 text-left transition-colors group cursor-pointer ${ currentConversationId === conv.id ? "bg-[var(--accent)]/12 text-[var(--accent)] ring-1 ring-[var(--accent)]/30" : "hover:bg-[color-mix(in_oklab,var(--surface),black_6%)]" }`} > {conv.title}
)) )}
); }