From f6036f21ec3e1652063fae1c6c1ffcd8379f0fa9 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Tue, 1 Sep 2026 13:56:56 +0200 Subject: [PATCH] Rende raggiungibile il voto MVP dalle card dei risultati MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Ultima partita" in home e le card di "Storico match" in squadra ora sono link a /partita/$id quando esiste un evento di calendario con la stessa data del risultato (CSI o scout), con un'indicazione "Vota MVP" quando non è ancora stato eletto. Prima erano card statiche: per votare bisognava trovare la partita a mano dal calendario. Co-Authored-By: Claude Sonnet 5 --- src/routes/index.tsx | 66 +++++++++++++++++++++++++++--------------- src/routes/squadra.tsx | 35 ++++++++++++++++++---- 2 files changed, 72 insertions(+), 29 deletions(-) diff --git a/src/routes/index.tsx b/src/routes/index.tsx index e7bdb4e..4cd5dd3 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -56,6 +56,9 @@ function Index() { : null; const obiettivi = useObiettivi(); const obiettivo = obiettivi.find((o) => progressoObiettivo(o) < 100) ?? obiettivi[0] ?? null; + const eventoUltima = ultima + ? (eventi.find((e) => e.tipo === "partita" && e.data === ultima.data) ?? null) + : null; if (!giocatore) return null; @@ -143,30 +146,45 @@ function Index() { } > {ultima ? ( -
-
-
-

CRAP Volley vs {ultima.avversario}

-

- {ultima.casa ? "In casa" : "Trasferta"} - {ultima.mvp ? ` · MVP ${ultima.mvp}` : ""} -

-
-

- {ultima.setNostri}-{ultima.setLoro} -

-
-
- {ultima.parziali.map((p, i) => ( - - {p[0]}-{p[1]} - - ))} -
-
+ (() => { + const corpo = ( + <> +
+
+

CRAP Volley vs {ultima.avversario}

+

+ {ultima.casa ? "In casa" : "Trasferta"} + {ultima.mvp ? ` · MVP ${ultima.mvp}` : " · MVP da votare"} +

+
+

+ {ultima.setNostri}-{ultima.setLoro} +

+
+
+ {ultima.parziali.map((p, i) => ( + + {p[0]}-{p[1]} + + ))} +
+ + ); + return eventoUltima ? ( + + {corpo} + + ) : ( +
{corpo}
+ ); + })() ) : (

Nessun risultato disponibile. diff --git a/src/routes/squadra.tsx b/src/routes/squadra.tsx index a7d36cf..6a80510 100644 --- a/src/routes/squadra.tsx +++ b/src/routes/squadra.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; -import { createFileRoute } from "@tanstack/react-router"; -import { Cake, ChevronDown, Crown } from "lucide-react"; +import { createFileRoute, Link } from "@tanstack/react-router"; +import { Cake, ChevronDown, ChevronRight, Crown } from "lucide-react"; import { cn } from "@/lib/utils"; import { PageHeader, Section } from "@/components/crapp/ui-bits"; import { Avatar } from "@/components/crapp/Avatar"; @@ -19,6 +19,7 @@ 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, @@ -95,6 +96,10 @@ function Squadra() { 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), @@ -313,8 +318,9 @@ function Squadra() {

{tuttiMatch.map((m) => { const vinta = m.setNostri > m.setLoro; - return ( -
+ const eventoId = eventoIdPerData.get(m.data); + const contenuto = ( + <>

@@ -337,7 +343,7 @@ function Squadra() { {m.setNostri}-{m.setLoro}

-
+
{m.parziali.map((p, i) => ( ))} + {eventoId && !m.mvp ? ( + + Vota MVP + + ) : null}
+ + ); + return eventoId ? ( + + {contenuto} + + ) : ( +
+ {contenuto}
); })}