diff --git a/packages/flutter_availability/lib/src/service/availability_service.dart b/packages/flutter_availability/lib/src/service/availability_service.dart index c92c30c..2449fa2 100644 --- a/packages/flutter_availability/lib/src/service/availability_service.dart +++ b/packages/flutter_availability/lib/src/service/availability_service.dart @@ -62,6 +62,20 @@ class AvailabilityService { } } + /// Creates a set of availabilities for the given [range] by applying the + /// [template] to each day in the range + Future applyTemplate({ + required AvailabilityTemplateModel template, + required DateTimeRange range, + }) async { + await dataInterface.applyTemplateForUser( + userId, + template, + range.start, + range.end, + ); + } + /// Returns a stream where data from availabilities and templates are merged Stream> getOverviewDataForMonth( DateTime dayInMonth, diff --git a/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart b/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart index 5916657..a3c0775 100644 --- a/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart +++ b/packages/flutter_availability/lib/src/ui/screens/availability_modification.dart @@ -72,16 +72,17 @@ class _AvailabilitiesModificationScreenState widget.onExit(); return; } - if (widget.initialAvailabilities.isNotEmpty) { - await service.clearAvailabilities( - widget.initialAvailabilities.getAvailabilities(), + if (_availabilityViewModel.templateSelected) { + await service.applyTemplate( + template: _availabilityViewModel.templates.first, + range: widget.dateRange, + ); + } else { + await service.createAvailability( + availability: _availabilityViewModel.toModel(), + range: widget.dateRange, ); } - - await service.createAvailability( - availability: _availabilityViewModel.toModel(), - range: widget.dateRange, - ); widget.onExit(); } @@ -135,6 +136,7 @@ class _AvailabilitiesModificationScreenState setState(() { _availabilityViewModel = _availabilityViewModel.copyWith( startTime: start, + templateSelected: false, ); }); } @@ -143,6 +145,7 @@ class _AvailabilitiesModificationScreenState setState(() { _availabilityViewModel = _availabilityViewModel.copyWith( endTime: end, + templateSelected: false, ); }); } @@ -151,6 +154,7 @@ class _AvailabilitiesModificationScreenState setState(() { _availabilityViewModel = _availabilityViewModel.copyWith( breaks: breaks, + templateSelected: false, ); }); }