import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import { Ban, CheckCircle2, RefreshCcw, Rocket, Terminal } from "lucide-react"; import { useState } from "react"; import { toast } from "sonner"; 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 { api } from "@/utils/api"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; interface Props { libsqlId: string; } export const ShowGeneralLibsql = ({ libsqlId }: Props) => { const { data, refetch } = api.libsql.one.useQuery( { libsqlId, }, { enabled: !!libsqlId }, ); const { mutateAsync: reload, isPending: isReloading } = api.libsql.reload.useMutation(); const { mutateAsync: start, isPending: isStarting } = api.libsql.start.useMutation(); const { mutateAsync: stop, isPending: isStopping } = api.libsql.stop.useMutation(); const [isDrawerOpen, setIsDrawerOpen] = useState(false); const [filteredLogs, setFilteredLogs] = useState([]); const [isDeploying, setIsDeploying] = useState(false); api.libsql.deployWithLogs.useSubscription( { libsqlId: libsqlId, }, { 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({ libsqlId: libsqlId, appName: data?.appName || "", }) .then(() => { toast.success("Libsql reloaded successfully"); refetch(); }) .catch(() => { toast.error("Error reloading Libsql"); }); }} > {data?.applicationStatus === "idle" ? ( { await start({ libsqlId: libsqlId, }) .then(() => { toast.success("Libsql started successfully"); refetch(); }) .catch(() => { toast.error("Error starting Libsql"); }); }} > ) : ( { await stop({ libsqlId: libsqlId, }) .then(() => { toast.success("Libsql stopped successfully"); refetch(); }) .catch(() => { toast.error("Error stopping Libsql"); }); }} > )} { setIsDrawerOpen(false); setFilteredLogs([]); setIsDeploying(false); refetch(); }} filteredLogs={filteredLogs} />
); };