import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useInAppNotificationStore, type InAppNotification } from '../../stores/inAppNotificationStore'; import { useChatStore } from '../../stores/chatStore'; import { Avatar } from './Avatar'; /** Tempo na tela antes de sumir sozinha. */ const AUTO_DISMISS_MS = 6000; function NotificationCard({ item }: { item: InAppNotification }) { const dismiss = useInAppNotificationStore((s) => s.dismiss); const setCurrentChannel = useChatStore((s) => s.setCurrentChannel); const navigate = useNavigate(); useEffect(() => { const timer = setTimeout(() => dismiss(item.id), AUTO_DISMISS_MS); return () => clearTimeout(timer); }, [item.id, dismiss]); const open = () => { if (item.channelId) { setCurrentChannel(item.channelId); navigate(`/channels/${item.spaceId || '@me'}/${item.channelId}`); } dismiss(item.id); }; return (
); } /** * Avisos dentro da própria janela, no lugar do balão do sistema. * * O balão do Windows traz o som do sistema junto e não combina com o resto do * app. Aqui o efeito sonoro é o mesmo dos outros sons do Backspace, e clicar * leva direto ao canal. */ export function InAppNotifications() { const items = useInAppNotificationStore((s) => s.items); if (items.length === 0) return null; return (
{items.map((item) => (
))}
); }