import clsx from 'clsx'; import { useAtom } from 'jotai'; import { useEffect, useRef } from 'preact/hooks'; import { removeToastAtom, type ToastMessage, toastsAtom } from '../../atoms/toast'; import Button from './Button'; const TOAST_DURATION = 5000; function ToastItem({ toast, onRemove }: { toast: ToastMessage; onRemove: (id: string) => void }) { const toastRef = useRef(null); useEffect(() => { if (toastRef.current) { toastRef.current.showPopover(); } }, [toast.id]); useEffect(() => { const timer = setTimeout(() => { onRemove(toast.id); }, TOAST_DURATION); return () => clearTimeout(timer); }, [toast.id, onRemove]); return (

{toast.message}

); } function Toast() { const [toasts] = useAtom(toastsAtom); const [, removeToast] = useAtom(removeToastAtom); return ( <> {toasts.map((toast) => ( ))} ); } export default Toast;