import { useState, useEffect } from "react"; import { get, post } from "../lib/api"; export default function Settings() { const [settings, setSettings] = useState | null>(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [raw, setRaw] = useState(""); const [parseError, setParseError] = useState(""); useEffect(() => { get>("/api/settings") .then((data) => { setSettings(data); setRaw(JSON.stringify(data, null, 2)); }) .catch(() => {}) .finally(() => setLoading(false)); }, []); const handleRawChange = (value: string) => { setRaw(value); try { JSON.parse(value); setParseError(""); } catch (e) { setParseError(e instanceof Error ? e.message : "Invalid JSON"); } }; const handleSave = async () => { if (parseError) return; setSaving(true); try { const parsed = JSON.parse(raw); const updated = await post>("/api/settings", parsed); setSettings(updated); setRaw(JSON.stringify(updated, null, 2)); } catch (e) { alert(typeof e === "object" && e && "error" in e ? (e as { error: string }).error : "Failed to save"); } finally { setSaving(false); } }; if (loading) { return (
); } return (

Settings

Edit game configuration directly. Changes are merged with existing settings.
{parseError && (
{parseError}
)}