diff --git a/client/admin.html b/client/admin.html index 3f5da71..32fc9d9 100644 --- a/client/admin.html +++ b/client/admin.html @@ -114,6 +114,10 @@ Include banned + diff --git a/client/admin.js b/client/admin.js index 372a7d2..ce70d5f 100644 --- a/client/admin.js +++ b/client/admin.js @@ -67,12 +67,13 @@ async function getStats() { return apiRequest('/api/admin/stats'); } -async function getUsers(query = '', offset = 0, includeBanned = true) { +async function getUsers(query = '', offset = 0, includeBanned = true, includeTest = true) { const params = new URLSearchParams({ query, offset, limit: PAGE_SIZE, include_banned: includeBanned, + include_test: includeTest, }); return apiRequest(`/api/admin/users?${params}`); } @@ -306,15 +307,19 @@ async function loadUsers() { try { const query = document.getElementById('user-search').value; const includeBanned = document.getElementById('include-banned').checked; - const data = await getUsers(query, usersPage * PAGE_SIZE, includeBanned); + const includeTest = document.getElementById('include-test').checked; + const data = await getUsers(query, usersPage * PAGE_SIZE, includeBanned, includeTest); const tbody = document.querySelector('#users-table tbody'); tbody.innerHTML = ''; data.users.forEach(user => { + const testBadge = user.is_test_account + ? ' Test' + : ''; tbody.innerHTML += ` - + @@ -447,10 +452,13 @@ async function loadInvites() { : invite.remaining_uses <= 0 ? 'Used Up' : 'Active'; + const testSeedBadge = invite.marks_as_test + ? ' Test-seed' + : ''; tbody.innerHTML += ` - + @@ -827,6 +835,10 @@ document.addEventListener('DOMContentLoaded', () => { usersPage = 0; loadUsers(); }); + document.getElementById('include-test').addEventListener('change', () => { + usersPage = 0; + loadUsers(); + }); document.getElementById('users-prev').addEventListener('click', () => { if (usersPage > 0) { usersPage--;
${escapeHtml(user.username)}${escapeHtml(user.username)}${testBadge} ${escapeHtml(user.email || '-')} ${user.role} ${getStatusBadge(user)}
${escapeHtml(invite.code)}${escapeHtml(invite.code)}${testSeedBadge} ${invite.use_count} / ${invite.max_uses} ${invite.remaining_uses} ${escapeHtml(invite.created_by_username)}