From 44be5d2e982c69c1a0e262d2a694a15131beb39d Mon Sep 17 00:00:00 2001
From: Julien Froidefond
- Ces préférences s'appliquent à tous les utilisateurs + Ces préférences s'appliquent à tous les utilisateurs
{!isEditing && ( @@ -278,4 +278,3 @@ export default function AdminPanel({ initialPreferences }: AdminPanelProps) { ); } - diff --git a/components/EventsPageSection.tsx b/components/EventsPageSection.tsx index 3c35c63..ea745ea 100644 --- a/components/EventsPageSection.tsx +++ b/components/EventsPageSection.tsx @@ -533,7 +533,7 @@ export default function EventsPageSection({ ...prev, [eventId]: true, })); - } catch (err) { + } catch { setError("Une erreur est survenue"); } finally { setLoading((prev) => ({ ...prev, [eventId]: false })); @@ -559,7 +559,7 @@ export default function EventsPageSection({ ...prev, [eventId]: false, })); - } catch (err) { + } catch { setError("Une erreur est survenue"); } finally { setLoading((prev) => ({ ...prev, [eventId]: false })); @@ -600,7 +600,7 @@ export default function EventsPageSection({Rejoignez-nous pour des événements tech passionnants, des - compétitions et des célébrations tout au long de l'année + compétitions et des célébrations tout au long de l'année
diff --git a/components/HeroSection.tsx b/components/HeroSection.tsx index 8fa3a7e..cc637af 100644 --- a/components/HeroSection.tsx +++ b/components/HeroSection.tsx @@ -100,11 +100,11 @@ export default function HeroSection() { {/* Description */}- Dans un monde numérique de technologie de pointe, où les systèmes d'IA - évoluent et où d'anciens codes attendent d'être découverts. Partez - pour un voyage épique pour forger des alliances, conquérir des défis - et raconter votre histoire d'innovation au sein d'une communauté de - gaming tech florissante. + Dans un monde numérique de technologie de pointe, où les systèmes + d'IA évoluent et où d'anciens codes attendent d'être + découverts. Partez pour un voyage épique pour forger des alliances, + conquérir des défis et raconter votre histoire d'innovation au + sein d'une communauté de gaming tech florissante.
{/* Call-to-Action Buttons */} diff --git a/components/ImageSelector.tsx b/components/ImageSelector.tsx index c738c65..03a8675 100644 --- a/components/ImageSelector.tsx +++ b/components/ImageSelector.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState, useEffect, useRef } from "react"; +import { useState, useEffect, useRef, type ChangeEvent } from "react"; interface ImageSelectorProps { value: string; @@ -14,7 +14,6 @@ export default function ImageSelector({ label, }: ImageSelectorProps) { const [availableImages, setAvailableImages] = useState{value}
- )} + {value &&{value}
} @@ -204,4 +201,3 @@ export default function ImageSelector({ ); } - diff --git a/components/PlayerStats.tsx b/components/PlayerStats.tsx index 07adc84..c54ee8c 100644 --- a/components/PlayerStats.tsx +++ b/components/PlayerStats.tsx @@ -51,40 +51,48 @@ export default function PlayerStats({ initialUserData }: PlayerStatsProps) { .then((res) => res.json()) .then((data) => { if (data) { - setUserData({ - username: data.username || "Guest", - avatar: data.avatar, - hp: data.hp || 1000, - maxHp: data.maxHp || 1000, - xp: data.xp || 0, - maxXp: data.maxXp || 5000, - level: data.level || 1, + // Utiliser requestAnimationFrame pour éviter les cascades de rendu + requestAnimationFrame(() => { + setUserData({ + username: data.username || "Guest", + avatar: data.avatar, + hp: data.hp || 1000, + maxHp: data.maxHp || 1000, + xp: data.xp || 0, + maxXp: data.maxXp || 5000, + level: data.level || 1, + }); }); } }) .catch(() => { // Utiliser les données de session si l'API échoue - setUserData({ - username: session.user.username || "Guest", - avatar: null, - hp: 1000, - maxHp: 1000, - xp: 0, - maxXp: 5000, - level: 1, + requestAnimationFrame(() => { + setUserData({ + username: session.user.username || "Guest", + avatar: null, + hp: 1000, + maxHp: 1000, + xp: 0, + maxXp: 5000, + level: 1, + }); }); }); - } else { - setUserData(defaultUserData); + } else if (!initialUserData) { + // Utiliser requestAnimationFrame pour éviter les cascades de rendu + requestAnimationFrame(() => { + setUserData(defaultUserData); + }); } }, [session, initialUserData]); const { username, avatar, hp, maxHp, xp, maxXp, level } = userData; - + // Calculer les pourcentages cibles const targetHpPercentage = (hp / maxHp) * 100; const targetXpPercentage = (xp / maxXp) * 100; - + // Initialiser les pourcentages à 0 si on a des données initiales (pour l'animation) // Sinon utiliser directement les valeurs calculées const [hpPercentage, setHpPercentage] = useState( @@ -109,11 +117,13 @@ export default function PlayerStats({ initialUserData }: PlayerStatsProps) { clearTimeout(hpTimer); clearTimeout(xpTimer); }; - } else { - // Sinon, mettre à jour directement (pour les pages Client Components) + } + // Sinon, mettre à jour directement (pour les pages Client Components) + // Utiliser requestAnimationFrame pour éviter les cascades de rendu + requestAnimationFrame(() => { setHpPercentage(targetHpPercentage); setXpPercentage(targetXpPercentage); - } + }); }, [targetHpPercentage, targetXpPercentage, initialUserData]); const hpColor = @@ -126,7 +136,10 @@ export default function PlayerStats({ initialUserData }: PlayerStatsProps) { return (