import { Link, useSearchParams } from "react-router"; import type { Route } from "./+types/admin.sports-seasons"; import { findAllAdminSportsSeasons } from "~/models/sports-season"; import { filterVisibleSportsSeasons } from "./admin.sports-seasons.helpers"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "~/components/ui/card"; import { Button } from "~/components/ui/button"; import { Label } from "~/components/ui/label"; import { Switch } from "~/components/ui/switch"; import { Plus, Calendar } from "lucide-react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "~/components/ui/table"; import { Badge } from "~/components/ui/badge"; export function meta(): Route.MetaDescriptors { return [{ title: "Sports Seasons - Brackt Admin" }]; } export async function loader() { const sportsSeasons = await findAllAdminSportsSeasons(); return { sportsSeasons }; } export default function AdminSportsSeasons({ loaderData }: Route.ComponentProps) { const { sportsSeasons } = loaderData; const [searchParams, setSearchParams] = useSearchParams(); const today = new Date().toISOString().slice(0, 10); const hideCompleted = searchParams.get("showCompleted") !== "true"; const visibleSportsSeasons = filterVisibleSportsSeasons(sportsSeasons, hideCompleted); function setHideCompleted(nextHideCompleted: boolean) { const next = new URLSearchParams(searchParams); if (nextHideCompleted) next.delete("showCompleted"); else next.set("showCompleted", "true"); setSearchParams(next); } return (

Sports Seasons

Manage sports seasons across all sports

All Sports Seasons {visibleSportsSeasons.length} of {sportsSeasons.length} {sportsSeasons.length === 1 ? "season" : "seasons"} shown
{sportsSeasons.length === 0 ? (

No sports seasons yet

Get started by creating your first sports season

) : visibleSportsSeasons.length === 0 ? (

No visible sports seasons

All current sports seasons are completed. Turn off the filter to review them.

) : ( Name Sport Year Status Draft Window Scoring Type Participants Actions {visibleSportsSeasons.map((season) => ( {season.name} {season.sport.name} {season.year} {season.status} {(() => { const active = season.draftOn <= today && today <= season.draftOff; return (
{active ? "Active" : "Inactive"}

{season.draftOn} → {season.draftOff}

); })()}
{season.scoringType.replace("_", " ")} {season.participants.length}
))}
)}
); }