import { CloudUpload as CloudUploadIcon } from '@mui/icons-material'; import { Alert, Box, Button, CircularProgress } from '@mui/material'; import { AxiosError } from 'axios'; import React, { useState } from 'react'; import { documentApi } from '../../api/client'; import { ApiError } from '../../types/api'; import { DocumentType } from '../../types/document'; interface DocumentUploadProps { onUploadSuccess: (documentId: string) => void; documentType: DocumentType; label: string; } export const DocumentUpload = ({ onUploadSuccess, documentType, label }: DocumentUploadProps) => { const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(false); const handleFileChange = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) return; setLoading(true); setError(''); setSuccess(false); try { const response = await documentApi.upload(file, documentType); console.log('Document upload response:', response.data); const documentId = response.data.data.id; console.log('Extracted document ID:', documentId); onUploadSuccess(documentId); setSuccess(true); } catch (err) { if (err instanceof AxiosError && err.response?.data) { const apiError = err.response.data as ApiError; const messages = Array.isArray(apiError.message) ? apiError.message.map((m) => `${m.field}: ${m.message}`).join('\n') : apiError.message; setError(messages); } else { setError(err instanceof Error ? err.message : 'Failed to upload document'); } } finally { setLoading(false); } }; const now = new Date(); return ( {error && ( {error} )} {success && ( Document uploaded successfully )} ); };