From 99ca42e5d051501ba76eb6ffc996c5aff084df6d Mon Sep 17 00:00:00 2001 From: lekss361 Date: Mon, 11 May 2026 23:03:25 +0300 Subject: [PATCH] fix(site-finder): isochrones map re-renders on mode change (key includes coords hash) --- frontend/src/components/site-finder/SiteMap.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/site-finder/SiteMap.tsx b/frontend/src/components/site-finder/SiteMap.tsx index 10cc3392..9c007246 100644 --- a/frontend/src/components/site-finder/SiteMap.tsx +++ b/frontend/src/components/site-finder/SiteMap.tsx @@ -144,7 +144,11 @@ export function SiteMap({ data, isochrones }: Props) { /> )} - {/* Isochrones — render in reverse order (largest range at bottom) */} + {/* Isochrones — render in reverse order (largest range at bottom). + NB: react-leaflet GeoJSON кэширует слой, не реагирует на смену + `data` prop. Включаем в key первую координату feature (она + различается между mode=foot/cycle/car и временем) — это + форсирует remount при пересчёте от ORS. */} {isochrones && [...isochrones.features].reverse().map((feature, idx) => { const seconds = @@ -159,9 +163,16 @@ export function SiteMap({ data, isochrones }: Props) { : minutes <= 20 ? "#3b82f6" : "#a855f7"; + // Hash из первой координаты — различает foot/cycle/car полигоны + const firstCoord = ( + feature.geometry as { coordinates?: number[][][] } + )?.coordinates?.[0]?.[0]; + const coordHash = firstCoord + ? `${firstCoord[0].toFixed(4)},${firstCoord[1].toFixed(4)}` + : `${idx}`; return (