// mb-discover.jsx — Descobrir (map + filters + radius + list) // ── Centros de cada região (lat, lng) ──────────────────────── const REGION_CENTERS = { "Todas": [-10.9472, -37.0731], "Aracaju": [-10.9472, -37.0731], "Barra dos Coqueiros": [-10.9098, -37.0395], "Zona de Expansão": [-11.0500, -37.1200], }; // ── Mapa Leaflet real ──────────────────────────────────────── function MapCanvas({ partners, radiusKm, regionFilter, userPos, selectedId, onSelect }) { const mapDiv = React.useRef(null); const mapInst = React.useRef(null); const markers = React.useRef({}); const circle = React.useRef(null); const userMk = React.useRef(null); // Inicializa o mapa uma única vez React.useEffect(() => { if (!window.L || !mapDiv.current || mapInst.current) return; const center = REGION_CENTERS[regionFilter || "Todas"] || REGION_CENTERS["Aracaju"]; const map = L.map(mapDiv.current, { center, zoom: 14, zoomControl: false, attributionControl: false, }); L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19 }).addTo(map); mapInst.current = map; return () => { map.remove(); mapInst.current = null; }; }, []); // Navega quando muda região (explícita) React.useEffect(() => { if (!mapInst.current) return; const c = REGION_CENTERS[regionFilter || "Todas"] || REGION_CENTERS["Aracaju"]; mapInst.current.flyTo(c, 14, { duration: 1 }); }, [regionFilter]); // Voa para posição do usuário quando GPS resolve e nenhuma região está fixada React.useEffect(() => { if (!mapInst.current || !userPos || (regionFilter && regionFilter !== "Todas")) return; mapInst.current.flyTo([userPos.lat, userPos.lng], 13, { duration: 1.2 }); }, [userPos?.lat, userPos?.lng]); // Atualiza marcadores quando parceiros mudam React.useEffect(() => { if (!mapInst.current || !window.L) return; const map = mapInst.current; Object.values(markers.current).forEach(m => map.removeLayer(m)); markers.current = {}; partners.forEach(p => { const lat = p._raw?.latitude || p.latitude; const lng = p._raw?.longitude || p.longitude; if (!lat || !lng) return; const sel = p.id === selectedId; const color = p.color || "#1E63C8"; const icon = L.divIcon({ className: "", html: `