gendesign/frontend/src/components/site-finder
bot-backend abe76ca980
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m4s
CI / openapi-codegen-check (pull_request) Successful in 2m7s
fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах
Follow-up #2451 (эпик #2445, B2/B3): тот же класс — object-literal lookup по
значению, пришедшему из API, без runtime-guard. Значение вне закрытого union'а
(schema drift / частичный деплой) даёт `undefined`, и дальше по-разному плохо:

- `BestLayoutsBlock` (DataQualityCard) — обращение `.fg`/`.bg` к undefined
  РОНЯЕТ рендер всей карточки качества данных;
- `ForecastChart.confidenceByHorizon` — подпись уверенности для горизонта
  пропадает МОЛЧА, при том что прогноз для него есть;
- `compare/CompareTable` и `ptica/compare/PticaCompare` — рядом с процентом
  остаётся «73% · » и обрыв: число выглядит недосказанным, а не неизвестным.

Везде нейтральный fallback по образцу VelocityBlock/ParcelDrawer: серый + «—»,
намеренно НЕ семантический цвет — неизвестное качество не должно читаться ни
как хорошее, ни как плохое.

Фон бейджа взят из существующего `--border-soft`: список токенов закрыт
(ui-tokens.md — «НЕ выдумывать новые»), нейтральной заливки в нём нет.

`DataQualityCard`, `confidenceByHorizon` и `METRIC_ROWS` (ptica) экспортированы
ради тестов — тем же приёмом, что уже применён к `isDeficitDegenerate`.

Тесты: 12 новых в 4 файлах. Проверены на слом — снял все четыре fallback'а,
упало ровно 5 проверок out-of-union, остальные 7 (известные значения,
отсутствующие данные) остались зелёными.

`vitest run src/components/site-finder` — 145 passed, `tsc --noEmit` чисто.

