/* approvals.jsx — Fila de aprovação de cadastros (admin + gerente). */ const APPROVAL_ROLES = [ { v: "colaborador", label: "Colaborador", base: true }, { v: "gerente", label: "Gerente", base: false }, { v: "admin", label: "Admin", base: false }, ]; const initialsOf = (name) => (name || "?").trim().split(/\s+/).map(w => w[0]).slice(0, 2).join("").toUpperCase(); function ApprovalsPanel({ onClose, onChanged, pushToast, currentRole }) { const { Ic } = window; const [list, setList] = React.useState([]); const [loading, setLoading] = React.useState(true); const [busyId, setBusyId] = React.useState(null); const [err, setErr] = React.useState(""); // role escolhido por usuário (default colaborador) const [roles, setRoles] = React.useState({}); const load = async () => { setLoading(true); setErr(""); try { const r = await window.Api.approvals.list(); setList(r.pending || []); onChanged && onChanged(r.count); } catch (e) { setErr(e.message); } finally { setLoading(false); } }; React.useEffect(() => { load(); }, []); const approve = async (u) => { setBusyId(u.id); try { const role = roles[u.id] || "colaborador"; await window.Api.approvals.approve(u.id, { role }); pushToast("✅", `${u.name} aprovado como ${role}`); load(); } catch (e) { pushToast("⚠️", e.message); } finally { setBusyId(null); } }; const reject = async (u) => { if (!confirm(`Rejeitar a solicitação de ${u.name} (${u.email})?`)) return; setBusyId(u.id); try { await window.Api.approvals.reject(u.id); pushToast("🗑️", "Solicitação rejeitada"); load(); } catch (e) { pushToast("⚠️", e.message); } finally { setBusyId(null); } }; const setRole = (uid, v) => setRoles(r => ({ ...r, [uid]: v })); const fmtDate = (s) => { if (!s) return "—"; try { const d = new Date(s.replace(" ", "T")); return d.toLocaleString("pt-BR", { dateStyle: "short", timeStyle: "short" }); } catch (_) { return s; } }; return (
{ if (e.target === e.currentTarget) onClose(); }}>

Solicitações de cadastro

Aprove ou rejeite quem solicitou acesso pelo formulário público. {currentRole === "gerente" && " Gerentes só podem aprovar como colaborador."}

{err &&

{err}

}
{loading &&
Carregando…
} {!loading && list.length === 0 && (
🎉
Nenhuma solicitação pendente.
)} {!loading && list.map(u => { const role = roles[u.id] || "colaborador"; const isAdmin = currentRole === "admin"; const blockedRole = !isAdmin && role !== "colaborador"; const busy = busyId === u.id; return (
{initialsOf(u.name)}
{u.name} {u.email} solicitado em {fmtDate(u.created_at)}
{APPROVAL_ROLES.map(r => { const locked = !r.base && !isAdmin; return ( ); })}
); })}
); } window.ApprovalsPanel = ApprovalsPanel;