feat(task-005): complete article intake dashboard detail flow

This commit is contained in:
2026-05-21 18:54:11 +03:00
parent 7972e9a95f
commit cf84400118
28 changed files with 1714 additions and 61 deletions
@@ -0,0 +1,52 @@
import type { DetailSummary } from "./model";
type DetailShellProps = {
summary: DetailSummary;
};
export function ArticleDetailShell({ summary }: DetailShellProps) {
const timeline = summary.timeline;
return (
<section>
<h2>Article detail</h2>
<dl className="detailGrid">
<div>
<dt>Article ID</dt>
<dd>{summary.articleId}</dd>
</div>
<div>
<dt>Status</dt>
<dd>{summary.status}</dd>
</div>
<div>
<dt>Publishing status</dt>
<dd>{summary.publishingStatus}</dd>
</div>
<div>
<dt>Target site</dt>
<dd>{summary.targetSite}</dd>
</div>
<div>
<dt>Last updated</dt>
<dd>{new Date(summary.updatedAt).toLocaleString()}</dd>
</div>
</dl>
<h3>Brief</h3>
<p>{summary.briefDescription}</p>
<h3>Workflow timeline</h3>
<ul className="timeline">
{timeline.map((event) => (
<li key={event.id}>
<strong>{event.event_type}</strong> from {event.from_status ?? "—"} to{" "}
{event.to_status ?? "—"} at {new Date(event.created_at).toLocaleString()}
{event.actor_user_id ? <span> • actor {event.actor_user_id}</span> : null}
</li>
))}
{timeline.length === 0 ? <li>No workflow events yet.</li> : null}
</ul>
</section>
);
}