'use client'; import React from 'react'; import { Breadcrumbs } from '@/ui/Breadcrumbs'; import { SlotTemplates } from '@/components/sponsors/SlotTemplates'; import { SponsorInsightsCard } from '@/components/sponsors/SponsorInsightsCard'; import { useSponsorMode } from '@/hooks/sponsor/useSponsorMode'; import { Box } from '@/ui/Box'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Container } from '@/ui/Container'; import { Grid } from '@/ui/Grid'; import { GridItem } from '@/ui/GridItem'; import { Heading } from '@/ui/Heading'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { HorizontalStatItem } from '@/ui/HorizontalStatItem'; import { TeamAdmin } from '@/components/teams/TeamAdmin'; import { TeamHero } from '@/ui/TeamHero'; import { TeamRoster } from '@/components/teams/TeamRoster'; import { TeamStandings } from '@/components/teams/TeamStandings'; import type { TeamDetailViewData } from '@/lib/view-data/TeamDetailViewData'; type Tab = 'overview' | 'roster' | 'standings' | 'admin'; export interface TeamDetailTemplateProps { viewData: TeamDetailViewData; activeTab: Tab; loading: boolean; // Event handlers onTabChange: (tab: Tab) => void; onUpdate: () => void; onRemoveMember: (driverId: string) => void; onChangeRole: (driverId: string, newRole: 'owner' | 'admin' | 'member') => void; onGoBack: () => void; } export function TeamDetailTemplate({ viewData, activeTab, loading, onTabChange, onUpdate, onRemoveMember, onChangeRole, onGoBack, }: TeamDetailTemplateProps) { const isSponsorMode = useSponsorMode(); // Show loading state if (loading) { return ( Loading team... ); } // Show not found state if (!viewData.team) { return ( Team Not Found The team you're looking for doesn't exist or has been disbanded. ); } const tabs: { id: Tab; label: string; visible: boolean }[] = [ { id: 'overview', label: 'Overview', visible: true }, { id: 'roster', label: 'Roster', visible: true }, { id: 'standings', label: 'Standings', visible: true }, { id: 'admin', label: 'Admin', visible: viewData.isAdmin }, ]; const visibleTabs = tabs.filter(tab => tab.visible); return ( {/* Breadcrumb */} {/* Sponsor Insights Card */} {isSponsorMode && viewData.team && ( window.location.href = href} /> )} ({ id })) }} memberCount={viewData.memberships.length} onUpdate={onUpdate} /> {/* Tabs */} {visibleTabs.map((tab) => ( onTabChange(tab.id)} pb={3} cursor="pointer" className={`transition-all ${activeTab === tab.id ? 'border-b-2 border-primary-blue text-primary-blue' : 'border-b-2 border-transparent text-gray-400'}`} > {tab.label} ))} {activeTab === 'overview' && ( About {viewData.team.description} Quick Stats {viewData.team.category && ( )} {viewData.team.leagues && viewData.team.leagues.length > 0 && ( )} {viewData.team.createdAt && ( )} Recent Activity No recent activity to display )} {activeTab === 'roster' && ( )} {activeTab === 'standings' && ( )} {activeTab === 'admin' && viewData.isAdmin && ( )} ); }