This commit is contained in:
2025-09-02 18:47:44 +02:00
parent 97a095b422
commit 7c4272ffe9
8 changed files with 319 additions and 7 deletions

39
src/utils/sort.ts Normal file
View File

@@ -0,0 +1,39 @@
/**
* Sortiert ein Array von Objekten anhand einer Spalte.
*
* @param data Array von Objekten
* @param column Sortierspalte (Property-Name im Objekt)
* @param ascending true = aufsteigend, false = absteigend
*/
export function sortData<T extends Record<string, any>>(
data: T[],
column?: keyof T,
ascending: boolean = true
): T[] {
if (!column) return data
return [...data].sort((a, b) => {
const valA = a[column]
const valB = b[column]
// null/undefined nach hinten
if (valA == null && valB != null) return 1
if (valB == null && valA != null) return -1
if (valA == null && valB == null) return 0
// Zahlenvergleich
if (typeof valA === "number" && typeof valB === "number") {
return ascending ? valA - valB : valB - valA
}
// Datumsvergleich
if (valA instanceof Date && valB instanceof Date) {
return ascending ? valA.getTime() - valB.getTime() : valB.getTime() - valA.getTime()
}
// Fallback: Stringvergleich
return ascending
? String(valA).localeCompare(String(valB))
: String(valB).localeCompare(String(valA))
})
}