feat(site-finder): horizon-селектор 6/12/18 на экране анализа (#996) #1072
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1072
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/horizon-selector-996"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что
Сегмент-контрол «Горизонт прогноза» 6/12/18 на экране анализа (
/site-finder/analysis/[cad]). Меняет?horizon=в analyze-запросе и мгновенно подсвечивает целевой горизонт в Секции 6.Closes #996 (958-B1). Часть EPIC #958. Зависимость 958-B2 (#995, backend
?horizon=) — в main.Содержимое
HorizonSelector.tsx— controlled segmented control (radiogroup + role=radio/aria-checked, реальные кнопки, focus-ring, tabular-nums, токены). Отключается, пока идёт пере-анализ (анти-спам).useParcelAnalyzeQuery(cad, horizon=12)—horizonв queryKey +?horizon=;placeholderData: keepPreviousData→ переключение горизонта не бланкует страницу в loading (паттерн уже есть вanalytics-api.ts).AnalysisPageContent— состояние горизонта, рендер селектора под breadcrumb, инвалидация["parcel-forecast", cad]при смене (Секция 6 перепулливает).Section6Forecast/ForecastHorizonsBlock—selectedHorizon→targetHorizon, целевая строка горизонта подсвечивается тегом «Целевой».Поведение (осознанный трейд-офф)
Смена горизонта = свежий
/analyze(~10-30s) + пере-расчёт §22-форсайта (~30-180s).keepPreviousDataдержит прошлый анализ на экране, селектор заблокирован на время рефетча, аselectedHorizonдаёт мгновенную клиентскую подсветку целевого горизонта.Качество
code-reviewer: ⚠️ MINOR (no blockers) — wiring/контракт/семантика верны. Учтены:keepPreviousData+disable-while-fetching (анти-спам/анти-бланк),voidinvalidate. Оставлено follow-up: ScenariosBlock-подпись при отсутствии точного горизонта (на практике отчёт всегда содержит 6/12/18/24 → не триггерится).npm run build— зелёный (tsc + lint чисто). Без новых зависимостей, без codegen.Тест-план (post-deploy)
Открыть
/site-finder/analysis/66:41:0702048:27→ селектор 6/12/18 над секциями; клик 18 → строка 18 мес помечена «Целевой», сценарии/дефицит на 18 мес; страница не мигает в loading.