brackt/app/components/league
Chris Parsons 973e56142f
Add pre-draft queue builder so users can rank players before draft order is set (#435)
* Add pre-draft queue builder so users can rank players before draft order is set

Creates a new /leagues/:leagueId/draft-queue/:seasonId page that lets team
owners browse participants by VORP and build their autopick queue during the
pre_draft phase. The queue uses the existing draftQueue table so it carries
seamlessly into the live draft room.

Adds a "Build Your Queue" button to DraftInfoCard that shows only when draft
order has not been set yet (replaced by "Enter Draft Room" once it is).

https://claude.ai/code/session_01Gu2DkTWL3nv74EMuGPpxhG

* Improve pre-draft rankings UX: mobile tabs, add/remove toggle, rename

On mobile, show tabs ("All Players" / "My Rankings") instead of a stacked
layout that buries the queue below a long participant list. On the All Players
list, the button now toggles between Add and Remove so users never need to
switch tabs just to drop someone. Desktop keeps the side-by-side panel layout.

Also renames the feature throughout from "queue builder" to "pre-draft rankings"
and the DraftInfoCard button to "Set Pre-Draft Rankings".

https://claude.ai/code/session_01Gu2DkTWL3nv74EMuGPpxhG

* Fix all code review issues in pre-draft rankings feature

- Replace useFetcher with direct fetch() for add/remove/reorder so rapid
  clicks no longer cancel in-flight requests
- Add toast.error() on all failure paths (matching live draft room pattern)
  and revert optimistic state when operations fail
- Add useRef to give handleReorder a stable reference without a localQueue
  closure dependency, preventing unnecessary QueueSection re-renders
- Convert allPlayersPanel and rankingsPanel to useMemo
- Remove leagueId from loader return; read from useParams() instead
- Extract queueBuilderHref to a variable in the league home component
- Add emptyMessage prop to QueueSection with a correct message for the
  pre-draft context ("Add players from All Players...")
- Add draft-queue-access.test.ts covering all loader access control paths:
  401/403 errors, status-based redirects, and redirect URL correctness

https://claude.ai/code/session_01Gu2DkTWL3nv74EMuGPpxhG

* Fix lint: use !== null check instead of != null

oxlint enforces eqeqeq; replace != null with !== null && !== undefined.

https://claude.ai/code/session_01Gu2DkTWL3nv74EMuGPpxhG

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-15 17:26:36 -07:00
..
__tests__ Improve draft info panel formatting (#428) 2026-05-14 23:42:04 -07:00
settings Simplify sports season display and add local timezone hints (#434) 2026-05-15 16:04:07 -07:00
CommissionersPanel.stories.tsx Migrate auth from Clerk to BetterAuth (#354) 2026-04-29 10:03:50 -07:00
CommissionersPanel.tsx Migrate auth from Clerk to BetterAuth (#354) 2026-04-29 10:03:50 -07:00
CreateLeagueCard.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
CreateLeagueCard.tsx New design (#309) 2026-04-23 13:14:55 -07:00
DraftInfoCard.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
DraftInfoCard.tsx Add pre-draft queue builder so users can rank players before draft order is set (#435) 2026-05-15 17:26:36 -07:00
DraftSpeedPicker.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
DraftSpeedPicker.tsx Extract chess clock presets to shared constant (#432) 2026-05-15 14:02:49 -07:00
LeagueAvatar.stories.tsx Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
LeagueAvatar.tsx Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
LeagueRow.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
LeagueRow.tsx Show commish-only leagues in a separate dashboard section, fixes #336 (#412) 2026-05-11 23:57:04 -07:00
MyLeaguesCard.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
MyLeaguesCard.tsx Show commish-only leagues in a separate dashboard section, fixes #336 (#412) 2026-05-11 23:57:04 -07:00
OvernightPauseSettings.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
OvernightPauseSettings.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
ReviewSection.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
ReviewSection.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
ScoringPresetPicker.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
ScoringPresetPicker.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
SportIcon.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
SportIcon.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
SportsSeasonsSummary.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
SportsSeasonsSummary.tsx Use sport icons in league views (#394) 2026-05-07 23:06:49 -07:00
StandingsPreview.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
StandingsPreview.tsx Fix avatar display bugs in navbar, standings, and draft views (#387) 2026-05-06 17:03:34 -07:00
StatHelpers.tsx Add opencode oxlint plugin and UI refinements (#323) 2026-04-24 11:11:20 -07:00
StepperInput.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
StepperInput.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
TeamsPanel.stories.tsx New design (#309) 2026-04-23 13:14:55 -07:00
TeamsPanel.tsx Add Storybook stories for new components from staged changes (#321) 2026-04-23 22:09:25 -07:00
TimerModeSelector.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
TimerModeSelector.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
TimezonePromptBanner.tsx Add overnight pause for draft timers (#335) 2026-04-26 22:31:52 -07:00
TimezoneSelect.tsx Add overnight pause for draft timers (#335) 2026-04-26 22:31:52 -07:00
WizardAuthForm.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
WizardAuthForm.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
WizardStepper.stories.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00
WizardStepper.tsx Extract reusable league wizard components; wire settings page (#350) 2026-04-28 22:24:13 -07:00