🐛 fix: align dashboard with secured APIs

This commit is contained in:
2026-08-13 03:29:33 +07:00
parent e90dc8382b
commit 3f09e330be
47 changed files with 1280 additions and 397 deletions
@@ -56,11 +56,11 @@ export default function CreateServerPage() {
title="Server Configuration"
description="Complete configuration for the itzg/minecraft-server workload."
>
<ServerForm
onSubmit={handleSubmit}
onCancel={() => router.push("/dashboard/servers")}
submitLabel="Create Server"
/>
<ServerForm
onSubmit={handleSubmit}
onCancel={() => router.push("/dashboard/servers")}
submitLabel="Create Server"
/>
</SectionCard>
</PageShell>
);
@@ -1,6 +1,6 @@
"use client";
import type { NormalServer, UpdateServerRequest } from "@minikura/api";
import type { NormalServer, ReverseProxyServer, UpdateServerRequest } from "@minikura/api";
import { ArrowLeft } from "lucide-react";
import { useParams, useRouter } from "next/navigation";
import { useEffect, useState } from "react";
@@ -19,6 +19,7 @@ export default function EditServerPage() {
const [loading, setLoading] = useState(true);
const [serverData, setServerData] = useState<NormalServer | null>(null);
const [resourceKind, setResourceKind] = useState<"server" | "proxy">("server");
const [error, setError] = useState<string | null>(null);
useEffect(() => {
@@ -32,6 +33,7 @@ export default function EditServerPage() {
const server = servers.find((s) => s.id === serverId);
if (server) {
setServerData(server);
setResourceKind("server");
setLoading(false);
return;
}
@@ -39,10 +41,11 @@ export default function EditServerPage() {
const proxyResponse = await getReverseProxyApi().get();
if (proxyResponse.data) {
const proxies = proxyResponse.data as unknown as NormalServer[];
const proxies = proxyResponse.data as unknown as ReverseProxyServer[];
const proxy = proxies.find((p) => p.id === serverId);
if (proxy) {
setServerData(proxy);
setServerData(proxy as unknown as NormalServer);
setResourceKind("proxy");
setLoading(false);
return;
}
@@ -66,7 +69,18 @@ export default function EditServerPage() {
const payload: UpdateServerRequest = toCommonServerRequestFields(data);
const response = await api.api.servers({ id: serverId }).patch(payload);
const response =
resourceKind === "server"
? await api.api.servers({ id: serverId }).patch(payload)
: await getReverseProxyApi()({ id: serverId }).patch({
description: payload.description,
listen_port: payload.listen_port,
service_type: payload.service_type,
node_port: payload.node_port,
memory: payload.memory,
cpu_request: payload.cpu_request,
cpu_limit: payload.cpu_limit,
});
if (response.error) {
const errorMsg =
@@ -95,10 +109,7 @@ export default function EditServerPage() {
tone="error"
className="min-h-[50vh]"
action={
<Button
variant="outline"
onClick={() => router.push("/dashboard/servers")}
>
<Button variant="outline" onClick={() => router.push("/dashboard/servers")}>
<ArrowLeft className="size-4" />
Back to Servers
</Button>
@@ -127,12 +138,12 @@ export default function EditServerPage() {
title="Server Configuration"
description="Modify settings for your Minecraft server"
>
<ServerForm
initialData={initialData}
onSubmit={handleSubmit}
onCancel={() => router.push("/dashboard/servers")}
submitLabel="Save Changes"
/>
<ServerForm
initialData={initialData}
onSubmit={handleSubmit}
onCancel={() => router.push("/dashboard/servers")}
submitLabel="Save Changes"
/>
</SectionCard>
</PageShell>
);
+13 -8
View File
@@ -9,9 +9,12 @@ import { ResourceSection } from "@/components/section-card";
import { ServerTable } from "@/components/servers/server-table";
import { Button } from "@/components/ui/button";
import { useServerList } from "@/hooks/use-server-list";
import { useSession } from "@/lib/auth-client";
export default function ServersPage() {
const router = useRouter();
const { data: session } = useSession();
const isAdmin = session?.user.role === "admin";
const { normalServers, reverseProxies, loading, error, deleteServer } = useServerList();
const [deleteTarget, setDeleteTarget] = useState<{
id: string;
@@ -34,10 +37,12 @@ export default function ServersPage() {
title="Servers"
description="Provision Minecraft runtimes and route traffic through edge proxies."
actions={
<Button size="lg" onClick={() => router.push("/dashboard/servers/create")}>
<Plus className="size-4" />
Create Server
</Button>
isAdmin ? (
<Button size="lg" onClick={() => router.push("/dashboard/servers/create")}>
<Plus className="size-4" />
Create Server
</Button>
) : undefined
}
/>
@@ -59,8 +64,8 @@ export default function ServersPage() {
<ServerTable
type="normal"
servers={normalServers}
onEdit={(id) => router.push(`/dashboard/servers/edit/${id}`)}
onDelete={(id) => setDeleteTarget({ id, type: "normal" })}
onEdit={isAdmin ? (id) => router.push(`/dashboard/servers/edit/${id}`) : undefined}
onDelete={isAdmin ? (id) => setDeleteTarget({ id, type: "normal" }) : undefined}
/>
</ResourceSection>
@@ -76,8 +81,8 @@ export default function ServersPage() {
<ServerTable
type="proxy"
servers={reverseProxies}
onEdit={(id) => router.push(`/dashboard/servers/edit/${id}`)}
onDelete={(id) => setDeleteTarget({ id, type: "proxy" })}
onEdit={isAdmin ? (id) => router.push(`/dashboard/servers/edit/${id}`) : undefined}
onDelete={isAdmin ? (id) => setDeleteTarget({ id, type: "proxy" }) : undefined}
/>
</ResourceSection>
</>