diff --git a/app/components/standings/TeamScoreBreakdown.tsx b/app/components/standings/TeamScoreBreakdown.tsx index 7833222..d7dd1b5 100644 --- a/app/components/standings/TeamScoreBreakdown.tsx +++ b/app/components/standings/TeamScoreBreakdown.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { Link } from "react-router"; +import { ArrowUp, ArrowDown, ArrowUpDown } from "lucide-react"; import { Card, CardContent } from "~/components/ui/card"; import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from "~/components/ui/table"; import { Badge } from "~/components/ui/badge"; @@ -41,6 +42,33 @@ interface TeamScoreBreakdownProps { type SortColumn = "pick" | "points"; type SortDirection = "asc" | "desc"; +function SortIndicator({ column, sortColumn, sortDirection }: { column: SortColumn; sortColumn: SortColumn; sortDirection: SortDirection }) { + if (sortColumn !== column) return ; + return sortDirection === "asc" + ? + : ; +} + +function sortPicks( + picks: TeamScoreBreakdownProps["breakdown"]["picks"], + sortColumn: SortColumn, + sortDirection: SortDirection, +) { + const dir = sortDirection === "asc" ? 1 : -1; + return picks.slice().sort((a, b) => { + if (sortColumn === "pick") { + const sportCmp = a.participant.sport.localeCompare(b.participant.sport); + return sportCmp !== 0 ? sportCmp * dir : (a.pickNumber - b.pickNumber) * dir; + } + // points: sort by actual first, then projected + const pointsDiff = a.points - b.points; + if (pointsDiff !== 0) return pointsDiff * dir; + const aProjected = a.projectedPoints ?? 0; + const bProjected = b.projectedPoints ?? 0; + return (aProjected - bProjected) * dir; + }); +} + /** * Display detailed team score breakdown with all drafted participants * Phase 4.3: Team breakdown pages @@ -74,23 +102,7 @@ export function TeamScoreBreakdown({ } } - const allPicks = breakdown.picks.slice().sort((a, b) => { - const dir = sortDirection === "asc" ? 1 : -1; - if (sortColumn === "pick") { - return (a.pickNumber - b.pickNumber) * dir; - } - // points: sort by actual first, then projected - const pointsDiff = a.points - b.points; - if (pointsDiff !== 0) return pointsDiff * dir; - const aProjected = a.projectedPoints ?? 0; - const bProjected = b.projectedPoints ?? 0; - return (aProjected - bProjected) * dir; - }); - - function SortIndicator({ column }: { column: SortColumn }) { - if (sortColumn !== column) return ; - return {sortDirection === "asc" ? "↑" : "↓"}; - } + const allPicks = sortPicks(breakdown.picks, sortColumn, sortDirection); return (
@@ -130,12 +142,13 @@ export function TeamScoreBreakdown({ - + Sport @@ -144,14 +157,13 @@ export function TeamScoreBreakdown({