'use client'; import { useEffect, useState } from 'react'; import { Toast, setToastListener } from '@/app/lib/toast'; export default function ToastContainer() { const [toasts, setToasts] = useState([]); useEffect(() => { setToastListener((toast: Toast) => { setToasts((prev) => [...prev, toast]); if (toast.duration && toast.duration > 0) { const timer = setTimeout(() => { setToasts((prev) => prev.filter((t) => t.id !== toast.id)); }, toast.duration); return () => clearTimeout(timer); } }); }, []); const removeToast = (id: string) => { setToasts((prev) => prev.filter((t) => t.id !== id)); }; const getToastStyles = (type: string) => { switch (type) { case 'success': return 'bg-green-50 dark:bg-green-900 border-green-200 dark:border-green-700 text-green-800 dark:text-green-200'; case 'error': return 'bg-red-50 dark:bg-red-900 border-red-200 dark:border-red-700 text-red-800 dark:text-red-200'; case 'warning': return 'bg-yellow-50 dark:bg-yellow-900 border-yellow-200 dark:border-yellow-700 text-yellow-800 dark:text-yellow-200'; case 'info': default: return 'bg-blue-50 dark:bg-blue-900 border-blue-200 dark:border-blue-700 text-blue-800 dark:text-blue-200'; } }; const getIcon = (type: string) => { switch (type) { case 'success': return '✅'; case 'error': return '❌'; case 'warning': return '⚠️'; case 'info': default: return 'ℹ️'; } }; return (
{toasts.map((toast) => (
{getIcon(toast.type)}

{toast.message}

))}
); }