import { useState } from "react"; import { BellRing, HelpCircle, Loader2 } from "lucide-react"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; import { Avatar } from "@/components/crapp/Avatar"; import { Barra } from "@/components/motion/Barra"; import { giocatori, isAdmin, statoMeta, type Stato } from "@/lib/crapp-data"; import { usePresenzeEvento, useSalvaPresenza } from "@/lib/presenze"; import { useGiocatoreCorrente } from "@/lib/user-store"; const ordine: Stato[] = ["presente", "ritardo", "forse", "infortunato", "assente"]; export function RosaPresenze({ eventoId }: { eventoId: string }) { const { risposte, isPending } = usePresenzeEvento(eventoId); const salva = useSalvaPresenza(); const io = useGiocatoreCorrente(); const [sollecito, setSollecito] = useState(false); const mancanti = giocatori.filter((g) => !risposte[g.id]); const risposteN = giocatori.length - mancanti.length; const perc = Math.round((risposteN / giocatori.length) * 100); const daSollecitare = mancanti.length + giocatori.filter((g) => risposte[g.id] === "forse").length; async function sollecita() { setSollecito(true); try { const res = await fetch("/api/public/sollecita-presenze", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ eventoId, da: io?.nome }), }); if (!res.ok) throw new Error(); const dati = (await res.json()) as { inviate: number; destinatari: number }; toast.success( dati.inviate > 0 ? `Sollecito inviato a ${dati.inviate} giocatori` : `Nessuna notifica attiva tra i ${dati.destinatari} da sollecitare`, ); } catch { toast.error("Non sono riuscito a inviare il sollecito"); } finally { setSollecito(false); } } return (
Hanno risposto {risposteN}/{giocatori.length}
{perc}%La tua risposta
Carico le risposte…
) : null} {ordine.map((s) => { const lista = giocatori.filter((g) => risposte[g.id] === s); if (lista.length === 0) return null; return (
{titolo} · {n}
{attenzione ?