import { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { X, CheckCircle, AlertCircle, Info, AlertTriangle } from 'lucide-react'; import { errorMessages } from '@/utils/errorCodes'; const typeStyles = { success: { icon: , bg: 'bg-green-300', }, error: { icon: , bg: 'bg-red-300', }, info: { icon: , bg: 'bg-blue-300', }, warning: { icon: , bg: 'bg-yellow-300', }, }; export default function FlashNotification({ displayPeriod = 5000, title, message, type = 'info', errorCode, onClose, }) { const [isVisible, setIsVisible] = useState(true); useEffect(() => { setIsVisible(true); }, [message, type, errorCode, onClose]); useEffect(() => { if (type !== 'error') { const timer = setTimeout(() => { setIsVisible(false); // Déclenche la disparition setTimeout(onClose, 300); // Appelle onClose après l'animation }, displayPeriod); return () => clearTimeout(timer); } // Pour les erreurs, pas de timeout : la notification reste affichée }, [onClose, displayPeriod, type]); if (!message || !isVisible) return null; const { icon, bg } = typeStyles[type] || typeStyles.info; return ( {/* Rectangle gauche avec l'icône */} {icon} {/* Zone de texte */} {title} {message} {type === 'error' && errorCode && ( Code : {errorCode} )} {/* Bouton de fermeture */} setIsVisible(false)} className="text-gray-500 hover:text-gray-700 focus:outline-none p-2" > ); }
{title}
{message}