import React, { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { getUserFromToken } from '../components/utils/jwt'; import { fetchTeams } from './api'; interface Team { UUID: string; Name: string; Players: string[]; OwnerUUID: string; Description: string } const TeamManagement: React.FC = () => { const [teams, setTeams] = useState([]); const [name, setName] = useState(''); const [description, setDescription] = useState(''); const [error, setError] = useState(''); const [editingTeam, setEditingTeam] = useState(null); const [selectedTeam, setSelectedTeam] = useState(null); const token = localStorage.getItem('token'); const user = token ? getUserFromToken(token) : null; const isAdmin = user?.role?.includes('admin'); const API_URL = 'http://localhost:8080/api'; useEffect(() => { load(); }, [token]); // Add token as dependency async function load() { if (!token) return; try { const data = await fetchTeams(token); // console.log("Geladene Teams:", data); if (data) { setTeams(data); } } catch (error) { // console.error("Fehler beim Laden der Teams:", error); setError('Fehler beim Laden der Teams'); } } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!user?.email) { setError('User email not found. Please log in again.'); return; } const body = { name, description: description, owneruuid: user.userId, }; const method = editingTeam ? 'PUT' : 'POST'; const url = editingTeam ? `/teams/${editingTeam.UUID}` : '/teams'; try { const res = await fetch(API_URL+url, { method, headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, body: JSON.stringify(body), }); const data = await res.json(); console.log("Response data:", data); if (res.ok) { handleCreateNewClick(); // Reset form state load(); // Reload teams } else { setError(data.error || 'Fehler beim Speichern'); } } catch (err) { setError('Ein Netzwerkfehler ist aufgetreten.'); } }; const handleDelete = async (id: string) => { if (!window.confirm("Are you sure you want to delete this team?")) return; try { const res = await fetch(`/api/teams/${id}`, { method: 'DELETE', headers: { Authorization: `Bearer ${token}` }, }); if (res.ok) { handleCreateNewClick(); // Reset form load(); // Refresh list } else { const data = await res.json(); setError(data.error || 'Löschen fehlgeschlagen'); } } catch (err) { setError('Ein Netzwerkfehler ist aufgetreten.'); } }; const canDelete = (team: Team) => isAdmin || team.OwnerUUID === user?.userId; const canCreate = () => isAdmin || true; const handleSelectTeam = (team: Team) => { setSelectedTeam(team); setEditingTeam(team); setName(team.Name); setDescription(team.Description); const currentUserEmail = user?.email; // description(otherPlayer || ''); }; const handleCreateNewClick = () => { setSelectedTeam(null); setEditingTeam(null); setName(''); setDescription(''); setError(''); }; // const myTeams = teams; const myTeams = teams.filter(team => team.OwnerUUID === user?.userId || (user?.email && team.Players.includes(user.email)) ); // console.log("meine teams ", myTeams); return (

Team Management

{error &&

{error}

}

Meine Teams

{myTeams.map((team) => ( ))}
{canCreate() && ( )}

{!editingTeam && !selectedTeam && (

Neues Team erstellen

)} {editingTeam && (

Team ansehen/bearbeiten: {editingTeam.Name}

)} {/* Form for creating or editing a team */} {(!selectedTeam && canCreate()) || editingTeam ? (
setName(e.target.value)} required />
setDescription(e.target.value)} // required={!isAdmin} // Admin can create single-player teams maybe? />
{editingTeam && canDelete(editingTeam) && ( )}
) : (

Wähle ein Team aus der Liste oben aus, um es zu bearbeiten, oder erstelle ein neues Team.

)}
); }; export default TeamManagement;