Aggancia Squadra, Presenze, Pagelle, Scout e calendario alla rosa reale

convocatiEvento() e compleanniEventi() prendono ora la rosa come parametro
invece di leggere la lista statica; csvScoutMatch() idem. Le schermate di
gestione eventi, dettaglio allenamento/partita, calendario e scout live,
più i widget di presenze/pagelle/voto MVP/voto social/sondaggio
cacche/turno palloni, passano tutte la rosa letta da useRosa() o
useGiocatoriSquadra(): un giocatore aggiunto o disattivato dalla dashboard
admin ora si riflette ovunque.
This commit is contained in:
2026-09-03 10:17:03 +02:00
parent b6c0f40f66
commit 4c0ea66126
14 changed files with 88 additions and 59 deletions
+10 -5
View File
@@ -2,8 +2,9 @@ import { createFileRoute, Link } from "@tanstack/react-router";
import { ArrowLeft, MapPin, Clock, Users, Trophy, Swords, Download } from "lucide-react";
import { cn } from "@/lib/utils";
import { PageHeader, Section } from "@/components/crapp/ui-bits";
import { formatData, giocatori } from "@/lib/crapp-data";
import { formatData } from "@/lib/crapp-data";
import { convocatiEvento, useEvento } from "@/lib/eventi";
import { useRosa } from "@/lib/rosa";
import { useCsi } from "@/lib/csi";
import { matchDaPartitaCsi, partiteGiocate } from "@/lib/csi-core";
import { Pagelle } from "@/components/crapp/Pagelle";
@@ -49,7 +50,8 @@ function PartitaDetail() {
const scoutMatches = useScoutMatches();
const { data: csi } = useCsi();
const { risposte } = usePresenzeEvento(id);
const presentiVeri = giocatori.filter(
const rosa = useRosa();
const presentiVeri = rosa.filter(
(g) => risposte[g.id] === "presente" || risposte[g.id] === "ritardo",
).length;
@@ -67,7 +69,7 @@ function PartitaDetail() {
);
}
const convocati = convocatiEvento(evento);
const convocati = convocatiEvento(evento, rosa);
const scout = scoutMatches.find((m) => m.id === evento.id || m.data === evento.data) ?? null;
const csiMatch = csi
? partiteGiocate(csi.partite).find((p) => p.data === evento.data)
@@ -229,7 +231,7 @@ function PartitaDetail() {
</p>
<div className="mt-2 space-y-1">
{[...totaliPerGiocatore(scout.azioni).entries()].map(([gid, t]) => {
const g = giocatori.find((x) => x.id === gid);
const g = rosa.find((x) => x.id === gid);
if (!g) return null;
return (
<div
@@ -250,7 +252,10 @@ function PartitaDetail() {
<button
type="button"
onClick={() =>
scaricaCsv(`scout-${scout.data}-${scout.avversario}.csv`, csvScoutMatch(scout))
scaricaCsv(
`scout-${scout.data}-${scout.avversario}.csv`,
csvScoutMatch(scout, rosa),
)
}
className="premi mt-4 flex w-full items-center justify-center gap-2 rounded-2xl bg-accent-grad py-3 text-sm font-bold uppercase text-accent-foreground shadow-pop"
>