diff --git a/app/routes/leagues/$leagueId.draft.$seasonId.tsx b/app/routes/leagues/$leagueId.draft.$seasonId.tsx index 50211fe..6ee47a1 100644 --- a/app/routes/leagues/$leagueId.draft.$seasonId.tsx +++ b/app/routes/leagues/$leagueId.draft.$seasonId.tsx @@ -142,15 +142,49 @@ export default function DraftRoom() { }; }, [on, off]); - // Calculate current team on the clock - const currentDraftSlot = draftSlots[(currentPick - 1) % draftSlots.length]; + // Calculate current round const currentRound = Math.ceil(currentPick / draftSlots.length); + // Generate snake draft grid structure + const generateDraftGrid = () => { + const teamCount = draftSlots.length; + const rounds = season.draftRounds; + const grid: Array> = []; + + for (let round = 1; round <= rounds; round++) { + const roundPicks = []; + const isOddRound = round % 2 === 1; + + for (let i = 0; i < teamCount; i++) { + const pickInRound = i + 1; + const teamIndex = isOddRound ? i : teamCount - 1 - i; + const pickNumber = (round - 1) * teamCount + pickInRound; + const teamId = draftSlots[teamIndex]?.team.id; + + // Find if this pick has been made + const pick = picks.find((p: any) => p.pickNumber === pickNumber); + + roundPicks.push({ + pickNumber, + round, + pickInRound, + teamId, + pick, + }); + } + grid.push(roundPicks); + } + + return grid; + }; + + const draftGrid = generateDraftGrid(); + return (
{/* Standalone Header - No Main Nav */}
-
+

@@ -184,66 +218,122 @@ export default function DraftRoom() {

{/* Main Content */} -
-
- {/* Left Column: Draft Board */} -
+
+ {/* Draft Grid - Horizontally Scrollable */} +
-

Draft Board

- - {/* Current Pick */} - {currentDraftSlot && ( -
-
-
-

Now Picking:

-

{currentDraftSlot.team.name}

-
- - Pick #{currentPick} - +

Draft Grid

+
+
+ {/* Team Headers */} +
+ {draftSlots.map((slot) => ( +
+
+ {slot.team.name} +
+
+ Pick {slot.draftOrder} +
+
+ ))} +
+ + {/* Draft Grid Rows */} +
+ {draftGrid.map((roundPicks, roundIndex) => { + const round = roundIndex + 1; + const isEvenRound = round % 2 === 0; + const displayPicks = isEvenRound ? [...roundPicks].reverse() : roundPicks; + + return ( +
+ {displayPicks.map((cell) => { + const isCurrent = cell.pickNumber === currentPick; + const isPicked = !!cell.pick; + + return ( +
+
+ {cell.round}.{String(cell.pickInRound).padStart(2, "0")} +
+ {isPicked ? ( +
+
+ {cell.pick.participant.name} +
+
+ {cell.pick.sport.name} +
+
+ ) : isCurrent ? ( +
+ On Clock +
+ ) : null} +
+ ); + })} +
+ ); + })}
- )} +
+ +
- {/* Recent Picks */} -
-

Recent Picks

- {picks.length === 0 ? ( -

No picks yet...

- ) : ( -
- {picks - .slice() - .reverse() - .slice(0, 10) - .map((pick: any) => ( -
-
- #{pick.pickNumber} -
-

- {pick.participant.name} -

-

- {pick.sport.name} -

-
-
-
-

{pick.team.name}

-

- Round {pick.round} +

+ {/* Recent Picks */} +
+ +

Recent Picks

+ {picks.length === 0 ? ( +

No picks yet...

+ ) : ( +
+ {picks + .slice() + .reverse() + .slice(0, 10) + .map((pick: any) => ( +
+
+ #{pick.pickNumber} +
+

+ {pick.participant.name} +

+

+ {pick.sport.name}

- ))} -
- )} -
+
+

{pick.team.name}

+

+ Round {pick.round} +

+
+
+ ))} +
+ )}