courseMeetingsForDate function

List<CourseScheduleMeeting> courseMeetingsForDate(
  1. CourseTableData courseTable, {
  2. required DateTime date,
  3. required DateTime now,
  4. CourseScheduleDateRange? dateRange,
})

Returns the scheduled meetings on date in chronological order.

When dateRange is provided, dates outside the selected semester return no meetings because the timetable rows repeat by weekday.

Implementation

List<CourseScheduleMeeting> courseMeetingsForDate(
  CourseTableData courseTable, {
  required DateTime date,
  required DateTime now,
  CourseScheduleDateRange? dateRange,
}) {
  if (!_isInDateRange(date, dateRange)) return const [];

  final day = _dayOfWeek(date);
  final meetings =
      [
        for (final entry in courseTable.scheduled.entries)
          if (entry.key.day == day)
            _meetingFor(
              date: date,
              startPeriod: entry.key.period,
              course: entry.value,
              now: now,
            ),
      ]..sort((first, second) {
        final startComparison = first.start.compareTo(second.start);
        if (startComparison != 0) return startComparison;
        return first.course.id.compareTo(second.course.id);
      });

  return meetings;
}