Live map follow-ups: stable pin icons, resolved IncidentPanel, filtered rail, weather vs camera dock

- #279: cache incident/fan divIcons by their visual inputs and React.memo
  MapView, so LiveView's 1s clock no longer rebuilds icons / calls setIcon
  and the #238 pulse ring completes its cycle.
- #275: IncidentPanel shows "resolved", "lasted X" frozen at resolved_at,
  and labels live cameras/context as current, not incident-time.
- #268: rail header (desktop + mobile drawer) reads "N of M · filtered"
  via a new filteredFrom prop while the wall filter is on.
- #278: while camera tiles are docked bottom-centre, the weather status
  chip and radar badge stack under the tiles inside the dock instead of
  being covered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Logan Cusano
2026-10-05 04:01:20 -04:00
co-authored by Claude Opus 5.5
parent 3c5496acb1
commit 9698d463ad
3 changed files with 101 additions and 18 deletions
+1
View File
@@ -575,6 +575,7 @@ export function LiveView() {
onAir={onAir}
camCountByIncident={camCountByIncident}
pulseIncidentIds={attention.pulseIds}
filteredFrom={filtered.active ? activeIncidents.length : undefined}
key={mapGen}
initialLayers={mapState.layers}
initialBase={mapState.base}