nextCourseMeetingPosition function

NextCourseMeetingPosition? nextCourseMeetingPosition(
  1. CourseTableData courseTable, {
  2. required DateTime now,
  3. CourseScheduleDateRange? dateRange,
})

Finds the one scheduled course that occurs next relative to now.

Today's remaining courses take priority. If none remain, the first course on the next date with a scheduled course is selected.

Implementation

NextCourseMeetingPosition? nextCourseMeetingPosition(
  CourseTableData courseTable, {
  required DateTime now,
  CourseScheduleDateRange? dateRange,
}) {
  final today = _dateOnly(now);
  final todayMeetings = courseMeetingsForDate(
    courseTable,
    date: today,
    now: now,
    dateRange: dateRange,
  );
  if (nextCourseIndex(todayMeetings, now: now) case final index?) {
    return (date: today, index: index);
  }

  if (adjacentCourseDate(
        courseTable,
        date: today,
        direction: .next,
        dateRange: dateRange,
      )
      case final date?) {
    return (date: date, index: 0);
  }

  return null;
}