"use client"; import type { ReactElement, SyntheticEvent } from "react"; import { useCallback, useEffect, useState } from "react"; import Link from "next/link"; import { createTeam, fetchTeams, type CreateTeamDto, type TeamRecord } from "@/lib/api/teams"; function getErrorMessage(error: unknown, fallback: string): string { if (error instanceof Error) { return error.message; } return fallback; } export default function TeamsSettingsPage(): ReactElement { const [teams, setTeams] = useState([]); const [isLoading, setIsLoading] = useState(true); const [loadError, setLoadError] = useState(null); const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); const [isCreating, setIsCreating] = useState(false); const [newTeamName, setNewTeamName] = useState(""); const [newTeamDescription, setNewTeamDescription] = useState(""); const [createError, setCreateError] = useState(null); const loadTeams = useCallback(async (): Promise => { setIsLoading(true); try { const data = await fetchTeams(); setTeams(data); setLoadError(null); } catch (error) { setLoadError(getErrorMessage(error, "Failed to load teams")); } finally { setIsLoading(false); } }, []); useEffect(() => { void loadTeams(); }, [loadTeams]); const handleCreateTeam = async (e: SyntheticEvent): Promise => { e.preventDefault(); const teamName = newTeamName.trim(); if (!teamName) return; setIsCreating(true); setCreateError(null); try { const description = newTeamDescription.trim(); const dto: CreateTeamDto = { name: teamName }; if (description.length > 0) { dto.description = description; } await createTeam(dto); setNewTeamName(""); setNewTeamDescription(""); setIsCreateDialogOpen(false); await loadTeams(); } catch (error) { setCreateError(getErrorMessage(error, "Failed to create team")); } finally { setIsCreating(false); } }; return (

Teams

{"<-"} Back to Settings

Manage teams in your active workspace

Create New Team

Add a team to organize members and permissions.

{isCreateDialogOpen && (

Create New Team

Enter a team name and optional description.

{ setNewTeamName(e.target.value); }} placeholder="Enter team name..." disabled={isCreating} className="w-full rounded-lg border border-gray-300 px-4 py-2 focus:border-transparent focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100" autoFocus />