From c96f1b67a5cd8d4bc1d4fb94bb436d59b7836669 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 25 Feb 2026 15:19:30 +0100 Subject: [PATCH] feat: add admin advancement summary card and advance column in assignments table - Update listByStage query to include evaluation form criteriaJson and criterionScoresJson - Add Advance column to individual assignments table showing YES/NO badge per submitted evaluation - Create AdvancementSummaryCard component showing yes/no/pending vote counts with stacked bar - Wire AdvancementSummaryCard into the EVALUATION round overview tab Co-Authored-By: Claude Opus 4.6 --- .../(admin)/admin/rounds/[roundId]/page.tsx | 8 ++ .../individual-assignments-table.tsx | 19 +++- .../admin/round/advancement-summary-card.tsx | 93 +++++++++++++++++++ src/server/routers/assignment.ts | 9 +- 4 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 src/components/admin/round/advancement-summary-card.tsx diff --git a/src/app/(admin)/admin/rounds/[roundId]/page.tsx b/src/app/(admin)/admin/rounds/[roundId]/page.tsx index cc93b11..f107dac 100644 --- a/src/app/(admin)/admin/rounds/[roundId]/page.tsx +++ b/src/app/(admin)/admin/rounds/[roundId]/page.tsx @@ -115,6 +115,7 @@ import { AIRecommendationsDisplay } from '@/components/admin/round/ai-recommenda import { EvaluationCriteriaEditor } from '@/components/admin/round/evaluation-criteria-editor' import { COIReviewSection } from '@/components/admin/assignment/coi-review-section' import { ConfigSectionHeader } from '@/components/admin/rounds/config/config-section-header' +import { AdvancementSummaryCard } from '@/components/admin/round/advancement-summary-card' // ── Helpers ──────────────────────────────────────────────────────────────── @@ -942,6 +943,13 @@ export default function RoundDetailPage() { + {/* Advancement Votes Summary — only for EVALUATION rounds */} + {isEvaluation && ( + + + + )} + {/* Filtering Results Summary — only for FILTERING rounds with results */} {isFiltering && filteringStats && filteringStats.total > 0 && ( diff --git a/src/components/admin/assignment/individual-assignments-table.tsx b/src/components/admin/assignment/individual-assignments-table.tsx index 2c15cc5..bf05009 100644 --- a/src/components/admin/assignment/individual-assignments-table.tsx +++ b/src/components/admin/assignment/individual-assignments-table.tsx @@ -312,17 +312,18 @@ export function IndividualAssignmentsTable({

) : (
-
+
Juror Project Status + Advance Actions
{assignments.map((a: any, idx: number) => (
@@ -349,6 +350,20 @@ export function IndividualAssignmentsTable({ )}
+
+ {(() => { + const ev = a.evaluation + if (!ev || ev.status !== 'SUBMITTED') return + const criteria = (ev.form?.criteriaJson ?? []) as Array<{ id: string; type?: string }> + const scores = (ev.criterionScoresJson ?? {}) as Record + const advCrit = criteria.find((c: any) => c.type === 'advance') + if (!advCrit) return + const val = scores[advCrit.id] + if (val === true) return YES + if (val === false) return NO + return + })()} +