"use client"; import type { NormalServer, PodInfo } from "@minikura/api"; import { ArrowLeft, Play, RefreshCw, ServerIcon, Square } from "lucide-react"; import { useParams, useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { PageHeader, PageShell, StatePanel } from "@/components/page-layout"; import { SectionCard } from "@/components/section-card"; import { Terminal } from "@/components/terminal"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { api } from "@/lib/api-client"; export default function ManageServerPage() { const router = useRouter(); const serverId = useParams<{ id: string }>().id; const [server, setServer] = useState(null); const [pods, setPods] = useState([]); const [loading, setLoading] = useState(true); const [acting, setActing] = useState(false); const [error, setError] = useState(null); const refresh = async () => { const [serverResponse, podsResponse] = await Promise.all([ api.api.servers({ id: serverId }).get(), api.api.k8s.servers({ serverId }).pods.get(), ]); if (serverResponse.error) throw serverResponse.error; if (podsResponse.error) throw podsResponse.error; setServer(serverResponse.data as NormalServer); setPods((podsResponse.data ?? []) as PodInfo[]); }; useEffect(() => { void Promise.all([ api.api.servers({ id: serverId }).get(), api.api.k8s.servers({ serverId }).pods.get(), ]) .then(([serverResponse, podsResponse]) => { if (serverResponse.error) throw serverResponse.error; if (podsResponse.error) throw podsResponse.error; setServer(serverResponse.data as NormalServer); setPods((podsResponse.data ?? []) as PodInfo[]); }) .catch(() => setError("Unable to load server operations")) .finally(() => setLoading(false)); }, [serverId]); const action = async (kind: "start" | "stop" | "restart") => { setActing(true); setError(null); try { const response = await api.api.servers({ id: serverId }).actions[kind].post(); if (response.error) throw response.error; await refresh(); } catch { setError(`Failed to ${kind} server`); } finally { setActing(false); } }; if (loading) return ; if (!server) return ; const pod = pods.find((candidate) => candidate.status === "Running") ?? pods[0]; const running = server.running !== false; return ( router.push("/dashboard/servers")}> } actions={
{running ? "Desired: running" : "Stopped"} {running ? ( <> ) : ( )}
} className="flex-row items-center justify-start" /> {error && (

{error}

)}

Pod

{pod?.name ?? "Not scheduled"}

Runtime

{server.jar_type} {server.minecraft_version}

Status

{pod ? `${pod.status} ยท ${pod.ready} ready` : running ? "Starting" : "Stopped"}

} headerAction={ } contentClassName="p-0" > {!pod ? ( ) : ( Live Console Container Shell )}
); }