aboutsummaryrefslogtreecommitdiff
path: root/ui/src/components/admin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/components/admin.rs')
-rw-r--r--ui/src/components/admin.rs37
1 files changed, 20 insertions, 17 deletions
diff --git a/ui/src/components/admin.rs b/ui/src/components/admin.rs
index 3cb45d6..76dfe6a 100644
--- a/ui/src/components/admin.rs
+++ b/ui/src/components/admin.rs
@@ -4,9 +4,8 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
-use crate::RenderInfo;
+use crate::{RenderInfo, page};
use jellycommon::{
- jellyobject::Object,
routes::{
u_admin_import, u_admin_import_post, u_admin_log, u_admin_new_user, u_admin_user,
u_admin_user_remove, u_admin_users,
@@ -15,6 +14,16 @@ use jellycommon::{
};
use jellyui_locale::tr;
+page!(AdminDashboard<'_>, |x| tr(x.ri.lang, "admin.dashboard"));
+page!(AdminImport<'_>, |x| tr(x.ri.lang, "admin.import"));
+page!(AdminUserList<'_>, |x| tr(x.ri.lang, "admin.users"));
+page!(AdminUser<'_>, |x| x
+ .user
+ .get(USER_NAME)
+ .unwrap_or("nameless user")
+ .to_string()
+ .into());
+
markup::define!(
AdminDashboard<'a>(ri: &'a RenderInfo<'a>) {
h1 { @tr(ri.lang, "admin.dashboard") }
@@ -22,23 +31,22 @@ markup::define!(
li{a[href=u_admin_log(true)] { @tr(ri.lang, "admin.log.warnonly") }}
li{a[href=u_admin_log(false)] { @tr(ri.lang, "admin.log.full") }}
}
-
a[href=u_admin_import()] { h2 { @tr(ri.lang, "admin.import") }}
a[href=u_admin_users()] { h2 { @tr(ri.lang, "admin.users") }}
}
- AdminImport<'a>(ri: &'a RenderInfo<'a>, data: Object<'a>) {
- @if data.has(ADMIN_IMPORT_BUSY.0) {
+ AdminImport<'a>(ri: &'a RenderInfo<'a>, errors: &'a [&'a str], busy: bool) {
+ @if *busy {
h1 { @tr(ri.lang, "admin.import.running") }
noscript { "Live import progress needs javascript." }
div[id="admin_import"] {}
} else {
h1 { @tr(ri.lang, "admin.import") }
- @if data.has(ADMIN_IMPORT_ERROR.0) {
+ @if !errors.is_empty() {
section.message.error {
details {
- summary { p.error { @tr(ri.lang, "admin.import_errors").replace("{n}", &data.iter(ADMIN_IMPORT_ERROR).count().to_string()) } }
- ol { @for e in data.iter(ADMIN_IMPORT_ERROR) {
+ summary { p.error { @tr(ri.lang, "admin.import_errors").replace("{n}", &errors.len().to_string()) } }
+ ol { @for e in *errors {
li.error { pre.error { @e } }
}}
}
@@ -53,24 +61,19 @@ markup::define!(
}
}
- AdminInfo<'a>(ri: &'a RenderInfo<'a>, data: Object<'a>) {
- @let _ = ri;
- h2 { @data.get(ADMIN_INFO_TITLE) }
- pre { @data.get(ADMIN_INFO_TEXT) }
- }
-
- AdminUserList<'a>(ri: &'a RenderInfo<'a>, data: Object<'a>) {
+ AdminUserList<'a>(ri: &'a RenderInfo<'a>, users: &'a [User<'a>]) {
h1 { @tr(ri.lang, "admin.users") }
form[method="POST", action=u_admin_new_user()] {
label[for="login"] { "Login: " }
input[type="text", id="login", name="login"]; br;
input[type="submit", value="Create new user"];
}
- ul { @for u in data.iter(ADMIN_USER_LIST_ITEM) {
+ ul { @for u in *users {
li { a[href=u_admin_user(u.get(USER_LOGIN).unwrap_or_default())] { @u.get(USER_LOGIN) } }
}}
}
- AdminUser<'a>(ri: &'a RenderInfo<'a>, user: Object<'a>) {
+
+ AdminUser<'a>(ri: &'a RenderInfo<'a>, user: User<'a>) {
h2 { @user.get(USER_NAME).unwrap_or("nameless user") }
p { @tr(ri.lang, "tag.Ulgn") ": " @user.get(USER_LOGIN) }
form[method="POST", action=u_admin_user_remove(user.get(USER_LOGIN).unwrap())] {