import '../models/closed_tab_item.dart'; class ClosedTabItemDayGroup { final DateTime day; final List items; const ClosedTabItemDayGroup({required this.day, required this.items}); int get itemCount => items.fold( 0, (total, item) => total + (item.isRemoved ? 0 : item.quantity), ); } List groupClosedTabItemsByDay( Iterable items, { required DateTime fallbackDate, }) { final groups = >{}; 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(); }