submission form cleanup

This commit is contained in:
makearmy 2025-10-06 21:36:55 -04:00
parent 4a085680ed
commit d44d8448e7

View file

@ -74,7 +74,7 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
}
const yesNo = (v: any) => (v ? "Yes" : "No");
// 🔧 NEW: always stringify possibly-object options for display
// stringify possibly-object options for display
const optLabel = (v: any): string => {
if (v == null) return "—";
if (typeof v === "string" || typeof v === "number") return String(v);
@ -196,7 +196,7 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
const isMine = meId && ownerId ? meId === ownerId : false;
// Small field renderer (label on top, value below). Accepts React nodes.
// Small field renderer (label on top, value below)
const Field = ({ label, value, suffix }: { label: string; value: React.ReactNode | string | number | null | undefined; suffix?: string }) => {
const primitive =
typeof value === "string" || typeof value === "number" || typeof value === "boolean";
@ -214,7 +214,6 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
{suffix ? <span className="opacity-70"> {suffix}</span> : null}
</>
) : (
// render React node directly (e.g., Notes paragraph)
value
)}
</div>
@ -353,7 +352,6 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
<Field label="Software" value={softName} />
<Field label="Laser Source" value={sourceText || "—"} />
<Field label="Lens Configuration" value={rec.lens_conf?.name || "—"} />
{/* 🔧 patched to stringify */}
<Field label="Scan Head Aperture" value={optLabel(rec.lens_apt)} suffix="mm" />
<Field label="Beam Expander" value={optLabel(rec.lens_exp)} suffix="x" />
<Field
@ -401,8 +399,14 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
<Field label="Pass" value={r.pass ?? "—"} />
<Field label="Frequency" value={r.frequency ?? "—"} suffix="kHz" />
<Field label="Pulse" value={r.pulse ?? "—"} suffix="ns" />
</div>
<div className="grid sm:grid-cols-2 gap-2 items-center">
<Field label="Auto Rotate" value={yesNo(r.auto)} />
{showIncrement && <Field label="Auto Rotate Increment" value={r.increment ?? "—"} suffix="°" />}
</div>
<div className="flex flex-wrap gap-6">
<Field label="Crosshatch" value={yesNo(r.cross)} />
<Field label="Flood Fill" value={yesNo(r.flood)} />
<Field label="Air Assist" value={yesNo(r.air)} />
@ -418,25 +422,43 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
<section className="space-y-3">
<h2 className="text-lg font-semibold">Line Settings</h2>
<div className="grid md:grid-cols-2 gap-3">
{rec.line_settings!.map((r: any, i: number) => (
<div key={i} className="border rounded p-3 space-y-2">
<div className="font-medium">{r.name || `Line ${i + 1}`}</div>
<div className="grid sm:grid-cols-2 gap-2">
<Field label="Power" value={r.power ?? "—"} suffix="%" />
<Field label="Speed" value={r.speed ?? "—"} suffix="mm/s" />
<Field label="Frequency" value={r.frequency ?? "—"} suffix="kHz" />
<Field label="Pulse" value={r.pulse ?? "—"} suffix="ns" />
<Field label="Pass" value={r.pass ?? "—"} />
<Field label="Step" value={r.step ?? "—"} />
<Field label="Size" value={r.size ?? "—"} />
<Field label="Perf" value={yesNo(r.perf)} />
<Field label="Cut" value={yesNo(r.cut)} />
<Field label="Skip" value={yesNo(r.skip)} />
<Field label="Wobble" value={yesNo(r.wobble)} />
<Field label="Air Assist" value={yesNo(r.air)} />
</div>
</div>
))}
{rec.line_settings!.map((r: any, i: number) => {
const perfEnabled = !!r.perf;
const wobbleEnabled = !!r.wobble;
return (
<div key={i} className="border rounded p-3 space-y-2">
<div className="font-medium">{r.name || `Line ${i + 1}`}</div>
{/* Base fields match form order */}
<div className="grid sm:grid-cols-2 gap-2">
<Field label="Frequency" value={r.frequency ?? "—"} suffix="kHz" />
<Field label="Pulse" value={r.pulse ?? "—"} suffix="ns" />
<Field label="Power" value={r.power ?? "—"} suffix="%" />
<Field label="Speed" value={r.speed ?? "—"} suffix="mm/s" />
<Field label="Pass" value={r.pass ?? "—"} />
</div>
{/* Perforation row */}
<div className="grid sm:grid-cols-3 gap-2 items-center">
<Field label="Perforation Mode" value={yesNo(perfEnabled)} />
{perfEnabled && <Field label="Cut" value={r.cut ?? "—"} suffix="mm" />}
{perfEnabled && <Field label="Skip" value={r.skip ?? "—"} suffix="mm" />}
</div>
{/* Wobble row */}
<div className="grid sm:grid-cols-3 gap-2 items-center">
<Field label="Wobble" value={yesNo(wobbleEnabled)} />
{wobbleEnabled && <Field label="Step" value={r.step ?? "—"} suffix="mm" />}
{wobbleEnabled && <Field label="Size" value={r.size ?? "—"} suffix="mm" />}
</div>
{/* Simple toggle */}
<div className="flex flex-wrap gap-6">
<Field label="Air Assist" value={yesNo(r.air)} />
</div>
</div>
);
})}
</div>
</section>
)}
@ -445,27 +467,33 @@ export default function CO2GalvoDetail({ id, editable }: { id: string | number;
<section className="space-y-3">
<h2 className="text-lg font-semibold">Raster Settings</h2>
<div className="grid md:grid-cols-2 gap-3">
{rec.raster_settings!.map((r: any, i: number) => (
<div key={i} className="border rounded p-3 space-y-2">
<div className="font-medium">{r.name || `Raster ${i + 1}`}</div>
<div className="grid sm:grid-cols-2 gap-2">
<Field label="Type" value={TYPE_LABEL[r.type] || "—"} />
<Field label="Dither" value={DITHER_LABEL(r.dither)} />
<Field label="Power" value={r.power ?? "—"} suffix="%" />
<Field label="Speed" value={r.speed ?? "—"} suffix="mm/s" />
<Field label="Interval" value={r.interval ?? "—"} suffix="mm" />
<Field label="Pass" value={r.pass ?? "—"} />
<Field label="Frequency" value={r.frequency ?? "—"} suffix="kHz" />
<Field label="Pulse" value={r.pulse ?? "—"} suffix="ns" />
{!!r.halftone_cell && <Field label="Halftone Cell" value={r.halftone_cell} />}
{!!r.halftone_angle && <Field label="Halftone Angle" value={r.halftone_angle} />}
<Field label="Dot" value={r.dot ?? "—"} />
<Field label="Crosshatch" value={yesNo(r.cross)} />
<Field label="Inversion" value={yesNo(r.inversion)} />
<Field label="Air Assist" value={yesNo(r.air)} />
</div>
</div>
))}
{rec.raster_settings!.map((r: any, i: number) => {
const isHalftone = r?.dither === "halftone";
return (
<div key={i} className="border rounded p-3 space-y-2">
<div className="font-medium">{r.name || `Raster ${i + 1}`}</div>
<div className="grid sm:grid-cols-2 gap-2">
<Field label="Type" value={TYPE_LABEL[r.type] || "—"} />
<Field label="Dither" value={DITHER_LABEL(r.dither)} />
<Field label="Power" value={r.power ?? "—"} suffix="%" />
<Field label="Speed" value={r.speed ?? "—"} suffix="mm/s" />
<Field label="Interval" value={r.interval ?? "—"} suffix="mm" />
<Field label="Pass" value={r.pass ?? "—"} />
<Field label="Frequency" value={r.frequency ?? "—"} suffix="kHz" />
<Field label="Pulse" value={r.pulse ?? "—"} suffix="ns" />
{isHalftone && <Field label="Halftone Cell" value={r.halftone_cell ?? "—"} />}
{isHalftone && <Field label="Halftone Angle" value={r.halftone_angle ?? "—"} />}
<Field label="Dot Width Adjustment" value={r.dot ?? "—"} suffix="mm" />
</div>
<div className="flex flex-wrap gap-6">
<Field label="Crosshatch" value={yesNo(r.cross)} />
<Field label="Inverted" value={yesNo(r.inversion)} />
<Field label="Air Assist" value={yesNo(r.air)} />
</div>
</div>
);
})}
</div>
</section>
)}