🐛 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
@@ -23,7 +23,11 @@ export function AdvancedPanel({
return (
<TabsContent value="advanced" className="space-y-4 mt-4">
<div className="grid grid-cols-3 gap-4">
<Field id="timezone" label="Timezone" tooltip="Timezone for server logs and scheduling (e.g., America/New_York)">
<Field
id="timezone"
label="Timezone"
tooltip="Timezone for server logs and scheduling (e.g., America/New_York)"
>
<Input
id="timezone"
value={formData.timezone}
@@ -11,7 +11,11 @@ export function ModsPanel({ formData, updateField }: ServerFormPanelProps) {
{formData.type === "CUSTOM" && (
<FormNotice>Mods/plugins automation is intended for Vanilla/Paper workflows.</FormNotice>
)}
<Field id="plugins" label="Plugins" tooltip="Comma-separated list of plugin URLs or filenames">
<Field
id="plugins"
label="Plugins"
tooltip="Comma-separated list of plugin URLs or filenames"
>
<Textarea
id="plugins"
value={formData.plugins || ""}
@@ -30,12 +30,18 @@ export function NetworkPanel({ formData, updateField }: ServerFormPanelProps) {
max="65535"
/>
</Field>
<Field id="serviceType" label="Service Type" tooltip="How the server is exposed in Kubernetes">
<Field
id="serviceType"
label="Service Type"
tooltip="How the server is exposed in Kubernetes"
>
<Select
value={formData.serviceType}
onValueChange={(value) => updateField("serviceType", value as ServiceType)}
>
<SelectTrigger id="serviceType"><SelectValue /></SelectTrigger>
<SelectTrigger id="serviceType">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="CLUSTER_IP">ClusterIP (Internal Only)</SelectItem>
<SelectItem value="NODE_PORT">NodePort (External Access)</SelectItem>
@@ -51,7 +51,11 @@ export function PerformancePanel({ formData, updateField }: ServerFormPanelProps
rows={3}
/>
</Field>
<Field id="jvmXxOpts" label="JVM -XX Options" tooltip="Space-separated -XX JVM flags for advanced tuning">
<Field
id="jvmXxOpts"
label="JVM -XX Options"
tooltip="Space-separated -XX JVM flags for advanced tuning"
>
<Textarea
id="jvmXxOpts"
value={formData.jvmXxOpts || ""}
@@ -60,7 +64,11 @@ export function PerformancePanel({ formData, updateField }: ServerFormPanelProps
rows={2}
/>
</Field>
<Field id="jvmDdOpts" label="JVM -D System Properties" tooltip="Comma-separated key=value pairs for system properties">
<Field
id="jvmDdOpts"
label="JVM -D System Properties"
tooltip="Comma-separated key=value pairs for system properties"
>
<Textarea
id="jvmDdOpts"
value={formData.jvmDdOpts || ""}
@@ -10,7 +10,11 @@ export function ResourcesPanel({ formData, updateField }: ServerFormPanelProps)
{formData.type === "CUSTOM" && (
<FormNotice>Resource pack settings may not apply to custom jars.</FormNotice>
)}
<Field id="resourcePack" label="Resource Pack URL" tooltip="URL or path to a resource pack ZIP file">
<Field
id="resourcePack"
label="Resource Pack URL"
tooltip="URL or path to a resource pack ZIP file"
>
<Input
id="resourcePack"
value={formData.resourcePack || ""}
@@ -18,7 +22,11 @@ export function ResourcesPanel({ formData, updateField }: ServerFormPanelProps)
placeholder="https://example.com/resourcepack.zip"
/>
</Field>
<Field id="resourcePackSha1" label="Resource Pack SHA1" tooltip="SHA1 checksum of the resource pack for verification">
<Field
id="resourcePackSha1"
label="Resource Pack SHA1"
tooltip="SHA1 checksum of the resource pack for verification"
>
<Input
id="resourcePackSha1"
value={formData.resourcePackSha1 || ""}
@@ -34,7 +42,11 @@ export function ResourcesPanel({ formData, updateField }: ServerFormPanelProps)
>
Enforce Resource Pack
</CheckboxField>
<Field id="serverIcon" label="Server Icon URL" tooltip="URL or path to a server icon image (PNG, 64x64 recommended)">
<Field
id="serverIcon"
label="Server Icon URL"
tooltip="URL or path to a server icon image (PNG, 64x64 recommended)"
>
<Input
id="serverIcon"
value={formData.serverIcon || ""}
@@ -106,8 +106,13 @@ export function ServerPanel({ formData, updateField }: ServerFormPanelProps) {
<div className="grid grid-cols-2 gap-4">
<Field id="mode" label="Game Mode">
<Select value={formData.mode} onValueChange={(value) => updateField("mode", toMode(value))}>
<SelectTrigger id="mode"><SelectValue /></SelectTrigger>
<Select
value={formData.mode}
onValueChange={(value) => updateField("mode", toMode(value))}
>
<SelectTrigger id="mode">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="survival">Survival</SelectItem>
<SelectItem value="creative">Creative</SelectItem>
@@ -121,7 +126,9 @@ export function ServerPanel({ formData, updateField }: ServerFormPanelProps) {
value={formData.difficulty}
onValueChange={(value) => updateField("difficulty", toDifficulty(value))}
>
<SelectTrigger id="difficulty"><SelectValue /></SelectTrigger>
<SelectTrigger id="difficulty">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="peaceful">Peaceful</SelectItem>
<SelectItem value="easy">Easy</SelectItem>
@@ -156,19 +163,39 @@ export function ServerPanel({ formData, updateField }: ServerFormPanelProps) {
</div>
<div className="space-y-3">
<CheckboxField id="pvp" checked={formData.pvp} onCheckedChange={(value) => updateField("pvp", value)}>
<CheckboxField
id="pvp"
checked={formData.pvp}
onCheckedChange={(value) => updateField("pvp", value)}
>
Enable PvP (Player vs Player)
</CheckboxField>
<CheckboxField id="onlineMode" checked={formData.onlineMode} onCheckedChange={(value) => updateField("onlineMode", value)}>
<CheckboxField
id="onlineMode"
checked={formData.onlineMode}
onCheckedChange={(value) => updateField("onlineMode", value)}
>
Online Mode (Requires authenticated Minecraft accounts)
</CheckboxField>
<CheckboxField id="allowFlight" checked={formData.allowFlight} onCheckedChange={(value) => updateField("allowFlight", value)}>
<CheckboxField
id="allowFlight"
checked={formData.allowFlight}
onCheckedChange={(value) => updateField("allowFlight", value)}
>
Allow Flight
</CheckboxField>
<CheckboxField id="enableCommandBlock" checked={formData.enableCommandBlock} onCheckedChange={(value) => updateField("enableCommandBlock", value)}>
<CheckboxField
id="enableCommandBlock"
checked={formData.enableCommandBlock}
onCheckedChange={(value) => updateField("enableCommandBlock", value)}
>
Enable Command Blocks
</CheckboxField>
<CheckboxField id="hardcore" checked={formData.hardcore} onCheckedChange={(value) => updateField("hardcore", value)}>
<CheckboxField
id="hardcore"
checked={formData.hardcore}
onCheckedChange={(value) => updateField("hardcore", value)}
>
Hardcore Mode (Permanent Death)
</CheckboxField>
</div>
+1 -1
View File
@@ -92,7 +92,7 @@ export interface ServerFormData {
export type UpdateServerField = <K extends keyof ServerFormData>(
key: K,
value: ServerFormData[K],
value: ServerFormData[K]
) => void;
export interface ServerFormPanelProps {
@@ -45,7 +45,9 @@ export function WorldPanel({ formData, updateField }: ServerFormPanelProps) {
value={formData.levelType || "default"}
onValueChange={(value) => updateField("levelType", value === "default" ? "" : value)}
>
<SelectTrigger id="levelType"><SelectValue placeholder="Default" /></SelectTrigger>
<SelectTrigger id="levelType">
<SelectValue placeholder="Default" />
</SelectTrigger>
<SelectContent>
<SelectItem value="default">Default</SelectItem>
<SelectItem value="flat">Flat/Superflat</SelectItem>
@@ -98,13 +100,25 @@ export function WorldPanel({ formData, updateField }: ServerFormPanelProps) {
</Field>
</div>
<div className="space-y-3">
<CheckboxField id="spawnAnimals" checked={formData.spawnAnimals} onCheckedChange={(value) => updateField("spawnAnimals", value)}>
<CheckboxField
id="spawnAnimals"
checked={formData.spawnAnimals}
onCheckedChange={(value) => updateField("spawnAnimals", value)}
>
Spawn Animals
</CheckboxField>
<CheckboxField id="spawnMonsters" checked={formData.spawnMonsters} onCheckedChange={(value) => updateField("spawnMonsters", value)}>
<CheckboxField
id="spawnMonsters"
checked={formData.spawnMonsters}
onCheckedChange={(value) => updateField("spawnMonsters", value)}
>
Spawn Monsters
</CheckboxField>
<CheckboxField id="spawnNpcs" checked={formData.spawnNpcs} onCheckedChange={(value) => updateField("spawnNpcs", value)}>
<CheckboxField
id="spawnNpcs"
checked={formData.spawnNpcs}
onCheckedChange={(value) => updateField("spawnNpcs", value)}
>
Spawn NPCs (Villagers)
</CheckboxField>
</div>