Изменить отображение текущей игры во вкладке группы (#2) #19
@@ -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[] }) {
|
||||
>
|
||||
<div style={{ minWidth: 0 }}>
|
||||
<div className="row" style={{ gap: 8 }}>
|
||||
<b>{m.group_name}</b>
|
||||
{showGroupName && <b>{m.group_name}</b>}
|
||||
<span className="badge badge-live">идёт</span>
|
||||
</div>
|
||||
<div className="muted small">
|
||||
|
||||
@@ -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 (
|
||||
<div>
|
||||
<div className="card">
|
||||
@@ -152,8 +161,11 @@ export function GroupPage() {
|
||||
|
||||
<GroupSwitcher />
|
||||
|
||||
{/* Название группы не показываем: оно уже есть в заголовке страницы. */}
|
||||
<InProgressMatches items={inProgress} showGroupName={false} />
|
||||
|
||||
<h3 style={{ marginTop: 8 }}>Партии</h3>
|
||||
{matches && <MatchListView items={matches.items} />}
|
||||
{matches && <MatchListView items={finishedMatches} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user