import React, { useState } from "react"; import { invoke } from "@tauri-apps/api/core"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui"; import { Button } from "@/components/ui"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui"; import { Input } from "@/components/ui"; import { Label } from "@/components/ui"; import { Alert, AlertDescription } from "@/components/ui"; import { AlertCircle, RotateCcw, Scale } from "lucide-react"; import type { DeploymentInfo } from "@/lib/tauriCommands"; interface DeploymentListProps { deployments: DeploymentInfo[]; clusterId: string; namespace: string; } export function DeploymentList({ deployments, clusterId, namespace }: DeploymentListProps) { const [scalingDeployment, setScalingDeployment] = useState(null); const [replicas, setReplicas] = useState(""); const [isScaling, setIsScaling] = useState(false); const [scaleError, setScaleError] = useState(null); const [restartingDeployment, setRestartingDeployment] = useState(null); const [isRestarting, setIsRestarting] = useState(false); const [restartError, setRestartError] = useState(null); const handleScaleChange = (e: React.ChangeEvent) => { setReplicas(e.target.value); setScaleError(null); }; const handleScaleSubmit = async () => { if (!scalingDeployment) return; const newReplicas = parseInt(replicas, 10); if (isNaN(newReplicas) || newReplicas < 0) { setScaleError("Invalid replica count"); return; } setIsScaling(true); setScaleError(null); try { await invoke("scale_deployment", { clusterId, namespace, deploymentName: scalingDeployment.name, replicas: newReplicas, }); setScalingDeployment(null); setReplicas(""); } catch (err) { console.error("Failed to scale deployment:", err); setScaleError(err instanceof Error ? err.message : "Failed to scale deployment"); } finally { setIsScaling(false); } }; const handleRestartSubmit = async () => { if (!restartingDeployment) return; setIsRestarting(true); setRestartError(null); try { await invoke("restart_deployment", { clusterId, namespace, deploymentName: restartingDeployment.name, }); setRestartingDeployment(null); } catch (err) { console.error("Failed to restart deployment:", err); setRestartError(err instanceof Error ? err.message : "Failed to restart deployment"); } finally { setIsRestarting(false); } }; return ( <>
Name Ready Up-to-date Available Replicas Age Actions {deployments.length === 0 ? ( No deployments found ) : ( deployments.map((deployment) => ( {deployment.name} {deployment.ready} {deployment.up_to_date} {deployment.available} {deployment.replicas} {deployment.age}
)) )}
{/* Scale Dialog */} setScalingDeployment(null)}> Scale Deployment
{scaleError && ( {scaleError} )}
{/* Restart Dialog */} setRestartingDeployment(null)}> Restart Deployment

This will trigger a rolling restart of the deployment.

{restartError && ( {restartError} )}
); }