'use client'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { FileText } from 'lucide-react'; import { DocumentFormDialog } from '@/components/documents/document-form-dialog'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { getDocumentType, indexDocumentsByType, type DocumentTypeCode } from '@/lib/document-catalog'; import { apiFetch, UserDocument } from '@/lib/api'; import { cn } from '@/lib/utils'; export function UserDocumentsDialog({ open, onOpenChange, targetUserId, targetUserName, token }: { open: boolean; onOpenChange: (open: boolean) => void; targetUserId: string; targetUserName: string; token: string | null; }) { const [documents, setDocuments] = useState([]); const [loading, setLoading] = useState(false); const [activeType, setActiveType] = useState(null); const [selectedDocument, setSelectedDocument] = useState(null); const loadDocuments = useCallback(async () => { if (!token || !targetUserId) return; setLoading(true); try { const response = await apiFetch<{ documents?: UserDocument[] }>(`/documents/users/${targetUserId}`, {}, token); setDocuments(response.documents ?? []); } finally { setLoading(false); } }, [targetUserId, token]); useEffect(() => { if (open) void loadDocuments(); }, [loadDocuments, open]); const documentsByType = useMemo(() => indexDocumentsByType(documents), [documents]); function openDocument(type: DocumentTypeCode) { setSelectedDocument(documentsByType.get(type) ?? null); setActiveType(type); } return ( <> Документы пользователя

{targetUserName}

{loading ?

Загрузка документов...

: null} {!loading && documents.length === 0 ? (

У пользователя нет сохранённых документов

) : null}
{documents.map((document) => { const config = getDocumentType(document.type); if (!config) return null; const Icon = config.icon; return ( ); })}
{activeType ? ( { if (!nextOpen) { setActiveType(null); setSelectedDocument(null); } }} documentType={activeType} userId={targetUserId} token={token} existing={selectedDocument} onSaved={loadDocuments} readOnly /> ) : null} ); }