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 = `
`;
return;
}
container.innerHTML = `
Showing ${events.length} of ${total} events (newest first)
| Time |
Actor |
Role |
Action |
Target |
Summary |
${events.map(e => `
| ${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)} |
`).join('')}
`;
}
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;
}