WT1.1.10 compact test, paralell test

This commit is contained in:
bossanyit
2021-03-25 21:54:18 +01:00
parent 2e0d7fc37d
commit f724737ea3
65 changed files with 5250 additions and 749 deletions
+44 -10
View File
@@ -10,6 +10,8 @@ import 'package:aitrainer_app/model/exercise_plan_template.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:aitrainer_app/repository/workout_tree_repository.dart';
import 'package:aitrainer_app/service/exercise_plan_service.dart';
import 'package:aitrainer_app/util/enums.dart';
import 'package:aitrainer_app/util/track.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
@@ -18,12 +20,15 @@ part 'test_set_edit_state.dart';
class TestSetEditBloc extends Bloc<TestSetEditEvent, TestSetEditState> {
final String templateName;
final String templateNameTranslation;
final WorkoutTreeRepository workoutTreeRepository;
final MenuBloc menuBloc;
final List<ExerciseType> _exerciseTypes = List();
final List<ExerciseType> _actualExerciseTypes = List();
final HashMap<int, ExerciseType> _exercisePlanDetails = HashMap();
TestSetEditBloc({this.templateName, this.workoutTreeRepository, this.menuBloc}) : super(TestSetEditInitial()) {
TestSetEditBloc({this.templateName, this.templateNameTranslation, this.workoutTreeRepository, this.menuBloc})
: super(TestSetEditInitial()) {
if (Cache().exercisePlanTemplates.isNotEmpty) {
Cache().exercisePlanTemplates.forEach((element) {
final ExercisePlanTemplate template = element as ExercisePlanTemplate;
@@ -31,6 +36,7 @@ class TestSetEditBloc extends Bloc<TestSetEditEvent, TestSetEditState> {
template.exerciseTypes.forEach((id) {
final ExerciseType exerciseType = Cache().getExerciseTypeById(id);
_exerciseTypes.add(exerciseType);
_actualExerciseTypes.add(exerciseType);
_exercisePlanDetails[exerciseType.exerciseTypeId] = exerciseType;
});
}
@@ -42,22 +48,36 @@ class TestSetEditBloc extends Bloc<TestSetEditEvent, TestSetEditState> {
Stream<TestSetEditState> mapEventToState(TestSetEditEvent event) async* {
try {
if (event is TestSetEditChangeExerciseType) {
yield TestSetEditLoading();
final List<ExerciseType> alternatives = workoutTreeRepository.getExerciseTypeAlternatives(event.exerciseTypeId);
final ExerciseType exerciseType = Cache().getExerciseTypeById(event.exerciseTypeId);
if (event.index > alternatives.length) {
/// skip
_exercisePlanDetails[exerciseType.exerciseTypeId] = null;
} else if (event.index == 0) {
if (_exercisePlanDetails[event.exerciseTypeId] == null) {
/// it was skipped
_exercisePlanDetails[exerciseType.exerciseTypeId] = exerciseType;
} else {
final changedExerciseType = alternatives[event.index - 1];
_exercisePlanDetails[exerciseType.exerciseTypeId] = changedExerciseType;
if (event.index == 0) {
_exercisePlanDetails[exerciseType.exerciseTypeId] = exerciseType;
} else {
final changedExerciseType = alternatives[event.index - 1];
_exercisePlanDetails[exerciseType.exerciseTypeId] = changedExerciseType;
}
}
// to keep the slider accurate
refreshActualPlan();
yield TestSetEditReady();
} else if (event is TestSetEditDeleteExerciseType) {
yield TestSetEditLoading();
final ExerciseType exerciseType = Cache().getExerciseTypeById(event.exerciseTypeId);
_exercisePlanDetails[exerciseType.exerciseTypeId] = null;
refreshActualPlan();
yield TestSetEditReady();
} else if (event is TestSetEditSubmit) {
yield TestSetEditLoading();
ExercisePlan exercisePlan = ExercisePlan(templateName, Cache().userLoggedIn.customerId);
ExercisePlan exercisePlan = ExercisePlan(templateNameTranslation, Cache().userLoggedIn.customerId);
exercisePlan.private = true;
exercisePlan.type = ExerciseAbility.mini_test.toString();
exercisePlan.type = ExerciseAbility.mini_test_set.toString();
exercisePlan.dateAdd = DateTime.now();
ExercisePlan savedExercisePlan = await ExercisePlanApi().saveExercisePlan(exercisePlan);
@@ -67,11 +87,15 @@ class TestSetEditBloc extends Bloc<TestSetEditEvent, TestSetEditState> {
ExercisePlanDetail exercisePlanDetail = ExercisePlanDetail(entry.value.exerciseTypeId);
exercisePlanDetail.exercisePlanId = savedExercisePlan.exercisePlanId;
exercisePlanDetail.serie = 1;
ExercisePlanDetail savedDetail = await ExercisePlanApi().saveExercisePlanDetail(exercisePlanDetail);
details.add(savedDetail);
exercisePlanDetail.exercisePlanDetailId = savedDetail.exercisePlanDetailId;
exercisePlanDetail.exercises = List();
details.add(exercisePlanDetail);
}
}
Cache().saveActiveExercisePlan(exercisePlan, details);
Track().track(TrackingEvent.test_set_edit, eventValue: templateName);
yield TestSetEditSaved();
}
} on Exception catch (e) {
@@ -80,4 +104,14 @@ class TestSetEditBloc extends Bloc<TestSetEditEvent, TestSetEditState> {
}
List get exerciseTypes => this._exerciseTypes;
List get actualExerciseTypes => this._actualExerciseTypes;
HashMap get exercisePlanDetails => this._exercisePlanDetails;
void refreshActualPlan() {
_actualExerciseTypes.removeRange(0, _actualExerciseTypes.length - 1);
_exercisePlanDetails.keys.forEach((element) {
final ExerciseType exerciseType = Cache().getExerciseTypeById(element);
_actualExerciseTypes.add(exerciseType);
});
}
}
@@ -20,6 +20,14 @@ class TestSetEditChangeExerciseType extends TestSetEditEvent {
List<Object> get props => [index, exerciseTypeId];
}
class TestSetEditDeleteExerciseType extends TestSetEditEvent {
final int exerciseTypeId;
const TestSetEditDeleteExerciseType({this.exerciseTypeId});
@override
List<Object> get props => [exerciseTypeId];
}
class TestSetEditSkipExerciseType extends TestSetEditEvent {
final int exerciseTypeId;
const TestSetEditSkipExerciseType({this.exerciseTypeId});