'use client'; import { useEffect, useState } from 'react'; import { CheckCircle, AlertCircle, X } from 'lucide-react'; export type NotificationType = 'success' | 'error' | 'info'; interface NotificationProps { type: NotificationType; message: string; duration?: number; onClose?: () => void; } export function Notification({ type, message, duration = 5000, // Default duration of 5 seconds onClose }: NotificationProps) { const [isVisible, setIsVisible] = useState(true); useEffect(() => { if (duration > 0) { const timer = setTimeout(() => { setIsVisible(false); if (onClose) onClose(); }, duration); return () => clearTimeout(timer); } }, [duration, onClose]); const handleClose = () => { setIsVisible(false); if (onClose) onClose(); }; if (!isVisible) return null; const getIcon = () => { switch (type) { case 'success': return ; case 'error': return ; case 'info': return ; default: return null; } }; const getContainerClasses = () => { const baseClasses = 'fixed top-4 right-4 z-50 flex items-center gap-3 rounded-lg p-4 shadow-md max-w-sm'; switch (type) { case 'success': return `${baseClasses} bg-green-50 text-green-800 border border-green-200`; case 'error': return `${baseClasses} bg-red-50 text-red-800 border border-red-200`; case 'info': return `${baseClasses} bg-blue-50 text-blue-800 border border-blue-200`; default: return baseClasses; } }; return (
{getIcon()}
{message}
); }