← Files NGS Analysis WorkbenchARCHIVED FILE
src/components/ComputeTargetCatalog.tsx
5.28 KB · Sep 30, 2026 · 23:20 UTC
import { Icon } from "../design-system/Icon";
import { Chip } from "../design-system/Chip";
import { useDialogMotion } from "../design-system/useDialogMotion";
import { Fragment, useEffect, useRef, useState } from "react";
import type { ComputeTarget } from "../model";
import ui from "../styles/ui.module.css";
import styles from "./ComputeTargetCatalog.module.css";
export function ComputeTargetCatalog({
targets,
loading,
error,
}: {
targets?: ComputeTarget[];
loading: boolean;
error?: string;
}) {
const [selectedId, setSelectedId] = useState<string>();
const dialogRef = useRef<HTMLDialogElement>(null);
const triggerRef = useRef<HTMLButtonElement>(null);
const selected = targets?.find((target) => target.target_id === selectedId);
useEffect(() => {
if (selected && dialogRef.current && !dialogRef.current.open)
dialogRef.current.showModal();
if (selectedId && targets && !selected) {
setSelectedId(undefined);
queueMicrotask(() => triggerRef.current?.focus());
}
}, [selected, selectedId, targets]);
const closeDetails = useDialogMotion(dialogRef);
return (
<section className={styles.root} aria-label="Configured compute targets">
{error ? (
<p className={styles.notice} role="alert">
{error}
{targets?.length ? " Showing previously loaded targets." : ""}
</p>
) : null}
{targets?.length ? (
<>
<h3 className={ui.sectionLabel}>Configured targets</h3>
<ul className={styles.list}>
{targets.map((target) => (
<li key={target.target_id}>
<button
aria-haspopup="dialog"
className={styles.row}
onClick={(event) => {
triggerRef.current = event.currentTarget;
setSelectedId(target.target_id);
}}
type="button"
>
<span className={styles.identity}>
<strong>{target.title}</strong>
<code>{target.target_id}</code>
</span>
<span className={styles.facts}>
{[
...new Set([target.controllerTransport, target.executor]),
].map((fact) => (
<Chip key={fact}>{label(fact)}</Chip>
))}
</span>
<span className={styles.state}>
{target.target_id === "local" ? "Built in" : "Configured"}
</span>
<Icon name="chevron-right-sm" size={16} />
</button>
</li>
))}
</ul>
<p className={styles.note}>
Target configuration is managed through Codex. Configured does not
mean workflow-ready.
</p>
</>
) : !error ? (
<p className={styles.notice} role={loading ? "status" : undefined}>
{loading
? "Loading compute targets…"
: "No compute targets are available."}
</p>
) : null}
{selected ? (
<dialog
aria-labelledby="compute-target-title"
className={styles.dialog}
onKeyDown={(event) => {
if (event.key === "Escape") {
event.preventDefault();
closeDetails();
}
}}
onCancel={(event) => {
event.preventDefault();
closeDetails();
}}
onClick={(event) => {
if (event.target === event.currentTarget) closeDetails();
}}
onClose={() => {
setSelectedId(undefined);
queueMicrotask(() => triggerRef.current?.focus());
}}
ref={dialogRef}
>
<header>
<div>
<code>{selected.target_id}</code>
<h3 id="compute-target-title">{selected.title}</h3>
</div>
<button
aria-label="Close"
className={`${ui.button} ${ui.buttonQuiet} ${ui.iconButton}`}
onClick={closeDetails}
type="button"
>
<Icon name="close-medium" size={20} />
</button>
</header>
<p>{selected.description}</p>
<dl>
<dt>Transport</dt>
<dd>{label(selected.controllerTransport)}</dd>
<dt>Executor</dt>
<dd>{label(selected.executor)}</dd>
<dt>Workspace access</dt>
<dd>{label(selected.workspaceAccess)}</dd>
{selected.workspaceRoot ? (
<>
<dt>Workspace root</dt>
<dd>{selected.workspaceRoot}</dd>
</>
) : null}
{Object.entries(selected.executorConfiguration).map(
([key, value]) => (
<Fragment key={key}>
<dt>{label(key)}</dt>
<dd>{value}</dd>
</Fragment>
),
)}
</dl>
<small>Workflow readiness is checked separately for each plan.</small>
</dialog>
) : null}
</section>
);
}
function label(value: string) {
if (value === "ssh") return "SSH";
const words = value.replaceAll("_", " ");
return words[0]?.toUpperCase() + words.slice(1);
}
SHA-256: ec4e2948d347a433d9627a330021c471dab02d23ec9480878147ba3c369bf1ef