feat: migrate from useAuth to AuthContext for centralized auth state

• Полная миграция 64 компонентов с useAuth на AuthContext
• Исправлена race condition в SMS регистрации
• Улучшена SSR совместимость с таймаутами
• Удалена дублирующая система регистрации
• Обновлена документация архитектуры аутентификации

Технические изменения:
- AuthContext.tsx: централизованная система состояния
- auth-flow.tsx: убрана агрессивная логика logout
- confirmation-step.tsx: исправлена передача телефона
- page.tsx: добавлена синхронизация состояния
- 64 файла: миграция useAuth → useAuthContext

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-09-19 17:21:52 +03:00
parent d19530a985
commit 24a6ff74b5
91 changed files with 3626 additions and 7296 deletions

View File

@ -155,11 +155,15 @@ const CardContent = React.forwardRef<HTMLDivElement, CardProps>(
## 🎮 HOOKS ПАТТЕРНЫ
### useAuth - Централизованная авторизация
### AuthContext - Централизованная авторизация ✅ НОВАЯ АРХИТЕКТУРА
**⚡ МИГРАЦИЯ ЗАВЕРШЕНА (19.09.2025): useAuth → AuthContext**
```typescript
// src/hooks/useAuth.ts
export const useAuth = (): UseAuthReturn => {
// src/contexts/AuthContext.tsx - НОВАЯ АРХИТЕКТУРА
export const AuthContext = createContext<AuthContextType | undefined>(undefined)
export const AuthProvider = ({ children }: { children: ReactNode }) => {
const [user, setUser] = useState<User | null>(null)
const [isAuthenticated, setIsAuthenticated] = useState(() => !!getAuthToken())
const [isLoading, setIsLoading] = useState(false)
@ -230,12 +234,32 @@ export const useAuth = (): UseAuthReturn => {
}
```
**Ключевые паттерны useAuth:**
// Использование в компонентах:
export const useAuthContext = (): AuthContextType => {
const context = useContext(AuthContext)
if (context === undefined) {
throw new Error('useAuthContext must be used within an AuthProvider')
}
return context
}
```
- **Lazy initialization** - проверка токена при инициализации
- **Error handling** - обработка GraphQL ошибок
- **Token persistence** - автоматическое сохранение токенов
- **Apollo integration** - синхронизация с GraphQL клиентом
**✅ Ключевые преимущества AuthContext (vs старый useAuth):**
- **Централизованное состояние** - единое состояние для всего приложения
- **Устранение изоляции** - нет дублирования состояния между компонентами
- **React Context API** - стандартный React паттерн
- **SSR совместимость** - корректная работа с Next.js
- **Race conditions fix** - исправлены проблемы с синхронизацией
**📋 Паттерн использования:**
```typescript
// ✅ Новый способ (все компоненты)
const { user, isAuthenticated, logout } = useAuthContext()
// ❌ Старый способ (удален после миграции)
// const { user, isAuthenticated, logout } = useAuth()
```
### useSidebar - Управление состоянием сайдбара
@ -268,7 +292,7 @@ export const useSidebar = () => {
```typescript
// src/components/dashboard/sidebar.tsx
export function Sidebar({ isRootInstance = false }: { isRootInstance?: boolean }) {
const { user, logout } = useAuth()
const { user, logout } = useAuthContext()
const { isCollapsed, toggleSidebar } = useSidebar()
const pathname = usePathname()
@ -375,7 +399,7 @@ export function Sidebar({ isRootInstance = false }: { isRootInstance?: boolean }
```typescript
// src/components/messenger/messenger-chat.tsx
export function MessengerChat({ counterparty, onMessagesRead }: MessengerChatProps) {
const { user } = useAuth()
const { user } = useAuthContext()
const [message, setMessage] = useState('')
const messagesEndRef = useRef<HTMLDivElement>(null)