Make abuse reporters table sortable

This commit is contained in:
2024-09-24 00:31:56 +02:00
parent 76aef5d3c0
commit 033f28a050

View File

@@ -2,10 +2,44 @@
import { createEventDispatcher } from "svelte"; import { createEventDispatcher } from "svelte";
import { formatDate } from "../util/Formatting.svelte"; import { formatDate } from "../util/Formatting.svelte";
import Modal from "../util/Modal.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 = [] 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 modal
let preview_subject = "" let preview_subject = ""
let preview_html = "" let preview_html = ""
@@ -20,16 +54,16 @@ const toggle_preview = (rep) => {
<table> <table>
<tr> <tr>
<td>Address / Mail server</td> <td><SortButton field="from_address" active_field={sort_field} asc={asc} sort_func={sort}>Address</SortButton></td>
<td>Name</td> <td><SortButton field="name" active_field={sort_field} asc={asc} sort_func={sort}>Name</SortButton></td>
<td>Reports</td> <td><SortButton field="reports_sent" active_field={sort_field} asc={asc} sort_func={sort}>Reports</SortButton></td>
<td>Blocked</td> <td><SortButton field="files_blocked" active_field={sort_field} asc={asc} sort_func={sort}>Blocked</SortButton></td>
<td>Last used</td> <td><SortButton field="last_used" active_field={sort_field} asc={asc} sort_func={sort}>Last used</SortButton></td>
<td>Created</td> <td><SortButton field="created" active_field={sort_field} asc={asc} sort_func={sort}>Created</SortButton></td>
<td></td> <td></td>
</tr> </tr>
{#each reporters as rep} {#each reporters as rep (rep.from_address)}
<tr> <tr animate:flip={{duration: 500}}>
<td>{rep.from_address}</td> <td>{rep.from_address}</td>
<td>{rep.name}</td> <td>{rep.name}</td>
<td>{rep.reports_sent}</td> <td>{rep.reports_sent}</td>