import { useQuery } from '@apollo/client' import Comment, { CommentSkeleton } from './comment' import Item from './item' import { NOTIFICATIONS } from '../fragments/notifications' import { useRouter } from 'next/router' import MoreFooter from './more-footer' import Invite from './invite' import { ignoreClick } from '../lib/clicks' function Notification ({ n }) { const router = useRouter() return (
{ if (ignoreClick(e)) { return } if (n.__typename === 'Invitification') { router.push('/invites') } else if (!n.item.title) { router.push({ pathname: '/items/[id]', query: { id: n.item.root.id, commentId: n.item.id } }, `/items/${n.item.root.id}`) } else { router.push({ pathname: '/items/[id]', query: { id: n.item.id } }, `/items/${n.item.id}`) } }} > {n.__typename === 'Invitification' ? ( <> your invite has been redeemed by {n.invite.invitees.length} users
= n.invite.limit) } />
) : ( <> {n.__typename === 'Votification' && your {n.item.title ? 'post' : 'reply'} stacked {n.earnedSats} sats } {n.__typename === 'Mention' && you were mentioned in }
{n.item.title ? : (
)}
)}
) } export default function Notifications ({ notifications, cursor, lastChecked, variables }) { const { data, fetchMore } = useQuery(NOTIFICATIONS, { variables }) if (data) { ({ notifications: { notifications, cursor } } = data) } const [fresh, old] = notifications.reduce((result, n) => { result[new Date(n.sortTime).getTime() > lastChecked ? 0 : 1].push(n) return result }, [[], []]) return ( <> {/* XXX we shouldn't use the index but we don't have a unique id in this union yet */}
{fresh.map((n, i) => ( ))}
{old.map((n, i) => ( ))} ) } function CommentsFlatSkeleton () { const comments = new Array(21).fill(null) return (
{comments.map((_, i) => ( ))}
) }