arm-core/web/src/layouts/Main.tsx
Andrey Epifancev 498450b763 feat(web): API-клиент с Bearer, dev-вход по email, загрузка /me
Токен хранится в sessionStorage (design D-9; без Redux): живёт до закрытия вкладки, все обращения к хранилищу в try/catch с запасным токеном в памяти.
apiFetch подставляет Bearer, на 401 сбрасывает токен и шлёт событие armka:unauthorized, ошибки разбирает по трём формам detail (строка / {code,message} / массив 422).
useMe не ходит в /me без токена и отбрасывает устаревшие ответы (флаг cancelled), AuthGate показывает вход, пока профиля нет.
Форма DevLogin вырезается из production-сборки по литералу process.env.NODE_ENV; через Config это не работает: process.env там заменён объектом REACT_APP_*.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
2026-10-05 00:23:56 +04:00

22 lines
508 B
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useCurrentUser } from '../auth/MeContext';
// Каркас: стартовый экран. Содержимое — по docs/context/10-user-journey.md.
export function Main() {
const me = useCurrentUser();
return (
<div
style={{
margin: 10,
padding: 16,
background: 'white',
borderRadius: 10,
height: 'calc(100% - 20px)',
}}>
<h3>АРМ КА</h3>
<p>{me.full_name}</p>
<p>Роли: {me.roles.length > 0 ? me.roles.join(', ') : 'нет'}</p>
</div>
);
}