Files
ForbiddenStarsApp/frontend/src/components/ProfileStatsCard.tsx
T
NotBigGhostandClaude Opus 5 befabba752 Профиль: выбор любимой фракции и строка «Чаще всего играет на»
В кастомизации профиля появился выбор любимой фракции из полного
справочника (PickerSelect, все 12 фракций): фракция — свойство игрока,
а не группы, поэтому список не зависит от подключённых дополнений.
Дополнение показано в строке опции приглушённым текстом, снятие выбора —
кнопкой «Убрать».

В карточке статистики «Любимая фракция» теперь берётся из профиля, а
«Основная фракция» переименована в «Чаще всего играет на» и печатает
название в предложном падеже. Публичный профиль правок не потребовал —
он использует ту же карточку и ту же схему.

schema.d.ts пересобран с живого бэкенда (npm run gen:api).

#17

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ps52xzuUXnWrJ5SRnEeaLk
2026-09-07 16:17:52 +03:00

57 lines
1.9 KiB
TypeScript

import type { ProfileStats } from "../domain/types";
function pct(v: number | null | undefined): string {
return v == null ? "—" : `${Math.round(v * 100)}%`;
}
export function ProfileStatsCard({
stats,
title = "Моя статистика",
}: {
stats: ProfileStats;
title?: string;
}) {
const o = stats.overall;
// Серебристый рейтинг — пока игрок «новичок» (меньше min_games партий) или
// не играл вовсе; золотой — только подтверждённый (как в топах).
const provisional = o.score == null || o.games < stats.min_games;
return (
<div className="card">
<h3>{title}</h3>
<div className="row-between">
<div>Игр</div>
<b>{o.games}</b>
</div>
<div className="row-between">
<div>Побед</div>
<b>{o.wins}</b>
</div>
<div className="row-between">
<div>Винрейт</div>
<b>{pct(o.win_rate)}</b>
</div>
<div className="row-between">
<div>Среднее место</div>
<b>{o.avg_place ?? "—"}</b>
</div>
<div className="row-between">
<div>Очки (рейтинг)</div>
<b className={"lb-score" + (provisional ? " provisional" : "")}>{o.score ?? "—"}</b>
</div>
{/* Любимая — личный выбор игрока в профиле; ниже — статистика по партиям. */}
{stats.favorite_faction && (
<div className="row-between">
<div>Любимая фракция</div>
<b>{stats.favorite_faction.name_ru}</b>
</div>
)}
{stats.main_faction && (
<div className="row-between">
<div>Чаще всего играет на</div>
<b>{stats.main_faction.name_ru_prepositional}</b>
</div>
)}
</div>
);
}