import { memo, useMemo } from "react"; import { DraftPickCell } from "~/components/draft/DraftPickCell"; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger, } from "~/components/ui/context-menu"; interface MiniDraftGridProps { draftSlots: Array<{ id: string; draftOrder: number; team: { id: string; name: string; logoUrl?: string | null; }; }>; draftGrid: Array< Array<{ pickNumber: number; round: number; pickInRound: number; teamId: string; pick?: { participant: { name: string; }; sport: { name: string; }; }; }> >; currentPick: number; currentRound: number; ownerMap?: Record; onForceAutopick?: (pickNumber: number, teamId: string) => void; onForceManualPickOpen?: (pickNumber: number, teamId: string) => void; onReplacePick?: (pickNumber: number, teamId: string) => void; onRollbackToPick?: (pickNumber: number) => void; } export const MiniDraftGrid = memo(function MiniDraftGrid({ draftSlots, draftGrid, currentPick, currentRound, ownerMap = {}, onForceAutopick, onForceManualPickOpen, onReplacePick, onRollbackToPick, }: MiniDraftGridProps) { const roundsToShow = useMemo(() => { if (currentRound <= 1) return [0, 1]; return [currentRound - 2, currentRound - 1]; }, [currentRound]); if (draftGrid.length === 0) return null; return (
{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; return (
R{round}
{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 ( ); })}
); })}
); });