import { head } from "lodash-es"; import { useEffect, useState } from "react"; import { createPortal } from "react-dom"; import { useChatStore, useConnectionStore } from "@/store"; import { Connection } from "@/types"; import Icon from "./Icon"; import EngineIcon from "./EngineIcon"; import CreateConnectionModal from "./CreateConnectionModal"; import SettingModal from "./SettingModal"; interface State { showCreateConnectionModal: boolean; showSettingModal: boolean; } const ConnectionSidebar = () => { const connectionStore = useConnectionStore(); const chatStore = useChatStore(); const [state, setState] = useState({ showCreateConnectionModal: false, showSettingModal: false, }); const connectionList = connectionStore.connectionList; const currentConnectionCtx = connectionStore.currentConnectionCtx; const databaseList = connectionStore.databaseList.filter((database) => database.connectionId === currentConnectionCtx?.connection.id); const chatList = chatStore.chatList.filter( (chat) => chat.connectionId === currentConnectionCtx?.connection.id && chat.databaseName === currentConnectionCtx?.database?.name ); const toggleCreateConnectionModal = (show = true) => { setState({ ...state, showCreateConnectionModal: show, }); }; const toggleSettingModal = (show = true) => { setState({ ...state, showSettingModal: show, }); }; const handleConnectionSelect = async (connection: Connection) => { const databaseList = await connectionStore.getOrFetchDatabaseList(connection); connectionStore.setCurrentConnectionCtx({ connection, database: head(databaseList), }); }; const handleDatabaseNameSelect = async (databaseName: string) => { const database = databaseList.find((database) => database.name === databaseName); connectionStore.setCurrentConnectionCtx({ connection: currentConnectionCtx!.connection, database: database, }); }; const handleCreateChat = () => { if (!currentConnectionCtx) { chatStore.createChat(); } else { chatStore.createChat(currentConnectionCtx.connection.id, currentConnectionCtx.database?.name); } }; return ( <> {createPortal( toggleCreateConnectionModal(false)} />, document.body )} {createPortal( toggleSettingModal(false)} />, document.body)} ); }; export default ConnectionSidebar;