aboutsummaryrefslogtreecommitdiff
path: root/ui/src/components
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-02-16 17:50:57 +0100
committermetamuffin <metamuffin@disroot.org>2026-02-16 17:50:57 +0100
commitbe4af57d75cc1e233b4714b18198fb7bde49464d (patch)
tree6e529e748fc1d5c212dcf8033c8158630ca4f4d6 /ui/src/components
parentbb1822e3e68fe6f699102bfc1659731bdbac1a40 (diff)
downloadjellything-be4af57d75cc1e233b4714b18198fb7bde49464d.tar
jellything-be4af57d75cc1e233b4714b18198fb7bde49464d.tar.bz2
jellything-be4af57d75cc1e233b4714b18198fb7bde49464d.tar.zst
refactor ui responder; add admin import pages
Diffstat (limited to 'ui/src/components')
-rw-r--r--ui/src/components/admin.rs52
-rw-r--r--ui/src/components/mod.rs8
2 files changed, 60 insertions, 0 deletions
diff --git a/ui/src/components/admin.rs b/ui/src/components/admin.rs
new file mode 100644
index 0000000..831c746
--- /dev/null
+++ b/ui/src/components/admin.rs
@@ -0,0 +1,52 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2026 metamuffin <metamuffin.org>
+*/
+
+use crate::RenderInfo;
+use jellycommon::{
+ ADMIN_IMPORT_BUSY, ADMIN_IMPORT_ERROR,
+ jellyobject::Object,
+ routes::{u_admin_import, u_admin_import_post, u_admin_log},
+};
+use jellyui_locale::tr;
+
+markup::define!(
+ AdminDashboard<'a>(ri: &'a RenderInfo<'a>) {
+ h1 { @tr(ri.lang, "admin.dashboard.title") }
+ ul {
+ 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.title") }}
+ }
+
+ AdminImport<'a>(ri: &'a RenderInfo<'a>, data: Object<'a>) {
+ @if data.has(ADMIN_IMPORT_BUSY.0) {
+ h1 { @tr(ri.lang, "admin.import.running") }
+ noscript { "Live import progress needs javascript." }
+ div[id="admin_import"] {}
+ } else {
+ h1 { @tr(ri.lang, "admin.import.title") }
+ @if data.has(ADMIN_IMPORT_ERROR.0) {
+ section.message.error {
+ details {
+ summary { p.error { @tr(ri.lang, "admin.import_errors").replace("{n}", "1") } }
+ ol { @for e in data.iter(ADMIN_IMPORT_ERROR) {
+ li.error { pre.error { @e } }
+ }}
+ }
+ }
+ }
+ form[method="POST", action=u_admin_import_post(true)] {
+ input[type="submit", value=tr(ri.lang, "admin.dashboard.import.inc").to_string()];
+ }
+ form[method="POST", action=u_admin_import_post(false)] {
+ input[type="submit", value=tr(ri.lang, "admin.dashboard.import.full").to_string()];
+ }
+ }
+ }
+
+);
diff --git a/ui/src/components/mod.rs b/ui/src/components/mod.rs
index 792894e..cb9ec1b 100644
--- a/ui/src/components/mod.rs
+++ b/ui/src/components/mod.rs
@@ -4,6 +4,7 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
+pub mod admin;
pub mod login;
pub mod message;
pub mod node_page;
@@ -13,6 +14,7 @@ pub mod stats;
use crate::{
RenderInfo,
components::{
+ admin::{AdminDashboard, AdminImport},
login::{AccountLogin, AccountLogout, AccountSetPassword},
message::Message,
node_page::NodePage,
@@ -38,5 +40,11 @@ define! {
@if let Some(session) = view.get(VIEW_ACCOUNT_SET_PASSWORD) {
@AccountSetPassword { ri, session }
}
+ @if let Some(()) = view.get(VIEW_ADMIN_DASHBOARD) {
+ @AdminDashboard { ri }
+ }
+ @if let Some(data) = view.get(VIEW_ADMIN_IMPORT) {
+ @AdminImport { ri, data }
+ }
}
}