'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import Card from '@/components/ui/Card'; import Button from '@/components/ui/Button'; import { useEffectiveDriverId } from '@/lib/currentDriver'; import type { League } from '@core/racing/domain/entities/League'; import type { LeagueMembership } from '@core/racing/domain/entities/LeagueMembership'; interface LeagueWithRole { league: League; membership: LeagueMembership; } export default function ManageLeaguesPage() { const [ownedLeagues, setOwnedLeagues] = useState([]); const [memberLeagues, setMemberLeagues] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const effectiveDriverId = useEffectiveDriverId(); useEffect(() => { let cancelled = false; const load = async () => { setLoading(true); try { const leagueRepo = getLeagueRepository(); const membershipRepo = getLeagueMembershipRepository(); const leagues = await leagueRepo.findAll(); const memberships = await Promise.all( leagues.map(async (league) => { const membership = await membershipRepo.getMembership(league.id, effectiveDriverId); return { league, membership }; }), ); if (cancelled) { return; } const owned: LeagueWithRole[] = []; const member: LeagueWithRole[] = []; for (const entry of memberships) { if (!entry.membership || entry.membership.status !== 'active') { continue; } if (entry.membership.role === 'owner') { owned.push(entry as LeagueWithRole); } else { member.push(entry as LeagueWithRole); } } setOwnedLeagues(owned); setMemberLeagues(member); setError(null); } catch (err) { if (!cancelled) { setError(err instanceof Error ? err.message : 'Failed to load leagues'); } } finally { if (!cancelled) { setLoading(false); } } }; void load(); return () => { cancelled = true; }; }, [effectiveDriverId]); if (loading) { return (
Loading your leagues...
); } if (error) { return (
{error}
); } return (

Manage leagues

View leagues you own and participate in, and jump into league admin tools.

Leagues you own

{ownedLeagues.length > 0 && ( {ownedLeagues.length} {ownedLeagues.length === 1 ? 'league' : 'leagues'} )}
{ownedLeagues.length === 0 ? (

You don't own any leagues yet in this session.

) : (
{ownedLeagues.map(({ league }) => (

{league.name}

{league.description}

View
))}
)}

Leagues you're in

{memberLeagues.length > 0 && ( {memberLeagues.length} {memberLeagues.length === 1 ? 'league' : 'leagues'} )}
{memberLeagues.length === 0 ? (

You're not a member of any other leagues yet.

) : (
{memberLeagues.map(({ league, membership }) => (

{league.name}

{league.description}

Your role:{' '} {membership.role.charAt(0).toUpperCase() + membership.role.slice(1)}

View league
))}
)}
); }