'use client'; import { useMemo, useState } from 'react'; import type { LeagueAdminScheduleViewModel } from '@/lib/view-models/LeagueAdminScheduleViewModel'; import type { LeagueSeasonSummaryViewModel } from '@/lib/view-models/LeagueSeasonSummaryViewModel'; import Card from '@/components/ui/Card'; // ============================================================================ // TYPES // ============================================================================ interface LeagueAdminScheduleTemplateProps { data: { schedule: LeagueAdminScheduleViewModel; seasons: LeagueSeasonSummaryViewModel[]; seasonId: string; }; onSeasonChange: (seasonId: string) => void; onPublishToggle: () => void; onAddOrSave: () => void; onEdit: (raceId: string) => void; onDelete: (raceId: string) => void; onCancelEdit: () => void; // Form state track: string; car: string; scheduledAtIso: string; editingRaceId: string | null; // Mutation states isPublishing: boolean; isSaving: boolean; isDeleting: string | null; // Form setters setTrack: (value: string) => void; setCar: (value: string) => void; setScheduledAtIso: (value: string) => void; } // ============================================================================ // MAIN TEMPLATE COMPONENT // ============================================================================ export function LeagueAdminScheduleTemplate({ data, onSeasonChange, onPublishToggle, onAddOrSave, onEdit, onDelete, onCancelEdit, track, car, scheduledAtIso, editingRaceId, isPublishing, isSaving, isDeleting, setTrack, setCar, setScheduledAtIso, }: LeagueAdminScheduleTemplateProps) { const { schedule, seasons, seasonId } = data; const isEditing = editingRaceId !== null; const publishedLabel = schedule.published ? 'Published' : 'Unpublished'; const selectedSeasonLabel = useMemo(() => { const selected = seasons.find((s) => s.seasonId === seasonId); return selected?.name ?? seasonId; }, [seasons, seasonId]); return (

Schedule Admin

Create, edit, and publish season races.

{seasons.length > 0 ? ( ) : ( onSeasonChange(e.target.value)} className="bg-iron-gray text-white px-3 py-2 rounded" placeholder="season-id" /> )}

Selected: {selectedSeasonLabel}

Status: {publishedLabel}

{isEditing ? 'Edit race' : 'Add race'}

setTrack(e.target.value)} className="bg-iron-gray text-white px-3 py-2 rounded" />
setCar(e.target.value)} className="bg-iron-gray text-white px-3 py-2 rounded" />
setScheduledAtIso(e.target.value)} className="bg-iron-gray text-white px-3 py-2 rounded" placeholder="2025-01-01T12:00:00.000Z" />
{isEditing && ( )}

Races

{schedule?.races.length ? (
{schedule.races.map((race) => (

{race.name}

{race.scheduledAt.toISOString()}

))}
) : (
No races yet.
)}
); }