import { CheckCircle } from "lucide-react"; interface AnonymizationInterfaceProps { isProcessing: boolean; outputText?: string; sourceText?: string; } export const AnonymizationInterface = ({ isProcessing, outputText, sourceText, }: AnonymizationInterfaceProps) => { // Fonction pour détecter quels types de données ont été anonymisés const getAnonymizedDataTypes = () => { if (!outputText || !sourceText) return new Set(); const anonymizedTypes = new Set(); // ✅ NOUVEAUX PATTERNS PRESIDIO // Noms (PERSON) if (outputText.includes("")) { anonymizedTypes.add("Prénoms"); anonymizedTypes.add("Noms de famille"); anonymizedTypes.add("Noms complets"); } // Emails (EMAIL_ADDRESS) if (outputText.includes("")) { anonymizedTypes.add("Adresses e-mail"); } // Téléphones (PHONE_NUMBER) if (outputText.includes("")) { anonymizedTypes.add("Numéros de téléphone"); } // Adresses (LOCATION) if (outputText.includes("")) { anonymizedTypes.add("Adresses"); } // IBAN (IBAN) if (outputText.includes("")) { anonymizedTypes.add("Numéros d'ID"); // Ou créer une nouvelle catégorie "IBAN" } // Organisations (ORGANIZATION) if (outputText.includes("")) { anonymizedTypes.add("Noms de domaine"); // Ou adapter selon vos besoins } // Dates personnalisées (CUSTOM_DATE) if (outputText.includes("")) { anonymizedTypes.add("Dates"); } // Numéros d'entreprise belges (BE_ENTERPRISE_NUMBER) if (outputText.includes("")) { anonymizedTypes.add("Numéros d'ID"); } // ✅ ANCIENS PATTERNS (pour compatibilité) // Noms (anciens patterns [Nom1], [Nom2]...) if (outputText.includes("[Nom1]") || outputText.includes("[Nom")) { anonymizedTypes.add("Prénoms"); anonymizedTypes.add("Noms de famille"); anonymizedTypes.add("Noms complets"); } // Emails (anciens patterns) if (outputText.includes("[Email1]") || outputText.includes("[Email")) { anonymizedTypes.add("Adresses e-mail"); } // Téléphones (anciens patterns) if ( outputText.includes("[Téléphone1]") || outputText.includes("[Téléphone") ) { anonymizedTypes.add("Numéros de téléphone"); } // Adresses (anciens patterns) if (outputText.includes("[Adresse1]") || outputText.includes("[Adresse")) { anonymizedTypes.add("Adresses"); } // Numéros d'ID / Sécurité sociale (anciens patterns) if ( outputText.includes("[NuméroSS1]") || outputText.includes("[NuméroSS") || outputText.includes("[ID") ) { anonymizedTypes.add("Numéros d'ID"); } // Valeurs monétaires if (outputText.includes("[Montant") || /\[\d+[€$]\]/.test(outputText)) { anonymizedTypes.add("Valeurs monétaires"); } // Noms de domaine if (outputText.includes("[Domaine") || /\[.*\.com\]/.test(outputText)) { anonymizedTypes.add("Noms de domaine"); } // Valeurs numériques if ( /\[\d+\]/.test(outputText) && !outputText.includes("[Téléphone") && !outputText.includes("[Montant") ) { anonymizedTypes.add("Valeurs numériques"); } // Texte personnalisé (si du texte a été modifié mais pas avec les patterns spécifiques) if (sourceText !== outputText && anonymizedTypes.size === 0) { anonymizedTypes.add("Texte personnalisé"); } return anonymizedTypes; }; // Structure exacte de SupportedDataTypes (récupérée dynamiquement) const supportedDataStructure = [ { items: ["Prénoms", "Numéros de téléphone", "Noms de domaine"], }, { items: ["Noms de famille", "Adresses", "Dates"], }, { items: ["Noms complets", "Numéros d'ID", "Valeurs numériques"], }, { items: ["Adresses e-mail", "Valeurs monétaires", "Texte personnalisé"], }, ]; if (isProcessing) { return (

Anonymisation en cours...

Analyse du contenu
Détection des données sensibles
Application de l'anonymisation
); } if (outputText) { const anonymizedTypes = getAnonymizedDataTypes(); return (

Anonymisation terminée avec succès

{supportedDataStructure.map((column, columnIndex) => (
{column.items.map((item, itemIndex) => { const isAnonymized = anonymizedTypes.has(item); return ( {isAnonymized ? "✓" : "•"} {item} ); })}
))}
); } return null; };