'use client'; import Button from '@/components/ui/Button'; import Card from '@/components/ui/Card'; import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import { useServices } from '@/lib/services/ServiceProvider'; import type { LeagueMembership } from '@/lib/types/LeagueMembership'; import type { LeagueSummaryViewModel } from '@/lib/view-models/LeagueSummaryViewModel'; import Link from 'next/link'; import { useEffect, useState } from 'react'; interface LeagueWithRole { league: LeagueSummaryViewModel; 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(); const { leagueService, leagueMembershipService } = useServices(); useEffect(() => { let cancelled = false; const load = async () => { setLoading(true); try { const leagues = await leagueService.getAllLeagues(); const memberships = await Promise.all( leagues.map(async (league) => { await leagueMembershipService.fetchLeagueMemberships(league.id); const membership = leagueMembershipService.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, leagueService, leagueMembershipService]); 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
))}
)}
); }