import React, { useState } from "react"; import { invoke } from "@tauri-apps/api/core"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui"; import { Badge } from "@/components/ui"; import { Button } from "@/components/ui"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui"; import { Textarea } from "@/components/ui"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui"; import { Terminal, FileText, RotateCcw } from "lucide-react"; import { Alert, AlertDescription } from "@/components/ui"; import type { PodInfo, LogResponse } from "@/lib/tauriCommands"; interface PodListProps { pods: PodInfo[]; clusterId: string; namespace: string; } export function PodList({ pods, clusterId, namespace }: PodListProps) { const [selectedPod, setSelectedPod] = useState(null); const [selectedContainer, setSelectedContainer] = useState(""); const [logs, setLogs] = useState(""); const [isFetchingLogs, setIsFetchingLogs] = useState(false); const [error, setError] = useState(null); const [isDialogOpen, setIsDialogOpen] = useState(false); const getPodStatusColor = (status: string) => { switch (status.toLowerCase()) { case "running": return "bg-green-500"; case "pending": return "bg-yellow-500"; case "succeeded": case "completed": return "bg-blue-500"; case "failed": case "error": return "bg-red-500"; default: return "bg-gray-500"; } }; const fetchLogs = async () => { if (!selectedPod || !selectedContainer) return; setIsFetchingLogs(true); setError(null); try { const response = await invoke("get_pod_logs", { clusterId, namespace, podName: selectedPod.name, containerName: selectedContainer, }); setLogs(response.logs); } catch (err) { console.error("Failed to fetch logs:", err); setError(err instanceof Error ? err.message : "Failed to fetch logs"); } finally { setIsFetchingLogs(false); } }; const handleContainerChange = (container: string) => { setSelectedContainer(container); setLogs(""); setError(null); }; const containers = selectedPod?.containers ?? []; return ( <>
Name Status Ready Age Actions {pods.length === 0 ? ( No pods found ) : ( pods.map((pod) => ( {pod.name} {pod.status} {pod.ready} {pod.age} {pod.name} - {namespace} namespace
{selectedPod && (
Container:
{error && ( {error} )} {}}> Logs Details