import React, { useCallback, useEffect, useMemo, useState } from 'react' import { Link } from 'react-router-dom' import api from '../utils/api' import { useAuth } from '../context/AuthContext' import { getTenantClubDependencyKey } from '../utils/activeClub' export default function TrainingModulesListPage() { const { user } = useAuth() const tenantClubDepKey = useMemo(() => getTenantClubDependencyKey(user), [user]) const [rows, setRows] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState('') const load = useCallback(async () => { setLoading(true) setError('') try { const list = await api.listTrainingModules() setRows(Array.isArray(list) ? list : []) } catch (e) { setError(e.message || 'Laden fehlgeschlagen') setRows([]) } finally { setLoading(false) } }, []) useEffect(() => { load() }, [load, tenantClubDepKey]) async function handleDelete(id, title) { if (!confirm(`Trainingsmodul „${title || id}“ wirklich löschen?`)) return try { await api.deleteTrainingModule(id) await load() } catch (e) { alert(e.message || 'Löschen fehlgeschlagen') } } return ( <>
Wiederverwendbare Übungsfolgen für die Trainingsplanung. Übernahme in eine Einheit erfolgt dort als lokale Kopie (mit Herkunftsmarkierung).
{error}
) : null} {loading ? (Laden …
) : rows.length === 0 ? (Noch keine Module angelegt.
{(r.summary || '').trim() || '—'}{' '} ({Number(r.items_count) || 0} Position{r.items_count === 1 ? '' : 'en'})
Sichtbarkeit: {r.visibility || '—'}