2.9 KiB
2.9 KiB
Context
main 78a0d78. Веб-приложение — React 19 + TanStack Query, страницы рисует shell/Layout.tsx по shell/pages.tsx,
разделы — shell/Sidebar.tsx (SECTIONS), проект — ProjectGate, карточка — окно IssueModal поверх страницы
(IssueLink/useOpenIssue с openCardState). Запросы — api/queries.ts (qk), перечитывание после «Обновить из
Jira» — shell/RefreshProvider.tsx. Хаб: GET /changes (since/until — ISO со смещением, иначе 422; kinds,
project, limit ≤ 2000, ответ {since, until, truncated, changes}), GET /issues/{key}.changes.
Decisions
- Модуль
web/src/feed/:events.ts— чистые функции (границы периода, разборkindsиз адреса, текст события, группировка по задаче),EventList.tsx— список событий (лента и карточка),FeedPage.tsx— страница,feed.css. - Период — переключатель из четырёх, а не календарь: покрывает «за пару часов» и «за сегодня» владельца; «Вчера» и
«7 дней» — утренний разбор и неделя. Границы считаются по местному времени браузера, в запрос уходят
toISOString()(UTC сZ) — хаб принимаетZ, пояс не теряется. limit= 2000 (максимум хаба) — неделя активного проекта помещается; иначеtruncatedс подсказкой.- Подписи прочих полей — словарь в
events.ts; незнакомые — имя поля Jira. - Комментарий в ленте — простой текст (300 символов одной строкой), без вики-разметки: лента — обзор, полный текст — в карточке.
- История в карточке — 10 последних с «Показать все»; блок в основной колонке после комментариев.
- Перечитывание: ключ запроса
["changes", …];RefreshProviderпосле пакета инвалидирует["changes"]; TanStack Query перечитывает при возврате на вкладку (refetchOnWindowFocusпо умолчанию).
Decisions made without discussion
- 2026-10-22 — все решения выше (1–7) — мои: владелец сказал «начинай» без обсуждения интерфейса. Цена ошибки: переделка вёрстки страницы; бэкенд не затронут.