feat: add more detailed history and group per day

This commit is contained in:
2026-08-07 05:07:41 +02:00
parent 1dd7e69aa8
commit 799c1c4045
23 changed files with 2506 additions and 346 deletions
+48
View File
@@ -0,0 +1,48 @@
import '../models/closed_tab_item.dart';
class ClosedTabItemDayGroup {
final DateTime day;
final List<ClosedTabItem> items;
const ClosedTabItemDayGroup({required this.day, required this.items});
int get itemCount => items.fold(
0,
(total, item) => total + (item.isRemoved ? 0 : item.quantity),
);
}
List<ClosedTabItemDayGroup> groupClosedTabItemsByDay(
Iterable<ClosedTabItem> items, {
required DateTime fallbackDate,
}) {
final groups = <DateTime, List<ClosedTabItem>>{};
for (final item in items) {
final localPurchasedAt = (item.purchasedAt ?? fallbackDate).toLocal();
final day = DateTime(
localPurchasedAt.year,
localPurchasedAt.month,
localPurchasedAt.day,
);
groups.putIfAbsent(day, () => []).add(item);
}
for (final group in groups.values) {
group.sort((a, b) {
final aTime = (a.purchasedAt ?? fallbackDate).toLocal();
final bTime = (b.purchasedAt ?? fallbackDate).toLocal();
final byTime = bTime.compareTo(aTime);
if (byTime != 0) return byTime;
return b.id.compareTo(a.id);
});
}
final sortedGroups = groups.entries.toList()
..sort((a, b) => b.key.compareTo(a.key));
return sortedGroups
.map((entry) => ClosedTabItemDayGroup(day: entry.key, items: entry.value))
.toList();
}