import { cloneDeep } from "lodash-es"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { testConnection, useConnectionStore } from "@/store"; import { Connection, Engine } from "@/types"; import Icon from "./Icon"; interface Props { show: boolean; close: () => void; } const CreateConnectionModal = (props: Props) => { const { show, close } = props; const connectionStore = useConnectionStore(); const [connection, setConnection] = useState({ id: "", title: "", engineType: Engine.MySQL, host: "", port: "", username: "", password: "", }); const showDatabaseField = connection.engineType === Engine.PostgreSQL; const setPartialConnection = (state: Partial) => { setConnection({ ...connection, ...state, }); }; const handleCreateConnection = async () => { const connectionCreate = cloneDeep(connection); if (!showDatabaseField) { connectionCreate.database = undefined; } const result = await testConnection(connectionCreate); if (!result) { toast.error("Failed to connect"); return; } connectionStore.createConnection(connectionCreate); }; return (

Create Connection

setPartialConnection({ host: e.target.value })} />
setPartialConnection({ port: e.target.value })} />
setPartialConnection({ username: e.target.value })} />
setPartialConnection({ password: e.target.value })} />
{showDatabaseField && (
setPartialConnection({ database: e.target.value })} />
)}
); }; export default CreateConnectionModal;