/** * TeamSettings page — edit team name and view team info. * * Minimal — just enough to manage a team without raw API calls. */ import React, { useEffect, useState } from 'react'; import { api, getErrorMessage, type TeamResponse } from '../api.js'; interface TeamSettingsProps { token: string; teamSlug: string; onTeamUpdated?: () => void; } export function TeamSettings({ token, teamSlug, onTeamUpdated }: TeamSettingsProps) { const [team, setTeam] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [name, setName] = useState(''); const [saving, setSaving] = useState(false); const [saved, setSaved] = useState(false); useEffect(() => { if (!token || !teamSlug) return; (async () => { try { setLoading(true); const t = await api.getTeam(token, teamSlug); setTeam(t); setName(t.name); } catch (err) { setError(getErrorMessage(err, 'Failed to load team')); } finally { setLoading(false); } })(); }, [token, teamSlug]); const handleSave = async () => { if (!name.trim() || name === team?.name) return; try { setSaving(true); setError(null); const updated = await api.updateTeam(token, teamSlug, { name: name.trim() }); setTeam(updated); setSaved(true); setTimeout(() => setSaved(false), 2000); onTeamUpdated?.(); } catch (err) { setError(getErrorMessage(err, 'Save failed')); } finally { setSaving(false); } }; if (loading) return

Loading team settings...

; return (

Team Settings

{error && (
{error}
)}
setName(e.target.value)} style={{ flex: 1, padding: '8px 12px', background: '#1a1d25', border: '1px solid #2a2d36', borderRadius: 4, fontSize: 14, color: '#f0f2f7', }} onKeyDown={(e) => e.key === 'Enter' && handleSave()} />

{team?.slug ?? '—'}

{team?.id ?? '—'}

{team?.createdAt ? new Date(team.createdAt).toLocaleDateString() : '—'}

); } const labelStyle: React.CSSProperties = { display: 'block', fontSize: 12, fontWeight: 600, color: '#9ca3af', marginBottom: 4, textTransform: 'uppercase', letterSpacing: '0.05em', };