Files
fusion/packages/dashboard/app/components/WorktrunkInstallApprovalDetails.tsx
Fusion (runfusion.ai) 1eef42a912 feat(FN-4702): complete Step 3 — render worktrunk approval details
Fusion-Task-Id: FN-4702
Fusion-Task-Lineage: 378b46bc-2e71-43bf-9ff7-85e7aed8bf85
2026-05-15 23:39:43 -07:00

55 lines
2.2 KiB
TypeScript

import "./WorktrunkInstallApprovalDetails.css";
import type { ApprovalRequestDetail } from "../api";
interface WorktrunkInstallApprovalDetailsProps {
targetAction: ApprovalRequestDetail["targetAction"];
}
function readString(value: unknown): string | null {
return typeof value === "string" && value.trim().length > 0 ? value : null;
}
function readAsset(context: Record<string, unknown> | undefined): { url: string | null; sha256: string | null } {
if (!context) return { url: null, sha256: null };
const assets = context.assets;
if (!assets || typeof assets !== "object") return { url: null, sha256: null };
const firstAsset = Object.values(assets as Record<string, unknown>)[0];
if (!firstAsset || typeof firstAsset !== "object") return { url: null, sha256: null };
const asset = firstAsset as Record<string, unknown>;
return {
url: readString(asset.url),
sha256: readString(asset.sha256),
};
}
export function WorktrunkInstallApprovalDetails({ targetAction }: WorktrunkInstallApprovalDetailsProps) {
const context = targetAction.context as Record<string, unknown> | undefined;
const version = readString(context?.version);
const installPath = readString(context?.installPath) ?? targetAction.resourceId;
const { url, sha256 } = readAsset(context);
return (
<section className="card worktrunk-install-approval-details" data-testid="worktrunk-install-approval-details">
<h4 className="worktrunk-install-approval-details__title">Worktrunk install request</h4>
<dl className="worktrunk-install-approval-details__list">
<div className="worktrunk-install-approval-details__row">
<dt>Version</dt>
<dd>{version ?? "Unknown"}</dd>
</div>
<div className="worktrunk-install-approval-details__row">
<dt>Asset URL</dt>
<dd>{url ?? "Unknown"}</dd>
</div>
<div className="worktrunk-install-approval-details__row">
<dt>SHA-256</dt>
<dd>{sha256 ?? "Unknown"}</dd>
</div>
<div className="worktrunk-install-approval-details__row">
<dt>Install path</dt>
<dd>{installPath ?? "Unknown"}</dd>
</div>
</dl>
</section>
);
}