diff --git a/web/src/lib/IDTable.svelte b/web/src/lib/IDTable.svelte index 192eef1..3af6405 100644 --- a/web/src/lib/IDTable.svelte +++ b/web/src/lib/IDTable.svelte @@ -12,6 +12,30 @@ : [], ); + let sortKey: keyof (typeof rows)[0] = $state("last"); + let sortDirection: "asc" | "desc" = $state("asc"); + + let rowsSorted = $derived( + [...rows].sort((a, b) => { + let cmp = String(a[sortKey]).localeCompare(String(b[sortKey])); + return sortDirection === "asc" ? cmp : -cmp; + }), + ); + + function handleSortClick(key: keyof (typeof rows)[0]) { + if (sortKey === key) { + sortDirection = sortDirection === "asc" ? "desc" : "asc"; + } else { + sortKey = key; + sortDirection = "asc"; + } + } + + function indicator(key: keyof (typeof rows)[0]) { + if (sortKey !== key) return ""; + return sortDirection === "asc" ? "▲" : "▼"; + } + onMount(async () => { let res = await fetch("/api/mapping"); @@ -20,21 +44,45 @@ {#if data == null} - Loading + Loading... {:else} -
ID | -Nachname | -Vorname | +{ + handleSortClick("id"); + }} + > + ID + {indicator("id")} + | +{ + handleSortClick("last"); + }} + > + Nachname + {indicator("last")} + | +{ + handleSortClick("first"); + }} + >Vorname + + {indicator("first")} + |
---|---|---|---|---|---|
{row.id} | +{row.id} | {row.last} | {row.first} |