"use client"; import { useState } from "react"; import { FileUploadComponent } from "./components/FileUploadComponent"; import { ResultPreviewComponent } from "./components/ResultPreviewComponent"; 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 { highlightEntities } from "./utils/highlightEntities"; interface EntityMapping { originalValue: string; anonymizedValue: string; entityType: string; startIndex: number; endIndex: number; } export default function Home() { const [sourceText, setSourceText] = useState(""); const [outputText, setOutputText] = useState(""); const [uploadedFile, setUploadedFile] = useState(null); const [fileContent, setFileContent] = useState(""); const [error, setError] = useState(null); const [isLoadingFile, setIsLoadingFile] = useState(false); const [entityMappings, setEntityMappings] = useState([]); 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); setFileContent(""); setError(null); setIsLoadingFile(false); setEntityMappings([]); }; // Hooks personnalisés pour la logique métier const { handleFileChange } = useFileHandler({ setUploadedFile, setSourceText, setFileContent, setError, setIsLoadingFile, // Passer le setter }); const { anonymizeData, isProcessing } = useAnonymization({ sourceText, fileContent, uploadedFile, setOutputText, setError, setEntityMappings, }); const { copyToClipboard, downloadText } = useDownloadActions({ outputText }); return (
{/* Header */}

OUTIL D'ANONYMISATION DE DONNÉES

Protégez vos informations sensibles en quelques clics

{/* Main Content */}
{/* Progress Bar */} {/* Upload Section */}
{/* Result Preview */} {outputText && (
)} {/* Entity Mapping Table */} {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.substring(1).trim()}
) : (
{line}
)}
))}
)}
); }