invalid target bug fix

This commit is contained in:
makearmy 2025-10-04 20:14:47 -04:00
parent 874b1d7d32
commit 898d86e2fb

View file

@ -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 { function idToString(v: any): string {
if (v == null || v === "") return ""; if (v == null || v === "") return "";
@ -488,8 +488,8 @@ export default function SettingsSubmit(props: CreateProps | EditProps) {
handleSubmit, handleSubmit,
control, control,
reset, reset,
setValue, // added setValue,
getValues, // added getValues,
formState: { isSubmitting }, formState: { isSubmitting },
} = useForm<any>({ } = useForm<any>({
defaultValues: { defaultValues: {
@ -541,7 +541,7 @@ export default function SettingsSubmit(props: CreateProps | EditProps) {
} }
}, [isEdit, edit?.initialValues, reset]); }, [isEdit, edit?.initialValues, reset]);
// After reset, force RHF values once // After reset, force RHF values once (covers early case)
useEffect(() => { useEffect(() => {
if (!isEdit || !current) return; if (!isEdit || !current) return;
@ -608,8 +608,12 @@ export default function SettingsSubmit(props: CreateProps | EditProps) {
return; return;
} }
// map UI target -> backend slug as helper
const target_slug = typeForOptions;
const payload: any = { 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_title: values.setting_title,
setting_notes: values.setting_notes || "", setting_notes: values.setting_notes || "",
mat: values.mat || null, mat: values.mat || null,
@ -685,6 +689,9 @@ export default function SettingsSubmit(props: CreateProps | EditProps) {
const form = new FormData(); const form = new FormData();
// Directus multipart expects JSON in "data" // Directus multipart expects JSON in "data"
form.set("data", JSON.stringify(payload)); 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 (photoFile) form.set("photo", photoFile, photoFile.name || "photo");
if (screenFile) form.set("screen", screenFile, screenFile.name || "screen"); if (screenFile) form.set("screen", screenFile, screenFile.name || "screen");
res = await fetch("/api/submit/settings", { method: "POST", body: form, credentials: "include" }); 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", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
// Directus JSON expects { data: { ... } } // 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", credentials: "include",
}); });
} }
@ -988,7 +996,7 @@ export default function SettingsSubmit(props: CreateProps | EditProps) {
+ Add + Add
</button> </button>
</div> </div>
{lines.fields.map((f, i) => ( {lines.fields map((f, i) => (
<div key={f.id} className="grid md:grid-cols-4 gap-2"> <div key={f.id} className="grid md:grid-cols-4 gap-2">
<LabeledInput label="Name" name={`line_settings.${i}.name`} register={register} /> <LabeledInput label="Name" name={`line_settings.${i}.name`} register={register} />
<LabeledInput label="Frequency (kHz)" name={`line_settings.${i}.frequency`} type="number" step="0.1" register={register} /> <LabeledInput label="Frequency (kHz)" name={`line_settings.${i}.frequency`} type="number" step="0.1" register={register} />