import { Conversation, KeyValuePair } from "@/types"; import { IconArrowBarLeft, IconPlus } from "@tabler/icons-react"; import { FC, useEffect, useState } from "react"; import { Conversations } from "./Conversations"; import { Search } from "./Search"; import { SidebarSettings } from "./SidebarSettings"; interface Props { loading: boolean; conversations: Conversation[]; lightMode: "light" | "dark"; selectedConversation: Conversation; apiKey: string; onNewConversation: () => void; onToggleLightMode: (mode: "light" | "dark") => void; onSelectConversation: (conversation: Conversation) => void; onDeleteConversation: (conversation: Conversation) => void; onToggleSidebar: () => void; onUpdateConversation: (conversation: Conversation, data: KeyValuePair) => void; onApiKeyChange: (apiKey: string) => void; onClearConversations: () => void; } export const Sidebar: FC = ({ loading, conversations, lightMode, selectedConversation, apiKey, onNewConversation, onToggleLightMode, onSelectConversation, onDeleteConversation, onToggleSidebar, onUpdateConversation, onApiKeyChange, onClearConversations }) => { const [searchTerm, setSearchTerm] = useState(""); const [filteredConversations, setFilteredConversations] = useState(conversations); useEffect(() => { if (searchTerm) { setFilteredConversations(conversations.filter((conversation) => conversation.name.toLowerCase().includes(searchTerm.toLowerCase()))); } else { setFilteredConversations(conversations); } }, [searchTerm, conversations]); return (
{conversations.length > 1 && ( )}
{ onDeleteConversation(conversation); setSearchTerm(""); }} onRenameConversation={(conversation, name) => { onUpdateConversation(conversation, { key: "name", value: name }); setSearchTerm(""); }} />
); };