/* eslint-disable gridpilot-rules/no-raw-html-in-app */ import { StewardingViewData } from '@/lib/view-data/leagues/StewardingViewData'; import { Card } from '@/ui/Card'; import { Section } from '@/ui/Section'; import { Flag, AlertCircle, Calendar, MapPin, Gavel } from 'lucide-react'; interface StewardingTemplateProps { viewData: StewardingViewData; } export function StewardingTemplate({ viewData }: StewardingTemplateProps) { return (

Stewarding

Quick overview of protests and penalties across all races

{/* Stats summary */}
{viewData.totalPending}
Pending
{viewData.totalResolved}
Resolved
{viewData.totalPenalties}
Penalties
{/* Content */} {viewData.races.length === 0 ? (

All Clear!

No protests or penalties to review.

) : (
{viewData.races.map((race) => (
{/* Race Header */}
{race.track}
{new Date(race.scheduledAt).toLocaleDateString()}
{race.pendingProtests.length} pending
{/* Race Content */}
{race.pendingProtests.length === 0 && race.resolvedProtests.length === 0 && race.penalties.length === 0 ? (

No items to display

) : ( <> {race.pendingProtests.map((protest) => { const protester = viewData.drivers.find(d => d.id === protest.protestingDriverId); const accused = viewData.drivers.find(d => d.id === protest.accusedDriverId); return (
{protester?.name || 'Unknown'} vs {accused?.name || 'Unknown'} Pending
Lap {protest.incident.lap} Filed {new Date(protest.filedAt).toLocaleDateString()}

{protest.incident.description}

Review needed
); })} {race.penalties.map((penalty) => { const driver = viewData.drivers.find(d => d.id === penalty.driverId); return (
{driver?.name || 'Unknown'} {penalty.type.replace('_', ' ')}

{penalty.reason}

{penalty.type === 'time_penalty' && `+${penalty.value}s`} {penalty.type === 'grid_penalty' && `+${penalty.value} grid`} {penalty.type === 'points_deduction' && `-${penalty.value} pts`} {penalty.type === 'disqualification' && 'DSQ'} {penalty.type === 'warning' && 'Warning'} {penalty.type === 'license_points' && `${penalty.value} LP`}
); })} )}
))}
)}
); }