Skip to content

Commit 9a4874d

Browse files
V48 (implementation-only): Extract ReadsEnterpriseReadingSteps cards
Presentational staged-reading step grid for the deposit/read workbench.
1 parent b40d872 commit 9a4874d

2 files changed

Lines changed: 88 additions & 18 deletions

File tree

uapi/components/reads/ReadsDepositReadWorkbench/ReadsDepositReadWorkbench.tsx

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,24 +1023,10 @@ export default function ReadsDepositReadWorkbench({
10231023
</span>
10241024
</div>
10251025

1026-
<div className="mt-5 grid gap-3 md:grid-cols-2 xl:grid-cols-5">
1027-
{stageCards.map((stage) => {
1028-
const active = stage.id === activeReadingStage;
1029-
return (
1030-
<div
1031-
key={stage.id}
1032-
data-testid={`terminal-enterprise-reading-step-${stage.id}`}
1033-
data-reading-step-state={stage.state}
1034-
className={`rounded-[1.05rem] border px-3 py-4 text-sm ${
1035-
active ? 'border-sky-300/35 bg-sky-300/10' : 'border-white/8 bg-black/20'
1036-
}`}
1037-
>
1038-
<div className="flex items-start justify-between gap-2">
1039-
<p className="font-semibold text-neutral-100">{stage.label}</p>
1040-
<span className="rounded-full border border-white/10 bg-white/[0.04] px-2 py-1 text-[0.56rem] uppercase tracking-[0.12em] text-neutral-400">
1041-
{stage.state}
1042-
</span>
1043-
</div>
1026+
<ReadsEnterpriseReadingSteps
1027+
stages={stageCards}
1028+
activeStageId={activeReadingStage}
1029+
/>
10441030
<p className="mt-2 leading-5 text-neutral-400">{stage.lowDetailGuidance}</p>
10451031
<details className="mt-3 rounded-[0.75rem] border border-white/8 bg-black/20 px-3 py-2">
10461032
<summary className="cursor-pointer text-[0.6rem] uppercase tracking-[0.14em] text-sky-200/80">
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* Enterprise reading step cards for the deposit/read workbench.
3+
*/
4+
"use client";
5+
6+
import React from "react";
7+
8+
export type ReadsEnterpriseReadingStep = {
9+
id: string;
10+
state: string;
11+
label: string;
12+
lowDetailGuidance?: string;
13+
expandableDetail?: string;
14+
sourceSafeVisibleFields: string[];
15+
blockers: string[];
16+
};
17+
18+
export type ReadsEnterpriseReadingStepsProps = {
19+
stages: ReadsEnterpriseReadingStep[];
20+
activeStageId: string;
21+
};
22+
23+
export function ReadsEnterpriseReadingSteps({
24+
stages,
25+
activeStageId,
26+
}: ReadsEnterpriseReadingStepsProps) {
27+
return (
28+
<div className="mt-5 grid gap-3 md:grid-cols-2 xl:grid-cols-5">
29+
{stages.map((stage) => {
30+
const active = stage.id === activeStageId;
31+
return (
32+
<div
33+
key={stage.id}
34+
data-testid={`terminal-enterprise-reading-step-${stage.id}`}
35+
data-reading-step-state={stage.state}
36+
className={`rounded-[1.05rem] border px-3 py-4 text-sm ${
37+
active
38+
? "border-sky-300/35 bg-sky-300/10"
39+
: "border-white/8 bg-black/20"
40+
}`}
41+
>
42+
<div className="flex items-start justify-between gap-2">
43+
<p className="font-semibold text-neutral-100">{stage.label}</p>
44+
<span className="rounded-full border border-white/10 bg-white/[0.04] px-2 py-1 text-[0.56rem] uppercase tracking-[0.12em] text-neutral-400">
45+
{stage.state}
46+
</span>
47+
</div>
48+
<p className="mt-2 leading-5 text-neutral-400">
49+
{stage.lowDetailGuidance}
50+
</p>
51+
<details className="mt-3 rounded-[0.75rem] border border-white/8 bg-black/20 px-3 py-2">
52+
<summary className="cursor-pointer text-[0.6rem] uppercase tracking-[0.14em] text-sky-200/80">
53+
Source-safe detail
54+
</summary>
55+
<p className="mt-2 text-xs leading-5 text-neutral-300">
56+
{stage.expandableDetail}
57+
</p>
58+
<dl className="mt-2 grid gap-1.5">
59+
<div>
60+
<dt className="text-[0.55rem] uppercase tracking-[0.12em] text-neutral-500">
61+
visible
62+
</dt>
63+
<dd className="mt-0.5 break-words font-mono text-[0.62rem] text-neutral-300">
64+
{stage.sourceSafeVisibleFields.join(", ")}
65+
</dd>
66+
</div>
67+
{stage.blockers.length ? (
68+
<div>
69+
<dt className="text-[0.55rem] uppercase tracking-[0.12em] text-neutral-500">
70+
blocked by
71+
</dt>
72+
<dd className="mt-0.5 break-words font-mono text-[0.62rem] text-neutral-300">
73+
{stage.blockers.join(", ")}
74+
</dd>
75+
</div>
76+
) : null}
77+
</dl>
78+
</details>
79+
</div>
80+
);
81+
})}
82+
</div>
83+
);
84+
}

0 commit comments

Comments
 (0)