import { notFound } from 'next/navigation'; import { LeagueDetailPageQuery } from '@/lib/page-queries/LeagueDetailPageQuery'; import { LeagueDetailTemplate } from '@/templates/LeagueDetailTemplate'; import { LeagueDetailViewDataBuilder } from '@/lib/builders/view-data/LeagueDetailViewDataBuilder'; import { DriverService } from '@/lib/services/drivers/DriverService'; import { Text } from '@/ui/Text'; export default async function LeagueLayout({ children, params, }: { children: React.ReactNode; params: Promise<{ id: string }>; }) { const { id: leagueId } = await params; // Execute PageQuery to get league data const [result, currentDriver] = await Promise.all([ LeagueDetailPageQuery.execute(leagueId), new DriverService().getCurrentDriver(), ]); if (result.isErr()) { const error = result.getError(); if (error === 'notFound' || error === 'redirect') { notFound(); } // Return error state return ( Failed to load league ); } const data = result.unwrap(); const viewData = LeagueDetailViewDataBuilder.build({ league: data.league, owner: data.owner, scoringConfig: data.scoringConfig, memberships: data.memberships, races: data.races, sponsors: data.sponsors, }); // Define tab configuration const baseTabs = [ { label: 'Overview', href: `/leagues/${leagueId}`, exact: true }, { label: 'Schedule', href: `/leagues/${leagueId}/schedule`, exact: false }, { label: 'Standings', href: `/leagues/${leagueId}/standings`, exact: false }, { label: 'Roster', href: `/leagues/${leagueId}/roster`, exact: false }, { label: 'Rulebook', href: `/leagues/${leagueId}/rulebook`, exact: false }, ]; // Check if user is admin or owner const isOwner = currentDriver && data.league.ownerId === currentDriver.id; const isAdmin = currentDriver && data.memberships.members?.some((m: any) => m.driverId === currentDriver.id && m.role === 'admin'); const hasAdminAccess = isOwner || isAdmin; const adminTabs = hasAdminAccess ? [ { label: 'Schedule Admin', href: `/leagues/${leagueId}/schedule/admin`, exact: false }, { label: 'Sponsorships', href: `/leagues/${leagueId}/sponsorships`, exact: false }, { label: 'Stewarding', href: `/leagues/${leagueId}/stewarding`, exact: false }, { label: 'Wallet', href: `/leagues/${leagueId}/wallet`, exact: false }, { label: 'Settings', href: `/leagues/${leagueId}/settings`, exact: false }, ] : []; const tabs = [...baseTabs, ...adminTabs]; return ( {children} ); }