39 lines
1.4 KiB
Markdown
39 lines
1.4 KiB
Markdown
---
|
|
# nuzlocke-tracker-h205
|
|
title: Auth-aware navigation menu
|
|
status: completed
|
|
type: task
|
|
priority: normal
|
|
created_at: 2026-03-21T10:06:20Z
|
|
updated_at: 2026-03-21T10:22:34Z
|
|
parent: nuzlocke-tracker-ce4o
|
|
blocked_by:
|
|
- nuzlocke-tracker-5svj
|
|
---
|
|
|
|
Update the Layout component to show different nav links based on auth state and admin role.
|
|
|
|
## Checklist
|
|
|
|
- [x] Replace static \`navLinks\` array with dynamic links based on \`useAuth()\` state
|
|
- [x] **Logged out**: Home, Runs, Genlockes, Stats (no New Run, no Admin)
|
|
- [x] **Logged in (non-admin)**: New Run, My Runs, Genlockes, Stats
|
|
- [x] **Logged in (admin)**: New Run, My Runs, Genlockes, Stats, Admin
|
|
- [x] Update both desktop and mobile nav (they share the same \`navLinks\` array, so this should be automatic)
|
|
- [x] Verify menu updates reactively on login/logout
|
|
|
|
## Files to change
|
|
|
|
- \`frontend/src/components/Layout.tsx\` — make \`navLinks\` dynamic based on auth state
|
|
|
|
## Summary of Changes
|
|
|
|
- Removed static `navLinks` array from module scope
|
|
- Added dynamic `navLinks` computation inside `Layout` component using `useMemo`
|
|
- Navigation now depends on `user` and `isAdmin` from `useAuth()`:
|
|
- Logged out: Home, Runs, Genlockes, Stats
|
|
- Logged in (non-admin): New Run, My Runs, Genlockes, Stats
|
|
- Logged in (admin): New Run, My Runs, Genlockes, Stats, Admin
|
|
- Updated `isActive` function to handle Home route (`/`) correctly
|
|
- Both desktop and mobile nav automatically use the same dynamic `navLinks` array
|