Hidden field values do not messup logged set

This commit is contained in:
AG
2025-11-28 20:52:11 +02:00
parent 82a8c6df2e
commit a98839585d
3 changed files with 79 additions and 23 deletions

View File

@@ -271,7 +271,7 @@ const History: React.FC<HistoryProps> = ({ sessions, onUpdateSession, onDeleteSe
<input
type="number"
className="w-full bg-transparent text-sm text-on-surface focus:outline-none"
value={set.weight ?? ''}
value={set.weight === 0 ? '' : (set.weight ?? '')}
onChange={(e) => handleUpdateSet(set.id, 'weight', parseFloat(e.target.value))}
/>
</div>
@@ -282,8 +282,8 @@ const History: React.FC<HistoryProps> = ({ sessions, onUpdateSession, onDeleteSe
<input
type="number"
className="w-full bg-transparent text-sm text-on-surface focus:outline-none"
value={set.reps ?? ''}
onChange={(e) => handleUpdateSet(set.id, 'reps', parseFloat(e.target.value))}
value={set.reps === 0 ? '' : (set.reps ?? '')}
onChange={(e) => handleUpdateSet(set.id, 'reps', parseInt(e.target.value))}
/>
</div>
)}
@@ -293,7 +293,7 @@ const History: React.FC<HistoryProps> = ({ sessions, onUpdateSession, onDeleteSe
<input
type="number"
className="w-full bg-transparent text-sm text-on-surface focus:outline-none"
value={set.bodyWeightPercentage ?? 100}
value={set.bodyWeightPercentage === 0 ? '' : (set.bodyWeightPercentage ?? 100)}
onChange={(e) => handleUpdateSet(set.id, 'bodyWeightPercentage', parseFloat(e.target.value))}
/>
</div>
@@ -304,7 +304,7 @@ const History: React.FC<HistoryProps> = ({ sessions, onUpdateSession, onDeleteSe
<input
type="number"
className="w-full bg-transparent text-sm text-on-surface focus:outline-none"
value={set.durationSeconds ?? ''}
value={set.durationSeconds === 0 ? '' : (set.durationSeconds ?? '')}
onChange={(e) => handleUpdateSet(set.id, 'durationSeconds', parseFloat(e.target.value))}
/>
</div>
@@ -315,7 +315,7 @@ const History: React.FC<HistoryProps> = ({ sessions, onUpdateSession, onDeleteSe
<input
type="number"
className="w-full bg-transparent text-sm text-on-surface focus:outline-none"
value={set.distanceMeters ?? ''}
value={set.distanceMeters === 0 ? '' : (set.distanceMeters ?? '')}
onChange={(e) => handleUpdateSet(set.id, 'distanceMeters', parseFloat(e.target.value))}
/>
</div>
@@ -326,7 +326,7 @@ const History: React.FC<HistoryProps> = ({ sessions, onUpdateSession, onDeleteSe
<input
type="number"
className="w-full bg-transparent text-sm text-on-surface focus:outline-none"
value={set.height ?? ''}
value={set.height === 0 ? '' : (set.height ?? '')}
onChange={(e) => handleUpdateSet(set.id, 'height', parseFloat(e.target.value))}
/>
</div>

View File

@@ -121,14 +121,31 @@ const Tracker: React.FC<TrackerProps> = ({ userId, userWeight, activeSession, ac
setLastSet(set);
if (set) {
if (set.weight != null) setWeight(set.weight.toString());
if (set.reps != null) setReps(set.reps.toString());
if (set.durationSeconds != null) setDuration(set.durationSeconds.toString());
if (set.distanceMeters != null) setDistance(set.distanceMeters.toString());
if (set.height != null) setHeight(set.height.toString());
setWeight(set.weight?.toString() || '');
setReps(set.reps?.toString() || '');
setDuration(set.durationSeconds?.toString() || '');
setDistance(set.distanceMeters?.toString() || '');
setHeight(set.height?.toString() || '');
} else {
setWeight(''); setReps(''); setDuration(''); setDistance(''); setHeight('');
}
// Clear fields not relevant to the selected exercise type
if (selectedExercise.type !== ExerciseType.STRENGTH && selectedExercise.type !== ExerciseType.BODYWEIGHT) {
setWeight('');
}
if (selectedExercise.type !== ExerciseType.STRENGTH && selectedExercise.type !== ExerciseType.BODYWEIGHT && selectedExercise.type !== ExerciseType.PLYOMETRIC) {
setReps('');
}
if (selectedExercise.type !== ExerciseType.CARDIO && selectedExercise.type !== ExerciseType.STATIC) {
setDuration('');
}
if (selectedExercise.type !== ExerciseType.CARDIO && selectedExercise.type !== ExerciseType.LONG_JUMP) {
setDistance('');
}
if (selectedExercise.type !== ExerciseType.HIGH_JUMP) {
setHeight('');
}
}
};
updateSelection();
@@ -158,14 +175,37 @@ const Tracker: React.FC<TrackerProps> = ({ userId, userWeight, activeSession, ac
exerciseName: selectedExercise.name,
type: selectedExercise.type,
timestamp: Date.now(),
...(weight && { weight: parseFloat(weight) }),
...(reps && { reps: parseInt(reps) }),
...(duration && { durationSeconds: parseInt(duration) }),
...(distance && { distanceMeters: parseFloat(distance) }),
...(height && { height: parseFloat(height) }),
...((selectedExercise.type === ExerciseType.BODYWEIGHT || selectedExercise.type === ExerciseType.STATIC) && { bodyWeightPercentage: parseFloat(bwPercentage) || 100 })
};
switch (selectedExercise.type) {
case ExerciseType.STRENGTH:
if (weight) newSet.weight = parseFloat(weight);
if (reps) newSet.reps = parseInt(reps);
break;
case ExerciseType.BODYWEIGHT:
if (weight) newSet.weight = parseFloat(weight);
if (reps) newSet.reps = parseInt(reps);
newSet.bodyWeightPercentage = parseFloat(bwPercentage) || 100;
break;
case ExerciseType.CARDIO:
if (duration) newSet.durationSeconds = parseInt(duration);
if (distance) newSet.distanceMeters = parseFloat(distance);
break;
case ExerciseType.STATIC:
if (duration) newSet.durationSeconds = parseInt(duration);
newSet.bodyWeightPercentage = parseFloat(bwPercentage) || 100;
break;
case ExerciseType.HIGH_JUMP:
if (height) newSet.height = parseFloat(height);
break;
case ExerciseType.LONG_JUMP:
if (distance) newSet.distanceMeters = parseFloat(distance);
break;
case ExerciseType.PLYOMETRIC:
if (reps) newSet.reps = parseInt(reps);
break;
}
onSetAdded(newSet);
if (activePlan) {
@@ -564,11 +604,27 @@ const Tracker: React.FC<TrackerProps> = ({ userId, userWeight, activeSession, ac
<div>
<div className="text-base font-medium text-on-surface">{set.exerciseName}</div>
<div className="text-sm text-on-surface-variant">
{set.weight != null && `${set.weight}kg `}
{set.reps != null && `x ${set.reps}`}
{set.distanceMeters != null && `${set.distanceMeters}m`}
{set.durationSeconds != null && `${set.durationSeconds}s`}
{set.height != null && `${set.height}cm`}
{set.type === ExerciseType.STRENGTH &&
`${set.weight ? `${set.weight}kg` : ''} ${set.reps ? `x ${set.reps}` : ''}`.trim()
}
{set.type === ExerciseType.BODYWEIGHT &&
`${set.weight ? `${set.weight}kg` : ''} ${set.reps ? `x ${set.reps}` : ''}`.trim()
}
{set.type === ExerciseType.CARDIO &&
`${set.durationSeconds ? `${set.durationSeconds}s` : ''} ${set.distanceMeters ? `/ ${set.distanceMeters}m` : ''}`.trim()
}
{set.type === ExerciseType.STATIC &&
`${set.durationSeconds ? `${set.durationSeconds}s` : ''}`.trim()
}
{set.type === ExerciseType.HIGH_JUMP &&
`${set.height ? `${set.height}cm` : ''}`.trim()
}
{set.type === ExerciseType.LONG_JUMP &&
`${set.distanceMeters ? `${set.distanceMeters}m` : ''}`.trim()
}
{set.type === ExerciseType.PLYOMETRIC &&
`${set.reps ? `x ${set.reps}` : ''}`.trim()
}
</div>
</div>
)}

Binary file not shown.