gendesign/tradein-mvp/frontend
Light1YT 358824c284 feat(auth): UserMenu — avatar + dropdown + basic_auth logout
Личный кабинет в правом верхнем углу top-bar (gendsgn.ru + /trade-in/).

Компонент:
- Avatar 32×32 (первая буква username в круге, `var(--accent-soft)` фон,
  `var(--accent)` text)
- Dropdown по клику: username, role badge («Админ» / «Пилот»),
  кнопка «Выйти» (text-only, `var(--danger)`)
- Закрытие по Escape, click-outside; focus возвращается на avatar
- `aria-label="Личный кабинет"`, `role="menu"`, `role="menuitem"`

Logout flow (basic_auth quirk):
1. Fetch `/api/v1/me` (через `API_BASE_URL` чтобы single source of truth
   с `apiFetchWithStatus`) с явно invalid Basic creds `logout:logout`
   → 401 от Caddy → браузер очищает cached basic_auth для origin
2. `window.location.href = "/"` — hard reload, новый basic_auth prompt

Integration:
- Main `frontend/`: `<UserMenu />` в `<TopNav rightSlot>`. Pricing CTA
  (`PilotRequestModal` trigger) на странице остался — не дублировался
  в TopNav.
- Tradein `frontend/`: `<UserMenu />` в конце `.top-nav` в `Topbar.tsx`
  (после tabs). MIRROR с inline LogOut SVG (нет lucide-react dep) +
  `API_BASE_URL` import для logout fetch (consistency с rest of tradein).

Manual smoke план (post-deploy):
- Safari incognito → admintest → авitar «A» + role «Админ»
- Click «Выйти» → basic_auth prompt появляется снова
- Same в Chrome / Firefox (cross-browser logout reliability см. PR review)

Code-reviewer LGTM (1 critical fixed inline — tradein logout fetch
теперь использует `API_BASE_URL` вместо `process.env.NEXT_PUBLIC_BASE_PATH`).
2026-05-26 15:48:26 +05:00
..
public fix(tradein): commit empty frontend/public via .gitkeep 2026-05-21 00:59:13 +03:00
src feat(auth): UserMenu — avatar + dropdown + basic_auth logout 2026-05-26 15:48:26 +05:00
.dockerignore feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
Dockerfile fix(tradein): HOSTNAME=0.0.0.0 + NEXT_PUBLIC_API_BASE_URL build-arg 2026-05-21 10:21:32 +03:00
next.config.ts fix(tradein): убрать basePath redirect-loop 2026-05-21 01:05:49 +03:00
package.json feat(tradein): house analytics section (chart + KPI + sold list) (#546) 2026-05-24 18:09:45 +00:00
pnpm-lock.yaml feat(tradein): house analytics section (chart + KPI + sold list) (#546) 2026-05-24 18:09:45 +00:00
tsconfig.json feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00