UI: рейтинг новичков в карточке профиля — серебристый
ProfileStats теперь отдаёт min_games (порог «Новичков» из API, без дублирования константы на фронте): пока сыграно меньше min_games партий, «Очки (рейтинг)» в профиле показываются серебристым, как в топах; золотой — только подтверждённый рейтинг. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -331,6 +331,9 @@ class ProfileStats(BaseModel):
|
|||||||
worst_faction: FactionStat | None = None
|
worst_faction: FactionStat | None = None
|
||||||
most_played_faction: FactionStat | None = None
|
most_played_faction: FactionStat | None = None
|
||||||
recent_form: list[RecentFormItem] = []
|
recent_form: list[RecentFormItem] = []
|
||||||
|
# Порог «Новичков» (MIN_GAMES) — чтобы UI единообразно подсвечивал
|
||||||
|
# неподтверждённый рейтинг, не дублируя константу на фронте.
|
||||||
|
min_games: int = 0
|
||||||
|
|
||||||
|
|
||||||
class PublicProfile(BaseModel):
|
class PublicProfile(BaseModel):
|
||||||
|
|||||||
@@ -206,6 +206,7 @@ def profile_stats(session: Session, user_id: int, group_id: int | None = None) -
|
|||||||
"worst_faction": worst,
|
"worst_faction": worst,
|
||||||
"most_played_faction": most_played,
|
"most_played_faction": most_played,
|
||||||
"recent_form": _recent_form(session, user_id, group_id),
|
"recent_form": _recent_form(session, user_id, group_id),
|
||||||
|
"min_games": MIN_GAMES,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Vendored
+5
@@ -1883,6 +1883,11 @@ export interface components {
|
|||||||
* @default []
|
* @default []
|
||||||
*/
|
*/
|
||||||
recent_form: components["schemas"]["RecentFormItem"][];
|
recent_form: components["schemas"]["RecentFormItem"][];
|
||||||
|
/**
|
||||||
|
* Min Games
|
||||||
|
* @default 0
|
||||||
|
*/
|
||||||
|
min_games: number;
|
||||||
};
|
};
|
||||||
/** ProfileUpdate */
|
/** ProfileUpdate */
|
||||||
ProfileUpdate: {
|
ProfileUpdate: {
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ export function ProfileStatsCard({
|
|||||||
title?: string;
|
title?: string;
|
||||||
}) {
|
}) {
|
||||||
const o = stats.overall;
|
const o = stats.overall;
|
||||||
|
// Серебристый рейтинг — пока игрок «новичок» (меньше min_games партий) или
|
||||||
|
// не играл вовсе; золотой — только подтверждённый (как в топах).
|
||||||
|
const provisional = o.score == null || o.games < stats.min_games;
|
||||||
return (
|
return (
|
||||||
<div className="card">
|
<div className="card">
|
||||||
<h3>{title}</h3>
|
<h3>{title}</h3>
|
||||||
@@ -33,7 +36,7 @@ export function ProfileStatsCard({
|
|||||||
</div>
|
</div>
|
||||||
<div className="row-between">
|
<div className="row-between">
|
||||||
<div>Очки (рейтинг)</div>
|
<div>Очки (рейтинг)</div>
|
||||||
<b className={"lb-score" + (o.score == null ? " provisional" : "")}>{o.score ?? "—"}</b>
|
<b className={"lb-score" + (provisional ? " provisional" : "")}>{o.score ?? "—"}</b>
|
||||||
</div>
|
</div>
|
||||||
{stats.most_played_faction && (
|
{stats.most_played_faction && (
|
||||||
<div className="row-between">
|
<div className="row-between">
|
||||||
|
|||||||
Reference in New Issue
Block a user