"use client"; import { useState } from "react"; import { createClient } from "@/lib/supabase/client"; import { Avatar } from "@/components/avatar"; type Role = "public" | "judge"; type Member = { id: string; pseudo: string; role: string; pseudo_locked: boolean; avatar_url: string | null; }; function MemberRow({ member, isSelf }: { member: Member; isSelf: boolean }) { const [savedPseudo, setSavedPseudo] = useState(member.pseudo); const [savedRole, setSavedRole] = useState(member.role === "judge" ? "judge" : "public"); const [pseudo, setPseudo] = useState(member.pseudo); const [role, setRole] = useState(member.role === "judge" ? "judge" : "public"); const [pseudoLocked, setPseudoLocked] = useState(member.pseudo_locked); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const dirty = pseudo.trim() !== savedPseudo || role !== savedRole; async function handleSave() { setError(null); setSuccess(false); const trimmed = pseudo.trim(); if (!trimmed) { setError("Pseudo invalide."); return; } setSaving(true); const supabase = createClient(); const { error: updateError } = await supabase .from("profiles") .update({ pseudo: trimmed, role }) .eq("id", member.id); setSaving(false); if (updateError) { setError( updateError.message.includes("duplicate key") ? "Ce pseudo est déjà pris." : "Une erreur est survenue.", ); return; } setSavedPseudo(trimmed); setSavedRole(role); setSuccess(true); } async function handleUnlock() { setError(null); setSuccess(false); setSaving(true); const supabase = createClient(); const { error: updateError } = await supabase .from("profiles") .update({ pseudo_locked: false }) .eq("id", member.id); setSaving(false); if (updateError) { setError("Une erreur est survenue."); return; } setPseudoLocked(false); } return (
  • setPseudo(event.target.value)} className="w-full flex-1 rounded-md border border-navy/20 bg-white px-2 py-1 text-sm outline-none focus:border-gold sm:w-auto" />
    {pseudoLocked ? ( ) : ( pseudo libre )}
    {error &&

    {error}

    } {success && !dirty &&

    OK

    }
  • ); } export function AdminMembersTable({ members, currentUserId, }: { members: Member[]; currentUserId: string; }) { if (members.length === 0) { return

    Aucun membre inscrit.

    ; } return (
      {members.map((member) => ( ))}
    ); }