diff --git a/src/components/layout/Toolbar.tsx b/src/components/layout/Toolbar.tsx index 1a46083..00fa970 100644 --- a/src/components/layout/Toolbar.tsx +++ b/src/components/layout/Toolbar.tsx @@ -6,8 +6,9 @@ import { ConnectionList } from "@/components/connections/ConnectionList"; import { ConnectionDialog } from "@/components/connections/ConnectionDialog"; import { ReadOnlyToggle } from "@/components/layout/ReadOnlyToggle"; import { useAppStore } from "@/stores/app-store"; -import { useConnections } from "@/hooks/use-connections"; -import { Database, Plus } from "lucide-react"; +import { useConnections, useReconnect } from "@/hooks/use-connections"; +import { toast } from "sonner"; +import { Database, Plus, RefreshCw } from "lucide-react"; import type { ConnectionConfig, Tab } from "@/types"; import { getEnvironment } from "@/lib/environment"; @@ -17,10 +18,19 @@ export function Toolbar() { const [editingConn, setEditingConn] = useState(null); const { activeConnectionId, addTab } = useAppStore(); const { data: connections } = useConnections(); + const reconnectMutation = useReconnect(); const activeConn = connections?.find((c) => c.id === activeConnectionId); const activeEnv = getEnvironment(activeConn?.environment); const activeColor = activeEnv?.color ?? activeConn?.color; + const handleReconnect = () => { + if (!activeConn) return; + reconnectMutation.mutate(activeConn, { + onSuccess: () => toast.success("Reconnected"), + onError: (err) => toast.error("Reconnect failed", { description: String(err) }), + }); + }; + const handleNewQuery = () => { if (!activeConnectionId) return; const tab: Tab = { @@ -53,6 +63,17 @@ export function Toolbar() { + + diff --git a/src/hooks/use-connections.ts b/src/hooks/use-connections.ts index accd40f..9094687 100644 --- a/src/hooks/use-connections.ts +++ b/src/hooks/use-connections.ts @@ -88,3 +88,22 @@ export function useDisconnect() { }, }); } + +export function useReconnect() { + const queryClient = useQueryClient(); + const { setPgVersion, setCurrentDatabase } = useAppStore(); + + return useMutation({ + mutationFn: async (config: ConnectionConfig) => { + await disconnectDb(config.id); + await connectDb(config); + const version = await testConnection(config); + return { version, database: config.database }; + }, + onSuccess: ({ version, database }) => { + setPgVersion(version); + setCurrentDatabase(database); + queryClient.invalidateQueries(); + }, + }); +}