Section navigation only changes the :section path param, but the loader
returns the same user/draft-status/linked-account payload for every
section. By default React Router re-runs the loader (3 DB queries) on
each tab switch. Add shouldRevalidate to skip revalidation when only the
section changes, while still refreshing after mutations.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jt8Hhsio4bHGMaDZy7ftBs
Each section of the user settings page (Profile, Account, Notifications,
API Access, Data & Privacy) is now a real, linkable path
(/settings/profile, /settings/account, etc.) instead of local toggle
state, so sections can be bookmarked, shared, opened in a new tab, and
reached via the browser back/forward buttons.
- Route now matches an optional segment (settings/:section?), keeping the
single route so the shared loader/action and form submissions are
unchanged. An unknown section redirects back to /settings.
- The shared settings nav components render proper <Link>s when given a
buildHref/backHref, and keep their button/onClick behaviour for the
league settings page (which has unsaved-changes guards).
- The settings page derives the active section and mobile grid/section
view from the URL param instead of useState.
- Notifications "Account settings" link and the Discord OAuth callback
now point at /settings/account.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jt8Hhsio4bHGMaDZy7ftBs