From 9aef361bf02f5e9a9d9869d78a54efeafe0b2654 Mon Sep 17 00:00:00 2001 From: Ivan Cacciari Date: Fri, 4 Sep 2026 11:40:03 +0200 Subject: [PATCH] Sposta lo storico match in Classifica e rimuove i risultati ufficiali duplicati. Co-authored-by: Cursor --- src/routes/classifica.tsx | 105 ++++++++++++++++++++++++++++++-------- src/routes/squadra.tsx | 105 +++----------------------------------- 2 files changed, 91 insertions(+), 119 deletions(-) diff --git a/src/routes/classifica.tsx b/src/routes/classifica.tsx index 6240250..0952f05 100644 --- a/src/routes/classifica.tsx +++ b/src/routes/classifica.tsx @@ -1,11 +1,14 @@ import { createFileRoute, Link } from "@tanstack/react-router"; -import { RefreshCw } from "lucide-react"; +import { ChevronRight, RefreshCw } from "lucide-react"; import { cn } from "@/lib/utils"; +import { formatData } from "@/lib/crapp-data"; import { PageHeader, Section } from "@/components/crapp/ui-bits"; import { useScoutMatches } from "@/lib/scout-store"; import { useCsi } from "@/lib/csi"; import { isNostraSquadra, matchDaPartitaCsi, partiteGiocate } from "@/lib/csi-core"; import { ScoutEntry } from "@/components/crapp/ScoutEntry"; +import { useVotiMvp, vincitoriMvp } from "@/lib/mvp-voti"; +import { useEventi } from "@/lib/eventi"; export const Route = createFileRoute("/classifica")({ head: () => ({ @@ -32,10 +35,21 @@ function formatAggiornamento(iso: string) { function Classifica() { const scoutMatches = useScoutMatches(); const { data: csi } = useCsi(); + const votiMvp = useVotiMvp(); + const mvpPerMatch = vincitoriMvp(votiMvp.data ?? []); + const { eventi } = useEventi(); const classifica = csi?.classifica ?? []; - const risultati = csi?.partite.length - ? partiteGiocate(csi.partite).map(matchDaPartitaCsi) + const csiGiocate = csi ? partiteGiocate(csi.partite) : []; + const eventoIdPerData = new Map( + eventi.filter((e) => e.tipo === "partita").map((e) => [e.data, e.id]), + ); + const tuttiMatch = csiGiocate.length + ? csiGiocate.map((p) => ({ + ...matchDaPartitaCsi(p), + mvp: mvpPerMatch[p.id] ?? "", + scout: false, + })) : scoutMatches.map((m) => ({ id: m.id, data: m.data, @@ -44,6 +58,8 @@ function Classifica() { setNostri: m.setNostri, setLoro: m.setLoro, parziali: m.parziali, + mvp: mvpPerMatch[m.id] ?? "", + scout: true, })); return ( @@ -107,26 +123,75 @@ function Classifica() { -
- {risultati.length === 0 ? ( +
+ {tuttiMatch.length === 0 ? (

- Nessun risultato disponibile. + Nessun match disponibile.

) : ( -
- {risultati.map((m) => ( -
-

- {m.casa ? "CRAP Volley" : m.avversario} — {m.casa ? m.avversario : "CRAP Volley"} -

- - {m.casa ? `${m.setNostri}-${m.setLoro}` : `${m.setLoro}-${m.setNostri}`} - -
- ))} +
+ {tuttiMatch.map((m) => { + const vinta = m.setNostri > m.setLoro; + const eventoId = eventoIdPerData.get(m.data); + const contenuto = ( + <> +
+
+

+ {m.casa ? "CRAP Volley" : m.avversario} vs{" "} + {m.casa ? m.avversario : "CRAP Volley"} +

+

+ {formatData(m.data)} · MVP {m.mvp || "da votare"} + {m.scout ? " · scoutata" : ""} +

+
+ + {m.setNostri}-{m.setLoro} + +
+
+ {m.parziali.map((p, i) => ( + p[1] ? "bg-secondary" : "bg-muted text-muted-foreground", + )} + > + {p[0]}-{p[1]} + + ))} + {eventoId && !m.mvp ? ( + + Vota MVP + + ) : null} +
+ + ); + return eventoId ? ( + + {contenuto} + + ) : ( +
+ {contenuto} +
+ ); + })}
)}
diff --git a/src/routes/squadra.tsx b/src/routes/squadra.tsx index d4e8260..c29baeb 100644 --- a/src/routes/squadra.tsx +++ b/src/routes/squadra.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; -import { createFileRoute, Link } from "@tanstack/react-router"; -import { Cake, ChevronDown, ChevronRight, Crown } from "lucide-react"; +import { createFileRoute } from "@tanstack/react-router"; +import { Cake, ChevronDown, Crown } from "lucide-react"; import { cn } from "@/lib/utils"; import { PageHeader, Section } from "@/components/crapp/ui-bits"; import { Avatar } from "@/components/crapp/Avatar"; @@ -8,18 +8,15 @@ import { formatData } from "@/lib/crapp-data"; import { microcopyObiettivo, progressoObiettivo } from "@/lib/obiettivi"; import { useRosa, useObiettivi } from "@/lib/rosa"; import { usePresenzeUltimoMeseTutti } from "@/lib/presenze-mese"; -import { totaliSquadra } from "@/lib/scout-store"; +import { totaliSquadra, useScoutMatches } from "@/lib/scout-store"; import { useCsi } from "@/lib/csi"; -import { matchDaPartitaCsi, partiteGiocate } from "@/lib/csi-core"; +import { partiteGiocate } from "@/lib/csi-core"; import { mediaSquadra, usePagelle } from "@/lib/pagelle"; import { ScoutEntry } from "@/components/crapp/ScoutEntry"; import { StatTile } from "@/components/crapp/ui-bits"; import { Reveal } from "@/components/motion/Reveal"; import { Barra } from "@/components/motion/Barra"; import { Numero } from "@/components/motion/Numero"; -import { useScoutMatches } from "@/lib/scout-store"; -import { useVotiMvp, vincitoriMvp } from "@/lib/mvp-voti"; -import { useEventi } from "@/lib/eventi"; import { BadgeDrawer } from "@/components/crapp/BadgeDrawer"; import { badgeDefs, @@ -80,9 +77,7 @@ function Squadra() { const rosa = useRosa(); const mese = usePresenzeUltimoMeseTutti(); const scoutMatches = useScoutMatches(); - const votiMvp = useVotiMvp(); const { voti: pagelle } = usePagelle(); - const mvpPerMatch = vincitoriMvp(votiMvp.data ?? []); const [aperto, setAperto] = useState(null); const [criterio, setCriterio] = useState("presenze"); const obiettivi = useObiettivi(); @@ -95,28 +90,7 @@ function Squadra() { const ordinati = [...rosa].sort((a, b) => valore(b, criterio) - valore(a, criterio)); const max = ordinati[0] ? valore(ordinati[0], criterio) || 1 : 1; const { data: csi } = useCsi(); - const csiGiocate = csi ? partiteGiocate(csi.partite) : []; - const { eventi } = useEventi(); - const eventoIdPerData = new Map( - eventi.filter((e) => e.tipo === "partita").map((e) => [e.data, e.id]), - ); - const tuttiMatch = csiGiocate.length - ? csiGiocate.map((p) => ({ - ...matchDaPartitaCsi(p), - mvp: mvpPerMatch[p.id] ?? "", - scout: false, - })) - : scoutMatches.map((m) => ({ - id: m.id, - data: m.data, - avversario: m.avversario, - casa: m.casa, - setNostri: m.setNostri, - setLoro: m.setLoro, - parziali: m.parziali, - mvp: mvpPerMatch[m.id] ?? "", - scout: true, - })); + const matchGiocati = csi ? partiteGiocate(csi.partite).length : scoutMatches.length; const completati = obiettivi.filter((o) => progressoObiettivo(o) >= 100).length; const mediaObiettivi = obiettivi.length ? Math.round(obiettivi.reduce((s, o) => s + progressoObiettivo(o), 0) / obiettivi.length) @@ -252,7 +226,7 @@ function Squadra() {
- + @@ -314,73 +288,6 @@ function Squadra() {
-
-
- {tuttiMatch.map((m) => { - const vinta = m.setNostri > m.setLoro; - const eventoId = eventoIdPerData.get(m.data); - const contenuto = ( - <> -
-
-

- {m.casa ? "CRAP Volley" : m.avversario} vs{" "} - {m.casa ? m.avversario : "CRAP Volley"} -

-

- {formatData(m.data)} · MVP {m.mvp || "da votare"} - {m.scout ? " · scoutata" : ""} -

-
- - {m.setNostri}-{m.setLoro} - -
-
- {m.parziali.map((p, i) => ( - p[1] ? "bg-secondary" : "bg-muted text-muted-foreground", - )} - > - {p[0]}-{p[1]} - - ))} - {eventoId && !m.mvp ? ( - - Vota MVP - - ) : null} -
- - ); - return eventoId ? ( - - {contenuto} - - ) : ( -
- {contenuto} -
- ); - })} -
-
-