// components/workout/WorkoutCard.tsx import React from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; import { ChevronRight } from 'lucide-react-native'; import { Card, CardContent } from '@/components/ui/card'; import { Workout } from '@/types/workout'; import { format } from 'date-fns'; import { useRouter } from 'expo-router'; interface WorkoutCardProps { workout: Workout; showDate?: boolean; showExercises?: boolean; } // Calculate duration in hours and minutes const formatDuration = (startTime: number, endTime: number) => { const durationMs = endTime - startTime; const hours = Math.floor(durationMs / (1000 * 60 * 60)); const minutes = Math.floor((durationMs % (1000 * 60 * 60)) / (1000 * 60)); if (hours > 0) { return `${hours}h ${minutes}m`; } return `${minutes}m`; }; export const WorkoutCard: React.FC = ({ workout, showDate = true, showExercises = true }) => { const router = useRouter(); const handlePress = () => { // Navigate to workout details console.log(`Navigate to workout ${workout.id}`); // Implement navigation when endpoint is available // router.push(`/workout/${workout.id}`); }; return ( {workout.title} {showDate && ( {format(workout.startTime, 'EEEE, MMM d')} )} ⏱️ {formatDuration(workout.startTime, workout.endTime || Date.now())} ⚖️ {workout.totalVolume ? `${workout.totalVolume} lb` : '0 lb'} {workout.totalReps && ( 🔄 {workout.totalReps} reps )} {/* Show exercises if requested */} {showExercises && ( Exercise {/* In a real implementation, you would map through actual exercises */} {workout.exercises && workout.exercises.length > 0 ? ( workout.exercises.slice(0, 3).map((exercise, idx) => ( {exercise.title} )) ) : ( No exercises recorded )} {workout.exercises && workout.exercises.length > 3 && ( +{workout.exercises.length - 3} more exercises )} )} ); }; export default WorkoutCard;