diff --git a/src/app/corne/corne-view.tsx b/src/app/corne/corne-view.tsx index bebf4f2..bb2f09c 100644 --- a/src/app/corne/corne-view.tsx +++ b/src/app/corne/corne-view.tsx @@ -113,8 +113,12 @@ export function CorneView({ // (même leçon qu'Icare : une mise à jour Realtime pendant une partie ne // doit jamais pouvoir perturber le jeu en cours). const ranked = useMemo(() => computeRanksBy(leaderboard, (a, b) => b.best_score - a.best_score), [leaderboard]); - const podiumProfiles = ranked.filter((p) => p.rank <= 3); - const rest = ranked.filter((p) => p.rank > 3); + // Tant que personne n'a marqué, tout le monde est à égalité à 0 et + // partagerait le rang 1 — pas de podium tant qu'il n'y a rien à + // départager, sinon tout le groupe se retrouverait sur la 1ère marche. + const hasScores = (ranked[0]?.best_score ?? 0) > 0; + const podiumProfiles = hasScores ? ranked.filter((p) => p.rank <= 3) : []; + const rest = hasScores ? ranked.filter((p) => p.rank > 3) : ranked; return (
diff --git a/src/app/icare/icare-view.tsx b/src/app/icare/icare-view.tsx index 491c7ac..2a552d1 100644 --- a/src/app/icare/icare-view.tsx +++ b/src/app/icare/icare-view.tsx @@ -122,8 +122,12 @@ export function IcareView({ // score d'un autre joueur qui change) redimensionnait le canvas et cassait // la partie en cours. const ranked = useMemo(() => computeRanksBy(leaderboard, (a, b) => b.best_score - a.best_score), [leaderboard]); - const podiumProfiles = ranked.filter((p) => p.rank <= 3); - const rest = ranked.filter((p) => p.rank > 3); + // Tant que personne n'a marqué, tout le monde est à égalité à 0 et + // partagerait le rang 1 — pas de podium tant qu'il n'y a rien à + // départager, sinon tout le groupe se retrouverait sur la 1ère marche. + const hasScores = (ranked[0]?.best_score ?? 0) > 0; + const podiumProfiles = hasScores ? ranked.filter((p) => p.rank <= 3) : []; + const rest = hasScores ? ranked.filter((p) => p.rank > 3) : ranked; return (
diff --git a/src/app/leaderboard/leaderboard-view.tsx b/src/app/leaderboard/leaderboard-view.tsx index bb5543f..cfe0075 100644 --- a/src/app/leaderboard/leaderboard-view.tsx +++ b/src/app/leaderboard/leaderboard-view.tsx @@ -86,7 +86,12 @@ export function LeaderboardView({ }, []); const ranked = useMemo(() => computeRanks(profiles), [profiles]); - const rest = ranked.filter((p) => p.rank > 3); + // Tant que personne n'a de gloires, tout le monde est à égalité à 0 et + // partagerait le rang 1 — pas de podium tant qu'il n'y a rien à + // départager, sinon tout le groupe se retrouverait sur la 1ère marche. + const hasScores = (ranked[0]?.points ?? 0) > 0; + const podiumProfiles = hasScores ? ranked.filter((p) => p.rank <= 3) : []; + const rest = hasScores ? ranked.filter((p) => p.rank > 3) : ranked; if (profiles.length === 0) { return

Personne n'est encore inscrit.

; @@ -95,7 +100,7 @@ export function LeaderboardView({ return (
p.rank <= 3)} + profiles={podiumProfiles} renderValue={(member) => member.points} valueLabel="gloires" isJudge={isJudge}