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
Сейчас идущая партия на странице группы свалена в общий список «Партии» (MatchListView) и отличается от завершённых только бейджем «идёт», тогда как на главной она вынесена отдельным выделенным блоком InProgressMatches. Приводим страницу группы к виду главной.
Правок бэкенда не потребуется.MatchListItem, который отдаёт /api/groups/{id}/matches, уже содержит всё, что нужно HomeInProgressMatch: started_at, player_count и тот же самый тип MatchListParticipant в participants. Не хватает только group_id / group_name, а они на странице группы уже под рукой. Значит эндпойнты не меняются, npm run gen:api не нужен, миграций нет — задача целиком фронтовая, один файл.
Из matches.items выделить идущие партии и дополнить полями группы (group_id из useMe(), group_name из useGroup()).
Показать блок InProgressMatches перед заголовком «Партии» — рядом со списком партий, как связанный с ним. Пустой список компонент не отрисует: он сам возвращает null.
Список «Партии» ниже показывать без идущих партий — иначе одна и та же партия окажется на странице дважды.
Два решения, принятых по ходу. Компонент используется 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`
Итог: на странице группы идущие партии вынесены наверх блоком 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 — задача закроется автоматически.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Продублировать отображение с главной страницы
Отображение текущей игры во вкладке группыto Изменить отображение текущей игры во вкладке группыНа странице группы текущая игра должна отображаться в том же виде, что и на главной странице приложения.
План выполнения
Сейчас идущая партия на странице группы свалена в общий список «Партии» (
MatchListView) и отличается от завершённых только бейджем «идёт», тогда как на главной она вынесена отдельным выделенным блокомInProgressMatches. Приводим страницу группы к виду главной.Правок бэкенда не потребуется.
MatchListItem, который отдаёт/api/groups/{id}/matches, уже содержит всё, что нужноHomeInProgressMatch:started_at,player_countи тот же самый типMatchListParticipantвparticipants. Не хватает толькоgroup_id/group_name, а они на странице группы уже под рукой. Значит эндпойнты не меняются,npm run gen:apiне нужен, миграций нет — задача целиком фронтовая, один файл.pages/GroupPage.tsx— импортироватьInProgressMatches.matches.itemsвыделить идущие партии и дополнить полями группы (group_idизuseMe(),group_nameизuseGroup()).InProgressMatchesперед заголовком «Партии» — рядом со списком партий, как связанный с ним. Пустой список компонент не отрисует: он сам возвращаетnull.Два решения, принятых по ходу. Компонент используется 1:1, без новых пропов: ТЗ говорит «в том же виде», поэтому блок сохраняет и заголовок, и кнопку «Завершить →», и строку с именем группы — хотя на странице этой же группы имя дублирует заголовок выше. Если это будет мешать, добавим проп
showGroupNameотдельно. Идущие партии убираются из списка «Партии»; клиентская фильтрация формально расходится с сервернымtotal, но постраничной навигации в UI нет, так что на поведение это не влияет.Критерии готовности
InProgressMatches— тем же компонентом и в том же виде, что на главной.schema.d.tsне изменены.npm run buildзелёный.Ветка:
issue-2-group-current-matchотdevРабота выполнена, открыт 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 — задача закроется автоматически.