mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-19 05:03:44 +02:00
fix: only change availability details when entire range is covered by a template
This commit is contained in:
parent
b78029f018
commit
3280d40d1f
1 changed files with 28 additions and 12 deletions
|
@ -31,7 +31,10 @@ class AvailabilityViewModel {
|
||||||
List<AvailabilityWithTemplate> models,
|
List<AvailabilityWithTemplate> models,
|
||||||
DateTimeRange range,
|
DateTimeRange range,
|
||||||
) {
|
) {
|
||||||
var coveredByAvailabilities = models.length == (range.duration.inDays + 1);
|
var coveredByAvailabilities = _rangeIsCoveredWithAvailabilities(
|
||||||
|
models.length,
|
||||||
|
range,
|
||||||
|
);
|
||||||
var userId = models.firstOrNull?.availabilityModel.userId;
|
var userId = models.firstOrNull?.availabilityModel.userId;
|
||||||
// if there is no availability there is no conflicting time or pauses
|
// if there is no availability there is no conflicting time or pauses
|
||||||
var conflictingPauses = models.isNotEmpty;
|
var conflictingPauses = models.isNotEmpty;
|
||||||
|
@ -128,10 +131,15 @@ class AvailabilityViewModel {
|
||||||
var breaks = <BreakViewModel>[];
|
var breaks = <BreakViewModel>[];
|
||||||
var appliedAvailabilities =
|
var appliedAvailabilities =
|
||||||
template.apply(selectedRange.start, selectedRange.end);
|
template.apply(selectedRange.start, selectedRange.end);
|
||||||
|
// If there are missing days in the range, the time cannot be applied
|
||||||
|
if (_rangeIsCoveredWithAvailabilities(
|
||||||
|
appliedAvailabilities.length,
|
||||||
|
selectedRange,
|
||||||
|
)) {
|
||||||
if (_availabilityTimesAreEqual(appliedAvailabilities)) {
|
if (_availabilityTimesAreEqual(appliedAvailabilities)) {
|
||||||
conflictingTime = false;
|
conflictingTime = false;
|
||||||
startTime = TimeOfDay.fromDateTime(appliedAvailabilities.first.startDate);
|
startTime =
|
||||||
|
TimeOfDay.fromDateTime(appliedAvailabilities.first.startDate);
|
||||||
endTime = TimeOfDay.fromDateTime(appliedAvailabilities.first.endDate);
|
endTime = TimeOfDay.fromDateTime(appliedAvailabilities.first.endDate);
|
||||||
}
|
}
|
||||||
if (_availabilityBreaksAreEqual(appliedAvailabilities)) {
|
if (_availabilityBreaksAreEqual(appliedAvailabilities)) {
|
||||||
|
@ -140,6 +148,7 @@ class AvailabilityViewModel {
|
||||||
.map(BreakViewModel.fromAvailabilityBreakModel)
|
.map(BreakViewModel.fromAvailabilityBreakModel)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return copyWith(
|
return copyWith(
|
||||||
templates: [template],
|
templates: [template],
|
||||||
|
@ -237,3 +246,10 @@ bool _availabilityBreaksAreEqual(List<AvailabilityModel> availabilityModels) {
|
||||||
var breaks = firstModel.breaks;
|
var breaks = firstModel.breaks;
|
||||||
return availabilityModels.every((model) => model.breaksEqual(breaks));
|
return availabilityModels.every((model) => model.breaksEqual(breaks));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Checks if there are as many availabilities as days in the range
|
||||||
|
bool _rangeIsCoveredWithAvailabilities(
|
||||||
|
int amountOfAvailabilities,
|
||||||
|
DateTimeRange range,
|
||||||
|
) =>
|
||||||
|
amountOfAvailabilities == (range.duration.inDays + 1);
|
||||||
|
|
Loading…
Reference in a new issue