/** * WorkoutSwapPanel.jsx * Modal/panel for swapping current workout with another available workout */ import { useState, useEffect } from 'react' import { Icon } from './Icons' import './WorkoutSwapPanel.css' const API_URL = '/api' function WorkoutSwapPanel({ currentWorkout = null, onSwap = null, onClose = null, loading = false }) { const [availableWorkouts, setAvailableWorkouts] = useState([]) const [listLoading, setListLoading] = useState(false) const [error, setError] = useState('') const [selectedWorkout, setSelectedWorkout] = useState(null) useEffect(() => { if (!currentWorkout) return fetchAvailableWorkouts() }, [currentWorkout]) const fetchAvailableWorkouts = async () => { try { setListLoading(true) setError('') const response = await fetch(`${API_URL}/workouts/available`, { headers: { 'Authorization': `Bearer ${localStorage.getItem('token') || ''}` } }) if (!response.ok) { throw new Error('Failed to fetch workouts') } const data = await response.json() // Filter out current workout const filtered = data.filter(w => w.id !== currentWorkout?.id) setAvailableWorkouts(filtered) } catch (err) { console.error('Failed to fetch workouts:', err) setError('Kunde inte hämta tillgängliga pass') // Mock data for testing setAvailableWorkouts([ { id: 2, name: 'Push (Bröst/Axlar/Triceps)', type: 'PUSH', exercises: 9, duration: 60, targetMuscles: ['Bröst', 'Axlar', 'Triceps'] }, { id: 3, name: 'Cardio', type: 'CARDIO', exercises: 3, duration: 30, targetMuscles: ['Cardiovascular'] }, { id: 4, name: 'Full Body', type: 'FULL', exercises: 8, duration: 75, targetMuscles: ['Hela kroppen'] } ]) } finally { setListLoading(false) } } const handleSwap = async () => { if (!selectedWorkout || !onSwap) return try { setListLoading(true) setError('') await onSwap(selectedWorkout) } catch (err) { console.error('Swap failed:', err) setError('Kunde inte byta pass') } finally { setListLoading(false) } } return (

Byt pass

{onClose && ( )}
{currentWorkout && (
Nuvarande pass
{currentWorkout.type || 'WORKOUT'}
{currentWorkout.name}
{currentWorkout.exercises && (
{currentWorkout.exercises} övningar • {currentWorkout.duration || 60} min
)}
)}
{error && (
{error}
)} {listLoading ? (

Laddar alternativ...

) : ( <>
Välj pass att byta till
{availableWorkouts.length === 0 ? (

Inga andra pass tillgängliga

) : ( availableWorkouts.map((workout) => (
setSelectedWorkout(workout)} >
{workout.name}
{workout.exercises || 0} övningar • {workout.duration || 60} min
{selectedWorkout?.id === workout.id && }
{workout.targetMuscles && workout.targetMuscles.length > 0 && (
{workout.targetMuscles.map((muscle, idx) => ( {muscle} ))}
)}
)) )}
)}
{onClose && ( )}
) } export default WorkoutSwapPanel