Jesse Johnson
New commit for backend deployment: 2025-09-25_13-24-03
c59d808
import React from "react";
import Link from "next/link";
import { useRouter, useSearchParams } from "next/navigation";
import { Trash } from "lucide-react";
import useChatStore from "@/store/chatStore";
import { TABLET_BREAKPOINT } from "@/constants/chat";
interface RecentChatsProps {
toggleSidebar?: () => void;
}
const RecentChats = ({ toggleSidebar = () => {} }: RecentChatsProps) => {
const router = useRouter();
const chatMessages = useChatStore((state) => state.messages);
const searchParams = useSearchParams();
const activeChat = searchParams.get("chat");
const deleteChat = useChatStore((state) => state.deleteChat);
const handleDelete = (key: string) => {
deleteChat(key);
if (activeChat === key) {
router.replace("/");
}
};
const onRecentChatClick = () => {
if (
typeof window !== "undefined" &&
window.innerWidth < TABLET_BREAKPOINT
) {
toggleSidebar();
}
};
return (
<div className="flex flex-col gap-1">
{Object.entries(chatMessages)
.reverse()
.map(([key]) => (
<div
className={`group flex justify-between px-2 py-3 transition-colors cursor-pointer rounded-lg ${
activeChat === key
? "bg-secondary-200 text-primary-700"
: "hover:bg-primary-500 text-grey-100"
}`}
key={key}
>
<Link href={`/?chat=${key}`} onClick={onRecentChatClick}>
<span>{key}</span>
</Link>
<button
className="cursor-pointer invisible group-hover:visible"
onClick={() => handleDelete(key)}
>
<Trash size={16} className="text-inherit" />
</button>
</div>
))}
</div>
);
};
export default RecentChats;