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 };