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({