'use client' import { useTranslation } from 'react-i18next' type LeaderboardEntry = { rank: number player_name: string score: number elapsed_ms?: number tokens_total?: number judge_rating?: number created_at: string is_current_user?: boolean } type Props = { entries: LeaderboardEntry[] strategy?: string } export default function Leaderboard({ entries, strategy = 'highest_rating' }: Props) { const { t } = useTranslation() if (entries.length === 0) { return (
| {t('challenges.leaderboard.rank')} | {t('challenges.leaderboard.player')} | {t('challenges.leaderboard.score')} | {strategy === 'fastest' && ({t('challenges.leaderboard.time')} | )} {strategy === 'fewest_tokens' && ({t('challenges.leaderboard.tokens')} | )} {strategy === 'highest_rating' && ({t('challenges.leaderboard.rating')} | )}
|---|---|---|---|---|---|
|
{entry.rank <= 3 ? (
{entry.rank === 1 && '🥇'}
{entry.rank === 2 && '🥈'}
{entry.rank === 3 && '🥉'}
) : (
#{entry.rank}
)}
|
{entry.player_name}
{entry.is_current_user && (
{t('challenges.leaderboard.yourBest')}
)}
|
{entry.score.toFixed(1)} | {strategy === 'fastest' && entry.elapsed_ms !== undefined && ({(entry.elapsed_ms / 1000).toFixed(2)}s | )} {strategy === 'fewest_tokens' && entry.tokens_total !== undefined && ({entry.tokens_total} | )} {strategy === 'highest_rating' && entry.judge_rating !== undefined && (
{entry.judge_rating}/10
|
)}