import { useState } from "react"; import { BellRing, Check, CircleDot, Loader2, Pencil } from "lucide-react"; import { toast } from "sonner"; import { cn } from "@/lib/utils"; import { Avatar } from "@/components/crapp/Avatar"; import { intestazioniAutenticate } from "@/lib/auth"; import { nomeCompleto, useGiocatoriSquadra } from "@/lib/giocatori-squadra"; import { useAssegnaTurno, useTurniPalloni } from "@/lib/palloni"; import { useIsAdmin } from "@/lib/ruoli"; import { useGiocatoreBase } from "@/lib/user-store"; export function TurnoPalloni({ eventoId }: { eventoId: string }) { const [aperto, setAperto] = useState(false); const [avviso, setAvviso] = useState(false); const { salvati, turni, isPending } = useTurniPalloni(); const assegna = useAssegnaTurno(); // Solo `.nome` serve qui: `useGiocatoreBase` basta, niente statistiche. const io = useGiocatoreBase(); const admin = useIsAdmin(); const { righe: squadra } = useGiocatoriSquadra(); const rosa = squadra.filter((g) => g.attivo); const id = turni[eventoId]; const proposto = !salvati[eventoId]; const giocatore = rosa.find((g) => g.id === id); function scegli(giocatoreId: string) { setAperto(false); assegna.mutate( { eventoId, giocatoreId, da: io?.nome ?? null }, { onSuccess: () => toast.success("Turno palloni aggiornato"), onError: () => toast.error("Non sono riuscito a salvare il turno"), }, ); } /** Avvisa via push chi è di turno per questo evento, e chi deve riportare i palloni. */ async function avvisa() { setAvviso(true); try { const res = await fetch("/api/public/promemoria-palloni", { method: "POST", headers: { "Content-Type": "application/json", ...(await intestazioniAutenticate()) }, body: JSON.stringify({ eventoId }), }); if (!res.ok) throw new Error(); const dati = (await res.json()) as { inviate: number; destinatari: number }; if (dati.inviate > 0) { toast.success(`Promemoria inviato a ${dati.inviate} dispositivi`); } else if (dati.destinatari === 0) { toast.info("Nessun dispositivo con le notifiche attive tra gli incaricati"); } else { // I dispositivi ci sono ma l'invio non è riuscito: quasi sempre le chiavi VAPID // mancanti (in locale non sono configurate). Dirlo, invece di dare la colpa // all'assenza di iscrizioni. toast.error(`Invio non riuscito verso ${dati.destinatari} dispositivi`); } } catch { toast.error("Non sono riuscito a inviare il promemoria"); } finally { setAvviso(false); } } return (
{aperto ? (
{rosa.map((g) => ( ))}
) : null} {admin && giocatore ? ( ) : null}
); }