From fbda40549451b794e34a278e931fc4ea2e2ba025 Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 11 Mar 2026 19:46:31 +0000 Subject: [PATCH] Add src/app/components/WorkoutDataIntegration.tsx --- src/app/components/WorkoutDataIntegration.tsx | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/app/components/WorkoutDataIntegration.tsx diff --git a/src/app/components/WorkoutDataIntegration.tsx b/src/app/components/WorkoutDataIntegration.tsx new file mode 100644 index 0000000..f899321 --- /dev/null +++ b/src/app/components/WorkoutDataIntegration.tsx @@ -0,0 +1,64 @@ +'use client'; + +import React, { useCallback } from 'react'; +import { useWorkoutTracking } from '@/app/hooks/useWorkoutTracking'; +import { WorkoutSession, CardioSession, NutritionLog } from '@/app/lib/storage/workoutStorage'; + +export interface WorkoutDataIntegrationProps { + onSave?: (data: any) => void; + autoSave?: boolean; +} + +/** + * WorkoutDataIntegration component that provides workout tracking context + * Use this component to wrap sections that need to save workout data + */ +export const WorkoutDataIntegration: React.FC<{ + children: React.ReactNode; +} & WorkoutDataIntegrationProps> = ({ children, onSave, autoSave = true }) => { + const { metrics, addWorkoutSession, addCardioSession, addNutritionLog, refreshMetrics } = + useWorkoutTracking(); + + const handleWorkoutSave = useCallback( + (session: WorkoutSession) => { + addWorkoutSession(session); + if (onSave) onSave({ type: 'workout', data: session }); + }, + [addWorkoutSession, onSave] + ); + + const handleCardioSave = useCallback( + (session: CardioSession) => { + addCardioSession(session); + if (onSave) onSave({ type: 'cardio', data: session }); + }, + [addCardioSession, onSave] + ); + + const handleNutritionSave = useCallback( + (log: NutritionLog) => { + addNutritionLog(log); + if (onSave) onSave({ type: 'nutrition', data: log }); + }, + [addNutritionLog, onSave] + ); + + // Expose save functions via context or props + const contextValue = { + metrics, + handleWorkoutSave, + handleCardioSave, + handleNutritionSave, + refreshMetrics, + autoSave, + }; + + // Clone children and pass context data as props + return ( +
+ {children} +
+ ); +}; + +export default WorkoutDataIntegration;