"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { updateWaterHeadgate, deleteWaterHeadgate } from "@/actions/water-log/admin"; import { AdminInput, AdminTextInput, AdminSelect } from "./design-system/AdminFormElements"; import AdminButton from "./design-system/AdminButton"; type Headgate = { id: string; name: string; active: boolean; unit: string; created_at: string; }; const UNIT_OPTIONS = ["CFS", "GPM", "gal", "ac-in", "ac-ft"]; type Props = { headgate: Headgate; backHref?: string; }; export default function HeadgateEditForm({ headgate, backHref = "/admin/water-log" }: Props) { const router = useRouter(); // Holds user edits only; missing keys fall back to the current prop so we // never copy the prop into useState. When the prop changes, the fallback // value tracks the new prop automatically. const [draft, setDraft] = useState<{ name?: string; active?: boolean; unit?: string }>({}); const [saving, setSaving] = useState(false); const [deleting, setDeleting] = useState(false); const [error, setError] = useState(null); const name = draft.name ?? headgate.name; const active = draft.active ?? headgate.active; const unit = draft.unit ?? headgate.unit; const setName = (v: string) => setDraft((d) => ({ ...d, name: v })); const setActive = (v: boolean) => setDraft((d) => ({ ...d, active: v })); const setUnit = (v: string) => setDraft((d) => ({ ...d, unit: v })); async function handleSave(e: React.FormEvent) { e.preventDefault(); setSaving(true); setError(null); const result = await updateWaterHeadgate(headgate.id, name.trim(), active, unit); if (result.success) { router.push(backHref); } else { setError(result.error ?? "Failed to save"); setSaving(false); } } async function handleDelete() { if (!window.confirm(`Delete headgate "${headgate.name}"? Existing log entries will be preserved.`)) return; setDeleting(true); const result = await deleteWaterHeadgate(headgate.id); if (result.success) { router.push(backHref); } else { setError(result.error ?? "Failed to delete"); setDeleting(false); } } return (
{error && (
{error}
)}
setName(e.target.value)} placeholder="Headgate name" />
setUnit(e.target.value)} options={UNIT_OPTIONS.map((u) => ({ value: u, label: u }))} />
setActive(e.target.value === "1")} options={[ { value: "1", label: "Active" }, { value: "0", label: "Inactive" }, ]} />
Delete Headgate Save Changes
); }