Slon/Http/AdminServer: Paginate list of accounts
This commit is contained in:
parent
8838d0446d
commit
4a5a23d7fb
2 changed files with 38 additions and 9 deletions
|
@ -264,7 +264,25 @@ U0 @slon_admin_new_account(SlonHttpSession* session)
|
||||||
|
|
||||||
U0 @slon_admin_manage_accounts(SlonHttpSession* session)
|
U0 @slon_admin_manage_accounts(SlonHttpSession* session)
|
||||||
{
|
{
|
||||||
session->send(db->a("accounts"));
|
SLON_SCRATCH_BUFFER_AND_REQUEST_JSON
|
||||||
|
no_warn scratch_buffer;
|
||||||
|
|
||||||
|
JsonArray* results = Json.CreateArray();
|
||||||
|
I64 skip = Str2I64(request_json->@("skip"));
|
||||||
|
I64 limit = 10;
|
||||||
|
I64 i;
|
||||||
|
I64 count = 0;
|
||||||
|
JsonArray* accounts = db->a("accounts");
|
||||||
|
for (i = skip; i < accounts->length && i < skip + limit; i++) {
|
||||||
|
results->append(Json.CreateItem(accounts->@(i), JSON_OBJECT));
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
JsonObject* o = Json.CreateObject();
|
||||||
|
o->set("total", accounts->length, JSON_NUMBER);
|
||||||
|
o->set("skip", skip, JSON_NUMBER);
|
||||||
|
o->set("count", count, JSON_NUMBER);
|
||||||
|
o->set("accounts", results, JSON_ARRAY);
|
||||||
|
session->send(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
U0 @slon_admin_info_stats(SlonHttpSession* session)
|
U0 @slon_admin_info_stats(SlonHttpSession* session)
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
<p class="menu-label">Manage</p>
|
<p class="menu-label">Manage</p>
|
||||||
<ul class="menu-list">
|
<ul class="menu-list">
|
||||||
<li><a onclick="manageAccounts()" id="menuitem-accounts">Accounts</a></li>
|
<li><a onclick="manageAccounts(0)" id="menuitem-accounts">Accounts</a></li>
|
||||||
<li><a onclick="manageInstance()" id="menuitem-instance">Instance</a></li>
|
<li><a onclick="manageInstance()" id="menuitem-instance">Instance</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="menu-label">Diagnostics</p>
|
<p class="menu-label">Diagnostics</p>
|
||||||
|
@ -63,18 +63,29 @@
|
||||||
setContent(html);
|
setContent(html);
|
||||||
setActiveLink("stats");
|
setActiveLink("stats");
|
||||||
}
|
}
|
||||||
async function manageAccounts() {
|
async function manageAccounts(page) {
|
||||||
clearActiveLinks();
|
clearActiveLinks();
|
||||||
const request = new Request("/manage/accounts");
|
const request = new Request("/manage/accounts?skip=" + (page*10).toString());
|
||||||
const response = await fetch(request);
|
const response = await fetch(request);
|
||||||
const accounts = await response.json();
|
const result = await response.json();
|
||||||
|
const accounts = result["accounts"];
|
||||||
let html = "<h4 class=\"title is-4\">Accounts</h4><div class=spacer></div>";
|
let html = "<h4 class=\"title is-4\">Accounts</h4><div class=spacer></div>";
|
||||||
if (accounts.length) {
|
if (accounts.length) {
|
||||||
html += "<table class=table><thead><tr><th>id</th><th>acct</th><th>display_name</th><th>type</th><th>delete</th></tr></head><tbody>";
|
html += "<table class=table><thead><tr><th></th><th>id</th><th>acct</th><th>display_name</th><th>type</th><th>delete</th></tr></head><tbody>";
|
||||||
for (let i = 0; i < accounts.length; i++) {
|
for (let i = 0; i < accounts.length; i++) {
|
||||||
html += "<tr><td>" + accounts[i]["id"] + "</td><td>" + accounts[i]["acct"] + "</td><td>" + accounts[i]["display_name"] + "</td><td>"+ (accounts[i]["remote_actor"] == undefined ? "local" : "remote") + "</td><td style=\"text-align:center\"><a href=\"javascript:confirmDeleteUser('" + accounts[i]["acct"] + "','" + accounts[i]["id"] + "');\">❌</a></td><tr>";
|
html += "<tr><td><img src=\"" + accounts[i]["avatar_static"] + "\" style=\"width:48px;height:48px\"></td><td>" + accounts[i]["id"] + "</td><td>" + accounts[i]["acct"] + "</td><td>" + accounts[i]["display_name"] + "</td><td>"+ (accounts[i]["remote_actor"] == undefined ? "local" : "remote") + "</td><td style=\"text-align:center\"><a href=\"javascript:confirmDeleteUser('" + accounts[i]["acct"] + "','" + accounts[i]["id"] + "');\">❌</a></td><tr>";
|
||||||
}
|
}
|
||||||
html += "</tbody></table>";
|
html += "</tbody></table>";
|
||||||
|
html += "<nav class=\"pagination\" role=\"navigation\" aria-label=\"pagination\">";
|
||||||
|
html += "<ul class=\"pagination-list\">";
|
||||||
|
for (let i = 0; i < result["total"] / 10; i++) {
|
||||||
|
html += "<li><a href=\"javascript:manageAccounts(" + i.toString() + ")\"class=\"pagination-link";
|
||||||
|
if (i == result["skip"] / 10) {
|
||||||
|
html += " is-current";
|
||||||
|
}
|
||||||
|
html += "\">" + (i+1).toString() + "</a></li>";
|
||||||
|
}
|
||||||
|
html += "</ul></nav>";
|
||||||
} else {
|
} else {
|
||||||
html += "No users";
|
html += "No users";
|
||||||
}
|
}
|
||||||
|
@ -87,7 +98,7 @@
|
||||||
const request = new Request("/delete/account?id=" + id);
|
const request = new Request("/delete/account?id=" + id);
|
||||||
const response = await fetch(request);
|
const response = await fetch(request);
|
||||||
const empty_json = await response.json();
|
const empty_json = await response.json();
|
||||||
manageAccounts();
|
manageAccounts(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function manageNewUser() {
|
function manageNewUser() {
|
||||||
|
@ -142,7 +153,7 @@
|
||||||
const response = await fetch(request);
|
const response = await fetch(request);
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
if (!Object.keys(json).length) {
|
if (!Object.keys(json).length) {
|
||||||
manageAccounts();
|
manageAccounts(0);
|
||||||
} else {
|
} else {
|
||||||
alert(JSON.stringify(json));
|
alert(JSON.stringify(json));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue