import { Drawer } from "@mui/material"; import { head } from "lodash-es"; import { useEffect, useState } from "react"; import DataTable from "react-data-table-component"; import { toast } from "react-hot-toast"; import { useQueryStore } from "@/store"; import Icon from "./Icon"; type RawQueryResult = { [key: string]: any; }; const QueryDrawer = () => { const queryStore = useQueryStore(); const [rawResults, setRawResults] = useState([]); const [isLoading, setIsLoading] = useState(true); const context = queryStore.context; const columns = Object.keys(head(rawResults) || {}).map((key) => { return { name: key, selector: (row: RawQueryResult) => row[key], }; }); useEffect(() => { if (!queryStore.showDrawer) { return; } if (!context) { toast.error("No execution context found."); setIsLoading(false); setRawResults([]); return; } setIsLoading(true); setRawResults([]); const { connection, database, statement } = context; const executeStatement = async () => { try { const response = await fetch("/api/connection/execute", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ connection, db: database?.name, statement, }), }); const result = await response.json(); setIsLoading(false); setRawResults(result); } catch (error) { console.error(error); toast.error("Failed to execute statement"); } }; executeStatement(); }, [context, queryStore.showDrawer]); const close = () => queryStore.toggleDrawer(false); return (

Execute query

{isLoading ? (
) : rawResults.length === 0 ? (
No data return.
) : (
)}
); }; export default QueryDrawer;