import { useEffect, useState } from "react"; import { INotification, NotificationStatus } from "./NotificationType"; enum NotificationColorsClasses { "info" = "alert alert-info", "success" = "alert alert-success", "warning" = "alert alert-warning", "error" = "alert alert-error", } const selectIcon = (status: NotificationStatus) => { switch (status) { case "error": return ( ); case "success": return ( ); break; case "info": return ( ); break; case "warning": return ( ); break; default: return null; break; } }; interface NotificationProps { notification: INotification; removeNotification: (id: number) => void; } function Notification({ notification, removeNotification }: NotificationProps) { const [counter, setCounter] = useState( notification.duration, ); const isCloseable = !!!notification.duration; useEffect(() => { // Skip if counter is undefined if (counter === undefined) return; const intervalId = setInterval(() => { setCounter(counter - 1); if (counter === 0) { removeNotification(notification.id); } }, 1000); return () => { clearInterval(intervalId); }; }, [counter]); return (
{selectIcon(notification.status)} {notification.message} {isCloseable ? ( ) : null} {isCloseable ? null : (
)}
); } export default Notification;