import AddCircleIcon from "@mui/icons-material/AddCircle"; import classNames from "classnames"; import { useEffect } from "react"; import ReactMarkdown from "react-markdown"; import { useLocation } from "react-router-dom"; import remarkGfm from "remark-gfm"; import { Chat, Flow, useAppContext, transformPreferences } from "../contexts/AppContext"; import { useChatContext } from "../contexts/ChatContext"; import { groupChatsByDate } from "../utils/formatChatsDate.ts"; import SidebarHeaderControls from "./SidebarHeaderControls"; type SidebarProps = { isSidebarOpen: boolean; toggleSidebar: () => void; }; export default function Sidebar({ isSidebarOpen, toggleSidebar, }: SidebarProps) { const { configs, flows, setIsSessionEditorOpen, } = useAppContext(); const { createChat, chats, selectedChat, selectChat } = useChatContext(); const location = useLocation(); const chatId = location.search.substring(1); const handleNewChat = () => { if (configs?.list_flows) { setIsSessionEditorOpen(true); } else { const defaultFlow = configs?.default_flow; if (Array.isArray(defaultFlow) && defaultFlow.length > 1) { setIsSessionEditorOpen(true); } else if (chats.length > 0 && flows) { const startFlow: Flow = { id: chats[0].flow.id, description: "", }; if (chats[0].preferences) { startFlow.preferences = chats[0].preferences; } else { const flow = flows.find((flow) => flow.id === startFlow.id); if (flow) { startFlow.preferences = transformPreferences(flow.preferences); } } createChat(startFlow); } else if (defaultFlow !== undefined) { const flowId = Array.isArray(defaultFlow) ? defaultFlow[0] : defaultFlow || "default"; const simpleFlow: Flow = { id: flowId, description: "Default Flow", }; const flow = flows?.find((flow) => flow.id === flowId); if (flow) { simpleFlow.preferences = transformPreferences(flow.preferences); } createChat(simpleFlow); } } }; // auto select chat if chatId is provided in query params useEffect(() => { if (!chatId || !chats || !chats.length) return; const chatExists = chats.some((item) => item.id === chatId); if (!chatExists) return; selectChat(chatId); }, [chatId, chats]); const nonEmptyChats = chats .filter((chat: Chat) => chat.messages.length) .sort( (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime() ); const groupedChats = groupChatsByDate(nonEmptyChats); return (