Filtering UX: overview results, auto-clear on re-run, config save fix
All checks were successful
Build and Push Docker Image / build (push) Successful in 8m25s

- Add filtering results summary card on round Overview tab with pass/fail/flag
  counts and color-coded progress bar (polls every 5s)
- Auto-delete previous filtering results when re-running so new ones stream in
- Rename BUSINESS_CONCEPT to "Concept" in filtering results to prevent overflow
- Fix config save race condition where toggling switches (aiParseFiles, advance
  counts) would revert: pendingSaveRef cleared before refetch completed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt
2026-02-17 16:25:59 +01:00
parent a02ed59158
commit 1c6961355b
3 changed files with 103 additions and 3 deletions

View File

@@ -774,7 +774,7 @@ export function FilteringDashboard({ competitionId, roundId }: FilteringDashboar
</div>
<div>
<Badge variant="outline" className="text-xs">
{result.project?.competitionCategory || '\u2014'}
{formatCategory(result.project?.competitionCategory) || '\u2014'}
</Badge>
</div>
<div>
@@ -1092,6 +1092,18 @@ export function FilteringDashboard({ competitionId, roundId }: FilteringDashboar
)
}
// -- Helpers --
const categoryLabels: Record<string, string> = {
BUSINESS_CONCEPT: 'Concept',
STARTUP: 'Startup',
}
function formatCategory(cat: string | null | undefined): string {
if (!cat) return ''
return categoryLabels[cat] ?? cat.charAt(0) + cat.slice(1).toLowerCase().replace(/_/g, ' ')
}
// -- Sub-components --
function OutcomeBadge({ outcome, overridden }: { outcome: string; overridden: boolean }) {