generateCumulativeTimeSlots static method

List<DateTime> generateCumulativeTimeSlots(
  1. DateTime from,
  2. DateTime to,
  3. int limit,
  4. Map<String, List<TimeRange>>? availability,
  5. Map<String, Map<String, dynamic>> blockedDates,
  6. int interval,
  7. Duration bufferTime,
  8. String messageTimeZone,
  9. String localTimeZone,
)

Implementation

static List<DateTime> generateCumulativeTimeSlots(
  DateTime from,
  DateTime to,
  int limit,
  Map<String, List<TimeRange>>? availability,
  Map<String, Map<String, dynamic>> blockedDates,
  int interval,
  Duration bufferTime,
  String messageTimeZone,
  String localTimeZone,
) {
  List<DateTime> cumulativeTimeSlots = [];
  while (cumulativeTimeSlots.length < limit && from.isBefore(to)) {
    String day = DateFormat('yMd').format(from);
    List<DateTimeRange>? blockedTime;
    List<DateTimeRange>? availableSlots;
    if (blockedDates.containsKey(day)) {
      blockedTime = blockedDates[day]!["timings"].cast<DateTimeRange>();
    }

    List<DateTimeRange>? nextDayBlockedTime;
    String day2 = DateFormat('yMd').format(from.add(const Duration(days: 1)));
    if (blockedDates.containsKey(day2)) {
      nextDayBlockedTime =
          blockedDates[day2]!["timings"].cast<DateTimeRange>();
    }

    availableSlots =
        getAvailableSlots(from, messageTimeZone, localTimeZone, availability);

    DateTime nextDay = from.add(const Duration(days: 1));
    List<DateTimeRange>? nextDayAvailableSlots;

    nextDayAvailableSlots = getAvailableSlots(
        nextDay, messageTimeZone, localTimeZone, availability);

    List<DateTime> generatedTimeStamps = generateTimeStamps(
        from,
        availableSlots,
        blockedTime ?? [],
        interval,
        bufferTime,
        TimeFormat.twelveHour,
        nextDayAvailableSlots,
        nextDayBlockedTime ?? []);

    if (generatedTimeStamps.isNotEmpty) {
      if (generatedTimeStamps.length > limit - cumulativeTimeSlots.length) {
        cumulativeTimeSlots.addAll(generatedTimeStamps
            .sublist(0, limit - cumulativeTimeSlots.length)
            .toList());
      } else {
        cumulativeTimeSlots.addAll(generatedTimeStamps);
      }
    }

    from = from.add(const Duration(days: 1));
  }
  return cumulativeTimeSlots;
}