Closes #2452
Refs #2445, #2451
2026-08-27 19:35:56 +03:00
..
__tests__ fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
analysis fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
compare fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
entry revert(site-finder): rollback dark entry-landing skin to light 2026-06-22 11:08:44 +05:00
ptica fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
BestLayoutsBlock.tsx fix(frontend): нейтральный fallback ещё в 4 enum-lookup-местах 2026-08-27 19:35:56 +03:00
CadInput.tsx revert(site-finder): rollback dark entry-landing skin to light 2026-06-22 11:08:44 +05:00
ChatDock.tsx feat(report): nav scrollspy + offset-jump, чат в плавающее окно справа (#958) (#2104) 2026-06-30 10:29:02 +00:00
ChatPanel.tsx feat(site-finder): grounded parcel-chat panel UI (#958) 2026-06-08 18:08:01 +05:00
CompetitorTable.tsx feat(sf-fe-a8): Section 3.2 Планировки + 3.3 Остатки/Velocity + CompetitorTable drawer pattern (#357) 2026-05-18 01:14:32 +00:00
ConfidenceBadge.tsx feat(site-finder): X2 confidence indicator + caveats (#48) (#88) 2026-05-12 01:04:25 +03:00
connection-capacity.ts feat(site-finder): блок «Сети рядом с участком» в §3 (Фаза C2-UI) (#2282) 2026-07-03 08:23:59 +00:00
ConnectionPointsLayer.tsx feat(site-finder): §3 «Сети и точки подключения» — попапы показывают характеристики (#2111) (#2112) 2026-06-30 13:16:07 +00:00
CpLayerControlPanel.tsx fix(ptica): пустой слой риск-зон перестаёт означать «рисков нет» (#2934) (#2940) 2026-08-19 16:34:26 +00:00
CustomPoiAddModal.tsx feat(#254,#114): custom POI UI + score breakdown stacked-bar viz 2026-05-17 09:35:35 +03:00
CustomPoiEditModal.tsx feat(#254,#114): custom POI UI + score breakdown stacked-bar viz 2026-05-17 09:35:35 +03:00
CustomPoiLayer.tsx feat(site-finder): max-info попапы — конкурент / §3-таблица / польз.точка / соседи (#2111) (#2113) 2026-06-30 13:45:43 +00:00
CustomPoiToggleButton.tsx feat(#254,#114): custom POI UI + score breakdown stacked-bar viz 2026-05-17 09:35:35 +03:00
EnvironmentTab.tsx fix(ptica): «0 мм осадков» перестаёт означать «данных нет» (#2464) (#2947) 2026-08-20 07:00:01 +00:00
FetchingState.tsx feat(site-finder): auto-fetch cadastre geometry on-demand (#93) (#95) 2026-05-12 09:02:17 +03:00
GasOutletPointsLayer.tsx feat(site-finder): Celery + §3 точки выхода газосети (#2119 B2, PR-4/4 — финал формы-6) (#2251) 2026-07-03 04:26:41 +00:00
GateVerdictBanner.tsx fix(frontend): нейтральный fallback для gate/velocity enum-lookup (#2445-B2/B3) (#2451) 2026-07-05 19:20:28 +00:00
GeologyBlock.tsx feat(site-finder): v3.4 - weather enrichment (temp/precip/UV) + geology stub 2026-05-11 21:17:57 +03:00
GeometrySuitabilityBlock.tsx feat(site-finder): P1 geometry suitability score (#45) (#89) 2026-05-12 08:00:12 +03:00
GeotechRiskBlock.tsx fix(site-finder): P3 a11y/UI batch from audit #1871 2026-06-23 12:52:32 +05:00
HorizonSelector.tsx feat(site-finder): продуктовые решения по фидбеку analyze (#1741 #1742 #1743 #1744 #1745) 2026-06-18 12:18:04 +05:00
HydrologyBlock.tsx fix(site-finder): P3 a11y/UI batch from audit #1871 2026-06-23 12:52:32 +05:00
IsochronesPanel.tsx feat(site-finder): isochrones UI + networks VKH + OSM substations 2026-05-11 21:48:21 +03:00
KpiCard.tsx fix(site-finder): honest POI-score label + drop duplicate MOI column (audit #1871 P2) 2026-06-23 12:29:02 +05:00
LandTab.tsx fix(ptica): пустой слой риск-зон перестаёт означать «рисков нет» (#2934) (#2940) 2026-08-19 16:34:26 +00:00
MarketLayers.tsx fix(site-finder): попап конкурента — NUMERIC-поля приходят строкой (цена/площадь не рендерились) (#2114) 2026-06-30 14:01:00 +00:00
MarketTab.tsx fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
MarketTrendBlock.tsx fix(site-finder): три честности-фикса — B1 ГРС «выход №N» + околонуль + Росреестр-квартал (#2257) 2026-07-03 06:27:27 +00:00
NeighborsBlock.tsx feat(site-finder): max-info попапы — конкурент / §3-таблица / польз.точка / соседи (#2111) (#2113) 2026-06-30 13:45:43 +00:00
NspdEngineeringNearbyBlock.tsx feat(site-finder): max-info попапы — конкурент / §3-таблица / польз.точка / соседи (#2111) (#2113) 2026-06-30 13:45:43 +00:00
NspdFreshnessBadge.tsx fix(#234): NSPD harvest ETA badge + SETNX dedupe (Sub-PR C) 2026-05-17 09:13:06 +03:00
NspdOpportunityBlock.tsx feat(nspd): TIER 4 opportunity layers + red lines (#94 PR2 of 4) 2026-05-16 19:06:22 +03:00
NspdRedLinesBlock.tsx fix(nspd): rename migration 89→98, fix red lines ST_Area→ST_Length (#220) 2026-05-16 19:33:14 +03:00
NspdRiskZonesBlock.tsx fix(ptica): пустой слой риск-зон перестаёт означать «рисков нет» (#2934) (#2940) 2026-08-19 16:34:26 +00:00
NspdZoningBlock.tsx fix(#234): NSPD harvest ETA badge + SETNX dedupe (Sub-PR C) 2026-05-17 09:13:06 +03:00
NspdZouitOverlapsBlock.tsx fix(site-finder): wire encumbrance/obj_class/ЗОУИТ display + forecast axis & flat-state (#1953) 2026-06-27 16:51:40 +05:00
OverviewTab.tsx fix(report): newbuild-consistent district median + obj_class dedup (#1953) 2026-06-27 15:10:49 +05:00
Pipeline24moBlock.tsx fix(site-finder): §4.3 график «По кварталам» — бары вылезали за край карточки (#2118) 2026-06-30 17:15:56 +00:00
PowerConnectionPointsLayer.tsx feat(site-finder): ЕЭСК-резервы городских ПС/ТП + тепло из ФГИС ФАС (#2119 B2) (#2165) 2026-07-02 16:44:57 +00:00
ScoreBreakdownPanel.tsx feat(site-finder): X1 score breakdown + verbal explain (#47) (#92) 2026-05-12 08:17:00 +03:00
ScoreBreakdownStackedBar.tsx fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
SeasonalWeatherBlock.tsx fix(ptica): «0 мм осадков» перестаёт означать «данных нет» (#2464) (#2947) 2026-08-20 07:00:01 +00:00
SiteMap.tsx fix(ptica): пустой слой риск-зон перестаёт означать «рисков нет» (#2934) (#2940) 2026-08-19 16:34:26 +00:00
SuccessRecommendationBlock.tsx fix(site-finder): wire encumbrance/obj_class/ЗОУИТ display + forecast axis & flat-state (#1953) 2026-06-27 16:51:40 +05:00
UtilityInfrastructureLayer.tsx feat(site-finder): §3 «Сети и точки подключения» — попапы показывают характеристики (#2111) (#2112) 2026-06-30 13:16:07 +00:00
UtilityLayerControlPanel.tsx feat(site-finder): render OSM utility-infrastructure layer on analyze map (#1746) 2026-06-27 03:40:51 +05:00
VelocityBlock.tsx fix(frontend): нейтральный fallback для gate/velocity enum-lookup (#2445-B2/B3) (#2451) 2026-07-05 19:20:28 +00:00
WeightProfilePanel.tsx fix(site-finder): §4.1 «Применить» действительно применяет веса POI (#2790) (#2810) 2026-08-10 08:39:59 +00:00
ZouitLayer.tsx feat(site-finder): §3 «Сети и точки подключения» — попапы показывают характеристики (#2111) (#2112) 2026-06-30 13:16:07 +00:00
ZouitLayerControlPanel.tsx feat(site-finder): ЗОУИТ visual layer на Leaflet карте (#255) 2026-06-13 17:41:08 +00:00