|
|
@@ -0,0 +1,33 @@
|
|
|
+/**
|
|
|
+ * Numeric string sorting helpers.
|
|
|
+ *
|
|
|
+ * The backend currently returns ascending order for years/months/days.
|
|
|
+ * In the Explorer we want a "latest first" experience, so we sort descending.
|
|
|
+ */
|
|
|
+
|
|
|
+function toNumber(value) {
|
|
|
+ const n = Number.parseInt(String(value), 10);
|
|
|
+ return Number.isNaN(n) ? null : n;
|
|
|
+}
|
|
|
+
|
|
|
+export function sortNumericStringsAsc(items) {
|
|
|
+ const arr = Array.isArray(items) ? [...items] : [];
|
|
|
+ return arr.sort((a, b) => {
|
|
|
+ const na = toNumber(a);
|
|
|
+ const nb = toNumber(b);
|
|
|
+
|
|
|
+ if (na !== null && nb !== null) return na - nb;
|
|
|
+ return String(a).localeCompare(String(b), "de");
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+export function sortNumericStringsDesc(items) {
|
|
|
+ return sortNumericStringsAsc(items).reverse();
|
|
|
+}
|
|
|
+
|
|
|
+export function sortFilesByNameAsc(files) {
|
|
|
+ const arr = Array.isArray(files) ? [...files] : [];
|
|
|
+ return arr.sort((a, b) =>
|
|
|
+ String(a?.name || "").localeCompare(String(b?.name || ""), "de")
|
|
|
+ );
|
|
|
+}
|