diff --git a/components/forms/SettingsSubmit.tsx b/components/forms/SettingsSubmit.tsx index 25907d58..88ddff5d 100644 --- a/components/forms/SettingsSubmit.tsx +++ b/components/forms/SettingsSubmit.tsx @@ -55,7 +55,7 @@ function shortId(s?: string) { } // ───────────────────────────────────────────────────────────── -/** Normalizers for edit-mode prefill (IDs + enums) */ +// Normalizers for edit-mode prefill (IDs + enums) // ───────────────────────────────────────────────────────────── function idToString(v: any): string { if (v == null || v === "") return ""; @@ -488,8 +488,8 @@ export default function SettingsSubmit(props: CreateProps | EditProps) { handleSubmit, control, reset, - setValue, // added - getValues, // added + setValue, + getValues, formState: { isSubmitting }, } = useForm({ defaultValues: { @@ -541,7 +541,7 @@ export default function SettingsSubmit(props: CreateProps | EditProps) { } }, [isEdit, edit?.initialValues, reset]); - // After reset, force RHF values once + // After reset, force RHF values once (covers early case) useEffect(() => { if (!isEdit || !current) return; @@ -608,8 +608,12 @@ export default function SettingsSubmit(props: CreateProps | EditProps) { return; } + // map UI target -> backend slug as helper + const target_slug = typeForOptions; + const payload: any = { - target, + target, // keep original selector value (e.g. "settings_co2gal") + target_slug, // add slug for server convenience (e.g. "co2-galvo") setting_title: values.setting_title, setting_notes: values.setting_notes || "", mat: values.mat || null, @@ -685,6 +689,9 @@ export default function SettingsSubmit(props: CreateProps | EditProps) { const form = new FormData(); // Directus multipart expects JSON in "data" form.set("data", JSON.stringify(payload)); + // Also include top-level fields for our API route compatibility + form.set("target", payload.target); + form.set("target_slug", payload.target_slug); if (photoFile) form.set("photo", photoFile, photoFile.name || "photo"); if (screenFile) form.set("screen", screenFile, screenFile.name || "screen"); res = await fetch("/api/submit/settings", { method: "POST", body: form, credentials: "include" }); @@ -693,7 +700,8 @@ export default function SettingsSubmit(props: CreateProps | EditProps) { method: "POST", headers: { "Content-Type": "application/json" }, // Directus JSON expects { data: { ... } } - body: JSON.stringify({ data: payload }), + // Also include top-level fields for our API route compatibility + body: JSON.stringify({ data: payload, target: payload.target, target_slug: payload.target_slug }), credentials: "include", }); } @@ -988,7 +996,7 @@ export default function SettingsSubmit(props: CreateProps | EditProps) { + Add - {lines.fields.map((f, i) => ( + {lines.fields map((f, i) => (