+31
-3
@@ -4,6 +4,32 @@ import { jetbrainsMono } from "@/lib/fonts";
|
||||
import { AdminMembersTable } from "./admin-members-table";
|
||||
import { AdminCheatFlags } from "./admin-cheat-flags";
|
||||
|
||||
type AdminMember = {
|
||||
id: string;
|
||||
pseudo: string;
|
||||
role: string;
|
||||
pseudo_locked: boolean;
|
||||
avatar_url: string | null;
|
||||
email: string;
|
||||
};
|
||||
|
||||
type CheatFlagRow = {
|
||||
id: number;
|
||||
user_id: string;
|
||||
game: "icarus" | "melon";
|
||||
score: number;
|
||||
severity: "warning" | "high";
|
||||
trigger_code: string;
|
||||
reason: string;
|
||||
details: {
|
||||
duration_ms?: number | null;
|
||||
actions?: number | null;
|
||||
merges?: number | null;
|
||||
previous_best?: number | null;
|
||||
} | null;
|
||||
created_at: string;
|
||||
};
|
||||
|
||||
export default async function AdminPage() {
|
||||
const supabase = await createClient();
|
||||
const {
|
||||
@@ -35,8 +61,10 @@ export default async function AdminPage() {
|
||||
.limit(200),
|
||||
]);
|
||||
|
||||
const pseudoById = new Map((members ?? []).map((member) => [member.id, member.pseudo]));
|
||||
const flagsWithPseudo = (cheatFlags ?? []).map((flag) => ({
|
||||
const memberRows = (members ?? []) as AdminMember[];
|
||||
const flagRows = (cheatFlags ?? []) as CheatFlagRow[];
|
||||
const pseudoById = new Map(memberRows.map((member) => [member.id, member.pseudo]));
|
||||
const flagsWithPseudo = flagRows.map((flag) => ({
|
||||
...flag,
|
||||
pseudo: pseudoById.get(flag.user_id) ?? "Un Citoyen",
|
||||
}));
|
||||
@@ -49,7 +77,7 @@ export default async function AdminPage() {
|
||||
</h1>
|
||||
<p className="font-serif text-sm text-marble/60 italic">Administration des Citoyens</p>
|
||||
</div>
|
||||
<AdminMembersTable members={members ?? []} currentUserId={user.id} />
|
||||
<AdminMembersTable members={memberRows} currentUserId={user.id} />
|
||||
<AdminCheatFlags flags={flagsWithPseudo} />
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user