import React, { useEffect, useState } from "react"; import axios from "axios"; import { io } from "socket.io-client"; export default function Stacks() { const [stacks, setStacks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [redeploying, setRedeploying] = useState({}); // { stackId: true/false } // WebSocket initialisieren useEffect(() => { const socket = io("/"); console.log("Socket connected"); socket.on("redeployStatus", async ({ stackId, status }) => { setRedeploying(prev => ({ ...prev, [stackId]: status })); // Wenn Redeploy beendet, Stack-Status neu laden if (!status) { try { const res = await axios.get("/api/stacks"); const sortedStacks = res.data.sort((a, b) => a.Name.localeCompare(b.Name)); setStacks(sortedStacks); } catch (err) { console.error("Fehler beim Aktualisieren des Status nach Redeploy:", err); } } }); return () => socket.disconnect(); }, []); // Stacks initial laden const fetchStacks = async () => { try { const res = await axios.get("/api/stacks"); const sortedStacks = res.data.sort((a, b) => a.Name.localeCompare(b.Name)); setStacks(sortedStacks); } catch (err) { console.error("❌ Fehler beim Abrufen der Stacks:", err); setError("Fehler beim Laden der Stacks"); } finally { setLoading(false); } }; useEffect(() => { fetchStacks(); }, []); // Redeploy eines Stacks const handleRedeploy = async (stackId) => { // Button sofort auf Redeploying setzen setRedeploying(prev => ({ ...prev, [stackId]: true })); try { await axios.put(`/api/stacks/${stackId}/redeploy`); } catch (err) { console.error("❌ Fehler beim Redeploy:", err); } // Stack-Status immer neu laden try { const res = await axios.get("/api/stacks"); const sortedStacks = res.data.sort((a, b) => a.Name.localeCompare(b.Name)); setStacks(sortedStacks); } catch (err) { console.error("Fehler beim Aktualisieren nach Redeploy:", err); } finally { // Erst nach Datenaktualisierung Button zurücksetzen setRedeploying(prev => ({ ...prev, [stackId]: false })); } }; if (loading) return
Lade Stacks...
; if (error) return{error}
; return ({stack.Name}
ID: {stack.Id}
Keine Stacks gefunden.
}