import { MapPin, Clock, Users, Cake, ArrowRight } from "lucide-react"; import { Link } from "@tanstack/react-router"; import { cn } from "@/lib/utils"; import { formatData, giocatori, statoMeta, type Stato } from "@/lib/crapp-data"; import type { Evento } from "@/lib/eventi"; import { Barra } from "@/components/motion/Barra"; import { usePresenzeEvento, useSalvaPresenza } from "@/lib/presenze"; import { useGiocatoreCorrente } from "@/lib/user-store"; const tipoMeta = { partita: { label: "Partita", className: "bg-accent text-accent-foreground" }, allenamento: { label: "Allenamento", className: "bg-training text-training-foreground" }, evento: { label: "Eventi", className: "bg-warning text-warning-foreground" }, compleanno: { label: "Compleanno", className: "bg-success text-success-foreground" }, } as const; const stati: Stato[] = ["presente", "forse", "ritardo", "assente", "infortunato"]; export function linkPerEvento(e: Evento) { if (e.tipo === "partita") { return { to: "/partita/$id", params: { id: e.id }, label: "Apri partita" }; } if (e.tipo === "allenamento") { return { to: "/allenamento/$id", params: { id: e.id }, label: "Apri allenamento" }; } return undefined; } export function EventoCard({ evento, linkTo, }: { evento: Evento; linkTo?: { to: string; params: Record; label: string }; }) { const { risposte } = usePresenzeEvento(evento.id); const salva = useSalvaPresenza(); const io = useGiocatoreCorrente(); const stato = io ? risposte[io.id] : undefined; const presentiVeri = giocatori.filter( (g) => risposte[g.id] === "presente" || risposte[g.id] === "ritardo", ).length; const tipo = evento.tipo === "partita" && !evento.campionato ? { label: "Amichevole", className: "bg-accent/70 text-accent-foreground" } : tipoMeta[evento.tipo]; const totale = giocatori.length; const perc = Math.round((presentiVeri / totale) * 100); const isCompleanno = evento.tipo === "compleanno"; if (isCompleanno) { return (

{evento.titolo}

{evento.luogo}

{evento.data.slice(8, 10)}

{formatData(evento.data).split(" ")[2]?.slice(0, 3)}

); } return (
{tipo.label}

{evento.titolo}

{evento.data.slice(8, 10)}

{formatData(evento.data).split(" ")[2]?.slice(0, 3)}

{linkTo && (
{linkTo.label}
)}
{evento.ora} {evento.luogo} {presentiVeri}/{totale}
{io ? (
{stati.map((s) => { const meta = statoMeta[s]; const attivo = stato === s; return ( ); })}
) : null}
); }