Proper tasks and tickets ordering

This commit is contained in:
2026-03-03 18:52:42 +08:00
parent 01c430c812
commit 2e99ec1234
2 changed files with 41 additions and 33 deletions
+25 -3
View File
@@ -330,8 +330,7 @@ List<Map<String, dynamic>> _processTicketsInIsolate(
}).toList();
}
// Sort newest first. `created_at` may be ISO strings or timestamps;
// handle strings and numeric values.
// Parse created_at timestamp from map. `created_at` may be ISO strings or timestamps.
int parseCreatedAt(Map<String, dynamic> m) {
final v = m['created_at'];
if (v == null) return 0;
@@ -347,7 +346,30 @@ List<Map<String, dynamic>> _processTicketsInIsolate(
return 0;
}
list.sort((a, b) => parseCreatedAt(b).compareTo(parseCreatedAt(a)));
int statusRank(String s) {
switch (s) {
case 'pending':
return 0;
case 'promoted':
return 1;
case 'closed':
return 2;
default:
return 3;
}
}
// Sort by status rank first (pending → promoted → closed),
// then by created_at descending (newest first)
list.sort((a, b) {
final ra = statusRank((a['status'] as String?) ?? '');
final rb = statusRank((b['status'] as String?) ?? '');
final rcmp = ra.compareTo(rb);
if (rcmp != 0) return rcmp;
// Same status: sort by created_at descending (newest first)
return parseCreatedAt(b).compareTo(parseCreatedAt(a));
});
final start = (payload['offset'] as int?) ?? 0;
final limit = (payload['limit'] as int?) ?? 50;