fix: clarify event handling in waveform viewer
This commit is contained in:
+31
-10
@@ -240,6 +240,7 @@
|
||||
let charts = {};
|
||||
let lastData = null;
|
||||
let unitInfo = null;
|
||||
let eventList = []; // populated from /device/events after connect
|
||||
let currentEventIndex = 0;
|
||||
|
||||
function setStatus(msg, cls = '') {
|
||||
@@ -283,24 +284,45 @@
|
||||
return;
|
||||
}
|
||||
|
||||
// Populate unit bar
|
||||
// Populate unit bar from /device/info
|
||||
document.getElementById('u-serial').textContent = unitInfo.serial || '—';
|
||||
document.getElementById('u-fw').textContent = unitInfo.firmware_version || '—';
|
||||
const sr = unitInfo.compliance_config?.sample_rate;
|
||||
document.getElementById('u-sr').textContent = sr ? `${sr} sps` : '—';
|
||||
const count = unitInfo.event_count ?? 0;
|
||||
document.getElementById('u-count').textContent = count;
|
||||
|
||||
// Build event chips
|
||||
// Fetch real event list from /device/events — SUB 08 count is unreliable
|
||||
setStatus('Fetching event list…', 'loading');
|
||||
const eventsUrl = `${apiBase}/device/events?host=${encodeURIComponent(devHost)}&tcp_port=${tcpPort}`;
|
||||
try {
|
||||
const evResp = await fetch(eventsUrl);
|
||||
if (!evResp.ok) {
|
||||
const err = await evResp.json().catch(() => ({ detail: evResp.statusText }));
|
||||
throw new Error(err.detail || evResp.statusText);
|
||||
}
|
||||
const evData = await evResp.json();
|
||||
eventList = evData.events || [];
|
||||
} catch (e) {
|
||||
setStatus(`Error fetching events: ${e.message}`, 'error');
|
||||
btn.disabled = false;
|
||||
btn.textContent = 'Reconnect';
|
||||
return;
|
||||
}
|
||||
|
||||
const count = eventList.length;
|
||||
document.getElementById('u-count').textContent = count;
|
||||
|
||||
// Build event chips with timestamps
|
||||
const chipsEl = document.getElementById('event-chips');
|
||||
chipsEl.innerHTML = '';
|
||||
for (let i = 0; i < count; i++) {
|
||||
eventList.forEach((ev, i) => {
|
||||
const chip = document.createElement('button');
|
||||
chip.className = 'event-chip' + (i === 0 ? ' active' : '');
|
||||
chip.textContent = `Event ${i}`;
|
||||
const label = ev.timestamp?.display ?? `Event ${ev.index}`;
|
||||
chip.textContent = label;
|
||||
chip.title = ev.record_type || '';
|
||||
chip.onclick = () => selectEvent(i);
|
||||
chipsEl.appendChild(chip);
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('unit-bar').style.display = 'flex';
|
||||
document.getElementById('load-btn').disabled = count === 0;
|
||||
@@ -324,8 +346,7 @@
|
||||
c.classList.toggle('active', i === idx);
|
||||
});
|
||||
document.getElementById('prev-btn').disabled = idx <= 0;
|
||||
const count = unitInfo?.event_count ?? 0;
|
||||
document.getElementById('next-btn').disabled = idx >= count - 1;
|
||||
document.getElementById('next-btn').disabled = idx >= eventList.length - 1;
|
||||
loadWaveform();
|
||||
}
|
||||
|
||||
@@ -363,7 +384,7 @@
|
||||
}
|
||||
|
||||
function stepEvent(delta) {
|
||||
const count = unitInfo?.event_count ?? 0;
|
||||
const count = eventList.length;
|
||||
const next = Math.max(0, Math.min(count - 1, currentEventIndex + delta));
|
||||
selectEvent(next);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user