diff options
Diffstat (limited to 'ui/src/components/admin.rs')
| -rw-r--r-- | ui/src/components/admin.rs | 37 |
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())] { |