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;
}