From 033f28a050ca5eed2b976d3a5e666dc1acc85cb0 Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Tue, 24 Sep 2024 00:31:56 +0200 Subject: [PATCH] Make abuse reporters table sortable --- .../admin_panel/EmailReportersTable.svelte | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/svelte/src/admin_panel/EmailReportersTable.svelte b/svelte/src/admin_panel/EmailReportersTable.svelte index 4b5a910..8e1d9e0 100644 --- a/svelte/src/admin_panel/EmailReportersTable.svelte +++ b/svelte/src/admin_panel/EmailReportersTable.svelte @@ -2,10 +2,44 @@ import { createEventDispatcher } from "svelte"; import { formatDate } from "../util/Formatting.svelte"; import Modal from "../util/Modal.svelte" +import SortButton from "./SortButton.svelte"; +import { flip } from "svelte/animate"; + +const dispatch = createEventDispatcher() -let dispatch = createEventDispatcher() export let reporters = [] +$: update_table(reporters) +const update_table = (reporters) => sort("") + +let sort_field = "last_used" +let asc = false +const sort = (field) => { + if (field !== "" && field === sort_field) asc = !asc + if (field === "") field = sort_field + sort_field = field + + console.log("sorting by", field, "asc", asc) + reporters.sort((a, b) => { + if (typeof (a[field]) === "number") { + // Sort ints from high to low + if (asc) { + return a[field] - b[field] + } else { + return b[field] - a[field] + } + } else { + // Sort strings alphabetically + if (asc) { + return a[field].localeCompare(b[field]) + } else { + return b[field].localeCompare(a[field]) + } + } + }) + reporters = reporters +} + let modal let preview_subject = "" let preview_html = "" @@ -20,16 +54,16 @@ const toggle_preview = (rep) => { - - - - - - + + + + + + - {#each reporters as rep} - + {#each reporters as rep (rep.from_address)} +
Address / Mail serverNameReportsBlockedLast usedCreatedAddressNameReportsBlockedLast usedCreated
{rep.from_address} {rep.name} {rep.reports_sent}