diff --git a/web/src/routes/ips/+page.svelte b/web/src/routes/ips/+page.svelte index 4ec676e..8cc83ce 100644 --- a/web/src/routes/ips/+page.svelte +++ b/web/src/routes/ips/+page.svelte @@ -23,6 +23,8 @@ let map: Leaflet.Map | null = null; let markersLayer: Leaflet.LayerGroup | null = null; let mapPointsCount = $state(0); + let mapStatus = $state(null); + let renderAttempts = $state(0); async function ensureLeaflet() { if (leaflet) return; @@ -52,6 +54,7 @@ function renderMap() { initMap(); mapPointsCount = 0; + mapStatus = null; // GeoIP для City сейчас идёт в координатах уровня city, // поэтому группируем по округлённым координатам. @@ -106,11 +109,20 @@ mapPointsCount = points.length; if (points.length === 0) { map?.invalidateSize(); + mapStatus = 'Нет точек с валидными координатами'; return; } // Если карта/слой ещё не готовы — хотя бы покажем счётчик точек. - if (!leaflet || !map || !markersLayer) return; + if (!leaflet || !map || !markersLayer) { + mapStatus = !leaflet ? 'Leaflet не загружен' : !map ? 'Leaflet map не создан' : 'LayerGroup не готов'; + if (renderAttempts < 5) { + renderAttempts++; + setTimeout(() => renderMap(), 150); + } + return; + } + renderAttempts = 0; markersLayer.clearLayers(); for (const p of points) { @@ -221,6 +233,11 @@ Точек на карте: {mapPointsCount} {/if} + {#if mapStatus} +
+ {mapStatus} +
+ {/if} {:else}