fix(admin): broken report controls (#12)

This commit is contained in:
hampus-fluxer 2026-01-03 17:52:34 +01:00 committed by GitHub
parent 7782bb1ba5
commit edb36f406d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 44 additions and 34 deletions

View File

@ -434,9 +434,7 @@ fn sidebar_interaction_script() {
)
}
fn admin_acls_from(
current_admin: Option(UserLookupResult),
) -> List(String) {
fn admin_acls_from(current_admin: Option(UserLookupResult)) -> List(String) {
case current_admin {
option.Some(admin) -> admin.acls
option.None -> []

View File

@ -21,7 +21,7 @@ import fluxer_admin/components/flash
import fluxer_admin/components/layout
import fluxer_admin/components/message_list
import fluxer_admin/components/ui
import fluxer_admin/web.{type Context, type Session, href}
import fluxer_admin/web.{type Context, type Session, action, href}
import gleam/list
import gleam/option
import gleam/string
@ -378,19 +378,27 @@ fn render_actions_card(ctx: Context, report: reports.Report) {
h.div([a.class("space-y-3")], [
case report.status {
0 ->
h.button(
h.form(
[
a.class(
"w-full px-4 py-2 bg-neutral-900 text-white rounded-lg label hover:bg-neutral-800 transition-colors",
),
a.method("post"),
action(ctx, "/reports/" <> report.report_id <> "/resolve"),
a.attribute(
"onclick",
"if(confirm('Resolve this report?')) { fetch('/reports/"
<> report.report_id
<> "/resolve', { method: 'POST', headers: { 'Content-Type': 'application/json' } }).then(() => location.reload()) }",
"onsubmit",
"if(!confirm('Resolve this report?')) return false;",
),
],
[
h.input([a.type_("hidden"), a.name("public_comment"), a.value("")]),
h.button(
[
a.type_("submit"),
a.class(
"w-full px-4 py-2 bg-neutral-900 text-white rounded-lg label hover:bg-neutral-800 transition-colors",
),
],
[element.text("Resolve Report")],
),
],
[element.text("Resolve Report")],
)
_ -> element.none()
},

View File

@ -21,7 +21,7 @@ import fluxer_admin/components/date_time
import fluxer_admin/components/flash
import fluxer_admin/components/layout
import fluxer_admin/components/ui
import fluxer_admin/web.{type Context, type Session, href}
import fluxer_admin/web.{type Context, type Session, action, href}
import gleam/int
import gleam/list
import gleam/option
@ -756,7 +756,7 @@ fn render_actions_cell(ctx: Context, report: reports.SearchReportResult) {
h.form(
[
a.method("post"),
a.attribute("action", "/reports/" <> report.report_id <> "/resolve"),
action(ctx, "/reports/" <> report.report_id <> "/resolve"),
a.attribute("data-report-action", "resolve"),
a.attribute("data-report-id", report.report_id),
a.attribute("data-confirm", "Resolve this report?"),
@ -1073,7 +1073,14 @@ fn reports_script() -> element.Element(a) {
function markResolved(reportId) {
const pill = table.querySelector('[data-status-pill=\"' + reportId + '\"]');
if (pill) pill.textContent = 'Resolved';
if (pill) {
const inner = pill.querySelector('span');
if (inner) {
inner.textContent = 'Resolved';
inner.classList.remove('bg-yellow-100', 'text-yellow-700');
inner.classList.add('bg-green-100', 'text-green-700');
}
}
const form = table.querySelector('form[data-report-id=\"' + reportId + '\"]');
if (form) {
form.remove();

View File

@ -37,22 +37,16 @@ pub fn view(
ui.heading_page("You find yourself in a strange place..."),
ui.card(ui.PaddingMedium, [
ui.stack("4", [
h.p(
[a.class("text-neutral-700 leading-relaxed")],
[
element.text(
"Your account is authenticated, but no admin tabs are available for your current permissions.",
),
],
),
h.p(
[a.class("text-neutral-600 leading-relaxed")],
[
element.text(
"If you believe this is a mistake, reach out to an administrator to request the necessary access.",
),
],
),
h.p([a.class("text-neutral-700 leading-relaxed")], [
element.text(
"Your account is authenticated, but no admin tabs are available for your current permissions.",
),
]),
h.p([a.class("text-neutral-600 leading-relaxed")], [
element.text(
"If you believe this is a mistake, reach out to an administrator to request the necessary access.",
),
]),
]),
]),
])

View File

@ -23,6 +23,7 @@ import fluxer_admin/api/users
import fluxer_admin/components/errors
import fluxer_admin/components/flash
import fluxer_admin/constants
import fluxer_admin/navigation
import fluxer_admin/oauth2
import fluxer_admin/pages/archives_page
import fluxer_admin/pages/asset_purge_page
@ -55,7 +56,6 @@ import fluxer_admin/pages/users_page
import fluxer_admin/pages/voice_regions_page
import fluxer_admin/pages/voice_servers_page
import fluxer_admin/session
import fluxer_admin/navigation
import fluxer_admin/web.{type Context, prepend_base_path}
import gleam/http.{Get, Post}
import gleam/http/request
@ -238,7 +238,8 @@ pub fn handle_request(req: Request, ctx: Context) -> Response {
case wisp.get_cookie(req, "session", wisp.Signed) {
Ok(cookie) ->
case session.get(ctx, cookie) {
Ok(_session) -> wisp.redirect(prepend_base_path(ctx, "/dashboard"))
Ok(_session) ->
wisp.redirect(prepend_base_path(ctx, "/dashboard"))
Error(_) -> login_page.view(ctx, error_msg)
}
Error(_) -> login_page.view(ctx, error_msg)

View File

@ -34,6 +34,8 @@ export const AuditLogMiddleware = createMiddleware<HonoEnv>(async (ctx, next) =>
);
}
ctx.set('auditLogReason', result.data);
} else {
ctx.set('auditLogReason', null);
}
await next();