import { apiGet } from '../api.js'; import { showToast } from '../app.js'; export async function activityPage() { const app = document.getElementById('app'); app.innerHTML = `
`; document.getElementById('act_refresh').addEventListener('click', loadActivity); document.getElementById('act_filter').addEventListener('change', loadActivity); await loadActivity(); } async function loadActivity() { const container = document.getElementById('activityContent'); container.innerHTML = '
'; const action = document.getElementById('act_filter')?.value || ''; const qs = action ? `?limit=200&action=${encodeURIComponent(action)}` : '?limit=200'; try { const data = await apiGet(`activity${qs}`); renderActivity(data.events || [], data.total ?? 0); } catch (e) { showToast(e.message, 'error'); container.innerHTML = `

${esc(e.message)}

`; } } function renderActivity(events, total) { const container = document.getElementById('activityContent'); if (!events.length) { container.innerHTML = `

No activity

`; return; } container.innerHTML = `

Showing ${events.length} of ${total} events (newest first)

${events.map(e => ` `).join('')}
Time Actor Role Action Target Summary
${esc(formatTime(e.createdAt))} ${esc(e.actorUsername || e.actorUserID || '—')} ${esc(e.actorRole || '')} ${esc(e.action)} ${esc(e.targetType || '')}${e.targetID ? ': ' + esc(e.targetID) : ''} ${esc(e.summary)}
`; } function formatTime(ms) { if (!ms) return ''; const d = new Date(Number(ms)); return d.toLocaleString(); } function esc(s) { const d = document.createElement('div'); d.textContent = s ?? ''; return d.innerHTML; }