import { useCallback, useState } from 'react' import { useDropzone } from 'react-dropzone' import { Box, Typography, Paper, CircularProgress, Alert, Button, Chip, Grid } from '@mui/material' import { CloudUpload, CheckCircle, Error, HourglassEmpty, Visibility, } from '@mui/icons-material' import { useAppDispatch, useAppSelector } from '../store' import { uploadDocument } from '../store/documentSlice' import { Layout } from '../components/Layout' import { FilePreview } from '../components/FilePreview' import type { Document } from '../types' export default function UploadView() { const dispatch = useAppDispatch() const { documents, error } = useAppSelector((state) => state.document) const [previewDocument, setPreviewDocument] = useState(null) const onDrop = useCallback( (acceptedFiles: File[]) => { acceptedFiles.forEach((file) => { dispatch(uploadDocument(file)) }) }, [dispatch] ) const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, accept: { 'application/pdf': ['.pdf'], 'image/*': ['.png', '.jpg', '.jpeg', '.tiff'], 'text/plain': ['.txt'], 'text/markdown': ['.md'], 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'], }, multiple: true, }) const getStatusIcon = (status: string) => { switch (status) { case 'completed': return case 'error': return case 'processing': return default: return } } const getStatusColor = (status: string) => { switch (status) { case 'completed': return 'success' case 'error': return 'error' case 'processing': return 'warning' default: return 'default' } } return ( Téléversement de documents {isDragActive ? 'Déposez les fichiers ici...' : 'Glissez-déposez vos documents ou cliquez pour sélectionner'} Formats acceptés: PDF, PNG, JPG, JPEG, TIFF, TXT, MD, DOCX {error && ( {error} )} {documents.length > 0 && ( Documents téléversés ({documents.length}) {documents.map((doc, index) => ( {getStatusIcon(doc.status)} {doc.name} ))} )} {/* Aperçu du document */} {previewDocument && ( setPreviewDocument(null)} /> )} ) }