diff --git a/static/css/components/device-cards.css b/static/css/components/device-cards.css index 4394a04..60902b4 100644 --- a/static/css/components/device-cards.css +++ b/static/css/components/device-cards.css @@ -557,18 +557,33 @@ /* ============================================ DEVICE CARD GRID LAYOUT ============================================ */ -.bt-device-list .wifi-device-list-content { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - gap: 12px; - padding: 12px; +#btDeviceListContent { + display: grid !important; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)) !important; + gap: 12px !important; + padding: 12px !important; } -.bt-device-list .device-card { +#btDeviceListContent .device-card { margin: 0; height: fit-content; } +/* Ensure card body is visible */ +.device-card .signal-card-body { + display: flex !important; + flex-direction: column; + gap: 8px; +} + +.device-card .device-identity { + display: block !important; +} + +.device-card .device-signal-row { + display: flex !important; +} + /* ============================================ ENHANCED MODAL STYLES ============================================ */ diff --git a/static/js/components/device-card.js b/static/js/components/device-card.js index 373340a..26eba03 100644 --- a/static/js/components/device-card.js +++ b/static/js/components/device-card.js @@ -154,11 +154,14 @@ const DeviceCard = (function() { * Create a Bluetooth device card */ function createDeviceCard(device, options = {}) { + // Debug: log received device data + console.log('[DeviceCard] Creating card for:', device.address, device); + const card = document.createElement('article'); card.className = 'signal-card device-card'; - card.dataset.deviceId = device.device_id; - card.dataset.protocol = device.protocol; - card.dataset.address = device.address; + card.dataset.deviceId = device.device_id || ''; + card.dataset.protocol = device.protocol || 'ble'; + card.dataset.address = device.address || ''; // Add status classes if (device.heuristic_flags && device.heuristic_flags.includes('new')) { @@ -168,13 +171,26 @@ const DeviceCard = (function() { } // Store full device data for details modal - card.dataset.deviceData = JSON.stringify(device); + try { + card.dataset.deviceData = JSON.stringify(device); + } catch (e) { + card.dataset.deviceData = '{}'; + } - const relativeTime = formatRelativeTime(device.last_seen); - const sparkline = createSparkline(device.rssi_history); - const heuristicBadges = createHeuristicBadges(device.heuristic_flags); - const rangeBand = createRangeBand(device.range_band, device.range_confidence); - const protocolBadge = createProtocolBadge(device.protocol); + const relativeTime = formatRelativeTime(device.last_seen) || 'Unknown'; + const sparkline = createSparkline(device.rssi_history) || ''; + const heuristicBadges = createHeuristicBadges(device.heuristic_flags) || ''; + const rangeBand = createRangeBand(device.range_band, device.range_confidence) || ''; + const protocolBadge = createProtocolBadge(device.protocol) || ''; + + // Build card with explicit defaults for all values + const deviceName = device.name || 'Unknown Device'; + const deviceAddress = device.address || 'Unknown'; + const addressType = device.address_type || 'unknown'; + const rssiDisplay = device.rssi_current !== null && device.rssi_current !== undefined + ? device.rssi_current + ' dBm' : '--'; + const seenCount = device.seen_count || 0; + const inBaseline = device.in_baseline || false; card.innerHTML = `
@@ -182,24 +198,22 @@ const DeviceCard = (function() { ${protocolBadge} ${heuristicBadges}
- + - ${device.in_baseline ? 'Known' : 'New'} + ${inBaseline ? 'Known' : 'New'}
-
${escapeHtml(device.name || 'Unknown Device')}
+
${escapeHtml(deviceName)}
- ${escapeHtml(device.address)} - (${escapeHtml(device.address_type)}) + ${escapeHtml(deviceAddress)} + (${escapeHtml(addressType)})
- - ${device.rssi_current !== null ? device.rssi_current + ' dBm' : '--'} - + ${rssiDisplay} ${sparkline}
${rangeBand} @@ -213,9 +227,9 @@ const DeviceCard = (function() {
👁 - ${device.seen_count}× + ${seenCount}× - + ${escapeHtml(relativeTime)}