From de75d93e59c4fbaaaa58c085b6972bf6840192da Mon Sep 17 00:00:00 2001 From: Saravana Achu Mac Date: Wed, 6 May 2026 13:13:46 -0700 Subject: [PATCH] refactor(ui): split review workflow components --- web/src/app/(app)/reviews/page.tsx | 156 +++---------- web/src/components/reviews/ReviewWorkflow.tsx | 216 ++++++++++++++++++ 2 files changed, 244 insertions(+), 128 deletions(-) create mode 100644 web/src/components/reviews/ReviewWorkflow.tsx diff --git a/web/src/app/(app)/reviews/page.tsx b/web/src/app/(app)/reviews/page.tsx index 8fbf293..73b3166 100644 --- a/web/src/app/(app)/reviews/page.tsx +++ b/web/src/app/(app)/reviews/page.tsx @@ -1,21 +1,19 @@ "use client"; -import Link from "next/link"; import { useCallback, useEffect, useMemo, useState } from "react"; import { AppShell } from "@/components/AppShell"; -import { AgentTimeline } from "@/components/AgentTimeline"; -import { ProposalReviewCard } from "@/components/ProposalReviewCard"; import { Badge, - Button, - ListItemButton, Panel, - PanelBody, - PanelHeader, - PanelTitle, - StatusBadge, - Textarea, } from "@/components/ui/Primitives"; +import { + ProposalDiffCard, + ReviewDecisionBar, + ReviewNoteField, + ReviewQueueList, + ReviewTimeline, + ReviewWorkflowNav, +} from "@/components/reviews/ReviewWorkflow"; import { approveReviewItem, batchReviewItems, listAgentTimeline, listApprovalQueue, rejectReviewItem } from "@/lib/review-client"; import { toast } from "@/lib/toast"; import type { AgentTimelineItem, ApprovalQueueItem } from "@/lib/types"; @@ -93,14 +91,6 @@ export default function ReviewsPage() { }, ] as const; - function getWorkflowHref(workflow: (typeof operatorWorkflows)[number]) { - if (workflow.id === "workflow-agent-activity") { - return "/reviews"; - } - - return "/reviews"; - } - async function handleDecision(decision: "approved" | "rejected") { if (!featuredProposal) { return; @@ -189,131 +179,41 @@ export default function ReviewsPage() { actions={Operator workflow shell} >
- - - Operator workflows - -
- {operatorWorkflows.map((workflow) => ( - - {workflow.name} - Owner: {workflow.owner} -
- - {workflow.status} - - Queue: {workflow.queueCount} - SLA {workflow.sla} -
- - ))} -
-
+ - - Approval queue -
- {batchMode ? ( - <> - {selectedBatchIds.size} selected - - - ) : ( - - )} - status:pending -
-
+ void handleBatchDecision(decision)} + /> {error ?
{error}
: null} - {batchMode ? ( -
- - -
- ) : null} - -
- {approvalQueue.map((item) => ( - batchMode ? toggleBatchItem(item.id) : setSelectedApprovalId(item.id)} - style={{ - display: "flex", - justifyContent: "space-between", - gap: "var(--nl-space-3)", - alignItems: "center", - flexWrap: "wrap", - textAlign: "left", - }} - > -
- {item.title} - {item.owner} -
-
- {batchMode ? ( - {selectedBatchIds.has(item.id) ? "selected" : "unselected"} - ) : null} - {item.severity} - - {item.status} - -
-
- ))} -
+ batchMode ? toggleBatchItem(id) : setSelectedApprovalId(id)} + />
- - -