import { useState, useEffect, useCallback } from 'react'; import { Link, useParams, useNavigate } from 'react-router-dom'; import { TeamDetail, Project, PaginatedResponse } from '../types'; import { getTeam, listTeamProjects, createProject } from '../api'; import { useAuth } from '../contexts/AuthContext'; import { Badge } from '../components/Badge'; import { Breadcrumb } from '../components/Breadcrumb'; import './TeamDashboardPage.css'; function TeamDashboardPage() { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); const { user } = useAuth(); const [team, setTeam] = useState(null); const [projects, setProjects] = useState | null>(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showProjectForm, setShowProjectForm] = useState(false); const [newProject, setNewProject] = useState({ name: '', description: '', is_public: true }); const [creating, setCreating] = useState(false); const loadTeamData = useCallback(async () => { if (!slug) return; try { setLoading(true); const [teamData, projectsData] = await Promise.all([ getTeam(slug), listTeamProjects(slug, { limit: 10 }), ]); setTeam(teamData); setProjects(projectsData); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load team'); } finally { setLoading(false); } }, [slug]); useEffect(() => { loadTeamData(); }, [loadTeamData]); async function handleCreateProject(e: React.FormEvent) { e.preventDefault(); if (!team) return; try { setCreating(true); const project = await createProject({ ...newProject, team_id: team.id }); setNewProject({ name: '', description: '', is_public: true }); setShowProjectForm(false); navigate(`/project/${project.name}`); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to create project'); } finally { setCreating(false); } } if (loading) { return (
Loading team...
); } if (error || !team) { return (

Error loading team

{error || 'Team not found'}

Back to Teams
); } const isAdminOrOwner = team.user_role === 'owner' || team.user_role === 'admin' || user?.is_admin; const roleVariants: Record = { owner: 'success', admin: 'info', member: 'default', }; return (

{team.name}

{team.user_role && ( {team.user_role} )} @{team.slug}
{team.description && (

{team.description}

)}
{team.project_count} projects {team.member_count} members
{isAdminOrOwner && (
Members Settings
)}
{showProjectForm && (
setShowProjectForm(false)}>
e.stopPropagation()}>

Create New Project

setNewProject({ ...newProject, name: e.target.value })} placeholder="my-project" required autoFocus />