Proper tasks and tickets ordering
This commit is contained in:
parent
01c430c812
commit
2e99ec1234
|
|
@ -459,13 +459,6 @@ List<Map<String, dynamic>> _processTasksInIsolate(
|
|||
}
|
||||
}
|
||||
|
||||
int? parseTaskNumberFromString(String? tn) {
|
||||
if (tn == null) return null;
|
||||
final m = RegExp(r'\d+').firstMatch(tn);
|
||||
if (m == null) return null;
|
||||
return int.tryParse(m.group(0)!);
|
||||
}
|
||||
|
||||
int parseCreatedAt(Map<String, dynamic> m) {
|
||||
final v = m['created_at'];
|
||||
if (v == null) return 0;
|
||||
|
|
@ -488,36 +481,29 @@ List<Map<String, dynamic>> _processTasksInIsolate(
|
|||
if (rcmp != 0) return rcmp;
|
||||
|
||||
if (ra == 0) {
|
||||
// queued: higher priority first, then queue_order asc, then created_at
|
||||
// queued: higher priority first (lower number = higher priority),
|
||||
// then created_at descending (newest first)
|
||||
final pa = (a['priority'] as num?)?.toInt() ?? 1;
|
||||
final pb = (b['priority'] as num?)?.toInt() ?? 1;
|
||||
final pcmp = pb.compareTo(pa);
|
||||
if (pcmp != 0) return pcmp;
|
||||
final aOrder = (a['queue_order'] as int?) ?? 0x7fffffff;
|
||||
final bOrder = (b['queue_order'] as int?) ?? 0x7fffffff;
|
||||
final qcmp = aOrder.compareTo(bOrder);
|
||||
if (qcmp != 0) return qcmp;
|
||||
return parseCreatedAt(a).compareTo(parseCreatedAt(b));
|
||||
}
|
||||
|
||||
if (ra == 1) {
|
||||
return parseCreatedAt(a).compareTo(parseCreatedAt(b));
|
||||
}
|
||||
|
||||
if (ra == 2) {
|
||||
final an = parseTaskNumberFromString(a['task_number'] as String?);
|
||||
final bn = parseTaskNumberFromString(b['task_number'] as String?);
|
||||
if (an != null && bn != null) return bn.compareTo(an);
|
||||
if (an != null) return -1;
|
||||
if (bn != null) return 1;
|
||||
// Same priority: sort by created_at descending (newest first)
|
||||
return parseCreatedAt(b).compareTo(parseCreatedAt(a));
|
||||
}
|
||||
|
||||
final aOrder = (a['queue_order'] as int?) ?? 0x7fffffff;
|
||||
final bOrder = (b['queue_order'] as int?) ?? 0x7fffffff;
|
||||
final cmp = aOrder.compareTo(bOrder);
|
||||
if (cmp != 0) return cmp;
|
||||
return parseCreatedAt(a).compareTo(parseCreatedAt(b));
|
||||
if (ra == 1) {
|
||||
// in_progress: higher priority first (lower number = higher priority),
|
||||
// then created_at descending (newest first)
|
||||
final pa = (a['priority'] as num?)?.toInt() ?? 1;
|
||||
final pb = (b['priority'] as num?)?.toInt() ?? 1;
|
||||
final pcmp = pb.compareTo(pa);
|
||||
if (pcmp != 0) return pcmp;
|
||||
// Same priority: sort by created_at descending (newest first)
|
||||
return parseCreatedAt(b).compareTo(parseCreatedAt(a));
|
||||
}
|
||||
|
||||
// completed and cancelled: sort by created_at descending (newest first)
|
||||
return parseCreatedAt(b).compareTo(parseCreatedAt(a));
|
||||
});
|
||||
|
||||
return list;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user