import { DialogAction } from "@/components/shared/dialog-action"; import { DrawerLogs } from "@/components/shared/drawer-logs"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import { api } from "@/utils/api"; import { Ban, CheckCircle2, HelpCircle, RefreshCcw, Terminal, } from "lucide-react"; import { useState } from "react"; import { toast } from "sonner"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; interface Props { mysqlId: string; } export const ShowGeneralMysql = ({ mysqlId }: Props) => { const { data, refetch } = api.mysql.one.useQuery( { mysqlId, }, { enabled: !!mysqlId }, ); const { mutateAsync: reload, isLoading: isReloading } = api.mysql.reload.useMutation(); const { mutateAsync: start, isLoading: isStarting } = api.mysql.start.useMutation(); const { mutateAsync: stop, isLoading: isStopping } = api.mysql.stop.useMutation(); const [isDrawerOpen, setIsDrawerOpen] = useState(false); const [filteredLogs, setFilteredLogs] = useState([]); const [isDeploying, setIsDeploying] = useState(false); api.mysql.deployWithLogs.useSubscription( { mysqlId: mysqlId, }, { enabled: isDeploying, onData(log) { if (!isDrawerOpen) { setIsDrawerOpen(true); } if (log === "Deployment completed successfully!") { setIsDeploying(false); } const parsedLogs = parseLogs(log); setFilteredLogs((prev) => [...prev, ...parsedLogs]); }, onError(error) { console.error("Deployment logs error:", error); setIsDeploying(false); }, }, ); return ( <>
Deploy Settings { setIsDeploying(true); await new Promise((resolve) => setTimeout(resolve, 1000)); refetch(); }} > { await reload({ mysqlId: mysqlId, appName: data?.appName || "", }) .then(() => { toast.success("Mysql reloaded successfully"); refetch(); }) .catch(() => { toast.error("Error reloading Mysql"); }); }} > {data?.applicationStatus === "idle" ? ( { await start({ mysqlId: mysqlId, }) .then(() => { toast.success("Mysql started successfully"); refetch(); }) .catch(() => { toast.error("Error starting Mysql"); }); }} > ) : ( { await stop({ mysqlId: mysqlId, }) .then(() => { toast.success("Mysql stopped successfully"); refetch(); }) .catch(() => { toast.error("Error stopping Mysql"); }); }} > )} { setIsDrawerOpen(false); setFilteredLogs([]); setIsDeploying(false); refetch(); }} filteredLogs={filteredLogs} />
); };