"use client"; import { useState, useCallback } from "react"; import { FileUploadComponent } from "./components/FileUploadComponent"; import { EntityMappingTable } from "./components/EntityMappingTable"; import { ProgressBar } from "./components/ProgressBar"; import { useFileHandler } from "./components/FileHandler"; import { useAnonymization } from "./components/AnonymizationLogic"; import { useDownloadActions } from "./components/DownloadActions"; import { ResultPreviewComponent } from "./components/ResultPreviewComponent"; import { EntityMapping } from "./config/entityLabels"; // Importer l'interface unifiée // Supprimer l'interface locale EntityMapping (lignes 12-18) export default function Home() { const [sourceText, setSourceText] = useState(""); const [outputText, setOutputText] = useState(""); const [uploadedFile, setUploadedFile] = useState(null); const [error, setError] = useState(null); const [isLoadingFile, setIsLoadingFile] = useState(false); const [entityMappings, setEntityMappings] = useState([]); const [isExampleLoaded, setIsExampleLoaded] = useState(false); const progressSteps = ["Téléversement", "Prévisualisation", "Anonymisation"]; const getCurrentStep = () => { if (outputText) return 3; if (uploadedFile || (sourceText && sourceText.trim())) return 2; return 1; }; // Fonction pour recommencer (retourner à l'état initial) const handleRestart = () => { setSourceText(""); setOutputText(""); setUploadedFile(null); setError(null); setIsLoadingFile(false); setEntityMappings([]); setIsExampleLoaded(false); }; // Fonction pour mettre à jour les mappings depuis l'éditeur interactif const handleMappingsUpdate = useCallback( (updatedMappings: EntityMapping[]) => { setEntityMappings(updatedMappings); }, [] ); // Hooks personnalisés pour la logique métier const { handleFileChange } = useFileHandler({ setUploadedFile, setSourceText, setError, setIsLoadingFile, }); const { anonymizeData, isProcessing } = useAnonymization({ setOutputText, setError, setEntityMappings, }); const { copyToClipboard, downloadText } = useDownloadActions({ outputText, entityMappings, }); // Fonction wrapper pour appeler anonymizeData avec les bonnes données const handleAnonymize = () => { anonymizeData({ file: uploadedFile, text: sourceText }); }; return (
{/* Main Content */}
{/* Progress Bar */} {/* Upload Section */}
{/* Interactive Text Editor - Nouveau composant pour l'édition interactive */} {outputText && (
)} {/* Entity Mapping Table - Seulement si outputText existe */} {outputText && (
)} {/* Error Message - Version améliorée */} {error && (

{error.includes("scanné") ? "📄 PDF Scanné Détecté" : error.includes("HTTP") ? "🚨 Erreur de Traitement" : "⚠️ Erreur"}

{error.split("\n").map((line, index) => (
0 ? "mt-2" : ""}> {line.startsWith("💡") ? (
{line}
) : line.startsWith("-") ? (
{line}
) : ( line )}
))}
)}
); }