// app/(tabs)/history/workoutHistory.tsx import React, { useState, useEffect } from 'react'; import { View, ScrollView, ActivityIndicator, RefreshControl } from 'react-native'; import { Text } from '@/components/ui/text'; import { useSQLiteContext } from 'expo-sqlite'; import { Workout } from '@/types/workout'; import { format } from 'date-fns'; import { WorkoutHistoryService } from '@/lib/db/services/WorkoutHIstoryService'; import WorkoutCard from '@/components/workout/WorkoutCard'; // Mock data for when database tables aren't yet created const mockWorkouts: Workout[] = [ { id: '1', title: 'Push 1', type: 'strength', exercises: [], startTime: new Date('2025-03-07T10:00:00').getTime(), endTime: new Date('2025-03-07T11:47:00').getTime(), isCompleted: true, created_at: new Date('2025-03-07T10:00:00').getTime(), availability: { source: ['local'] }, totalVolume: 9239 }, { id: '2', title: 'Pull 1', type: 'strength', exercises: [], startTime: new Date('2025-03-05T14:00:00').getTime(), endTime: new Date('2025-03-05T15:36:00').getTime(), isCompleted: true, created_at: new Date('2025-03-05T14:00:00').getTime(), availability: { source: ['local'] }, totalVolume: 1396 } ]; // Group workouts by month const groupWorkoutsByMonth = (workouts: Workout[]) => { const grouped: Record = {}; workouts.forEach(workout => { const monthKey = format(workout.startTime, 'MMMM yyyy'); if (!grouped[monthKey]) { grouped[monthKey] = []; } grouped[monthKey].push(workout); }); return Object.entries(grouped); }; export default function HistoryScreen() { const db = useSQLiteContext(); const [workouts, setWorkouts] = useState([]); const [isLoading, setIsLoading] = useState(true); const [useMockData, setUseMockData] = useState(false); const [refreshing, setRefreshing] = useState(false); // Initialize workout history service const workoutHistoryService = React.useMemo(() => new WorkoutHistoryService(db), [db]); // Load workouts const loadWorkouts = async () => { try { setIsLoading(true); const allWorkouts = await workoutHistoryService.getAllWorkouts(); setWorkouts(allWorkouts); setUseMockData(false); } catch (error) { console.error('Error loading workouts:', error); // Check if the error is about missing tables const errorMsg = error instanceof Error ? error.message : String(error); if (errorMsg.includes('no such table')) { console.log('Using mock data because workout tables not yet created'); setWorkouts(mockWorkouts); setUseMockData(true); } else { // For other errors, just show empty state setWorkouts([]); setUseMockData(false); } } finally { setIsLoading(false); setRefreshing(false); } }; // Initial load useEffect(() => { loadWorkouts(); }, [workoutHistoryService]); // Pull to refresh handler const onRefresh = React.useCallback(() => { setRefreshing(true); loadWorkouts(); }, []); // Group workouts by month const groupedWorkouts = groupWorkoutsByMonth(workouts); return ( } > {isLoading && !refreshing ? ( Loading workout history... ) : workouts.length === 0 ? ( No workouts recorded yet. Complete a workout to see it here. ) : ( // Display grouped workouts by month {useMockData && ( Showing example data. Your completed workouts will appear here. )} {groupedWorkouts.map(([month, monthWorkouts]) => ( {month.toUpperCase()} {monthWorkouts.map((workout) => ( ))} ))} )} {/* Add bottom padding for better scrolling experience */} ); }