'use client'; import React from 'react'; import { Breadcrumbs } from '@/ui/Breadcrumbs'; import { RaceStewardingStats } from '@/ui/RaceStewardingStats'; import { StewardingTabs } from '@/ui/StewardingTabs'; import { ProtestCard } from '@/ui/ProtestCardWrapper'; import { RacePenaltyRow } from '@/ui/RacePenaltyRowWrapper'; import { Card } from '@/ui/Card'; import { Box } from '@/ui/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Button } from '@/ui/Button'; import { Container } from '@/ui/Container'; import { Icon } from '@/ui/Icon'; import { Surface } from '@/ui/Surface'; import { AlertTriangle, ArrowLeft, CheckCircle, Flag, Gavel, Scale, } from 'lucide-react'; import type { RaceStewardingViewData } from '@/lib/view-data/races/RaceStewardingViewData'; export type StewardingTab = 'pending' | 'resolved' | 'penalties'; interface RaceStewardingTemplateProps { viewData: RaceStewardingViewData; isLoading: boolean; error?: Error | null; // Actions onBack: () => void; onReviewProtest: (protestId: string) => void; // User state isAdmin: boolean; // UI State activeTab: StewardingTab; setActiveTab: (tab: StewardingTab) => void; } export function RaceStewardingTemplate({ viewData, isLoading, onBack, onReviewProtest, isAdmin, activeTab, setActiveTab, }: RaceStewardingTemplateProps) { const formatDate = (date: string) => { return new Date(date).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric', }); }; if (isLoading) { return ( Loading stewarding data... ); } if (!viewData?.race) { return ( Race not found The race you're looking for doesn't exist. ); } const breadcrumbItems = [ { label: 'Races', href: '/races' }, { label: viewData.race.track, href: `/races/${viewData.race.id}` }, { label: 'Stewarding' }, ]; return ( {/* Navigation */} {/* Header */} Stewarding {viewData.race.track} • {formatDate(viewData.race.scheduledAt)} {/* Stats */} {/* Tab Navigation */} {/* Content */} {activeTab === 'pending' && ( {viewData.pendingProtests.length === 0 ? ( All Clear! No pending protests to review ) : ( viewData.pendingProtests.map((protest) => ( )) )} )} {activeTab === 'resolved' && ( {viewData.resolvedProtests.length === 0 ? ( No Resolved Protests Resolved protests will appear here ) : ( viewData.resolvedProtests.map((protest) => ( )) )} )} {activeTab === 'penalties' && ( {viewData.penalties.length === 0 ? ( No Penalties Penalties issued for this race will appear here ) : ( viewData.penalties.map((penalty) => ( )) )} )} ); }