Изменить отображение текущей игры во вкладке группы #2

Closed
opened 2026-09-01 10:55:57 +03:00 by NotBigGhost · 3 comments
Owner

Продублировать отображение с главной страницы

Продублировать отображение с главной страницы
NotBigGhost added reference dev 2026-09-01 10:56:07 +03:00
NotBigGhost changed title from Отображение текущей игры во вкладке группы to Изменить отображение текущей игры во вкладке группы 2026-09-06 18:59:05 +03:00
NotBigGhost added this to the v1.35 - промежуточная полировка версии 1.3 milestone 2026-09-06 18:59:20 +03:00
Author
Owner

На странице группы текущая игра должна отображаться в том же виде, что и на главной странице приложения.

На странице группы текущая игра должна отображаться в том же виде, что и на главной странице приложения.
NotBigGhost added the Kind/Enhancement label 2026-09-06 21:35:15 +03:00
Agent self-assigned this 2026-09-07 15:58:08 +03:00
Agent added the
Reviewed
Confirmed
1
label 2026-09-07 15:58:10 +03:00
Collaborator

План выполнения

Сейчас идущая партия на странице группы свалена в общий список «Партии» (MatchListView) и отличается от завершённых только бейджем «идёт», тогда как на главной она вынесена отдельным выделенным блоком InProgressMatches. Приводим страницу группы к виду главной.

Правок бэкенда не потребуется. MatchListItem, который отдаёт /api/groups/{id}/matches, уже содержит всё, что нужно HomeInProgressMatch: started_at, player_count и тот же самый тип MatchListParticipant в participants. Не хватает только group_id / group_name, а они на странице группы уже под рукой. Значит эндпойнты не меняются, npm run gen:api не нужен, миграций нет — задача целиком фронтовая, один файл.

  1. pages/GroupPage.tsx — импортировать InProgressMatches.
  2. Из matches.items выделить идущие партии и дополнить полями группы (group_id из useMe(), group_name из useGroup()).
  3. Показать блок InProgressMatches перед заголовком «Партии» — рядом со списком партий, как связанный с ним. Пустой список компонент не отрисует: он сам возвращает null.
  4. Список «Партии» ниже показывать без идущих партий — иначе одна и та же партия окажется на странице дважды.

Два решения, принятых по ходу. Компонент используется 1:1, без новых пропов: ТЗ говорит «в том же виде», поэтому блок сохраняет и заголовок, и кнопку «Завершить →», и строку с именем группы — хотя на странице этой же группы имя дублирует заголовок выше. Если это будет мешать, добавим проп showGroupName отдельно. Идущие партии убираются из списка «Партии»; клиентская фильтрация формально расходится с серверным total, но постраничной навигации в UI нет, так что на поведение это не влияет.

Критерии готовности

  • Идущие партии на странице группы показаны блоком InProgressMatches — тем же компонентом и в том же виде, что на главной.
  • Одна и та же партия не появляется дважды: в списке «Партии» остаются только завершённые.
  • Когда идущих партий нет, блок не отображается, а список «Партии» выглядит как раньше.
  • Бэкенд и schema.d.ts не изменены.
  • npm run build зелёный.

Ветка: issue-2-group-current-match от dev

## План выполнения Сейчас идущая партия на странице группы свалена в общий список «Партии» (`MatchListView`) и отличается от завершённых только бейджем «идёт», тогда как на главной она вынесена отдельным выделенным блоком `InProgressMatches`. Приводим страницу группы к виду главной. **Правок бэкенда не потребуется.** `MatchListItem`, который отдаёт `/api/groups/{id}/matches`, уже содержит всё, что нужно `HomeInProgressMatch`: `started_at`, `player_count` и тот же самый тип `MatchListParticipant` в `participants`. Не хватает только `group_id` / `group_name`, а они на странице группы уже под рукой. Значит эндпойнты не меняются, `npm run gen:api` не нужен, миграций нет — задача целиком фронтовая, один файл. 1. `pages/GroupPage.tsx` — импортировать `InProgressMatches`. 2. Из `matches.items` выделить идущие партии и дополнить полями группы (`group_id` из `useMe()`, `group_name` из `useGroup()`). 3. Показать блок `InProgressMatches` перед заголовком «Партии» — рядом со списком партий, как связанный с ним. Пустой список компонент не отрисует: он сам возвращает `null`. 4. Список «Партии» ниже показывать без идущих партий — иначе одна и та же партия окажется на странице дважды. **Два решения, принятых по ходу.** Компонент используется 1:1, без новых пропов: ТЗ говорит «в том же виде», поэтому блок сохраняет и заголовок, и кнопку «Завершить →», и строку с именем группы — хотя на странице этой же группы имя дублирует заголовок выше. Если это будет мешать, добавим проп `showGroupName` отдельно. Идущие партии убираются из списка «Партии»; клиентская фильтрация формально расходится с серверным `total`, но постраничной навигации в UI нет, так что на поведение это не влияет. **Критерии готовности** - Идущие партии на странице группы показаны блоком `InProgressMatches` — тем же компонентом и в том же виде, что на главной. - Одна и та же партия не появляется дважды: в списке «Партии» остаются только завершённые. - Когда идущих партий нет, блок не отображается, а список «Партии» выглядит как раньше. - Бэкенд и `schema.d.ts` не изменены. - `npm run build` зелёный. **Ветка:** `issue-2-group-current-match` от `dev`
Agent added the
Status
In Review
label 2026-09-07 16:02:55 +03:00
Collaborator

Работа выполнена, открыт PR: #19

Итог: на странице группы идущие партии вынесены наверх блоком InProgressMatches — тем же компонентом, что на главной; из списка «Партии» они исключены, чтобы партия не показывалась дважды. Бэкенд не тронут: MatchListItem уже содержит все нужные поля, недостающие group_id/group_name берутся из useMe()/useGroup(). Изменён один файл — pages/GroupPage.tsx.

Проверки: npm run build — зелёный; pytest — 65 passed. Визуальная проверка не выполнена: dev-стенд остановлен, расширение Claude in Chrome к сессии не подключено.

Статус: Status/In Review
Осталось за вами: ревью и мёрж PR — задача закроется автоматически.

Работа выполнена, открыт PR: https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/19 **Итог:** на странице группы идущие партии вынесены наверх блоком `InProgressMatches` — тем же компонентом, что на главной; из списка «Партии» они исключены, чтобы партия не показывалась дважды. Бэкенд не тронут: `MatchListItem` уже содержит все нужные поля, недостающие `group_id`/`group_name` берутся из `useMe()`/`useGroup()`. Изменён один файл — `pages/GroupPage.tsx`. **Проверки:** `npm run build` — зелёный; `pytest` — 65 passed. Визуальная проверка не выполнена: dev-стенд остановлен, расширение Claude in Chrome к сессии не подключено. **Статус:** `Status/In Review` **Осталось за вами:** ревью и мёрж PR — задача закроется автоматически.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: NotBigGhost/ForbiddenStarsApp#2