From 446bec278d83442e3b3979c5cfe245913c8bed1d Mon Sep 17 00:00:00 2001 From: User Date: Sun, 1 Feb 2026 12:44:31 +0100 Subject: [PATCH] fix: prevent duplicate scanner markers when viewing peer nodes - Use viewing scanner name (peer or local) for center marker - Filter out the peer being viewed from peer markers list - Fixes duplicate grokbox markers when viewing grokbox from master Co-Authored-By: Claude Opus 4.5 --- src/rf_mapper/web/static/js/app.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/rf_mapper/web/static/js/app.js b/src/rf_mapper/web/static/js/app.js index 9f4c3bf..eef02d0 100644 --- a/src/rf_mapper/web/static/js/app.js +++ b/src/rf_mapper/web/static/js/app.js @@ -938,8 +938,9 @@ function updateMapMarkers() { const lat = parseFloat(document.getElementById('lat-input').value); const lon = parseFloat(document.getElementById('lon-input').value); - // Add center marker (this scanner) - distinct star shape - const localScannerName = APP_CONFIG.scanner?.name || APP_CONFIG.scanner?.id || 'Scanner'; + // Add center marker (viewing scanner) - distinct star shape + // When viewing a peer, show that peer's name; otherwise show local scanner name + const viewingScannerName = activeNodeInfo?.name || APP_CONFIG.scanner?.name || APP_CONFIG.scanner?.id || 'Scanner'; const scannerIcon = `
@@ -953,14 +954,17 @@ function updateMapMarkers() { iconSize: [24, 24], iconAnchor: [12, 12] }) - }).addTo(map).bindPopup(`๐Ÿ“ ${escapeHtml(localScannerName)}
WiFi ยท Bluetooth`); + }).addTo(map).bindPopup(`๐Ÿ“ ${escapeHtml(viewingScannerName)}
WiFi ยท Bluetooth`); markers.push(centerMarker); // Add peer scanner markers (async, won't block) + // Skip the peer we're currently viewing (it's shown as center marker) fetch('/api/peers') .then(r => r.json()) .then(data => { (data.peers || []).forEach(peer => { + // Skip if this is the peer we're currently viewing + if (activeNodeInfo && peer.scanner_id === activeNodeInfo.id) return; if (peer.latitude && peer.longitude) { const peerName = peer.name || peer.scanner_id; const peerIcon = ` @@ -1845,11 +1849,12 @@ function update3DMarkers() { const groundFloor = buildingConfig.groundFloorNumber || 0; // Add scanner position marker at center (draggable for fine-grained positioning) - const scannerName = APP_CONFIG.scanner?.name || APP_CONFIG.scanner?.id || 'Scanner'; + // When viewing a peer, show that peer's name; otherwise show local scanner name + const viewingScannerName = activeNodeInfo?.name || APP_CONFIG.scanner?.name || APP_CONFIG.scanner?.id || 'Scanner'; const scannerEl = document.createElement('div'); scannerEl.className = 'marker-3d center draggable'; scannerEl.innerHTML = `
๐Ÿ“
F${scannerFloor}
`; - scannerEl.title = `${scannerName} - Floor ${scannerFloor} (drag to reposition)`; + scannerEl.title = `${viewingScannerName} - Floor ${scannerFloor} (drag to reposition)`; const scannerOffset = (scannerFloor - groundFloor) * pixelsPerFloor; const scannerMarker = new maplibregl.Marker({ @@ -1859,7 +1864,7 @@ function update3DMarkers() { }) .setLngLat([lon, lat]) .setPopup(new maplibregl.Popup().setHTML(` - ๐Ÿ“ ${escapeHtml(scannerName)}
+ ๐Ÿ“ ${escapeHtml(viewingScannerName)}
WiFi ยท Bluetooth
Floor: ${scannerFloor}
${lat.toFixed(6)}, ${lon.toFixed(6)} @@ -1873,10 +1878,13 @@ function update3DMarkers() { map3dMarkers.push(scannerMarker); // Add peer scanner markers (absolute positions) + // Skip the peer we're currently viewing (it's shown as center marker) fetch('/api/peers') .then(r => r.json()) .then(data => { (data.peers || []).forEach(peer => { + // Skip if this is the peer we're currently viewing + if (activeNodeInfo && peer.scanner_id === activeNodeInfo.id) return; if (peer.latitude && peer.longitude) { const peerFloor = peer.floor ?? 0; const peerOffset = (peerFloor - groundFloor) * pixelsPerFloor;