brackt/app/components
chrisp b8c21d227b
All checks were successful
🚀 Deploy / 🧪 Test (push) Successful in 3m19s
🚀 Deploy / ʦ🔍 Typecheck & Lint (push) Successful in 1m23s
🚀 Deploy / 🐳 Build (push) Successful in 1m11s
🚀 Deploy / 🚀 Deploy (push) Successful in 10s
Show bracket on tennis Grand Slam major event pages (#113)
## What

Tennis Grand Slam majors already store the full 128-player draw in `playoff_matches` (synced from Wikipedia), and the `PlayoffBracket` component + `tennis_128` template already exist — but users couldn't see any of it. The public league event page only rendered a bracket for `eventType === "playoff_game"`, while tennis majors are `major_tournament` events, so they fell through to the QP-only results table.

## Change

- New `kind: "tennis"` branch in the event loader, gated on `isBracketMajor(simulatorType) && eventType === "major_tournament"`. Loads the bracket (primary-keyed for shared majors, via the existing read-only-sibling ownership remap) plus this window's local QP results.
- The event page renders the full draw via the existing `PlayoffBracket`, followed by the QP results table.
- Extracted the duplicated results-table markup into a shared `QpResultsTable` used by both the `tennis` and `results` branches.
- "In Contention" table now sorts manager-drafted players first, then alphabetically by name.

CS2 majors (handled earlier) and golf (`isBracketMajor` false) are unaffected.

## Verification

- `npm run typecheck` — clean
- `npm run test:run` — 2533 passed
- `oxlint` — clean

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Chris Parsons <chrisparsons1127@gmail.com>
Reviewed-on: #113
2026-06-28 04:35:40 +00:00
..
__tests__ Remove flaky context menu click tests (#81) 2026-06-10 05:59:49 +00:00
draft Fix snake draft Discord pick numbering and small UX tweaks (#2) 2026-05-22 04:18:11 +00:00
events claude/beautiful-hawking-a72ilq (#92) 2026-06-16 14:11:51 +00:00
league Add projections to full standings; clean up change indicators 2026-06-21 11:56:15 -07:00
marketing Add public sports overview page (#451) 2026-05-19 23:02:58 -07:00
scoring Show bracket on tennis Grand Slam major event pages (#113) 2026-06-28 04:35:40 +00:00
sport-season claude/practical-newton-4v041g (#98) 2026-06-18 02:33:05 +00:00
sports claude/funny-maxwell-vcyb19 (#91) 2026-06-15 22:05:25 +00:00
standings claude/sweet-carson-46j5k6 (#100) 2026-06-19 06:15:32 +00:00
ui Add draft email notifications feature (#459) 2026-05-20 15:35:43 -07:00
user/settings Add draft email notifications feature (#459) 2026-05-20 15:35:43 -07:00
AutodraftSettings.tsx fix: resolve all 48 WCAG 2.2 AA accessibility issues (#439) 2026-05-17 20:11:38 -07:00
BatchResultEntry.tsx Canonical tournament layer: 2026-05-01 21:04:48 -07:00
DraftGrid.tsx Fix mobile spacing for draft board and dashboard layout (#13, #329) (#404) 2026-05-10 19:51:34 -07:00
DraftSidebar.tsx New design (#309) 2026-04-23 13:14:55 -07:00
navbar.tsx Add public sports overview page (#451) 2026-05-19 23:02:58 -07:00
NavigationProgress.tsx
NotificationSettings.tsx Add draft email notifications feature (#459) 2026-05-20 15:35:43 -07:00
ParticipantSelector.tsx
SportIcon.tsx Add Cloudinary sports icon uploads (#393) 2026-05-07 16:07:34 -07:00
StandingsTable.tsx fix: resolve all 48 WCAG 2.2 AA accessibility issues (#439) 2026-05-17 20:11:38 -07:00
TeamAvatar.stories.tsx Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
TeamAvatar.tsx Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
UserMenu.tsx fix: resolve all 48 WCAG 2.2 AA accessibility issues (#439) 2026-05-17 20:11:38 -07:00