From b3e4f71bdac1908f0824eb51d633baa681fcf96b Mon Sep 17 00:00:00 2001 From: NotBigGhost Date: Mon, 7 Sep 2026 16:02:36 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=93=D1=80=D1=83=D0=BF=D0=BF=D0=B0:=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B0=D1=8F=20=D0=B8=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=20=E2=80=94=20=D1=82=D0=B5=D0=BC=20=D0=B6=D0=B5=20=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=BE=D0=BC,=20=D1=87=D1=82=D0=BE=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На странице группы идущая партия лежала в общем списке «Партии» и отличалась от завершённых только бейджем «идёт». Теперь она выносится блоком InProgressMatches — тем же компонентом, что на главной. MatchListItem уже содержит всё, что нужно HomeInProgressMatch (started_at, player_count и тот же MatchListParticipant), поэтому бэкенд не тронут: недостающие group_id и group_name берутся из useMe/useGroup. Из списка «Партии» идущие партии исключены, иначе одна партия показывалась бы на странице дважды. #2 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Ps52xzuUXnWrJ5SRnEeaLk --- frontend/src/pages/GroupPage.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/GroupPage.tsx b/frontend/src/pages/GroupPage.tsx index 783fdb7..d590680 100644 --- a/frontend/src/pages/GroupPage.tsx +++ b/frontend/src/pages/GroupPage.tsx @@ -6,6 +6,7 @@ import { ApiError } from "../api/client"; import { CreateGroupForm } from "../components/CreateGroupForm"; import { GroupInvitations } from "../components/GroupInvitations"; import { GroupSwitcher } from "../components/GroupSwitcher"; +import { InProgressMatches } from "../components/InProgressMatches"; import { Leaderboard } from "../components/Leaderboard"; import { MatchListView } from "../components/MatchList"; import { PlayerSuggestions } from "../components/PlayerSuggestions"; @@ -83,6 +84,14 @@ export function GroupPage() { ); } + // Идущие партии выносим тем же блоком, что и на главной; из списка «Партии» + // их исключаем, иначе одна партия показалась бы на странице дважды. + const allMatches = matches?.items ?? []; + const inProgress = allMatches + .filter((m) => m.status === "in_progress") + .map((m) => ({ ...m, group_id: groupId, group_name: group?.name ?? "" })); + const finishedMatches = allMatches.filter((m) => m.status !== "in_progress"); + return (
@@ -152,8 +161,10 @@ export function GroupPage() { + +

Партии

- {matches && } + {matches && }
); } -- 2.54.0 From 1790e195e049ca2427f0ba913ea26a8a72de9127 Mon Sep 17 00:00:00 2001 From: NotBigGhost Date: Mon, 7 Sep 2026 16:35:10 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=93=D1=80=D1=83=D0=BF=D0=BF=D0=B0:=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B4=D1=83=D0=B1=D0=BB=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=8B=20=D0=B2=20=D0=B1?= =?UTF-8?q?=D0=BB=D0=BE=D0=BA=D0=B5=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B8=D0=B3=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На главной партии приходят из разных групп, поэтому название нужно; на странице самой группы оно повторяет заголовок страницы. Блок получил проп showGroupName (по умолчанию true) — главная не меняется. #2 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Ps52xzuUXnWrJ5SRnEeaLk --- frontend/src/components/InProgressMatches.tsx | 13 +++++++++++-- frontend/src/pages/GroupPage.tsx | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/InProgressMatches.tsx b/frontend/src/components/InProgressMatches.tsx index d4528c7..bb1971f 100644 --- a/frontend/src/components/InProgressMatches.tsx +++ b/frontend/src/components/InProgressMatches.tsx @@ -4,7 +4,16 @@ import { useNavigate } from "react-router-dom"; import { formatTime, plural } from "../domain/format"; import type { HomeInProgressMatch } from "../domain/types"; -export function InProgressMatches({ items }: { items: HomeInProgressMatch[] }) { +/** Блок незавершённых партий. На главной партии приходят из разных групп, поэтому + * название группы нужно; на странице самой группы оно дублирует заголовок — там + * блок вызывается с showGroupName={false}. */ +export function InProgressMatches({ + items, + showGroupName = true, +}: { + items: HomeInProgressMatch[]; + showGroupName?: boolean; +}) { const navigate = useNavigate(); if (items.length === 0) return null; @@ -21,7 +30,7 @@ export function InProgressMatches({ items }: { items: HomeInProgressMatch[] }) { >
- {m.group_name} + {showGroupName && {m.group_name}} идёт
diff --git a/frontend/src/pages/GroupPage.tsx b/frontend/src/pages/GroupPage.tsx index d590680..5cf5f33 100644 --- a/frontend/src/pages/GroupPage.tsx +++ b/frontend/src/pages/GroupPage.tsx @@ -161,7 +161,8 @@ export function GroupPage() { - + {/* Название группы не показываем: оно уже есть в заголовке страницы. */} +

Партии

{matches && } -- 2.54.0