filterDeadlines method
Returns a list of deadlines that match the given filters.
If no filters are provided, all deadlines are returned.
Implementation
List<PlanDeadline> filterDeadlines({
Set<int>? taskIds,
DateTime? start,
DateTime? end,
DateTime? betweenStart,
DateTime? betweenEnd,
bool? plannedForToday,
}) {
if (!state.hasData) {
log('Cannot filter deadlines: No plan loaded.');
return [];
}
final now = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day);
return state.requireData.deadlines.where((deadline) {
final _start = DateTime(deadline.start.year, deadline.start.month, deadline.start.day);
final _end = DateTime(deadline.end.year, deadline.end.month, deadline.end.day);
if (taskIds != null && taskIds.contains(deadline.id)) return false;
if (start != null && _start != start) return false;
if (end != null && _end != end) return false;
if (betweenStart != null && _start.isBefore(betweenStart)) return false;
if (betweenEnd != null && _end.isAfter(betweenEnd)) return false;
if (plannedForToday != null) {
final startsBeforeToday = _start.isBefore(now) || _start.isSameDate(now);
final endsAfterToday = _end.isAfter(now) || _end.isSameDate(now);
if (plannedForToday && !(startsBeforeToday && endsAfterToday)) return false;
}
return true;
}).toList();
}