diff --git a/src/components/mesocycles/SplitProgressTracker.css b/src/components/mesocycles/SplitProgressTracker.css index fef35dd..08b7b57 100644 --- a/src/components/mesocycles/SplitProgressTracker.css +++ b/src/components/mesocycles/SplitProgressTracker.css @@ -198,6 +198,16 @@ -webkit-tap-highlight-color: transparent; font-family: inherit; width: 100%; + /* Reset default button styles so clickable cards render consistently */ + border: none; + background: none; + padding: 0; + color: inherit; + text-align: inherit; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + outline: none; } .split-card.clickable:hover { diff --git a/src/components/mesocycles/SplitProgressTracker.tsx b/src/components/mesocycles/SplitProgressTracker.tsx index 8a60346..fd2792e 100644 --- a/src/components/mesocycles/SplitProgressTracker.tsx +++ b/src/components/mesocycles/SplitProgressTracker.tsx @@ -147,12 +147,20 @@ export default function SplitProgressTracker({ activeWorkout.splitDayId === info.splitDay.id; const handleCardClick = () => { - if (isInProgress && onResumeWorkout) { - // Resume the active workout for this split - onResumeWorkout(); + if (isInProgress) { + if (onResumeWorkout) { + onResumeWorkout(); + } else { + console.warn( + 'Resume workout callback not provided - workout cannot be resumed' + ); + } } else if (onStartWorkout) { - // Start (or re-do) this split day onStartWorkout(info.splitDay.id); + } else { + console.warn( + 'Start workout callback not provided - workout cannot be started' + ); } }; @@ -206,10 +214,7 @@ export default function SplitProgressTracker({
🎉

All done this week!

-

- Tap any split above to repeat it or start next week's - training -

+

Tap any split above to redo it

)} diff --git a/src/components/workouts/WorkoutSession.tsx b/src/components/workouts/WorkoutSession.tsx index b5fb522..5f671e7 100644 --- a/src/components/workouts/WorkoutSession.tsx +++ b/src/components/workouts/WorkoutSession.tsx @@ -3,7 +3,7 @@ * Handles active workout logging and tracking */ -import { useState, useMemo, useEffect } from 'react'; +import { useState, useMemo, useEffect, useRef } from 'react'; import { useWorkoutSession } from '../../hooks/useWorkoutSession'; import { useExercises, @@ -103,9 +103,16 @@ export default function WorkoutSession({ onNavigate }: WorkoutSessionProps) { }, [activeMesocycle, completedWorkouts]); // Auto-start workout if coming from mesocycle dashboard with a selected split + const autoStartProcessedRef = useRef(false); useEffect(() => { const selectedSplitDayId = localStorage.getItem('selectedSplitDayId'); - if (selectedSplitDayId && activeMesocycle) { + if ( + selectedSplitDayId && + activeMesocycle && + !autoStartProcessedRef.current + ) { + // Mark as processed to prevent re-execution + autoStartProcessedRef.current = true; // Clear immediately to prevent re-triggering localStorage.removeItem('selectedSplitDayId');