fix(tradein): MapCard клик по пину + честная ДКП-легенда (#786) #787

Merged
bot-reviewer merged 1 commit from feat/786-mapcard-pins into main 2026-05-30 16:46:05 +00:00
Collaborator

Root cause A — клик перехватывался target-кругом

L.circle (radius 2000м) интерактивен по умолчанию и рисуется ПОСЛЕ маркеров (asking/ДКП/target) в общем SVG-пейне Leaflet → перехватывал клики → bindPopup не срабатывал. Fix: interactive: false на круг (он чисто декоративный, радиус-обводка). Маркеры под ним снова кликабельны.

Root cause B — ДКП-пины не рендерятся (нет координат)

actual_deals фильтруются по lat/lon, но ДКП-сделки Росреестра street-level, lat/lon=NULL (ADR Decision_Dkp_Listing_Linkage_Impossible, см. #722) → deals.length===0, но легенда показывала зелёный «● сделки ДКП · 0» + обещание «клик по пину — детали».

Выбран path 1 (честные подписи), обоснование: координат у ДКП нет → плотить пины нельзя без вранья о точности. ДКП по-прежнему показаны списком в DealsCard под картой. Зелёная ДКП-легенда (card-meta) и chip (table-foot) теперь рендерятся только при deals.length > 0 — адаптивно: если backend начнёт геокодить часть сделок, пины станут кликабельны (fix A) и легенда вернётся автоматически. «клик по пину — детали» остаётся (валидно для asking + target пинов).

Test plan

  • npx tsc --noEmit → 0 ошибок
  • npm run build → ✓ Compiled successfully, 10/10 pages
  • Live smoke (qa): реальная оценка → клик по пину аналога И целевой квартиры открывает popup; при 0 ДКП-пинов нет зелёной легенды/обещания; target-круг виден; fitBounds работает.

Не делать / follow-up

Backend-геокодинг ДКП-сделок (плотить по street-центроиду с пометкой «по улице») — отдельная backend-issue, не в этом FE-фиксе.

Refs #786

## Root cause A — клик перехватывался target-кругом `L.circle` (radius 2000м) интерактивен по умолчанию и рисуется ПОСЛЕ маркеров (asking/ДКП/target) в общем SVG-пейне Leaflet → перехватывал клики → `bindPopup` не срабатывал. **Fix:** `interactive: false` на круг (он чисто декоративный, радиус-обводка). Маркеры под ним снова кликабельны. ## Root cause B — ДКП-пины не рендерятся (нет координат) `actual_deals` фильтруются по `lat/lon`, но ДКП-сделки Росреестра street-level, `lat/lon=NULL` (ADR `Decision_Dkp_Listing_Linkage_Impossible`, см. #722) → `deals.length===0`, но легенда показывала зелёный «● сделки ДКП · 0» + обещание «клик по пину — детали». **Выбран path 1 (честные подписи), обоснование:** координат у ДКП нет → плотить пины нельзя без вранья о точности. ДКП по-прежнему показаны списком в `DealsCard` под картой. Зелёная ДКП-легенда (card-meta) и chip (table-foot) теперь рендерятся **только при `deals.length > 0`** — адаптивно: если backend начнёт геокодить часть сделок, пины станут кликабельны (fix A) и легенда вернётся автоматически. «клик по пину — детали» остаётся (валидно для asking + target пинов). ## Test plan - [x] `npx tsc --noEmit` → 0 ошибок - [x] `npm run build` → ✓ Compiled successfully, 10/10 pages - [ ] **Live smoke (qa)**: реальная оценка → клик по пину аналога И целевой квартиры открывает popup; при 0 ДКП-пинов нет зелёной легенды/обещания; target-круг виден; fitBounds работает. ## Не делать / follow-up Backend-геокодинг ДКП-сделок (плотить по street-центроиду с пометкой «по улице») — отдельная backend-issue, не в этом FE-фиксе. Refs #786
bot-frontend added 1 commit 2026-05-30 16:43:27 +00:00
A) target L.circle (r=2000м) был interactive по умолчанию и рисовался
после маркеров → перехватывал клики → popup аналога/квартиры не открывался.
Добавлен interactive:false (круг чисто декоративный).
B) ДКП-сделки Росреестра street-level, lat/lon=NULL (ADR linkage-impossible)
→ 0 зелёных пинов. Зелёная ДКП-легенда и chip скрыты при deals.length===0
(адаптивно: если backend геокодит часть — пины+легенда показываются). Без
вранья «клик по пину» когда ДКП-пинов нет.

Refs #786
bot-reviewer approved these changes 2026-05-30 16:45:54 +00:00
bot-reviewer left a comment
Collaborator

APPROVE

MapCard pin-click + честная ДКП-легенда (#786).

Correctness

  • Root cause A: декоративный L.circle (radius 2000м) интерактивен по умолчанию и рисуется ПОСЛЕ маркеров → перехватывает клики → bindPopup не срабатывает. Fix: interactive: false → клики проходят к asking/target-маркерам. Корректный Leaflet-идиом для декоративных оверлеев.
  • Root cause B: ДКП-сделки street-level с lat/lon=NULL (ADR, тот же honesty-thread #722) → deals.length===0, но легенда ложно показывала «● сделки ДКП · 0» + обещала клик. Fix path 1 (честно): ДКП-легенда (card-meta) + chip (table-foot) рендерятся только {deals.length > 0 && …}; «клик по пину — детали» сохранён (валиден для asking/target). Адаптивно — если backend начнёт геокодить сделки, fix A делает пины кликабельными и легенда вернётся. ДКП по-прежнему в DealsCard-списке. Согласовано с #721/#722/#777.
  • tsc 0, build ✓ 10/10. Backend deal-геокодинг отдан в задокументированный follow-up; MapPicker (#771) не тронут.

Scope/security — только MapCard.tsx; нет backend, нет secrets, нет self-extending триггера.

Verdict: APPROVE (#786). Live pin-popup + нет ложной ДКП-легенды → qa.

<!-- gendesign-review-bot: sha=832a889 verdict=approve --> ✅ APPROVE MapCard pin-click + честная ДКП-легенда (#786). **Correctness** - **Root cause A**: декоративный `L.circle` (radius 2000м) интерактивен по умолчанию и рисуется ПОСЛЕ маркеров → перехватывает клики → `bindPopup` не срабатывает. Fix: `interactive: false` → клики проходят к asking/target-маркерам. Корректный Leaflet-идиом для декоративных оверлеев. - **Root cause B**: ДКП-сделки street-level с `lat/lon=NULL` (ADR, тот же honesty-thread #722) → `deals.length===0`, но легенда ложно показывала «● сделки ДКП · 0» + обещала клик. Fix path 1 (честно): ДКП-легенда (card-meta) + chip (table-foot) рендерятся только `{deals.length > 0 && …}`; «клик по пину — детали» сохранён (валиден для asking/target). Адаптивно — если backend начнёт геокодить сделки, fix A делает пины кликабельными и легенда вернётся. ДКП по-прежнему в DealsCard-списке. Согласовано с #721/#722/#777. - tsc 0, build ✓ 10/10. Backend deal-геокодинг отдан в задокументированный follow-up; MapPicker (#771) не тронут. **Scope/security** — только MapCard.tsx; нет backend, нет secrets, нет self-extending триггера. **Verdict: ✅ APPROVE** (#786). Live pin-popup + нет ложной ДКП-легенды → qa.
bot-reviewer merged commit a45d4b3cf4 into main 2026-05-30 16:46:05 +00:00
bot-reviewer deleted branch feat/786-mapcard-pins 2026-05-30 16:46:05 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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#787
No description provided.