/** * 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 (
Laddar alternativ...
Inga andra pass tillgängliga