import { useCallback, useEffect, useState } from 'react'
import { Navigate } from 'react-router-dom'
import { useAuth } from '../context/AuthContext'
import api from '../utils/api'
import AdminPageNav from '../components/AdminPageNav'
function formatDate(value) {
if (!value) return '—'
try {
return new Date(value).toLocaleString('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
})
} catch {
return String(value)
}
}
/**
* Superadmin: offene Anträge auf Vereinsgründung freigeben oder ablehnen.
*/
export default function AdminClubCreationRequestsPage() {
const { user } = useAuth()
const isSuperadmin = user?.role === 'superadmin'
const [requests, setRequests] = useState([])
const [loading, setLoading] = useState(true)
const [error, setError] = useState('')
const [busyId, setBusyId] = useState(null)
const load = useCallback(async () => {
const rows = await api.listAdminClubCreationRequests()
setRequests(Array.isArray(rows) ? rows : [])
}, [])
useEffect(() => {
if (!isSuperadmin) return
let cancelled = false
;(async () => {
setError('')
setLoading(true)
try {
await load()
} catch (e) {
if (!cancelled) setError(e.message || String(e))
} finally {
if (!cancelled) setLoading(false)
}
})()
return () => {
cancelled = true
}
}, [isSuperadmin, load])
if (!isSuperadmin) return
Offene Anträge von verifizierten Nutzern ohne Vereinsmitgliedschaft. Bei Freigabe wird ein neuer Verein mit Free-Abo angelegt; der Antragsteller wird Vereinsadmin und Trainer.
{error ? ({error}
) : null} {loading ? (Laden…
) : requests.length === 0 ? (Keine offenen Gründungsanträge.
Antragsteller: {r.applicant_name || '—'}{' '} {r.applicant_email ? `· ${r.applicant_email}` : ''}
Eingereicht: {formatDate(r.created_at)}
{r.proposed_description ? ({r.proposed_description}
) : null} {r.message ? (Nachricht: {r.message}
) : null}