import React, { useEffect, useState } from 'react'; import { Copy, Download, KeyRound, Loader2, Pencil, Plus, Trash2, UserCheck, UserX, X } from 'lucide-react'; import { ManagedUser } from '../services/api'; const roleLabel: Record = { admin: 'Superadmin', instructor: 'Instrutor', student: 'Aluno' }; const inputClass = 'w-full rounded-xl border border-white/10 bg-zinc-900 px-3 py-2.5 text-sm text-white outline-none focus:border-orange-500/70 focus:ring-2 focus:ring-orange-500/15'; type Props = { users: ManagedUser[]; isLoading: boolean; query: string; setQuery: (value: string) => void; accessLink: string; inviteEmail: string; setInviteEmail: (value: string) => void; updatingUserId: string | null; currentUserId?: string; onInvite: (event: React.FormEvent) => void; onUpdateUser: (account: ManagedUser, update: Partial>) => void; onDeleteUser: (account: ManagedUser) => void; onResetPassword: (account: ManagedUser) => void; onExport: () => void; }; export const UserManagementPanel: React.FC = ({ users, isLoading, query, setQuery, accessLink, inviteEmail, setInviteEmail, updatingUserId, currentUserId, onInvite, onUpdateUser, onDeleteUser, onResetPassword, onExport }) => { const [editing, setEditing] = useState(null); const [draft, setDraft] = useState({ name: '', email: '', role: 'student' as ManagedUser['role'], isActive: true }); const isSelf = editing?.id === currentUserId; useEffect(() => { if (editing) setDraft({ name: editing.name, email: editing.email, role: editing.role, isActive: editing.isActive }); }, [editing]); const save = (event: React.FormEvent) => { event.preventDefault(); if (!editing) return; onUpdateUser(editing, isSelf ? { name: draft.name, email: draft.email } : draft); setEditing(null); }; return <>

Acesso de instrutores

Convidar instrutor

Alunos criam a própria conta na tela de entrada — sem aprovação manual — e recebem a mensagem de boas-vindas quando o e-mail estiver configurado.

setInviteEmail(event.target.value)} placeholder="E-mail do instrutor" className={inputClass} />
{accessLink &&
}

Pessoas e acessos

Edite dados, função e acesso sem precisar sair do painel.

setQuery(event.target.value)} placeholder="Buscar por nome ou e-mail" className="w-full min-w-0 rounded-xl border border-white/10 bg-zinc-900 px-3 py-2.5 text-sm text-white sm:w-72" />
{isLoading ?
:
{users.map((account) => { const busy = updatingUserId === account.id; const current = account.id === currentUserId; return ; })}
PessoaAcessoStatusCadastroAções

{account.name}

{account.email}

{roleLabel[account.role]}{account.isActive ? : }{account.isActive ? 'Ativo' : 'Desativado'}{new Intl.DateTimeFormat('pt-BR').format(new Date(account.createdAt))}
}
{editing &&
{!isSelf && <>}
} ; };