+ {/* Team header */}
-
- {draftSlots.map((slot) => (
-
-
- {ownerMap[slot.team.id] || slot.team.name}
-
-
- ))}
-
-
- {roundsToShow.map((roundIndex) => {
- if (roundIndex >= draftGrid.length) return null;
- const roundPicks = draftGrid[roundIndex];
- const round = roundIndex + 1;
- const isEvenRound = round % 2 === 0;
- const displayPicks = isEvenRound
- ? [...roundPicks].toReversed()
- : roundPicks;
-
+ {draftSlots.map((slot) => {
+ const teamTime = teamTimers[slot.team.id];
+ const isAutodraft = autodraftStatus[slot.team.id]?.isEnabled ?? false;
return (
-
-
-
R{round}
+
+
+ {isAutodraft && (
+ A
+ )}
+ {ownerMap[slot.team.id] || slot.team.name}
+
+
+ {formatClockTime(teamTime)}
- {displayPicks.map((cell) => {
- const isCurrent = cell.pickNumber === currentPick;
- const isPicked = !!cell.pick;
- const cellState = isPicked
- ? "picked"
- : isCurrent
- ? "current"
- : "upcoming";
- const pickData = cell.pick
- ? {
- participant: { name: cell.pick.participant.name },
- sport: { name: cell.pick.sport.name },
- }
- : undefined;
-
- if (!isPicked && isCurrent && (onForceAutopick || onForceManualPickOpen)) {
- return (
-
-
-
-
-
- {onForceAutopick && (
- onForceAutopick(cell.pickNumber, cell.teamId)}>
- Force Auto Pick
-
- )}
- {onForceManualPickOpen && (
- onForceManualPickOpen(cell.pickNumber, cell.teamId)}>
- Force Manual Pick
-
- )}
-
-
- );
- }
-
- if (isPicked && (onReplacePick || onRollbackToPick)) {
- return (
-
-
-
-
-
- {onReplacePick && (
- onReplacePick(cell.pickNumber, cell.teamId)}>
- Replace Pick
-
- )}
- {onRollbackToPick && (
- onRollbackToPick(cell.pickNumber)}
- className="text-destructive focus:text-destructive"
- >
- Roll Back to This Pick
-
- )}
-
-
- );
- }
-
- return (
-
- );
- })}
);
})}
+
+ {/* Rows — clipped to 2-row height, slides to reveal new round */}
+
+
+ {roundIndicesToRender.map((roundIndex) => {
+ if (roundIndex >= draftGrid.length) return null;
+ const roundPicks = draftGrid[roundIndex];
+ const round = roundIndex + 1;
+ const isEvenRound = round % 2 === 0;
+ const displayPicks = isEvenRound ? [...roundPicks].toReversed() : roundPicks;
+
+ return (
+
+ {displayPicks.map((cell) => {
+ const isCurrent = cell.pickNumber === currentPick;
+ const isPicked = !!cell.pick;
+ const cellState = isPicked ? "picked" : isCurrent ? "current" : "upcoming";
+ const pickData = cell.pick
+ ? {
+ participant: { name: cell.pick.participant.name },
+ sport: { name: cell.pick.sport.name },
+ }
+ : undefined;
+
+ if (!isPicked && isCurrent && (onForceAutopick || onForceManualPickOpen)) {
+ return (
+
+
+
+
+
+ {onForceAutopick && (
+ onForceAutopick(cell.pickNumber, cell.teamId)}>
+ Force Auto Pick
+
+ )}
+ {onForceManualPickOpen && (
+ onForceManualPickOpen(cell.pickNumber, cell.teamId)}>
+ Force Manual Pick
+
+ )}
+
+
+ );
+ }
+
+ if (isPicked && (onReplacePick || onRollbackToPick)) {
+ return (
+
+
+
+
+
+ {onReplacePick && (
+ onReplacePick(cell.pickNumber, cell.teamId)}>
+ Replace Pick
+
+ )}
+ {onRollbackToPick && (
+ onRollbackToPick(cell.pickNumber)}
+ className="text-destructive focus:text-destructive"
+ >
+ Roll Back to This Pick
+
+ )}
+
+
+ );
+ }
+
+ return (
+
+ );
+ })}
+
+ );
+ })}
+
+
);
diff --git a/app/routes/leagues/$leagueId.draft.$seasonId.tsx b/app/routes/leagues/$leagueId.draft.$seasonId.tsx
index d8c9d92..86bf273 100644
--- a/app/routes/leagues/$leagueId.draft.$seasonId.tsx
+++ b/app/routes/leagues/$leagueId.draft.$seasonId.tsx
@@ -539,7 +539,7 @@ export default function DraftRoom() {
const stored = localStorage.getItem("draftSidebarCollapsed");
return stored ? JSON.parse(stored) : false;
});
- const [activeTab, setActiveTab] = useState<"participants" | "board" | "rosters" | "summary">("board");
+ const [activeTab, setActiveTab] = useState<"participants" | "board" | "rosters" | "summary">("participants");
const [mobileTab, setMobileTab] = useState<"available" | "queue" | "board" | "teams" | "controls">(
!userTeam && isCommissioner ? "board" : "available"
);
@@ -1509,13 +1509,15 @@ export default function DraftRoom() {
currentPick,
currentRound,
ownerMap,
+ teamTimers,
+ autodraftStatus,
seasonStatus: season.status,
draftPaused: isPaused,
onForceAutopick: isCommissioner ? handleForceAutopick : undefined,
onForceManualPickOpen: isCommissioner ? handleForceManualPickOpen : undefined,
onReplacePick: isCommissioner ? handleReplacePickOpen : undefined,
onRollbackToPick: isCommissioner && !isDraftComplete ? handleRollbackToPick : undefined,
- }), [draftSlots, draftGrid, currentPick, currentRound, ownerMap, season.status, isPaused, isCommissioner, handleForceAutopick, handleForceManualPickOpen, handleReplacePickOpen, handleRollbackToPick, isDraftComplete]);
+ }), [draftSlots, draftGrid, currentPick, currentRound, ownerMap, teamTimers, autodraftStatus, season.status, isPaused, isCommissioner, handleForceAutopick, handleForceManualPickOpen, handleReplacePickOpen, handleRollbackToPick, isDraftComplete]);
const availableParticipantsSectionProps = useMemo(() => ({
participants: filteredParticipants,
@@ -1738,7 +1740,7 @@ export default function DraftRoom() {
}
>
- Available Participants
+ Participants
Draft Board
Rosters
Summary
@@ -1852,19 +1854,19 @@ export default function DraftRoom() {
/>
)}
-
- {activeTab === "participants" && (
+
+
- )}
- {activeTab === "board" && (
+
+
- )}
- {activeTab === "rosters" && (
+
+
- )}
- {activeTab === "summary" && (
+
+
- )}
+
)}