import { useState, useEffect } from 'react'
import { api } from '../utils/api'
export default function TrainerContextsPage() {
const [contexts, setContexts] = useState([])
const [focusAreas, setFocusAreas] = useState([])
const [styleDirections, setStyleDirections] = useState([])
const [trainingTypes, setTrainingTypes] = useState([])
const [loading, setLoading] = useState(false)
const [error, setError] = useState('')
// Edit/Create state
const [editingContext, setEditingContext] = useState(null)
const [newContext, setNewContext] = useState({
name: '',
focus_area_id: null,
style_direction_id: null,
training_type_id: null,
is_style_independent: false,
description: '',
is_active: true
})
useEffect(() => {
loadData()
}, [])
async function loadData() {
setLoading(true)
setError('')
try {
const [ctx, fa, sd, tt] = await Promise.all([
api.listTrainerContexts(),
api.listFocusAreas(),
api.listStyleDirections(),
api.listTrainingTypes()
])
setContexts(ctx)
setFocusAreas(fa)
setStyleDirections(sd)
setTrainingTypes(tt)
} catch (e) {
setError(e.message)
} finally {
setLoading(false)
}
}
async function createContext() {
if (!newContext.name) {
setError('Name ist Pflichtfeld')
return
}
try {
await api.createTrainerContext(newContext)
setNewContext({
name: '',
focus_area_id: null,
style_direction_id: null,
training_type_id: null,
is_style_independent: false,
description: '',
is_active: true
})
loadData()
} catch (e) {
setError(e.message)
}
}
async function updateContext(id, data) {
try {
await api.updateTrainerContext(id, data)
setEditingContext(null)
loadData()
} catch (e) {
setError(e.message)
}
}
async function deleteContext(id) {
if (!confirm('Trainer-Kontext wirklich löschen?')) return
try {
await api.deleteTrainerContext(id)
loadData()
} catch (e) {
setError(e.message)
}
}
// Filter style directions by selected focus area
function getFilteredStyleDirections(focusAreaId) {
if (!focusAreaId) return []
return styleDirections.filter(sd => sd.focus_area_id === parseInt(focusAreaId))
}
return (
Meine Trainer-Bereiche
Definiere deine Tätigkeitsbereiche für fokussierte Ansichten und Filter.
{error && (
{error}
)}
{/* Create New Context */}
Neuer Trainer-Bereich
setNewContext({ ...newContext, name: e.target.value })}
placeholder="z.B. Karate Goju-Ryu Breitensport"
/>
{newContext.focus_area_id && (
)}
{/* List of Contexts */}
{loading &&
Laden...
}
{!loading && contexts.length === 0 && (
Noch keine Trainer-Bereiche definiert. Lege oben deinen ersten Bereich an.
)}
{contexts.map(ctx => (
{editingContext?.id === ctx.id ? (
// Edit Mode
setEditingContext({ ...editingContext, name: e.target.value })}
/>
{editingContext.focus_area_id && (
)}
) : (
// Display Mode
{ctx.name}
{!ctx.is_active && (
(inaktiv)
)}
{ctx.focus_area_name && (
{ctx.focus_area_icon} {ctx.focus_area_name}
)}
{!ctx.focus_area_name && Alle Fokusbereiche}
{ctx.style_direction_name && (
→ {ctx.style_direction_name}
)}
{ctx.focus_area_name && !ctx.style_direction_name && !ctx.is_style_independent && (
→ Alle Stilrichtungen
)}
{ctx.is_style_independent && (
→ Stilunabhängig
)}
{ctx.training_type_name && (
→ {ctx.training_type_name}
)}
{ctx.description && (
{ctx.description}
)}
)}
))}
)
}