generateTimeStamps static method

List<DateTime> generateTimeStamps(
  1. DateTime selectedDate,
  2. List<DateTimeRange<DateTime>> availableSlots,
  3. List<DateTimeRange<DateTime>> blockedSlots,
  4. int meetingDuration,
  5. Duration bufferTime,
  6. TimeFormat timeFormat,
  7. List<DateTimeRange<DateTime>> nextDayAvailableSlots,
  8. List<DateTimeRange<DateTime>> nextDayBlockedSlots,
)

Implementation

static List<DateTime> generateTimeStamps(
    DateTime selectedDate,
    List<DateTimeRange> availableSlots,
    List<DateTimeRange> blockedSlots,
    int meetingDuration,
    Duration bufferTime,
    TimeFormat timeFormat,
    List<DateTimeRange> nextDayAvailableSlots,
    List<DateTimeRange> nextDayBlockedSlots) {
  List<DateTime> generatedTimeStamps = [];

  List<DateTimeRange> mergedSlots = blockedSlots.isNotEmpty
      ? adjustAvailableSlots(
          availableSlots, blockedSlots, bufferTime, selectedDate)
      : availableSlots;

  for (var slot in mergedSlots) {
    DateTime from = slot.start;
    DateTime to = slot.end;

    while (from.isBefore(to)) {
      DateTime proposedTime = from.add(Duration(minutes: meetingDuration));

      if (from.day > selectedDate.day) {
        break;
      } else if (from.day == selectedDate.day &&
          (proposedTime.isAtSameMomentAs(to) || proposedTime.isBefore(to)) &&
          generatedTimeStamps.validateEntry(from)) {
        generatedTimeStamps.add(from);
      } else if (selectedDate.day == from.day &&
          proposedTime.day > selectedDate.day &&
          generatedTimeStamps.validateEntry(from)) {
        if (nextDayAvailableSlots.isNotEmpty &&
            !checkTimeIsOverlapping(
                DateTimeRange(start: from, end: proposedTime),
                nextDayAvailableSlots,
                nextDayBlockedSlots,
                bufferTime,
                selectedDate)) {
          generatedTimeStamps.add(from);
        }
      }
      from = proposedTime;
    }
  }

  return generatedTimeStamps;
}