import { View, Text, Pressable } from "react-native"; import { Link } from "expo-router"; import { Ionicons } from "@expo/vector-icons"; import { useTheme } from "./theme"; import { Avatar } from "./ui/avatar"; interface ChatListItemProps { chat: { _id: string; otherUser: { _id: string; name: string; avatarId: string | null; } | null; lastMessage: { content: string; createdAt: number; senderId: string; } | null; lastMessageAt: number; }; currentUserId: string; } function formatRelativeTime(timestamp: number): string { const now = Date.now(); const diff = now - timestamp; const minutes = Math.floor(diff / 60000); const hours = Math.floor(diff / 3600000); const days = Math.floor(diff / 86400000); if (minutes < 1) return "Сега"; if (minutes < 60) return `${minutes}м`; if (hours < 24) return `${hours}ч`; if (days < 7) return `${days}д`; return new Date(timestamp).toLocaleDateString("mk-MK"); } export function ChatListItem({ chat, currentUserId }: ChatListItemProps) { const theme = useTheme(); const isSelfMessage = chat.lastMessage?.senderId === currentUserId; const previewText = chat.lastMessage ? (isSelfMessage ? "Вие: " : "") + (chat.lastMessage.content.length > 40 ? chat.lastMessage.content.slice(0, 40) + "…" : chat.lastMessage.content) : "Нема пораки"; const isUnread = chat.lastMessage && !isSelfMessage; return ( [ { flexDirection: "row", alignItems: "center", paddingVertical: theme.spacing.md, paddingHorizontal: theme.spacing.md, gap: theme.spacing.md, backgroundColor: theme.colors.surface, borderBottomWidth: 1, borderBottomColor: theme.colors.divider, }, pressed && { backgroundColor: theme.colors.surfaceAlt }, ]} > {isUnread && ( )} {chat.otherUser?.name ?? "Непознат"} {chat.lastMessage && ( {formatRelativeTime(chat.lastMessage.createdAt)} )} {isUnread && ( )} {previewText} ); } export { formatRelativeTime };