'use client'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useRouter } from 'next/navigation'; import { BadgeCheck, Bell, Car, FileText, Fingerprint, Heart, KeyRound, PawPrint, ShieldCheck, Smartphone, UserRound } from 'lucide-react'; import { AddressQuickSection } from '@/components/addresses/address-quick-section'; import { DocumentFormDialog } from '@/components/documents/document-form-dialog'; import { ActionTile, SectionTitle } from '@/components/id/action-tile'; import { AdminBadge } from '@/components/id/admin-badge'; import { AvatarDisplay } from '@/components/id/avatar-upload'; import { useAuth } from '@/components/id/auth-provider'; import { IdShell } from '@/components/id/shell'; import { Button } from '@/components/ui/button'; import { useRequireAuth } from '@/hooks/use-require-auth'; import { type DocumentTypeCode, indexDocumentsByType } from '@/lib/document-catalog'; import { apiFetch, UserDocument } from '@/lib/api'; export default function HomePage() { const router = useRouter(); const { user, token, isPinLocked } = useAuth(); const { isReady } = useRequireAuth(); const userId = user?.id; const contactLine = [user?.phone, user?.username ?? user?.email].filter(Boolean).join(' · '); const [documents, setDocuments] = useState([]); const [activeDocumentType, setActiveDocumentType] = useState(null); const loadDocuments = useCallback(async () => { if (!userId || !token || isPinLocked) return; try { const response = await apiFetch<{ documents?: UserDocument[] }>(`/documents/users/${userId}`, {}, token); setDocuments(response.documents ?? []); } catch { // Фоновая ошибка не должна очищать уже показанные документы. } }, [isPinLocked, token, userId]); useEffect(() => { if (isReady && userId && !isPinLocked) void loadDocuments(); }, [isPinLocked, isReady, loadDocuments, userId]); const documentsByType = useMemo(() => indexDocumentsByType(documents), [documents]); function openDocument(type: DocumentTypeCode) { setActiveDocumentType(type); } if (!isReady) { return (
Загрузка профиля...
); } return (
{user ? ( ) : (
)}

{user?.displayName ?? 'Загрузка профиля...'}

{user ? : null}

{contactLine || 'Данные профиля загружаются'}

Защитите ваш аккаунт

Настройте PIN-код и способы восстановления

Защита аккаунта
router.push('/security')} /> router.push('/security')} /> router.push('/security')} /> router.push('/security')} /> router.push('/security')} />
Документы
router.push('/documents')} /> openDocument('PASSPORT_RF')} /> openDocument('FOREIGN_PASSPORT')} /> openDocument('DRIVER_LICENSE')} />
Семья
router.push('/family')} /> router.push('/family')} /> router.push('/family')} />
{activeDocumentType && user ? ( { if (!open) setActiveDocumentType(null); }} documentType={activeDocumentType} userId={user.id} token={token} existing={documentsByType.get(activeDocumentType) ?? null} onSaved={loadDocuments} /> ) : null} ); }