// Wie die Mitarbeiterliste sortiert wird. // // Wie die Filter steht auch die Sortierung in der Adresse und nicht im // Browser: die Liste wird auf dem Server gebaut und seitenweise geholt. Wer // im Browser sortierte, ordnete nur die fünfzehn Zeilen der aktuellen Seite // um — bei 867 Personen wäre das eine Sortierung, die nach dem Blättern // etwas anderes zeigt als versprochen. // // Sortiert wird nach dem **Nachnamen**, weil die Liste danach gelesen wird: // die Spalte zeigt „Aigner, Manuel", und wer jemanden sucht, sucht ihn unter // A. Postgres läuft mit österreichischer Sortierregel, deshalb steht Ö bei O // und nicht am Ende des Alphabets. export const SORTIERUNGEN = [ { value: "az", label: "Name A–Z" }, { value: "za", label: "Name Z–A" }, ] as const; export type Sortierung = (typeof SORTIERUNGEN)[number]["value"]; export const STANDARD_SORTIERUNG: Sortierung = "az"; /** Alles, was nicht in der Liste steht, führt auf den Standard zurück. */ export function parseSortierung(wert: string | undefined): Sortierung { return SORTIERUNGEN.some((s) => s.value === wert) ? (wert as Sortierung) : STANDARD_SORTIERUNG; } /** * Die Richtung für die Abfrage. * * Nur der Nachname dreht sich. Das zweite Kriterium — die Kennung — bleibt * aufsteigend: es entscheidet nur bei gleichem Nachnamen und dient allein * dazu, die Reihenfolge über die Seitengrenzen hinweg eindeutig zu halten. * Drehte es mit, wäre die Sortierung immer noch eindeutig, aber die vierzehn * Winkler stünden in umgekehrter Reihenfolge zueinander, ohne dass jemand * das verlangt hätte. */ export function richtung(sortierung: Sortierung): "asc" | "desc" { return sortierung === "za" ? "desc" : "asc"; }