co2 galvo owner test

This commit is contained in:
makearmy 2025-10-01 19:01:32 -04:00
parent 39d9723e23
commit eea0c52ea4

View file

@ -10,6 +10,7 @@ export default function CO2GalvoSettingDetailPage() {
const [setting, setSetting] = useState<any>(null);
const [loading, setLoading] = useState(true);
// claim UI state
const [claimBusy, setClaimBusy] = useState(false);
const [claimMsg, setClaimMsg] = useState<string | null>(null);
const [claimErr, setClaimErr] = useState<string | null>(null);
@ -24,7 +25,7 @@ export default function CO2GalvoSettingDetailPage() {
"submission_id",
"setting_title",
"uploader",
// ✅ request username explicitly
// request owner explicitly (username is what we display)
"owner.id",
"owner.username",
"setting_notes",
@ -45,7 +46,7 @@ export default function CO2GalvoSettingDetailPage() {
"lens_apt.name",
"lens_exp.name",
"focus",
// ✅ handle string-or-relation
// laser software can be string or relation
"laser_soft",
"laser_soft.name",
"repeat_all",
@ -67,15 +68,15 @@ export default function CO2GalvoSettingDetailPage() {
if (loading) return <p className="p-6">Loading setting...</p>;
if (!setting) return <p className="p-6">Setting not found.</p>;
// ✅ prefer username; fall back to id or uploader (just in case)
const ownerName = (row: any) =>
row?.owner?.username ?? (row?.owner?.id ? String(row.owner.id) : null) ?? null;
// owner username (what Directus returns when requesting owner.username)
const ownerUsername: string | null =
(setting?.owner && setting.owner.username) ? String(setting.owner.username) : null;
// show string or relation.name
const softwareLabel =
typeof setting.laser_soft === "object"
? setting.laser_soft?.name ?? "—"
: setting.laser_soft ?? "—";
// show string or relation.name
const softwareLabel: string =
typeof setting?.laser_soft === "object"
? (setting.laser_soft?.name ?? "—")
: (setting?.laser_soft ?? "—");
const formatBoolean = (val: any) =>
val ? "Enabled" : val === false ? "Disabled" : "—";
@ -97,7 +98,7 @@ export default function CO2GalvoSettingDetailPage() {
return (
<p key={key} className="text-sm">
<strong>{label}:</strong>{" "}
{typeof value === "boolean" ? formatBoolean(value) : value || "—"}
{typeof value === "boolean" ? formatBoolean(value) : value ?? "—"}
</p>
);
})}
@ -147,8 +148,6 @@ export default function CO2GalvoSettingDetailPage() {
}
};
const owner = ownerName(setting);
return (
<div className="p-6 max-w-7xl mx-auto">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
@ -159,14 +158,15 @@ export default function CO2GalvoSettingDetailPage() {
<div className="space-y-1 text-sm text-muted-foreground mb-3">
<p>
<strong>Owner:</strong> {owner ? <span>{owner}</span> : <span></span>}
<strong>Owner:</strong>{" "}
<span>{ownerUsername ?? "—"}</span>
</p>
<p>
<strong>Uploader:</strong> {setting.uploader || "—"}
</p>
</div>
{!owner && (
{!ownerUsername && (
<div className="flex items-center gap-2">
<button
onClick={onClaim}