feat: merge season selector into top nav#65
Merged
brandonpham13 merged 8 commits intomainfrom May 9, 2026
Merged
Conversation
- 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.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Removes the visual clash between the AppShell nav and the dashboard's
SeasonBarby collapsing them into a single bar styled like the existing season bar.Changes
AppShell— adopts the SeasonBar style<select>to the same unstyled mono breadcrumb style as the season dropdown.DashboardPageinto the nav (only renders when the selected league has multiple family seasons).sm+: avatar + "★ {team name}".titletooltip — leaves room for the existing buttons.DashboardPageSeasonBarfunction and its invocation; nav handles it now.useAppDispatch,setSelectedLeague,setSelectedYear, in-fileAvatar).Avatarcomponent.Avatarclient/src/components/Avatar.tsxso bothAppShellandDashboardPagecan import it.Test plan
🤖 Generated with Claude Code