Профиль: догрузка истории и счётчик партий в шапке
История запрашивалась без limit/offset, поэтому бэкенд отдавал первые 20 партий, а страницы рисовали их и молча игнорировали total: у игрока с 40 партиями половина истории просто не существовала — ни кнопки, ни намёка. Теперь история грузится страницами по 20, под списком — «Показать ещё». Постранично, а не одним большим запросом: у эндпоинта потолок limit=100, и на 101-й партии обрезка вернулась бы. Кнопка живёт в самом компоненте истории, поэтому появилась сразу и в своём профиле, и в чужом, и в обоих режимах подробности. Общее число партий вынесено в шапку профиля, к нику. Берём его из статистики, а не из total истории: в режиме «только лучшая партия» total равен единице, и счётчик показывал бы «Партий: 1». #30 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf
This commit is contained in:
@@ -32,7 +32,12 @@ export function AccountPage() {
|
||||
const updateHistory = useUpdateHistoryPrefs();
|
||||
const { data: factions } = useFactions();
|
||||
const { data: expansions } = useExpansions();
|
||||
const { data: history } = useUserMatches(me?.id ?? null);
|
||||
const {
|
||||
data: history,
|
||||
fetchNextPage,
|
||||
hasNextPage,
|
||||
isFetchingNextPage,
|
||||
} = useUserMatches(me?.id ?? null);
|
||||
const uploadAvatar = useUploadAvatar();
|
||||
const deleteAvatar = useDeleteAvatar();
|
||||
const logout = useLogout();
|
||||
@@ -124,6 +129,7 @@ export function AccountPage() {
|
||||
<Avatar url={me.avatar_url} nickname={me.nickname} size={64} />
|
||||
<div style={{ flex: 1 }}>
|
||||
<b style={{ fontSize: 18 }}>{me.nickname}</b>
|
||||
{stats && <div className="muted small">Партий: {stats.overall.games}</div>}
|
||||
<div className="row" style={{ gap: 8, marginTop: 8 }}>
|
||||
<button
|
||||
className="btn small"
|
||||
@@ -238,7 +244,14 @@ export function AccountPage() {
|
||||
</div>
|
||||
<div style={{ marginTop: 12 }}>
|
||||
{history && (
|
||||
<MatchHistory items={history.items} userId={me.id} detail={history.detail} />
|
||||
<MatchHistory
|
||||
items={history.pages.flatMap((p) => p.items)}
|
||||
userId={me.id}
|
||||
detail={history.pages[0].detail}
|
||||
hasMore={hasNextPage}
|
||||
loadingMore={isFetchingNextPage}
|
||||
onMore={() => fetchNextPage()}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user