feat(site-finder): forecast export buttons in Section 6 (UI for #959) #1109

Merged
bot-backend merged 1 commit from feat/forecast-export-ui-959 into main 2026-06-07 08:41:06 +00:00
Collaborator

Что

UI-слайс EPIC #959: кнопки экспорта в Секции 6 (когда прогноз готов) → дёргают backend-эндпоинты экспорта. Делает экспорт §22-отчёта реально используемым из интерфейса.

Относится к #959.

Содержимое

  • ForecastExportButtons.tsx — «Скачать отчёт .md», «Скачать .json» (blob-download), «Скопировать для Telegram» (tg → буфер, с fallback для insecure-context). Виден только при forecast.status==='ready'. Per-button loading, 404 → inline «Отчёт ещё не готов», без крашей/console-спама.
  • lib/download.ts — извлечён общий triggerDownload (DRY; ExportButtons теперь импортит его, поведение без изменений).
  • Секция 6: проброшен cad, рендер контрола в ready-состоянии.

Качество

  • code-reviewer: APPROVE — DRY-extraction faithful (ExportButtons не сломан), clipboard-fallback defensive (insecure+SSR+double try/catch), таймер чистится на unmount (нет setState-after-unmount), blob URL revoked, токены/secondary-CTA --accent-2, RU, no emoji, no new deps. npm run build зелёный.
  • #fff (белый текст на оранжевой CTA) — parity с существующим ExportButtons (отдельный follow-up если переводить оба на токен).

Тест-план (post-deploy, визуально)

/site-finder/analysis/66:41:0702048:27 → Секция 6 (когда прогноз готов): 3 оранжевые кнопки; .md/.json скачиваются, «Скопировать для Telegram» кладёт компактную выжимку в буфер.

## Что UI-слайс EPIC **#959**: кнопки экспорта в Секции 6 (когда прогноз готов) → дёргают backend-эндпоинты экспорта. Делает экспорт §22-отчёта реально используемым из интерфейса. Относится к #959. ## Содержимое - `ForecastExportButtons.tsx` — «Скачать отчёт .md», «Скачать .json» (blob-download), «Скопировать для Telegram» (tg → буфер, с fallback для insecure-context). Виден только при `forecast.status==='ready'`. Per-button loading, 404 → inline «Отчёт ещё не готов», без крашей/console-спама. - `lib/download.ts` — извлечён общий `triggerDownload` (DRY; `ExportButtons` теперь импортит его, поведение без изменений). - Секция 6: проброшен `cad`, рендер контрола в ready-состоянии. ## Качество - `code-reviewer`: ✅ APPROVE — DRY-extraction faithful (ExportButtons не сломан), clipboard-fallback defensive (insecure+SSR+double try/catch), таймер чистится на unmount (нет setState-after-unmount), blob URL revoked, токены/secondary-CTA `--accent-2`, RU, no emoji, no new deps. `npm run build` зелёный. - `#fff` (белый текст на оранжевой CTA) — parity с существующим ExportButtons (отдельный follow-up если переводить оба на токен). ## Тест-план (post-deploy, визуально) `/site-finder/analysis/66:41:0702048:27` → Секция 6 (когда прогноз готов): 3 оранжевые кнопки; .md/.json скачиваются, «Скопировать для Telegram» кладёт компактную выжимку в буфер.
bot-backend added the
scope/frontend
GG-форсайт
site-finder
labels 2026-06-07 08:41:03 +00:00
bot-backend added 1 commit 2026-06-07 08:41:03 +00:00
feat(site-finder): forecast export control in Section 6 (#959)
All checks were successful
CI / changes (push) Successful in 7s
CI / backend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
51a0ae526e
«Скачать отчёт .md / .json» + «Скопировать для Telegram» on the ready §22
forecast, wired to GET /parcels/{cad}/forecast/export. triggerDownload extracted
to lib/download.ts (reused by ExportButtons). Clipboard fallback for insecure
contexts; 404 → inline «Отчёт ещё не готов». Part of EPIC #959.
bot-backend merged commit 858b5f4511 into main 2026-06-07 08:41:06 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1109
No description provided.