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:
+10
-5
@@ -18,6 +18,7 @@ import { CelebrazioneBadge } from "../components/crapp/CelebrazioneBadge";
|
||||
import { Toaster } from "../components/ui/sonner";
|
||||
import { TeamLogo } from "../components/crapp/ui-bits";
|
||||
import { useGiocatoreBase } from "../lib/user-store";
|
||||
import { useGiocatoriSquadra } from "../lib/giocatori-squadra";
|
||||
import { useSessione } from "../lib/auth";
|
||||
import { mantieniWorkerPushAggiornato } from "../lib/push-client";
|
||||
|
||||
@@ -172,6 +173,7 @@ function AppShell() {
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
const giocatore = useGiocatoreBase();
|
||||
const { isPending: squadraInCorso } = useGiocatoriSquadra();
|
||||
const { pronta, utenteId } = useSessione();
|
||||
const [mounted, setMounted] = useState(false);
|
||||
const isBenvenuto = location.pathname === "/benvenuto";
|
||||
@@ -180,15 +182,18 @@ function AppShell() {
|
||||
|
||||
// Senza sessione Google non si entra: l'identità la dà il login, non la scelta del nome
|
||||
// (DD-011). Si aspetta `pronta`, altrimenti il primo render sloggato rimbalzerebbe fuori
|
||||
// chi ha già la sessione in localStorage.
|
||||
// chi ha già la sessione in localStorage. Si aspetta anche `squadraInCorso`: finché la
|
||||
// rosa non è arrivata, `giocatore` risulta nullo anche per chi è già collegato (la rosa
|
||||
// di riserva usa id diversi da quelli veri), e rimbalzerebbe su /benvenuto chi stava solo
|
||||
// ricaricando una pagina profonda come /eventi.
|
||||
useEffect(() => {
|
||||
setMounted(true);
|
||||
if (pronta && (!giocatore || !utenteId) && !isBenvenuto) {
|
||||
navigate({ to: "/benvenuto" });
|
||||
if (pronta && !squadraInCorso && (!giocatore || !utenteId) && !isBenvenuto) {
|
||||
navigate({ to: "/benvenuto", search: { next: location.pathname } });
|
||||
}
|
||||
}, [giocatore, utenteId, pronta, isBenvenuto, navigate]);
|
||||
}, [giocatore, utenteId, pronta, squadraInCorso, isBenvenuto, navigate, location.pathname]);
|
||||
|
||||
if (!mounted || !pronta) {
|
||||
if (!mounted || !pronta || squadraInCorso) {
|
||||
return (
|
||||
<div className="grid min-h-dvh place-items-center bg-background">
|
||||
<TeamLogo className="h-16 w-16 animate-pulse" />
|
||||
|
||||
Reference in New Issue
Block a user