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