import { Upload, FileText, AlertTriangle } from "lucide-react"; import { SampleTextComponent } from "./SampleTextComponent"; import { SupportedDataTypes } from "./SupportedDataTypes"; import { AnonymizationInterface } from "./AnonymizationInterface"; interface FileUploadComponentProps { uploadedFile: File | null; handleFileChange: (e: React.ChangeEvent) => void; sourceText: string; setSourceText: (text: string) => void; setUploadedFile: (file: File | null) => void; setFileContent: (content: string) => void; onAnonymize?: () => void; isProcessing?: boolean; canAnonymize?: boolean; isLoadingFile?: boolean; onRestart?: () => void; outputText?: string; } export const FileUploadComponent = ({ uploadedFile, handleFileChange, sourceText, setSourceText, setUploadedFile, setFileContent, onAnonymize, isProcessing = false, canAnonymize = false, isLoadingFile = false, onRestart, outputText, }: FileUploadComponentProps) => { // Si un fichier est uploadé ou qu'il y a du texte d'exemple, on affiche le preview if (uploadedFile || (sourceText && sourceText.trim())) { return (
{/* Preview du document avec en-tête simple */}
{uploadedFile ? (

{uploadedFile.name} •{" "} {(uploadedFile.size / 1024).toFixed(1)} KB

) : (

Demo - Exemple de texte

)}
{/* Zone de texte avec limite de hauteur et scroll */}
{isLoadingFile ? (
Chargement du fichier en cours...
) : (
                  {sourceText || "Aucun contenu à afficher"}
                
)}
{/* Disclaimer déplacé en dessous du texte */}

Cet outil IA peut ne pas détecter toutes les informations sensibles. Vérifiez le résultat avant de le partager.

{/* Boutons d'action - Responsive mobile */} {canAnonymize && !isLoadingFile && (
{/* Bouton Anonymiser en premier */} {onAnonymize && ( )} {/* Bouton Recommencer */} {onRestart && ( )}
)} {/* Affichage conditionnel : Interface d'anonymisation OU Types de données supportées */} {isProcessing || outputText ? ( ) : ( )}
); } // Si pas de fichier ni de texte, on affiche la zone de drop return (
{/* Drop Zone - Responsive */}
{/* Zone cliquable pour le glisser-déposer */} {/* Démarcation avec trait horizontal - NON CLIQUABLE */}
ou
{/* Bouton d'exemple - NON CLIQUABLE pour le drag & drop */}
{/* Supported Data Types */}
); };