Retire Le Calendrier des Dieux du menu, affiche la date du Tribunal sur L'Agora
Build and deploy / deploy (push) Successful in 35s

/calendrier disparaît de la navigation (route toujours fonctionnelle
pour les Archontes qui y accèdent directement) : la date du Tribunal,
seule info largement utile au quotidien, est reprise en en-tête de
/leaderboard. Extrait la logique de décompte dans un helper partagé
src/lib/tribunal-date.ts plutôt que de la dupliquer.

Corrige au passage un espace JSX manquant sur /urne oublié lors du
dernier commit ("Tu as voté pour Xaujourd'hui").
This commit is contained in:
Valentin ROBIN
2026-08-23 19:29:31 +02:00
parent d02f1543e9
commit 1eef52a101
6 changed files with 46 additions and 23 deletions
+1 -14
View File
@@ -5,20 +5,7 @@ import { createClient, waitForRealtimeAuth } from "@/lib/supabase/client";
import { DayCard, type DayRow } from "./day-card";
import { PANTHEON_PRESETS, getGodPreset } from "@/lib/pantheon";
import { IconPlus } from "@/components/icons";
function formatCountdown(tribunalDate: string | null): string {
if (!tribunalDate) return "Aucune date n'a encore été fixée par les Archontes.";
const target = new Date(tribunalDate);
const now = new Date();
const diffMs = target.getTime() - now.getTime();
const diffDays = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
if (diffMs < 0) return "Le Tribunal a rendu son verdict.";
if (diffDays === 0) return "Le Tribunal siège aujourd'hui !";
if (diffDays === 1) return "Le Tribunal siège demain.";
return `Le Tribunal siège dans ${diffDays} jours.`;
}
import { formatCountdown } from "@/lib/tribunal-date";
export function CalendrierView({
isJudge,
+13 -4
View File
@@ -2,6 +2,7 @@ import { redirect } from "next/navigation";
import { createClient } from "@/lib/supabase/server";
import { LeaderboardView } from "./leaderboard-view";
import { AgoraLogo } from "@/components/agora-logo";
import { formatCountdown, formatTribunalDateTime } from "@/lib/tribunal-date";
export default async function LeaderboardPage() {
const supabase = await createClient();
@@ -13,18 +14,26 @@ export default async function LeaderboardPage() {
redirect("/login");
}
const { data: profiles, error } = await supabase
.from("profiles")
.select("id, pseudo, avatar_url, points, previous_rank, role")
.order("points", { ascending: false });
const [{ data: profiles, error }, { data: settings }] = await Promise.all([
supabase
.from("profiles")
.select("id, pseudo, avatar_url, points, previous_rank, role")
.order("points", { ascending: false }),
supabase.from("settings").select("tribunal_date").eq("id", true).single(),
]);
const isJudge = profiles?.find((p) => p.id === user.id)?.role === "judge";
const tribunalDate = settings?.tribunal_date ?? null;
return (
<div className="mx-auto w-full max-w-2xl px-4 py-8">
<div className="mb-6 flex flex-col items-center text-center">
<AgoraLogo className="h-32 w-32 sm:h-40 sm:w-40" />
<p className="mt-2 font-serif text-sm text-marble/60 italic">Le classement des Citoyens</p>
<p className="mt-3 font-heading text-sm tracking-wide text-gold-bright uppercase">
{formatCountdown(tribunalDate)}
</p>
{tribunalDate && <p className="text-xs text-marble/50">{formatTribunalDateTime(tribunalDate)}</p>}
</div>
{error && (
+2 -1
View File
@@ -149,7 +149,8 @@ export function UrneView({
{myVoteToday ? (
<div>
<p className="text-sm text-olive">
Tu as voté pour {myVoteTarget?.pseudo ?? "quelqu'un"} aujourd&apos;hui.
Tu as voté pour {myVoteTarget?.pseudo ?? "quelqu'un"}{" "}
aujourd&apos;hui.
</p>
<p className="mt-2 text-xs text-text-mut">Reviens demain pour déposer un nouveau jeton.</p>
</div>