"use client"; import type { NormalServer, UpdateServerRequest } from "@minikura/api"; import { ArrowLeft } from "lucide-react"; import { useParams, useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { ServerForm, type ServerFormData } from "@/components/server-form"; import { PageHeader, PageShell, StatePanel } from "@/components/page-layout"; import { SectionCard } from "@/components/section-card"; import { Button } from "@/components/ui/button"; import { api } from "@/lib/api-client"; import { getReverseProxyApi } from "@/lib/api-helpers"; import { toCommonServerRequestFields, toInitialServerFormData } from "@/lib/server-form/mappings"; export default function EditServerPage() { const router = useRouter(); const params = useParams(); const serverId = params.id as string; const [loading, setLoading] = useState(true); const [serverData, setServerData] = useState(null); const [error, setError] = useState(null); useEffect(() => { const fetchServer = async () => { try { setLoading(true); const normalResponse = await api.api.servers.get(); if (normalResponse.data) { const servers = normalResponse.data as unknown as NormalServer[]; const server = servers.find((s) => s.id === serverId); if (server) { setServerData(server); setLoading(false); return; } } const proxyResponse = await getReverseProxyApi().get(); if (proxyResponse.data) { const proxies = proxyResponse.data as unknown as NormalServer[]; const proxy = proxies.find((p) => p.id === serverId); if (proxy) { setServerData(proxy); setLoading(false); return; } } setError("Server not found"); setLoading(false); } catch (_err) { setError("Failed to load server data"); setLoading(false); } }; if (serverId) { fetchServer(); } }, [serverId]); const handleSubmit = async (data: ServerFormData) => { if (!serverData) return; const payload: UpdateServerRequest = toCommonServerRequestFields(data); const response = await api.api.servers({ id: serverId }).patch(payload); if (response.error) { const errorMsg = typeof response.error === "object" && response.error && "value" in response.error && typeof response.error.value === "object" && response.error.value && "message" in response.error.value ? String(response.error.value.message) : "Failed to update server"; throw new Error(errorMsg); } router.push("/dashboard/servers"); }; if (loading) { return ; } if (error || !serverData) { return ( router.push("/dashboard/servers")} > Back to Servers } /> ); } const initialData = toInitialServerFormData(serverData); return ( Edit {serverData.id}} description="Update the workload specification and deployment behavior." leading={ } className="flex-row items-center justify-start" /> router.push("/dashboard/servers")} submitLabel="Save Changes" /> ); }