import React, { useEffect, useState, useCallback } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { api } from "../api.js"; import ConsoleViewer from "../components/ConsoleViewer.jsx"; export default function InstanceDetail() { const { id } = useParams(); const navigate = useNavigate(); const [instance, setInstance] = useState(null); const [showConsole, setShowConsole] = useState(false); const [error, setError] = useState(""); const [busy, setBusy] = useState(false); const refresh = useCallback(async () => { const data = await api.getInstance(id); setInstance(data); }, [id]); useEffect(() => { refresh(); const interval = setInterval(refresh, 5000); return () => clearInterval(interval); }, [refresh]); async function doAction(action) { setBusy(true); setError(""); try { await api.instanceAction(id, action); await refresh(); } catch (err) { setError(err.message); } finally { setBusy(false); } } async function doDelete() { if (!confirm("Удалить этот VPS безвозвратно?")) return; setBusy(true); try { await api.deleteInstance(id); navigate("/"); } catch (err) { setError(err.message); setBusy(false); } } if (!instance) return
Загрузка…
; return (

{instance.name}

vmid {instance.vmid} · node {instance.node} · {instance.guest_type === "vm" ? "VM (QEMU)" : "LXC"}

{error &&
{error}
}
{instance.status}
{showConsole && (
)}
); }