import { Form, Link, redirect } from "react-router"; import type { Route } from "./+types/admin.sports-seasons.new"; import { createSportsSeason } from "~/models/sports-season"; import { findAllSports } from "~/models/sport"; import { Button } from "~/components/ui/button"; import { Input } from "~/components/ui/input"; import { Label } from "~/components/ui/label"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "~/components/ui/select"; export async function loader() { const sports = await findAllSports(); return { sports }; } export async function action({ request }: Route.ActionArgs) { const formData = await request.formData(); const sportId = formData.get("sportId"); const name = formData.get("name"); const year = formData.get("year"); const startDate = formData.get("startDate"); const endDate = formData.get("endDate"); const status = formData.get("status"); const scoringType = formData.get("scoringType"); // Validation if (typeof sportId !== "string" || !sportId) { return { error: "Sport is required" }; } if (typeof name !== "string" || !name.trim()) { return { error: "Season name is required" }; } if (typeof year !== "string") { return { error: "Year is required" }; } const yearNum = parseInt(year, 10); if (isNaN(yearNum) || yearNum < 2000 || yearNum > 2100) { return { error: "Year must be between 2000 and 2100" }; } if (status !== "upcoming" && status !== "active" && status !== "completed") { return { error: "Invalid status" }; } if (scoringType !== "playoffs" && scoringType !== "regular_season" && scoringType !== "majors") { return { error: "Invalid scoring type" }; } try { await createSportsSeason({ sportId, name: name.trim(), year: yearNum, startDate: typeof startDate === "string" && startDate ? startDate : null, endDate: typeof endDate === "string" && endDate ? endDate : null, status, scoringType, }); return redirect("/admin/sports-seasons"); } catch (error) { console.error("Error creating sports season:", error); return { error: "Failed to create sports season. Please try again." }; } } export default function NewSportsSeason({ loaderData, actionData }: Route.ComponentProps) { const { sports } = loaderData; const currentYear = new Date().getFullYear(); return (

Create New Sports Season

Add a new season for a sport

Sports Season Details Enter the information for the new sports season
{sports.length === 0 && (

No sports available. Create a sport first.

)}

Playoffs: Team sports playoffs. Regular Season: Full season standings. Majors: Individual sport majors.

{actionData?.error && (
{actionData.error}
)}
); }