import React from 'react'; import { Alert, AlertActionCloseButton, AlertVariant } from '@patternfly/react-core'; import { Notification, asEnumMember, useNotification } from 'mod-arch-core'; const TOAST_NOTIFICATION_TIMEOUT = 8 * 1000; interface ToastNotificationProps { notification: Notification; } const ToastNotification: React.FC = ({ notification }) => { const notifications = useNotification(); const [timedOut, setTimedOut] = React.useState(false); const [mouseOver, setMouseOver] = React.useState(false); React.useEffect(() => { const handle = setTimeout(() => { setTimedOut(true); }, TOAST_NOTIFICATION_TIMEOUT); return () => { clearTimeout(handle); }; }, [setTimedOut]); React.useEffect(() => { if (!notification.hidden && timedOut && !mouseOver) { notifications.remove(notification.id); } }, [mouseOver, notification, timedOut, notifications]); if (notification.hidden) { return null; } return ( notifications.remove(notification.id)} />} onMouseEnter={() => setMouseOver(true)} onMouseLeave={() => setMouseOver(false)} > {notification.message} ); }; export default ToastNotification;