diff --git a/src/components/admin/round/ranking-dashboard.tsx b/src/components/admin/round/ranking-dashboard.tsx index ef49b6f..e6c2537 100644 --- a/src/components/admin/round/ranking-dashboard.tsx +++ b/src/components/admin/round/ranking-dashboard.tsx @@ -85,7 +85,7 @@ type JurorScore = { type SortableProjectRowProps = { projectId: string currentRank: number - entry: RankedProjectEntry | undefined + entry: (RankedProjectEntry & { originalIndex?: number }) | undefined projectInfo: ProjectInfo | undefined jurorScores: JurorScore[] | undefined onSelect: () => void @@ -117,8 +117,8 @@ function SortableProjectRow({ transition, } - // isOverridden: current position differs from AI-assigned rank - const isOverridden = entry !== undefined && currentRank !== entry.rank + // isOverridden: admin drag-reordered this project from its original snapshot position + const isOverridden = entry !== undefined && currentRank !== entry.originalIndex // Compute yes count from juror scores const yesCount = jurorScores?.filter((j) => j.decision === true).length ?? 0 @@ -372,11 +372,12 @@ export function RankingDashboard({ competitionId: _competitionId, roundId }: Ran // ─── rankingMap (O(1) lookup) ────────────────────────────────────────────── const rankingMap = useMemo(() => { - const map = new Map() + const map = new Map() if (!snapshot) return map const startup = (snapshot.startupRankingJson ?? []) as unknown as RankedProjectEntry[] const concept = (snapshot.conceptRankingJson ?? []) as unknown as RankedProjectEntry[] - ;[...startup, ...concept].forEach((entry) => map.set(entry.projectId, entry)) + startup.forEach((entry, i) => map.set(entry.projectId, { ...entry, originalIndex: i + 1 })) + concept.forEach((entry, i) => map.set(entry.projectId, { ...entry, originalIndex: i + 1 })) return map }, [snapshot])