generateCumulativeTimeSlots static method
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,
)
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;
}