import { useState, useEffect, useCallback } from 'react'; import { useParams, useNavigate, Link } from 'react-router-dom'; import { TeamDetail, TeamUpdate } from '../types'; import { getTeam, updateTeam, deleteTeam } from '../api'; import { useAuth } from '../contexts/AuthContext'; import { Breadcrumb } from '../components/Breadcrumb'; import './TeamSettingsPage.css'; function TeamSettingsPage() { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); const { user } = useAuth(); const [team, setTeam] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [deleting, setDeleting] = useState(false); const [error, setError] = useState(null); const [successMessage, setSuccessMessage] = useState(null); const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const [deleteConfirmText, setDeleteConfirmText] = useState(''); const [formData, setFormData] = useState({ name: '', description: '', }); const loadTeam = useCallback(async () => { if (!slug) return; try { setLoading(true); const teamData = await getTeam(slug); setTeam(teamData); setFormData({ name: teamData.name, description: teamData.description || '', }); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load team'); } finally { setLoading(false); } }, [slug]); useEffect(() => { loadTeam(); }, [loadTeam]); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!slug || !team) return; try { setSaving(true); setError(null); const updatedTeam = await updateTeam(slug, formData); setTeam(updatedTeam); setSuccessMessage('Settings saved successfully'); setTimeout(() => setSuccessMessage(null), 3000); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to save settings'); } finally { setSaving(false); } } async function handleDelete() { if (!slug || !team) return; if (deleteConfirmText !== team.slug) return; try { setDeleting(true); await deleteTeam(slug); navigate('/teams'); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to delete team'); setShowDeleteConfirm(false); } finally { setDeleting(false); } } if (loading) { return (
Loading team settings...
); } if (error && !team) { return (

Error loading team

{error}

Back to Teams
); } if (!team) return null; const isOwner = team.user_role === 'owner' || user?.is_admin; const isAdmin = team.user_role === 'admin' || isOwner; if (!isAdmin) { return (

Access Denied

You need admin privileges to access team settings.

Back to Team
); } return (

Team Settings

{error && (
{error}
)} {successMessage && (
{successMessage}
)}

General

setFormData({ ...formData, name: e.target.value })} required />
Team slug cannot be changed