import React from "react"; import { Button } from "@/components/button.tsx"; import { Card } from "@/components/card.tsx"; import { Separator } from "@/components/separator.tsx"; import { Activity, ArrowLeft, Box, List, Settings, Terminal, } from "lucide-react"; import { useTranslation } from "react-i18next"; import type { DockerContainer, SSHHost } from "@/types"; import { LogViewer } from "./LogViewer.tsx"; import { ContainerStats } from "./ContainerStats.tsx"; import { ConsoleTerminal } from "./ConsoleTerminal.tsx"; import { DockerBadge } from "./ContainerCard.tsx"; type DetailTab = "logs" | "stats" | "console"; interface ContainerDetailProps { sessionId: string; containerId: string; containers: DockerContainer[]; hostConfig: SSHHost; onBack: () => void; initialTab?: DetailTab; } export function ContainerDetail({ sessionId, containerId, containers, hostConfig, onBack, initialTab = "logs", }: ContainerDetailProps): React.ReactElement { const { t } = useTranslation(); const [activeTab, setActiveTab] = React.useState(initialTab); React.useEffect(() => { setActiveTab(initialTab); }, [containerId, initialTab]); const container = containers.find((c) => c.id === containerId); const containerName = container ? container.name.startsWith("/") ? container.name.slice(1) : container.name : ""; if (!container) { return (

{t("docker.containerNotFound")}

); } const tabs: { id: DetailTab; label: string; icon: React.ReactNode }[] = [ { id: "logs", label: t("docker.logs"), icon: , }, { id: "stats", label: t("docker.stats"), icon: , }, { id: "console", label: t("docker.consoleTab"), icon: , }, ]; return (

{containerName}

{container.image}
{tabs.map((tab) => ( ))}
{activeTab === "logs" && ( )} {activeTab === "stats" && ( )} {activeTab === "console" && ( )}
); }