From bf73afd9fe2edd5e5854a614b48996b02258be38 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Tue, 12 Nov 2024 20:55:37 +0100 Subject: [PATCH] Allow deleting days from a routine --- lib/providers/routines.dart | 6 +-- lib/widgets/routines/forms/day.dart | 53 ++++++++++++++++--- ...epetition_unit_form_widget_test.mocks.dart | 4 +- test/workout/workout_day_form_test.mocks.dart | 4 +- test/workout/workout_form_test.mocks.dart | 4 +- test/workout/workout_set_form_test.mocks.dart | 4 +- 6 files changed, 57 insertions(+), 18 deletions(-) diff --git a/lib/providers/routines.dart b/lib/providers/routines.dart index 457cd6fe..8309b414 100644 --- a/lib/providers/routines.dart +++ b/lib/providers/routines.dart @@ -441,10 +441,10 @@ class RoutinesProvider with ChangeNotifier { notifyListeners(); } - Future deleteDay(Day day) async { - await baseProvider.deleteRequest(_daysUrlPath, day.id!); + Future deleteDay(int dayId) async { + await baseProvider.deleteRequest(_daysUrlPath, dayId); for (final workout in _routines) { - workout.days.removeWhere((element) => element.id == day.id); + workout.days.removeWhere((element) => element.id == dayId); } notifyListeners(); } diff --git a/lib/widgets/routines/forms/day.dart b/lib/widgets/routines/forms/day.dart index 288644cc..ac8a87a4 100644 --- a/lib/widgets/routines/forms/day.dart +++ b/lib/widgets/routines/forms/day.dart @@ -19,6 +19,34 @@ class ReorderableDaysList extends StatefulWidget { required this.onDaySelected, }); + void _showDeleteConfirmationDialog(BuildContext context, Day day) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Confirm Delete'), + content: const Text('Are you sure you want to delete this day?'), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + TextButton( + onPressed: () async { + days.remove(day); + await Provider.of(context, listen: false).deleteDay(day.id!); + Navigator.of(context).pop(); + }, + child: const Text('Delete'), + ), + ], + ); + }, + ); + } + @override State createState() => _ReorderableDaysListState(); } @@ -61,13 +89,24 @@ class _ReorderableDaysListState extends State { index: index, child: const Icon(Icons.drag_handle), ), - trailing: IconButton( - onPressed: () { - widget.onDaySelected(day.id!); - }, - icon: day.id == widget.selectedDayId - ? const Icon(Icons.edit_off) - : const Icon(Icons.edit), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + onPressed: () { + widget.onDaySelected(day.id!); + }, + icon: day.id == widget.selectedDayId + ? const Icon(Icons.edit_off) + : const Icon(Icons.edit), + ), + IconButton( + icon: Icon(Icons.delete), + onPressed: () { + widget._showDeleteConfirmationDialog(context, day); // Call the dialog function + }, + ), + ], ), ); }, diff --git a/test/workout/repetition_unit_form_widget_test.mocks.dart b/test/workout/repetition_unit_form_widget_test.mocks.dart index 66377cd5..e04c4331 100644 --- a/test/workout/repetition_unit_form_widget_test.mocks.dart +++ b/test/workout/repetition_unit_form_widget_test.mocks.dart @@ -424,10 +424,10 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as _i12.Future); @override - _i12.Future deleteDay(_i6.Day? day) => (super.noSuchMethod( + _i12.Future deleteDay(int? dayId) => (super.noSuchMethod( Invocation.method( #deleteDay, - [day], + [dayId], ), returnValue: _i12.Future.value(), returnValueForMissingStub: _i12.Future.value(), diff --git a/test/workout/workout_day_form_test.mocks.dart b/test/workout/workout_day_form_test.mocks.dart index 8c767507..0f997b6b 100644 --- a/test/workout/workout_day_form_test.mocks.dart +++ b/test/workout/workout_day_form_test.mocks.dart @@ -424,10 +424,10 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as _i12.Future); @override - _i12.Future deleteDay(_i6.Day? day) => (super.noSuchMethod( + _i12.Future deleteDay(int? dayId) => (super.noSuchMethod( Invocation.method( #deleteDay, - [day], + [dayId], ), returnValue: _i12.Future.value(), returnValueForMissingStub: _i12.Future.value(), diff --git a/test/workout/workout_form_test.mocks.dart b/test/workout/workout_form_test.mocks.dart index decae660..bc8f2f17 100644 --- a/test/workout/workout_form_test.mocks.dart +++ b/test/workout/workout_form_test.mocks.dart @@ -424,10 +424,10 @@ class MockRoutinesProvider extends _i1.Mock implements _i11.RoutinesProvider { ) as _i12.Future); @override - _i12.Future deleteDay(_i6.Day? day) => (super.noSuchMethod( + _i12.Future deleteDay(int? dayId) => (super.noSuchMethod( Invocation.method( #deleteDay, - [day], + [dayId], ), returnValue: _i12.Future.value(), returnValueForMissingStub: _i12.Future.value(), diff --git a/test/workout/workout_set_form_test.mocks.dart b/test/workout/workout_set_form_test.mocks.dart index c150fef5..4ec7dccd 100644 --- a/test/workout/workout_set_form_test.mocks.dart +++ b/test/workout/workout_set_form_test.mocks.dart @@ -1155,10 +1155,10 @@ class MockRoutinesProvider extends _i1.Mock implements _i22.RoutinesProvider { ) as _i20.Future); @override - _i20.Future deleteDay(_i14.Day? day) => (super.noSuchMethod( + _i20.Future deleteDay(int? dayId) => (super.noSuchMethod( Invocation.method( #deleteDay, - [day], + [dayId], ), returnValue: _i20.Future.value(), returnValueForMissingStub: _i20.Future.value(),