import UserAvatar from '@/components/UserAvatar' import { useKeyboardNavigable } from '@/hooks/useKeyboardNavigable' import { formatTimestamp } from '@/lib/timestamp' import { cn } from '@/lib/utils' import client from '@/services/client.service' import { TConversation, TProfile } from '@/types' import { Lock, Users, X } from 'lucide-react' import { useCallback, useEffect, useRef, useState } from 'react' interface ConversationItemProps { conversation: TConversation isActive: boolean isFollowing: boolean onClick: () => void onClose?: () => void navIndex?: number } export default function ConversationItem({ conversation, isActive, isFollowing, onClick, onClose, navIndex }: ConversationItemProps) { const [profile, setProfile] = useState(null) const buttonRef = useRef(null) const handleActivate = useCallback(() => { buttonRef.current?.click() }, []) const { ref: navRef, isSelected } = useKeyboardNavigable(1, navIndex ?? 0, { meta: { type: 'sidebar', onActivate: handleActivate } }) useEffect(() => { const fetchProfileData = async () => { try { const profileData = await client.fetchProfile(conversation.partnerPubkey) if (profileData) { setProfile(profileData) } } catch (error) { console.error('Failed to fetch profile:', error) } } fetchProfileData() }, [conversation.partnerPubkey]) const displayName = profile?.username || conversation.partnerPubkey.slice(0, 8) + '...' const formattedTime = formatTimestamp(conversation.lastMessageAt) return (
)}
{conversation.preferredEncryption === 'nip17' && ( )}

{conversation.lastMessagePreview}

{conversation.unreadCount > 0 && ( {conversation.unreadCount} )} ) }