"use client"; import { useState } from "react"; import { useAppStore } from "@/store/app-store"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Plus, MessageSquare, Archive, Trash2, MoreVertical, Search, ChevronLeft, ArchiveRestore, } from "lucide-react"; import { cn } from "@/lib/utils"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; import { Badge } from "@/components/ui/badge"; export function ChatHistory() { const { chatSessions, currentProject, currentChatSession, chatHistoryOpen, createChatSession, setCurrentChatSession, archiveChatSession, unarchiveChatSession, deleteChatSession, setChatHistoryOpen, } = useAppStore(); const [searchQuery, setSearchQuery] = useState(""); const [showArchived, setShowArchived] = useState(false); if (!currentProject) { return null; } // Filter sessions for current project const projectSessions = chatSessions.filter( (session) => session.projectId === currentProject.id ); // Filter by search query and archived status const filteredSessions = projectSessions.filter((session) => { const matchesSearch = session.title .toLowerCase() .includes(searchQuery.toLowerCase()); const matchesArchivedStatus = showArchived ? session.archived : !session.archived; return matchesSearch && matchesArchivedStatus; }); // Sort by most recently updated const sortedSessions = filteredSessions.sort( (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime() ); const handleCreateNewChat = () => { createChatSession(); }; const handleSelectSession = (session: any) => { setCurrentChatSession(session); }; const handleArchiveSession = (sessionId: string, e: React.MouseEvent) => { e.stopPropagation(); archiveChatSession(sessionId); }; const handleUnarchiveSession = (sessionId: string, e: React.MouseEvent) => { e.stopPropagation(); unarchiveChatSession(sessionId); }; const handleDeleteSession = (sessionId: string, e: React.MouseEvent) => { e.stopPropagation(); if (confirm("Are you sure you want to delete this chat session?")) { deleteChatSession(sessionId); } }; return (
{chatHistoryOpen && ( <> {/* Header */}

Chat History

{/* New Chat Button */}
{/* Search */}
setSearchQuery(e.target.value)} className="pl-9" />
{/* Archive Toggle */}
{/* Chat Sessions List */}
{sortedSessions.length === 0 ? (
{searchQuery ? ( <>No chats match your search ) : showArchived ? ( <>No archived chats ) : ( <>No active chats. Create your first chat to get started! )}
) : (
{sortedSessions.map((session) => (
handleSelectSession(session)} >

{session.title}

{session.messages.length} messages

{new Date(session.updatedAt).toLocaleDateString()}

{session.archived ? ( handleUnarchiveSession(session.id, e) } > Unarchive ) : ( handleArchiveSession(session.id, e) } > Archive )} handleDeleteSession(session.id, e)} className="text-destructive" > Delete
))}
)}
)}
); }