'use client'; import { useState, useEffect } from 'react'; import Link from 'next/link'; import { Team } from '@/types'; export default function TeamsClient() { const [teams, setTeams] = useState([]); const [isLoading, setIsLoading] = useState(true); const [newTeamName, setNewTeamName] = useState(''); const [editingTeam, setEditingTeam] = useState(null); const [editingName, setEditingName] = useState(''); useEffect(() => { fetchTeams(); }, []); const fetchTeams = async () => { setIsLoading(true); try { const res = await fetch('/api/teams'); const data = await res.json(); setTeams(data); } catch (error) { console.error('Error fetching teams:', error); } finally { setIsLoading(false); } }; const handleAddTeam = async (e: React.FormEvent) => { e.preventDefault(); if (!newTeamName.trim()) return; try { const res = await fetch('/api/teams', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ team_name: newTeamName }), }); if (res.ok) { setNewTeamName(''); fetchTeams(); } else { const error = await res.json(); alert(`Error adding team: ${error.error}`); } } catch (error) { console.error('Error adding team:', error); alert('Failed to add team'); } }; const handleUpdateTeam = async (teamId: number) => { if (!editingName.trim()) return; try { const res = await fetch(`/api/teams/${teamId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ team_name: editingName }), }); if (res.ok) { setEditingTeam(null); setEditingName(''); fetchTeams(); } else { const error = await res.json(); alert(`Error updating team: ${error.error}`); } } catch (error) { console.error('Error updating team:', error); alert('Failed to update team'); } }; const handleDeleteTeam = async (teamId: number) => { if (!confirm('Are you sure you want to delete this team? This will also delete all associated streams.')) { return; } try { const res = await fetch(`/api/teams/${teamId}`, { method: 'DELETE', }); if (res.ok) { fetchTeams(); } else { const error = await res.json(); alert(`Error deleting team: ${error.error}`); } } catch (error) { console.error('Error deleting team:', error); alert('Failed to delete team'); } }; const startEditing = (team: Team) => { setEditingTeam(team); setEditingName(team.team_name); }; const cancelEditing = () => { setEditingTeam(null); setEditingName(''); }; return (
Back to Stream Management

Add New Team

setNewTeamName(e.target.value)} placeholder="Team name" className="flex-1 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" />

Existing Teams

{isLoading ? (
Loading...
) : teams.length === 0 ? (
No teams found. Add one above!
) : (
{teams.map((team) => (
{editingTeam?.team_id === team.team_id ? ( <> setEditingName(e.target.value)} className="flex-1 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 mr-3" />
) : ( <>
{team.team_name} (ID: {team.team_id})
)}
))}
)}
); }