diff --git a/src/hooks/useWorkoutData.ts b/src/hooks/useWorkoutData.ts index d95824b..1d4945d 100644 --- a/src/hooks/useWorkoutData.ts +++ b/src/hooks/useWorkoutData.ts @@ -1,9 +1,9 @@ 'use client'; -import { useState, useCallback, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { - WorkoutSession, UserMetrics, + WorkoutSession, saveWorkoutSession, getWorkoutSessions, updateWorkoutSession, @@ -13,150 +13,41 @@ import { saveUserMetrics, getUserMetrics, updateUserMetrics, - calculateMetricsFromSessions + calculateMetricsFromSessions, } from '@/lib/storage/workoutStorage'; -export const useWorkoutData = () => { - const [sessions, setSessions] = useState([]); +export function useWorkoutData() { + const [workouts, setWorkouts] = useState([]); const [metrics, setMetrics] = useState(null); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); - // Load initial data useEffect(() => { - try { - setIsLoading(true); - const loadedSessions = getWorkoutSessions(); - const loadedMetrics = getUserMetrics(); - setSessions(loadedSessions); - setMetrics(loadedMetrics); - setError(null); - } catch (err) { - setError('Failed to load workout data'); - console.error(err); - } finally { - setIsLoading(false); - } - }, []); - - const addSession = useCallback((session: Omit) => { - try { - const newSession: WorkoutSession = { - ...session, - id: Date.now().toString() - }; - const success = saveWorkoutSession(newSession); - if (success) { - setSessions(prev => [...prev, newSession]); - // Recalculate metrics - const updatedMetrics = calculateMetricsFromSessions(); - setMetrics(updatedMetrics); - saveUserMetrics(updatedMetrics); + const loadData = async () => { + try { + const [workoutList, userMetrics] = await Promise.all([ + getWorkoutSessions(), + getUserMetrics(), + ]); + setWorkouts(workoutList); + setMetrics(userMetrics); + } finally { + setLoading(false); } - return success; - } catch (err) { - setError('Failed to add session'); - console.error(err); - return false; - } - }, []); - - const updateSession = useCallback((id: string, updates: Partial) => { - try { - const success = updateWorkoutSession(id, updates); - if (success) { - setSessions(prev => - prev.map(s => s.id === id ? { ...s, ...updates } : s) - ); - // Recalculate metrics - const updatedMetrics = calculateMetricsFromSessions(); - setMetrics(updatedMetrics); - saveUserMetrics(updatedMetrics); - } - return success; - } catch (err) { - setError('Failed to update session'); - console.error(err); - return false; - } - }, []); - - const removeSession = useCallback((id: string) => { - try { - const success = deleteWorkoutSession(id); - if (success) { - setSessions(prev => prev.filter(s => s.id !== id)); - // Recalculate metrics - const updatedMetrics = calculateMetricsFromSessions(); - setMetrics(updatedMetrics); - saveUserMetrics(updatedMetrics); - } - return success; - } catch (err) { - setError('Failed to delete session'); - console.error(err); - return false; - } - }, []); - - const getSessionsByType = useCallback((type: 'cardio' | 'training' | 'nutrition') => { - try { - return getWorkoutsByType(type); - } catch (err) { - setError('Failed to filter sessions'); - console.error(err); - return []; - } - }, []); - - const getSessionsByDate = useCallback((startDate: string, endDate: string) => { - try { - return getWorkoutsByDateRange(startDate, endDate); - } catch (err) { - setError('Failed to filter sessions by date'); - console.error(err); - return []; - } - }, []); - - const updateMetrics = useCallback((updates: Partial) => { - try { - const success = updateUserMetrics(updates); - if (success) { - setMetrics(prev => prev ? { ...prev, ...updates } : null); - } - return success; - } catch (err) { - setError('Failed to update metrics'); - console.error(err); - return false; - } - }, []); - - const refreshMetrics = useCallback(() => { - try { - const recalculated = calculateMetricsFromSessions(); - setMetrics(recalculated); - saveUserMetrics(recalculated); - return recalculated; - } catch (err) { - setError('Failed to refresh metrics'); - console.error(err); - return null; - } + }; + loadData(); }, []); return { - sessions, + workouts, metrics, - isLoading, - error, - addSession, - updateSession, - removeSession, - getSessionsByType, - getSessionsByDate, - updateMetrics, - refreshMetrics + loading, + saveWorkoutSession, + updateWorkoutSession, + deleteWorkoutSession, + getWorkoutsByType, + getWorkoutsByDateRange, + saveUserMetrics, + updateUserMetrics, + calculateMetricsFromSessions, }; -}; +}