Some checks failed
CI / build-and-test (pull_request) Has been cancelled
- Hide org schedule fields when editing a past race; isRaceDateInPast helper - StartTimeSelects (HH:mm:ss) and optional ?date= prefill on new race - Full-card link to edit for races needing result entry; shadow token - List/calendar toggle (sessionStorage); year grid and month focus views - Date hover popover and /races/day/:ymd page with Add button - Docs plan-korrektirovok-starty.md and startTime API note; client 0.4.0 Made-with: Cursor
53 lines
3.8 KiB
Markdown
53 lines
3.8 KiB
Markdown
# План корректировок: форма старта, время, календарь стартов
|
||
|
||
Краткое описание реализованных изменений в клиенте **runners-calendar** (версия клиента см. в футере приложения).
|
||
|
||
## 1. Форма старта (редактирование прошедшего события)
|
||
|
||
При **редактировании** старта, чья **дата уже в прошлом**, в блоке «Организация» скрыты поля, неактуальные после забега:
|
||
|
||
- сайт организатора;
|
||
- время старта;
|
||
- расписание кластеров;
|
||
- выдача номеров.
|
||
|
||
Значения по-прежнему хранятся в состоянии формы и отправляются при сохранении (не затираются). Утилита: `isRaceDateInPast` в `frontend/src/lib/raceMetrics.ts`.
|
||
|
||
## 2. Время старта
|
||
|
||
Вместо свободного текста — три селекта (часы, минуты, секунды), компонент `StartTimeSelects` в `frontend/src/components/StartTimeSelects.tsx`. Сохраняется строка `HH:mm:ss` или пусто → `null` в API. Поддерживается разбор старых значений `HH:mm` при загрузке.
|
||
|
||
## 3. Список на странице «Календарь стартов»
|
||
|
||
Для стартов со статусом **«внесите результат»** вся карточка — ссылка на `/races/:id/edit` с лёгким увеличением и тенью при наведении/фокусе (токен `--shadow-card-lift`).
|
||
|
||
## 4. Виды: список и календарь
|
||
|
||
- Переключатель **Список / Календарь**, выбор сохраняется в `sessionStorage` (`races-view-mode`).
|
||
- **Календарь:** загрузка гонок за выбранный **год** (без фильтра месяца в запросе), отображение сетки месяцев.
|
||
- При выборе **месяца** в фильтре — крупная сетка этого месяца и компактная навигация по остальным месяцам + «Весь год».
|
||
|
||
## 5. Ячейка даты в календаре
|
||
|
||
- Наведение или фокус: всплывающая панель — либо «Стартов нет» и кнопка **Добавить** (`/races/new?date=YYYY-MM-DD`), либо список стартов со ссылками на карточки и **Добавить**.
|
||
- Клик по числу — страница дня `/races/day/:ymd`.
|
||
|
||
## 6. Страница дня
|
||
|
||
Маршрут `races/day/:ymd`: список стартов на дату, пустое состояние, кнопка **Добавить** с предзаполнением даты через query.
|
||
|
||
## 7. Новый старт с датой из календаря
|
||
|
||
`RaceFormPage` читает query-параметр `?date=YYYY-MM-DD` при создании старта.
|
||
|
||
## Основные файлы
|
||
|
||
| Область | Файлы |
|
||
|--------|--------|
|
||
| Метрики даты | `frontend/src/lib/raceMetrics.ts`, `frontend/src/lib/calendarUtils.ts` |
|
||
| Форма | `frontend/src/pages/RaceFormPage.tsx`, `frontend/src/components/StartTimeSelects.tsx` |
|
||
| Список и календарь | `frontend/src/pages/RacesPage.tsx`, `frontend/src/components/RacesCalendar.tsx` |
|
||
| День | `frontend/src/pages/RaceDayPage.tsx`, `frontend/src/app/router.tsx` |
|
||
| Стили | `frontend/src/styles/global.css`, `frontend/src/styles/tokens.css` |
|
||
| API-док | `docs/backend-api-for-frontend.md` (формат `startTime`) |
|