'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 (
Create, edit, and publish season races.
Selected: {selectedSeasonLabel}
Status: {publishedLabel}
{race.name}
{race.scheduledAt.toISOString()}