"use client"; import { MoreHorizontal, Trash2 } from "lucide-react"; import Link from "next/link"; import { useParams, usePathname, useRouter } from "next/navigation"; import { useCallback } from "react"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, } from "@/components/ui/sidebar"; import { useDeleteThread, useThreads } from "@/core/api"; import { pathOfThread, titleOfThread } from "@/core/threads/utils"; export function RecentChatList() { const router = useRouter(); const pathname = usePathname(); const { thread_id: threadIdFromPath } = useParams<{ thread_id: string }>(); const { data: threads = [] } = useThreads(); const { mutate: deleteThread } = useDeleteThread(); const handleDelete = useCallback( (threadId: string) => { deleteThread({ threadId }); if (threadId === threadIdFromPath) { const threadIndex = threads.findIndex((t) => t.thread_id === threadId); let nextThreadId = "new"; if (threadIndex > -1) { if (threads[threadIndex + 1]) { nextThreadId = threads[threadIndex + 1]!.thread_id; } else if (threads[threadIndex - 1]) { nextThreadId = threads[threadIndex - 1]!.thread_id; } } void router.push(`/workspace/chats/${nextThreadId}`); } }, [deleteThread, router, threadIdFromPath, threads], ); if (threads.length === 0) { return null; } return ( Recents
{threads.map((thread) => { const isActive = pathOfThread(thread, false) === pathname; return (
{titleOfThread(thread)} More handleDelete(thread.thread_id)} > Delete
); })}
); }