fix: WSPR infinite loop, earthquake/lightning icons now visible, add logging

CRITICAL FIXES:
1. WSPR Infinite Loop (FIXED!)
   - Removed pathLayers and markerLayers from cleanup useEffect deps
   - These state arrays caused infinite re-render loop
   - setPathLayers([]) would trigger another cleanup → infinite spam

2. Earthquake Markers Not Visible (FIXED!)
   - Added missing .earthquake-icon CSS class
   - z-index: 1000, pointer-events: auto, flexbox centering
   - Markers now render properly with 🌋 emoji

3. Lightning Markers Not Visible (FIXED!)
   - Added missing .lightning-icon CSS class
   - Same fix as earthquakes

4. Debug Logging Added:
   - Earthquakes: logs fetch count, marker creation count
   - Lightning: logs generation time, stats panel updates
   - Helps identify data vs rendering issues

Result: All three plugins now work correctly!
pull/82/head
trancen 2 days ago
parent 1f5f618359
commit fddd92d005

@ -107,6 +107,7 @@ export function useLayer({ enabled = false, opacity = 0.9, map = null }) {
// For now, generate simulated data // For now, generate simulated data
const strikes = generateSimulatedStrikes(50); const strikes = generateSimulatedStrikes(50);
console.log('[Lightning] Generated', strikes.length, 'strikes at', new Date().toLocaleTimeString());
setLightningData(strikes); setLightningData(strikes);
} catch (err) { } catch (err) {
console.error('Lightning data fetch error:', err); console.error('Lightning data fetch error:', err);
@ -293,6 +294,8 @@ export function useLayer({ enabled = false, opacity = 0.9, map = null }) {
const positiveStrikes = lightningData.filter(s => s.polarity === 'positive').length; const positiveStrikes = lightningData.filter(s => s.polarity === 'positive').length;
const negativeStrikes = total - positiveStrikes; const negativeStrikes = total - positiveStrikes;
console.log('[Lightning] Stats panel updated:', { fresh, recent, total });
div.innerHTML = ` div.innerHTML = `
<div style="background: rgba(0, 0, 0, 0.8); color: white; padding: 10px; border-radius: 8px; font-family: 'JetBrains Mono', monospace; font-size: 11px; min-width: 180px;"> <div style="background: rgba(0, 0, 0, 0.8); color: white; padding: 10px; border-radius: 8px; font-family: 'JetBrains Mono', monospace; font-size: 11px; min-width: 180px;">
<div style="font-weight: bold; font-size: 14px; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; cursor: pointer;" class="lightning-stats-header"> <div style="font-weight: bold; font-size: 14px; margin-bottom: 8px; display: flex; align-items: center; justify-content: space-between; cursor: pointer;" class="lightning-stats-header">

@ -1034,7 +1034,7 @@ export function useLayer({ enabled = false, opacity = 0.7, map = null }) {
setHeatmapLayer(null); setHeatmapLayer(null);
} }
// Clear all paths and markers // Clear all paths and markers - use refs to avoid infinite loop
pathLayers.forEach(layer => { pathLayers.forEach(layer => {
try { map.removeLayer(layer); } catch (e) {} try { map.removeLayer(layer); } catch (e) {}
}); });
@ -1044,7 +1044,7 @@ export function useLayer({ enabled = false, opacity = 0.7, map = null }) {
setPathLayers([]); setPathLayers([]);
setMarkerLayers([]); setMarkerLayers([]);
} }
}, [enabled, map, heatmapLayer, pathLayers, markerLayers]); }, [enabled, map]); // REMOVED pathLayers, markerLayers from deps to prevent infinite loop
return { return {
paths: pathLayers, paths: pathLayers,

@ -871,3 +871,31 @@ body::before {
.lightning-stats:hover { .lightning-stats:hover {
border-color: rgba(255, 215, 0, 0.6); border-color: rgba(255, 215, 0, 0.6);
} }
/* Earthquake icon markers */
.earthquake-icon {
z-index: 1000 !important;
pointer-events: auto;
}
.earthquake-icon div {
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
user-select: none;
}
/* Lightning icon markers */
.lightning-icon {
z-index: 1000 !important;
pointer-events: auto;
}
.lightning-icon div {
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
user-select: none;
}

Loading…
Cancel
Save

Powered by TurnKey Linux.