/** @module @category UI */ import React, { useEffect, useState, useCallback } from 'react'; import type { Subject } from 'rxjs'; import type { SnackbarMeta } from './snackbar.component'; import { Snackbar } from './snackbar.component'; interface ActiveSnackbarProps { subject: Subject; } const ActiveSnackbars: React.FC = ({ subject }) => { const [snackbars, setSnackbars] = useState>([]); const closeSnackbar = useCallback((snackbar) => { setSnackbars((snackbars) => snackbars.filter((t) => t !== snackbar)); }, []); useEffect(() => { const subscription = subject.subscribe((snackbar) => setSnackbars((snackbars) => [ ...snackbars.filter( (n) => n.subtitle !== snackbar.subtitle || n.actionButtonLabel !== snackbar.actionButtonLabel || n.onActionButtonClick !== snackbar.onActionButtonClick || n.kind !== snackbar.kind || n.title !== snackbar.title, ), snackbar, ]), ); return () => subscription.unsubscribe(); }, [subject]); return ( <> {snackbars.map((snackbar) => ( closeSnackbar(snackbar)} /> ))} ); }; export default ActiveSnackbars;