@@ -148,7 +148,7 @@ export class MesocycleAggregateRoot {
148148 return this . mesocycleDTO . isConfirmed
149149 }
150150
151- finishExercise ( exerciseId : string , exerciseAssesment : ExerciseAssesment ) {
151+ finishExercise ( exerciseId : string , exerciseAssesment : ExerciseAssesment | null ) {
152152 const activeWorkout = this . getActiveWorkout ( )
153153 const exercise = activeWorkout . exercises . find ( exercise => exercise . id === exerciseId )
154154 if ( ! exercise ) {
@@ -803,6 +803,21 @@ export class MesocycleAggregateRoot {
803803 targetReps : originalExercise . targetReps ,
804804 }
805805
806+ if ( this . mesocycleDTO . progressionMode === ProgressionMode . Custom ) {
807+ return {
808+ ...replacingExerciseBase ,
809+ state : WorkoutExerciseState . pending ,
810+ progressionType : ProgressionType . CustomUserProvided ,
811+ sets : Array . from ( { length : originalExercise . targetSets } ) . map ( ( _ , index ) => ( {
812+ id : v4 ( ) ,
813+ state : WorkingSetState . pending ,
814+ weight : null ,
815+ reps : null ,
816+ orderIndex : index ,
817+ } ) ) ,
818+ }
819+ }
820+
806821 const historicalResult = replacingExercise . historicalResult
807822 if ( historicalResult === null ) {
808823 return {
@@ -934,34 +949,36 @@ export class MesocycleAggregateRoot {
934949 } )
935950
936951 if ( exercise . state === WorkoutExerciseState . pending ) {
937- if ( ! historicalResults ) {
938- throw new Error ( 'Historical result not found' )
939- }
940- const newReps = calculateRepsFromLoadedExercise (
941- {
942- loadingSet : {
943- weight : historicalResults . loadedWeight ,
944- reps : historicalResults . loadedReps ,
952+ if ( this . mesocycleDTO . progressionMode !== ProgressionMode . Custom ) {
953+ if ( ! historicalResults ) {
954+ throw new Error ( 'Historical result not found' )
955+ }
956+ const newReps = calculateRepsFromLoadedExercise (
957+ {
958+ loadingSet : {
959+ weight : historicalResults . loadedWeight ,
960+ reps : historicalResults . loadedReps ,
961+ } ,
962+ targetWeight : snappedWeight ,
945963 } ,
946- targetWeight : snappedWeight ,
947- } ,
948- this . getCurrentRpe ( )
949- )
964+ this . getCurrentRpe ( )
965+ )
950966
951- if ( newReps === null ) {
952- throw new Error ( "Couldn't resolve new rep count." )
953- }
967+ if ( newReps === null ) {
968+ throw new Error ( "Couldn't resolve new rep count." )
969+ }
954970
955- if ( newReps !== exercise . sets [ 0 ] . reps ) {
956- this . apply ( {
957- type : 'ExerciseRepsChangedDueToWeightChange' ,
958- payload : {
959- workoutExerciseId,
960- newReps,
961- workoutId : activeWorkout . id ,
962- microcycleId : activeWorkout . microcycleId ,
963- } ,
964- } )
971+ if ( newReps !== exercise . sets [ 0 ] . reps ) {
972+ this . apply ( {
973+ type : 'ExerciseRepsChangedDueToWeightChange' ,
974+ payload : {
975+ workoutExerciseId,
976+ newReps,
977+ workoutId : activeWorkout . id ,
978+ microcycleId : activeWorkout . microcycleId ,
979+ } ,
980+ } )
981+ }
965982 }
966983
967984 this . apply ( {
@@ -1028,6 +1045,27 @@ export class MesocycleAggregateRoot {
10281045 } )
10291046 }
10301047
1048+ changeReps ( workoutExerciseId : string , reps : number ) {
1049+ const activeWorkout = this . getActiveWorkout ( )
1050+ const exercise = activeWorkout . exercises . find ( exercise => exercise . id === workoutExerciseId )
1051+ if ( ! exercise ) {
1052+ throw new Error ( 'Exercise not found in the workout' )
1053+ }
1054+
1055+ if ( exercise . state !== WorkoutExerciseState . pending ) {
1056+ throw new Error ( 'Cant change reps of non-pending exercise' )
1057+ }
1058+
1059+ this . apply ( {
1060+ type : 'ExerciseUpdated' ,
1061+ payload : { workoutExerciseId, workoutId : activeWorkout . id , microcycleId : activeWorkout . microcycleId } ,
1062+ } )
1063+ this . apply ( {
1064+ type : 'ExerciseRepsChanged' ,
1065+ payload : { workoutExerciseId, reps, workoutId : activeWorkout . id , microcycleId : activeWorkout . microcycleId } ,
1066+ } )
1067+ }
1068+
10311069 setStateHasChanged ( workoutExerciseId : string , setId : string , state : WorkingSetState ) {
10321070 const activeWorkout = this . getActiveWorkout ( )
10331071
@@ -1463,16 +1501,18 @@ export class MesocycleAggregateRoot {
14631501 ...workout ,
14641502 exercises : workout . exercises . map ( exercise => {
14651503 if ( exercise . id === event . payload . exerciseId ) {
1466- const assessmentData = match ( event . payload . exerciseAssesment )
1467- . with ( { assesment : ExerciseAssesmentScore . Hard } , assessment => ( {
1468- assesment : assessment . assesment ,
1469- hardAssesmentTag : assessment . assesmentTag ,
1470- } ) )
1471- . with ( { assesment : ExerciseAssesmentScore . Ideal } , assessment => ( {
1472- assesment : assessment . assesment ,
1473- hardAssesmentTag : null ,
1474- } ) )
1475- . exhaustive ( )
1504+ const assessmentData = event . payload . exerciseAssesment
1505+ ? match ( event . payload . exerciseAssesment )
1506+ . with ( { assesment : ExerciseAssesmentScore . Hard } , assessment => ( {
1507+ assesment : assessment . assesment ,
1508+ hardAssesmentTag : assessment . assesmentTag ,
1509+ } ) )
1510+ . with ( { assesment : ExerciseAssesmentScore . Ideal } , assessment => ( {
1511+ assesment : assessment . assesment ,
1512+ hardAssesmentTag : null ,
1513+ } ) )
1514+ . exhaustive ( )
1515+ : { assesment : null , hardAssesmentTag : null }
14761516
14771517 return {
14781518 ...exercise ,
@@ -1521,6 +1561,27 @@ export class MesocycleAggregateRoot {
15211561 } as MicrocycleWorkout
15221562 } )
15231563 } )
1564+ . with ( { type : 'ExerciseRepsChanged' } , event => {
1565+ updateMicrocycleWorkout ( event . payload . microcycleId , event . payload . workoutId , workout => {
1566+ return {
1567+ ...workout ,
1568+ exercises : workout . exercises . map ( exercise => {
1569+ if ( exercise . id === event . payload . workoutExerciseId ) {
1570+ return {
1571+ ...exercise ,
1572+ sets : exercise . sets . map ( set => {
1573+ if ( set . state === WorkingSetState . pending ) {
1574+ return { ...set , reps : event . payload . reps }
1575+ }
1576+ return set
1577+ } ) ,
1578+ }
1579+ }
1580+ return exercise
1581+ } ) ,
1582+ } as MicrocycleWorkout
1583+ } )
1584+ } )
15241585 . with ( { type : 'ExerciseRepsChangedDueToWeightChange' } , event => {
15251586 updateMicrocycleWorkout ( event . payload . microcycleId , event . payload . workoutId , workout => {
15261587 return {
0 commit comments