import { forwardRef, type CSSProperties, type ComponentPropsWithoutRef } from "react"; import { cn } from "~/lib/utils"; import type { SeasonStatus } from "~/models/season"; export type CoronaState = | { type: "eliminated"; points: 0 } | { type: "pending" } | { type: "scored"; brightness: number; points: number }; type CoronaVariant = | "gradient" | "electric" | "emerald" | "amber" | "coral"; type DraftPickCellProps = ComponentPropsWithoutRef<"div"> & { pickNumber: number; round: number; pickInRound: number; state: "picked" | "current" | "upcoming"; pick?: { participant: { name: string }; sport: { name: string }; }; corona?: CoronaVariant; coronaState?: CoronaState; seasonStatus?: SeasonStatus; draftPaused?: boolean; }; const coronaClasses: Record = { gradient: "[background:linear-gradient(to_bottom,#adf661,#2ce1c1)]", electric: "bg-electric", emerald: "bg-emerald-500", amber: "bg-amber-accent", coral: "bg-coral-accent", }; function getCoronaStyle(cs: CoronaState): CSSProperties { switch (cs.type) { case "eliminated": return { background: "oklch(0.45 0.20 25)" }; case "pending": return { background: "rgba(255, 255, 255, 0.08)" }; case "scored": return { background: "linear-gradient(to bottom, #adf661, #2ce1c1)", opacity: cs.brightness, }; } } export const DraftPickCell = forwardRef( function DraftPickCell({ pickNumber, round, pickInRound, state, pick, corona = "gradient", coronaState, seasonStatus, draftPaused, className, children, ...rest }, ref) { const isCurrent = state === "current"; const showCorona = !isCurrent; let currentLabel = "On The Clock"; if (seasonStatus === "pre_draft") { currentLabel = "Up Next"; } else if (seasonStatus === "draft" && draftPaused) { currentLabel = "Paused Draft"; } return (
{isCurrent ? (
) : coronaState ? (
) : state === "picked" ? (
) : state === "upcoming" ? (
) : null}
{!isCurrent && (
{round}.{String(pickInRound).padStart(2, "0")}
{coronaState && coronaState.type !== "pending" && ( {coronaState.type === "scored" && "▲"}{coronaState.points} )}
)} {state === "picked" && pick ? ( <>
{pick.participant.name}
{pick.sport.name}
) : isCurrent ? (
{currentLabel}
) : null}
{children &&
{children}
}
); });