Vilken träning vill du köra idag?
{successMessage && ({workout.name}
{exerciseCount} övningar
import { useState, useEffect } from 'react' import { Icon, getWorkoutIconName } from '../components/Icons' const API_URL = '/api' // Workout color based on type - more subtle/muted palette const getWorkoutColor = (name) => { const lower = name.toLowerCase() if (lower.includes('push') || lower.includes('bröst')) return 'var(--workout-push)' if (lower.includes('pull') || lower.includes('rygg')) return 'var(--workout-pull)' if (lower.includes('ben') || lower.includes('leg')) return 'var(--workout-legs)' if (lower.includes('axlar')) return 'var(--workout-shoulders)' if (lower.includes('överkropp') || lower.includes('upper')) return 'var(--workout-upper)' if (lower.includes('underkropp') || lower.includes('lower')) return 'var(--workout-lower)' return 'var(--workout-default)' } function WorkoutSelectPage({ onBack, onSelectWorkout }) { const [program, setProgram] = useState(null) const [customWorkouts, setCustomWorkouts] = useState([]) const [loading, setLoading] = useState(true) const [selectedWorkout, setSelectedWorkout] = useState(null) const [resetConfirm, setResetConfirm] = useState(null) const [resetting, setResetting] = useState(false) const [successMessage, setSuccessMessage] = useState(null) useEffect(() => { fetchProgram() fetchCustomWorkouts() }, []) // Auto-clear success message after 3 seconds useEffect(() => { if (successMessage) { const timer = setTimeout(() => setSuccessMessage(null), 3000) return () => clearTimeout(timer) } }, [successMessage]) const fetchProgram = async () => { try { const res = await fetch(`${API_URL}/programs/1`) const data = await res.json() setProgram(data) setLoading(false) } catch (err) { console.error('Failed to fetch program:', err) setLoading(false) } } const fetchCustomWorkouts = async () => { try { const token = localStorage.getItem('token') if (!token) return const res = await fetch(`${API_URL}/custom-workouts`, { headers: { 'Authorization': `Bearer ${token}` } }) const data = await res.json() setCustomWorkouts(data || []) } catch (err) { console.error('Failed to fetch custom workouts:', err) } } const getCustomWorkoutId = (programDayId) => { const customWorkout = customWorkouts.find(cw => cw.source_program_day_id === programDayId) return customWorkout?.id } const isWorkoutCustom = (programDayId) => { return customWorkouts.some(cw => cw.source_program_day_id === programDayId) } const handleSelect = (workout) => { setSelectedWorkout(workout) } const handleStart = () => { if (selectedWorkout) { onSelectWorkout(selectedWorkout) } } const handleResetClick = (e, workoutId) => { e.stopPropagation() setResetConfirm(workoutId) } const handleConfirmReset = async () => { if (!resetConfirm) return setResetting(true) try { const token = localStorage.getItem('token') const res = await fetch(`${API_URL}/custom-workouts/${resetConfirm}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${token}` } }) if (res.ok) { // Refresh custom workouts list await fetchCustomWorkouts() setSuccessMessage('Passet återställdes till original') setSelectedWorkout(null) setResetConfirm(null) } else { console.error('Failed to reset workout:', res.status) } } catch (err) { console.error('Error resetting workout:', err) } finally { setResetting(false) } } if (loading) { return (
Laddar pass...
Vilken träning vill du köra idag?
{successMessage && ({exerciseCount} övningar
Är du säker? Dina ändringar kommer att försvinna och passet återställs till programversionen.