// components/workout/ExerciseTracker.tsx
import React, { useCallback } from 'react';
import { View, ScrollView } from 'react-native';
import { Text } from '@/components/ui/text';
import { Button } from '@/components/ui/button';
import { ChevronLeft, ChevronRight, Plus, TimerReset, Dumbbell } from 'lucide-react-native';
import { Card, CardContent } from '@/components/ui/card';
import SetInput from '@/components/workout/SetInput';
import { useWorkoutStore } from '@/stores/workoutStore';
import { generateId } from '@/utils/ids';
import type { WorkoutSet } from '@/types/workout';
import { cn } from '@/lib/utils';
import { useRouter } from 'expo-router';
export default function ExerciseTracker() {
const router = useRouter();
const activeWorkout = useWorkoutStore.use.activeWorkout();
const currentExerciseIndex = useWorkoutStore.use.currentExerciseIndex();
const { nextExercise, previousExercise, startRest, updateSet } = useWorkoutStore.getState();
// Handle adding a new set - define callback before any conditional returns
const handleAddSet = useCallback(() => {
if (!activeWorkout?.exercises[currentExerciseIndex]) return;
const currentExercise = activeWorkout.exercises[currentExerciseIndex];
const lastSet = currentExercise.sets[currentExercise.sets.length - 1];
const newSet: WorkoutSet = {
id: generateId('local'),
weight: lastSet?.weight || 0,
reps: lastSet?.reps || 0,
type: 'normal',
isCompleted: false
};
updateSet(currentExerciseIndex, currentExercise.sets.length, newSet);
}, [activeWorkout, currentExerciseIndex, updateSet]);
// Empty state check after hooks
if (!activeWorkout?.exercises || activeWorkout.exercises.length === 0) {
return (
No exercises added
Tap the + button to add exercises to your workout
);
}
// Prepare derivative state after hooks
const currentExercise = activeWorkout.exercises[currentExerciseIndex];
const hasNextExercise = currentExerciseIndex < activeWorkout.exercises.length - 1;
const hasPreviousExercise = currentExerciseIndex > 0;
if (!currentExercise) return null;
return (
{/* Exercise Navigation */}
{currentExercise.title}
{currentExercise.equipment} • {currentExercise.category}
{/* Sets List */}
{/* Header Row */}
Set
Prev
kg
Reps
{/* Sets */}
{currentExercise.sets.map((set: WorkoutSet, index: number) => (
0 ? currentExercise.sets[index - 1] : undefined}
/>
))}
{/* Bottom Controls */}
);
}