feat: add more detailed history and group per day
This commit is contained in:
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user