/** @module @category UI */ import React, { useCallback, useEffect, useState } from 'react'; import type { Subject } from 'rxjs'; import type { ToastNotificationMeta } from './toast.component'; import { Toast } from './toast.component'; interface ActiveToastsProps { subject: Subject; } const ActiveToasts: React.FC = ({ subject }) => { const [toasts, setToasts] = useState>([]); const closeToast = useCallback((toast) => { setToasts((toasts) => toasts.filter((t) => t !== toast)); }, []); useEffect(() => { const subscription = subject.subscribe((toast) => setToasts((toasts) => [ ...toasts.filter( (t) => t.description !== toast.description || t.kind !== toast.kind || t.title !== toast.title || t.actionButtonLabel !== toast.actionButtonLabel || t.onActionButtonClick !== toast.onActionButtonClick, ), toast, ]), ); return () => subscription.unsubscribe(); }, [subject]); return ( <> {toasts.map((toast) => ( closeToast(toast)} /> ))} ); }; export default ActiveToasts;