Show bracket on tennis Grand Slam major event pages #113

Merged
chrisp merged 2 commits from feat/tennis-major-bracket-display into main 2026-06-28 04:35:41 +00:00
Owner

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

## 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)
chrisp added 2 commits 2026-06-27 15:50:18 +00:00
Tennis majors already store the full 128-player draw in playoff_matches
(synced from Wikipedia) and the PlayoffBracket component + tennis_128
template already exist, but the public league event page only rendered a
bracket for eventType === "playoff_game". Tennis majors are major_tournament
events, so they fell through to the QP-only results table and the draw was
never shown.

Add a kind: "tennis" loader branch (gated on isBracketMajor + major_tournament)
that loads the bracket (primary-keyed for shared majors) plus this window's QP
results, and render both via the existing PlayoffBracket and a shared
QpResultsTable extracted from the results block.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sort In Contention by ownership then name
All checks were successful
🚀 Deploy / 🧪 Test (pull_request) Successful in 3m13s
🚀 Deploy / ʦ🔍 Typecheck & Lint (pull_request) Successful in 1m30s
🚀 Deploy / 🐳 Build (pull_request) Has been skipped
🚀 Deploy / 🚀 Deploy (pull_request) Has been skipped
b8165cef3e
In the bracket "In Contention" table, list players drafted by a manager
first, then alphabetically by player name.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chrisp merged commit b8c21d227b into main 2026-06-28 04:35:41 +00:00
chrisp deleted branch feat/tennis-major-bracket-display 2026-06-28 04:35:41 +00:00
Sign in to join this conversation.
No description provided.