import React, { useState, useEffect } from 'react' import api from '../utils/api' function ExercisesPage() { const [exercises, setExercises] = useState([]) const [skills, setSkills] = useState([]) const [focusAreas, setFocusAreas] = useState([]) const [trainingStyles, setTrainingStyles] = useState([]) const [trainingCharacters, setTrainingCharacters] = useState([]) const [loading, setLoading] = useState(true) const [showModal, setShowModal] = useState(false) const [editingExercise, setEditingExercise] = useState(null) const [filters, setFilters] = useState({ focus_area: '', visibility: '', status: '' }) // Form state const [formData, setFormData] = useState({ title: '', summary: '', goal: '', execution: '', preparation: '', trainer_notes: '', equipment: [], duration_min: '', duration_max: '', group_size_min: '', group_size_max: '', age_groups: [], focus_area: '', focus_area_id: null, secondary_areas: [], training_style_id: null, training_character: '', training_character_id: null, visibility: 'private', status: 'draft', skills: [] }) useEffect(() => { loadData() }, [filters]) const loadData = async () => { try { const [exercisesData, skillsData, focusAreasData, stylesData, charactersData] = await Promise.all([ api.listExercises(filters), api.listSkills(), api.listFocusAreas(), api.listTrainingStyles(), api.listTrainingCharacters() ]) setExercises(exercisesData) setSkills(skillsData) setFocusAreas(focusAreasData) setTrainingStyles(stylesData) setTrainingCharacters(charactersData) } catch (err) { console.error('Failed to load data:', err) alert('Fehler beim Laden: ' + err.message) } finally { setLoading(false) } } const handleCreate = () => { setEditingExercise(null) setFormData({ title: '', summary: '', goal: '', execution: '', preparation: '', trainer_notes: '', equipment: [], duration_min: '', duration_max: '', group_size_min: '', group_size_max: '', age_groups: [], focus_area: '', focus_area_id: null, secondary_areas: [], training_style_id: null, training_character: '', training_character_id: null, visibility: 'private', status: 'draft', skills: [] }) setShowModal(true) } const handleEdit = (exercise) => { setEditingExercise(exercise) setFormData({ title: exercise.title || '', summary: exercise.summary || '', goal: exercise.goal || '', execution: exercise.execution || '', preparation: exercise.preparation || '', trainer_notes: exercise.trainer_notes || '', equipment: exercise.equipment || [], duration_min: exercise.duration_min || '', duration_max: exercise.duration_max || '', group_size_min: exercise.group_size_min || '', group_size_max: exercise.group_size_max || '', age_groups: exercise.age_groups || [], focus_area: exercise.focus_area || '', focus_area_id: exercise.focus_area_id || null, secondary_areas: exercise.secondary_areas || [], training_style_id: exercise.training_style_id || null, training_character: exercise.training_character || '', training_character_id: exercise.training_character_id || null, visibility: exercise.visibility || 'private', status: exercise.status || 'draft', skills: exercise.skills?.map(s => ({ skill_id: s.skill_id, is_primary: s.is_primary || false, intensity: s.intensity || null, development_contribution: s.development_contribution || null, required_level: s.required_level || null, target_level: s.target_level || null })) || [] }) setShowModal(true) } const handleDelete = async (exercise) => { if (!confirm(`Übung "${exercise.title}" wirklich löschen?`)) return try { await api.deleteExercise(exercise.id) await loadData() } catch (err) { alert('Fehler beim Löschen: ' + err.message) } } const handleSubmit = async (e) => { e.preventDefault() if (!formData.title || !formData.goal || !formData.execution) { alert('Titel, Ziel und Durchführung sind Pflichtfelder') return } try { if (editingExercise) { await api.updateExercise(editingExercise.id, formData) } else { await api.createExercise(formData) } setShowModal(false) await loadData() } catch (err) { alert('Fehler beim Speichern: ' + err.message) } } const updateFormField = (field, value) => { setFormData(prev => ({ ...prev, [field]: value })) } const toggleSkill = (skillId) => { const existing = formData.skills.find(s => s.skill_id === skillId) if (existing) { updateFormField('skills', formData.skills.filter(s => s.skill_id !== skillId)) } else { updateFormField('skills', [...formData.skills, { skill_id: skillId, is_primary: false, intensity: null, development_contribution: null, required_level: null, target_level: null }]) } } if (loading) { return (
Laden...
Keine Übungen gefunden. Lege jetzt deine erste Übung an!
{exercise.summary}
)}