import { NDKEvent } from '@nostr-dev-kit/ndk'; import * as Avatar from '@radix-ui/react-avatar'; import { minidenticon } from 'minidenticons'; import { memo } from 'react'; import { NavLink } from 'react-router-dom'; import { twMerge } from 'tailwind-merge'; import { useDecryptMessage } from '@app/chats/hooks/useDecryptMessage'; import { useStorage } from '@libs/storage/provider'; import { useStronghold } from '@stores/stronghold'; import { formatCreatedAt } from '@utils/createdAt'; import { useProfile } from '@utils/hooks/useProfile'; import { displayNpub } from '@utils/shortenKey'; export const ChatListItem = memo(function ChatListItem({ event }: { event: NDKEvent }) { const { db } = useStorage(); const { status, user } = useProfile(event.pubkey); const privkey = useStronghold((state) => state.privkey); const decryptedContent = useDecryptMessage(event, db.account.pubkey, privkey); const createdAt = formatCreatedAt(event.created_at, true); const svgURI = 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(event.pubkey, 90, 50)); if (status === 'loading') { return (
); } return ( twMerge( 'flex items-center gap-2.5 px-3 py-1.5 hover:bg-white/10', isActive ? 'border-fuchsia-500 bg-white/5 text-white' : 'border-transparent text-white/70' ) } > {event.pubkey}
{user?.name || user?.display_name || user?.displayName || displayNpub(event.pubkey, 16)}
{decryptedContent}
{createdAt}
); });