Кастомизация профиля (о себе, аватар) и просмотр профилей других игроков + общая статистика
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { useParams } from "react-router-dom";
|
||||
|
||||
import { Avatar } from "../components/Avatar";
|
||||
import { ProfileStatsCard } from "../components/ProfileStatsCard";
|
||||
import { Spinner } from "../components/Spinner";
|
||||
import { usePublicProfile } from "../hooks/stats";
|
||||
|
||||
/**
|
||||
* Просмотр ЧУЖОГО профиля — отдельный read-only компонент (намеренно изолирован от
|
||||
* редактируемого AccountPage: здесь нет никаких контролов правки, только просмотр).
|
||||
*/
|
||||
export function PublicProfilePage() {
|
||||
const { userId } = useParams();
|
||||
const id = Number(userId);
|
||||
const { data, isLoading, isError } = usePublicProfile(id);
|
||||
|
||||
if (isLoading) return <Spinner />;
|
||||
if (isError || !data) return <div className="muted">Профиль не найден.</div>;
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="card">
|
||||
<div className="row" style={{ gap: 14 }}>
|
||||
<Avatar url={data.avatar_url} nickname={data.nickname} size={64} />
|
||||
<div style={{ flex: 1 }}>
|
||||
<b style={{ fontSize: 18 }}>{data.nickname}</b>
|
||||
{data.bio ? (
|
||||
<div className="muted" style={{ marginTop: 6, whiteSpace: "pre-wrap" }}>
|
||||
{data.bio}
|
||||
</div>
|
||||
) : (
|
||||
<div className="muted small" style={{ marginTop: 6 }}>
|
||||
Игрок пока не рассказал о себе.
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ProfileStatsCard stats={data.stats} title="Статистика" />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user