/* global React */ // ──────────────────────────────────────────────────────────── // HOME — вариант B: «Карта-первичная» // Top: интерактивная Leaflet карта с маркерами всех событий // (preview-режим, без drag/zoom). Снизу — счётчики + лента. // ──────────────────────────────────────────────────────────── window.HomeScreenB = ({ T, dark, onOpenEvent }) => { const data = window.DATA.useDataState(); const events = data.events; const mapRef = React.useRef(null); const mapId = React.useMemo(() => "map-home-b-" + Math.random().toString(36).slice(2, 8), []); const last = events[0]; const ru24 = events.filter((e) => e.isRu && e.minutesAgo < 24*60).length; const world24 = events.filter((e) => e.minutesAgo < 24*60).length; const recent24 = events.filter((e) => e.minutesAgo < 24*60); const maxMag = recent24.length > 0 ? Math.max(...recent24.map((e) => e.mag)) : 0; React.useEffect(() => { if (!window.L || !events.length) return; if (mapRef.current) { mapRef.current.remove(); mapRef.current = null; } const m = window.L.map(mapId, { zoomControl: false, attributionControl: false, dragging: false, scrollWheelZoom: false, doubleClickZoom: false, touchZoom: false, boxZoom: false, keyboard: false, tap: false, }).setView([58, 95], 2); const tileUrl = dark ? "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png" : "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png"; window.L.tileLayer(tileUrl, { maxZoom: 8 }).addTo(m); events.forEach((e) => { const color = window.magColor(e.mag, T); const r = 4 + (e.mag - 4) * 4; window.L.circleMarker([e.lat, e.lon], { radius: r, color, fillColor: color, fillOpacity: 0.5, weight: 1.5, }).addTo(m).on("click", () => onOpenEvent(e)); }); mapRef.current = m; return () => { if (mapRef.current) { mapRef.current.remove(); mapRef.current = null; } }; }, [dark, events]); if (!events.length) { return (
События ещё не загружены.
); } return (
{/* Карта-герой */}
{/* LIVE overlay top-left */}
LIVE · {events.length} событий
{/* Счётчики 24ч */}
{/* Лента — компактная */}
ХРОНОЛОГИЯ · {events.length} СОБЫТИЙ
{events.map((e, i, arr) => ( onOpenEvent(e)} last={i === arr.length - 1} /> ))}
); };