import { Link } from "react-router-dom"; import type { LeaderboardEntry } from "../domain/types"; import { Avatar } from "./Avatar"; function pct(v: number | null | undefined): string { return v == null ? "—" : `${Math.round(v * 100)}%`; } function Row({ entry }: { entry: LeaderboardEntry }) { return ( // Вся строка — ссылка на профиль. stopPropagation: на главной карточка-обёртка // ведёт в общую статистику, а клик по строке игрока — в его профиль. e.stopPropagation()} >
{entry.rank ?? "—"}
{entry.nickname}
Игр: {entry.games} Побед: {entry.wins} WR: {pct(entry.win_rate)}
{entry.score ?? "—"}
); } export function Leaderboard({ entries, provisional, inactive, }: { entries: LeaderboardEntry[]; provisional?: LeaderboardEntry[]; inactive?: LeaderboardEntry[]; }) { const empty = entries.length === 0 && !provisional?.length && !inactive?.length; if (empty) { return
Пока нет сыгранных партий.
; } return (
{entries.map((e) => ( ))} {provisional && provisional.length > 0 && ( <>
Новички (мало игр)
{provisional.map((e) => ( ))} )} {inactive && inactive.length > 0 && ( <>
Ещё не играли
{inactive.map((e) => ( ))} )}
); }