import { memo } from "react"; import { Text, Stack, Group, Box, Container, Divider, UnstyledButton, } from "@mantine/core"; import { Trans, Plural, useLingui } from "@lingui/react/macro"; import { Player } from "../types"; import { usePlayersActivity } from "../queries"; interface PlayerActivityItemProps { player: Player; } const PlayerActivityItem = memo(({ player }: PlayerActivityItemProps) => { const { t, i18n } = useLingui(); const playerName = player.first_name && player.last_name ? `${player.first_name} ${player.last_name}` : player.first_name || player.last_name || t`Unknown Player`; const formatDate = (dateStr?: string) => { if (!dateStr) return t`Never`; const date = new Date(dateStr); return date.toLocaleString(i18n.locale); }; const getTimeSince = (dateStr?: string) => { if (!dateStr) return t`Never active`; const date = new Date(dateStr); const now = new Date(); const diffMs = now.getTime() - date.getTime(); const diffMins = Math.floor(diffMs / 60000); const diffHours = Math.floor(diffMins / 60); const diffDays = Math.floor(diffHours / 24); if (diffMins < 1) return t`Just now`; if (diffMins < 60) return t`${diffMins}m ago`; if (diffHours < 24) return t`${diffHours}h ago`; if (diffDays < 30) return t`${diffDays}d ago`; return formatDate(dateStr); }; const isActive = player.last_activity && (new Date().getTime() - new Date(player.last_activity).getTime()) < 5 * 60 * 1000; return ( {playerName} {isActive && ( )} {getTimeSince(player.last_activity)} {player.last_activity && ( {formatDate(player.last_activity)} )} ); }); export const PlayersActivityTable = () => { const { data: players } = usePlayersActivity(); return ( {players.map((player: Player, index: number) => ( {index < players.length - 1 && } ))} {players.length === 0 && ( No player activity found )} ); };