feat(journal): live updates on new entry via SSE (/api/events) — admin journal auto-refreshes when a student submits

This commit is contained in:
dev
2026-09-16 20:09:06 +03:00
parent e8337c2845
commit 2784084c68
2 changed files with 55 additions and 0 deletions
+24
View File
@@ -219,6 +219,29 @@ function goPage(p) {
loadEntries();
}
let liveSource = null;
let liveReconnectTimer = null;
function connectLiveUpdates() {
if (liveSource) { liveSource.close(); liveSource = null; }
const connect = () => {
const t = sessionStorage.getItem('authToken');
if (!t) return;
liveSource = new EventSource(`${API}/api/events?token=${encodeURIComponent(t)}`);
liveSource.addEventListener('entries_changed', () => {
showToast('Поступила новая запись — список обновлён');
page = 1;
loadEntries();
});
liveSource.onerror = () => {
if (liveSource) { liveSource.close(); liveSource = null; }
if (liveReconnectTimer) clearTimeout(liveReconnectTimer);
liveReconnectTimer = setTimeout(connect, 5000);
};
};
connect();
window.addEventListener('beforeunload', () => { if (liveSource) liveSource.close(); });
}
async function openEdit(id) {
const e = currentEntries.find(x => x.id === id);
if (!e) return;
@@ -670,5 +693,6 @@ document.getElementById('linkCopyBtn').addEventListener('click', copyLink);
loadGroupOptions();
loadStudentOptions();
loadEntries();
connectLiveUpdates();
}
})();