import { Loader2 } from "lucide-react"; import dynamic from "next/dynamic"; import { useEffect, useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { api } from "@/utils/api"; export const DockerLogs = dynamic( () => import("@/components/dashboard/docker/logs/docker-logs-id").then( (e) => e.DockerLogsId, ), { ssr: false, }, ); export const badgeStateColor = (state: string) => { switch (state) { case "running": case "ready": return "green"; case "exited": case "shutdown": return "red"; case "accepted": case "created": return "blue"; default: return "default"; } }; interface Props { appName: string; serverId?: string; } export const ShowDockerLogs = ({ appName, serverId }: Props) => { const [containerId, setContainerId] = useState(); const [option, setOption] = useState<"swarm" | "native">("native"); const { data: services, isPending: servicesLoading } = api.docker.getServiceContainersByAppName.useQuery( { appName, serverId, }, { enabled: !!appName && option === "swarm", }, ); const { data: containers, isPending: containersLoading } = api.docker.getContainersByAppNameMatch.useQuery( { appName, serverId, }, { enabled: !!appName && option === "native", }, ); useEffect(() => { if (option === "native") { if (containers && containers?.length > 0) { setContainerId(containers[0]?.containerId); } } else { if (services && services?.length > 0) { setContainerId(services[0]?.containerId); } } }, [option, services, containers]); const isLoading = option === "native" ? containersLoading : servicesLoading; const containersLenght = option === "native" ? containers?.length : services?.length; return ( Logs Watch the logs of the application in real time
{option === "native" ? "Native" : "Swarm"} { setOption(checked ? "native" : "swarm"); }} />
{option === "swarm" && services?.find((c) => c.containerId === containerId)?.error && (
Error: {services?.find((c) => c.containerId === containerId)?.error}
)}
); };