Corregge il rimbalzo di /eventi in home e la lista invisibile con molti eventi.

Il redirect verso /benvenuto scattava se la rosa non era ancora arrivata dalla
rete, anche con sessione e profilo validi: caricare /eventi a freddo (refresh,
link diretto, riapertura della PWA) ti riportava sempre in Home. Ora si aspetta
il caricamento della rosa e si torna alla pagina di destinazione originale.

In Reveal, la soglia del 15% dell'altezza dell'elemento per attivare l'animazione
era irraggiungibile per una lista lunga (75 eventi = oltre 5700px): la sezione
restava invisibile per sempre, a qualunque scroll. La soglia ora è "some" (basta
un pixel visibile).

Aggiunta anche la gestione dell'errore sul caricamento eventi, che prima falliva
in silenzio mostrando una pagina vuota senza alcun messaggio.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 08:59:10 +02:00
co-authored by Claude Sonnet 5
parent a1d2599c47
commit 9e2f83a85e
4 changed files with 34 additions and 9 deletions
+8 -2
View File
@@ -13,6 +13,11 @@ import {
import { impostaGiocatore, resetGiocatore, useGiocatoreCorrente } from "@/lib/user-store";
export const Route = createFileRoute("/benvenuto")({
validateSearch: (search: Record<string, unknown>): { next?: string } => {
const next = search["next"];
// Solo un percorso interno: mai un URL assoluto, per non aprire un redirect esterno.
return typeof next === "string" && next.startsWith("/") ? { next } : {};
},
head: () => ({
meta: [
{ title: "Benvenuto — CrAPP" },
@@ -32,6 +37,7 @@ export const Route = createFileRoute("/benvenuto")({
function Benvenuto() {
const navigate = useNavigate();
const { next } = Route.useSearch();
const giocatore = useGiocatoreCorrente();
const { pronta, utenteId, emailUtente } = useSessione();
const { righe, daDatabase } = useGiocatoriSquadra();
@@ -45,8 +51,8 @@ function Benvenuto() {
const puoEntrare = !!giocatore && !!utenteId;
useEffect(() => {
if (puoEntrare) navigate({ to: "/" });
}, [puoEntrare, navigate]);
if (puoEntrare) navigate({ to: next ?? "/" });
}, [puoEntrare, navigate, next]);
// Chi sei lo dice lo slot collegato all'account, non quello che c'è in localStorage:
// senza slot la scelta salvata dalla vecchia selezione libera va buttata.