Skip to content

feat: merge season selector into top nav#65

Merged
brandonpham13 merged 8 commits intomainfrom
feat/merge-nav-and-season-bar
May 9, 2026
Merged

feat: merge season selector into top nav#65
brandonpham13 merged 8 commits intomainfrom
feat/merge-nav-and-season-bar

Conversation

@brandonpham13
Copy link
Copy Markdown
Owner

Removes the visual clash between the AppShell nav and the dashboard's SeasonBar by collapsing them into a single bar styled like the existing season bar.

Changes

AppShell — adopts the SeasonBar style

  • Bar now uses the breadcrumb mono uppercase aesthetic with the serif italic "Huddle" wordmark.
  • League dropdown switches from the boxed <select> to the same unstyled mono breadcrumb style as the season dropdown.
  • Season dropdown moves up from DashboardPage into the nav (only renders when the selected league has multiple family seasons).
  • Right cluster keeps every original nav button (Leagues, Account, theme toggle, Sign out) and gains the claimed-team badge:
    • On sm+: avatar + "★ {team name}".
    • On mobile: avatar only, with title tooltip — leaves room for the existing buttons.
  • Hamburger / mobile drawer behavior from feat: mobile-friendly audit pass — drawer nav + responsive dashboard #63 is preserved.

DashboardPage

  • Drop the SeasonBar function and its invocation; nav handles it now.
  • Drop unused imports (useAppDispatch, setSelectedLeague, setSelectedYear, in-file Avatar).
  • Use the new shared Avatar component.
  • "Established / league name / week" masthead from the recent title-header improvements is preserved.

Avatar

  • Extracted into client/src/components/Avatar.tsx so both AppShell and DashboardPage can import it.

Test plan

  • Verify desktop: single nav bar, league + season dropdowns inline as breadcrumb, claimed-team badge visible on right.
  • Switch league via dropdown → state updates, season dropdown re-populates from the new league family.
  • Switch season via dropdown → dashboard re-renders for that season.
  • Mobile (~375px): hamburger + wordmark + truncated league dropdown fit; right side shows badge avatar + theme + Sign out.
  • Verify dashboard masthead still shows "Established {year}" + league name.
  • Light + dark mode look right.

🤖 Generated with Claude Code

- AppShell adopts the SeasonBar style (mono uppercase breadcrumb, serif
  italic wordmark) and absorbs the league + season selectors and claimed-
  team badge so the dashboard no longer renders a second nav-like bar.
- League dropdown now uses the same unstyled mono breadcrumb style as the
  season dropdown.
- Right cluster keeps original nav buttons (Leagues, Account, theme, Sign
  out) and gains the claimed-team badge (avatar always; name on sm+).
- Extract Avatar to a shared component so AppShell + DashboardPage can
  both use it.
- DashboardPage: drop the SeasonBar component and unused imports.
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
huddle Ready Ready Preview, Comment May 9, 2026 9:33pm

…s refresh

- AppShell: looked up selectedLeague in uniqueLeagues (deduped to newest
  per family), so selecting an older season produced a missing entry and
  hid both dropdowns. Look the selected league up in the full allLeagues
  list, then map to a family-representative entry by name for the league
  dropdown's value.
- store: persist selectedLeagueId + selectedYear to localStorage so the
  user's chosen league/season survives refresh instead of resetting to
  the latest season every load.
If a league was renamed between seasons, the name-based dedup in the
nav produced a separate entry per name and the league-rep lookup matched
by name. Switching to a past season under the old name then dropped out
of uniqueLeagues and hid the dropdown.

Walk the previousLeagueRef chain via buildFamilyRootMap so we keep one
entry per family (newest season's name as the label) and resolve the
selected entry by family root regardless of season or rename.
- Add useSortedRows hook for column-driven sort state.
- LeagueTable: each header column is now sortable. The leftmost "#"
  column shows the canonical W-L rank (precomputed once) regardless of
  the active sort, so it remains a stable identifier when re-sorting by
  PF/PA/etc.
- PowerRankings: data-driven columns. Renders one column per
  PowerRankingColumn from the server, supporting both score and rank
  display modes. Each column is sortable; rank-mode columns sort by
  numeric rank ascending under the hood.
- New SortHeader component for the dashboard's compact newspaper-styled
  grid headers.
@brandonpham13 brandonpham13 merged commit 0e8adc9 into main May 9, 2026
3 checks passed
@brandonpham13 brandonpham13 deleted the feat/merge-nav-and-season-bar branch May 9, 2026 22:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant