import React, { useState } from 'react'; import { useData } from '../contexts/DataContext'; import { UserApprovalStatus } from '../types'; import { CheckCircle, XCircle, Clock, Search, Filter } from 'lucide-react'; import { Button } from '../components/Button'; interface UserApprovalProps { onNavigate?: (page: string) => void; } export const UserApproval: React.FC = ({ onNavigate }) => { const { pendingUsers, approveUser, rejectUser } = useData(); const [searchTerm, setSearchTerm] = useState(''); const [statusFilter, setStatusFilter] = useState<'ALL' | UserApprovalStatus>('ALL'); const [isProcessing, setIsProcessing] = useState(null); const handleApprove = async (userId: string) => { setIsProcessing(userId); // Simular processamento setTimeout(() => { approveUser(userId); setIsProcessing(null); }, 800); }; const handleReject = async (userId: string) => { setIsProcessing(userId); // Simular processamento setTimeout(() => { rejectUser(userId); setIsProcessing(null); }, 800); }; // Filtrar usuários const filteredUsers = pendingUsers.filter(user => { const matchesSearch = user.name.toLowerCase().includes(searchTerm.toLowerCase()) || user.email.toLowerCase().includes(searchTerm.toLowerCase()) || (user.registeredInstitution?.toLowerCase().includes(searchTerm.toLowerCase()) ?? false); const matchesStatus = statusFilter === 'ALL' || user.approvalStatus === statusFilter; return matchesSearch && matchesStatus; }); const getStatusBadge = (status: UserApprovalStatus) => { switch (status) { case UserApprovalStatus.PENDING: return ( Pendente ); case UserApprovalStatus.APPROVED: return ( Aprovado ); case UserApprovalStatus.REJECTED: return ( Rejeitado ); } }; const pendingCount = pendingUsers.filter(u => u.approvalStatus === UserApprovalStatus.PENDING).length; const approvedCount = pendingUsers.filter(u => u.approvalStatus === UserApprovalStatus.APPROVED).length; const rejectedCount = pendingUsers.filter(u => u.approvalStatus === UserApprovalStatus.REJECTED).length; return (
{/* Header */}

Aprovação de Cadastros

Gerencie os cadastros pendentes de aprovação

{/* Stats Cards */}

Pendentes

{pendingCount}

Aprovados

{approvedCount}

Rejeitados

{rejectedCount}

{/* Filters */}
{/* Search */}
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-brand-gold focus:border-transparent" />
{/* Status Filter */}
{/* Table */}
{filteredUsers.length === 0 ? ( ) : ( filteredUsers.map((user) => ( )) )}
Nome Email Telefone Universidade Data de Cadastro Status Ações

Nenhum cadastro encontrado

Não há cadastros que correspondam aos filtros selecionados.

{user.name}
{user.email}
{user.phone || '-'}
{user.registeredInstitution || ( Não cadastrado )}
{user.createdAt ? new Date(user.createdAt).toLocaleDateString('pt-BR') : '-'}
{getStatusBadge(user.approvalStatus!)} {user.approvalStatus === UserApprovalStatus.PENDING && (
)} {user.approvalStatus === UserApprovalStatus.APPROVED && ( Aprovado )} {user.approvalStatus === UserApprovalStatus.REJECTED && ( Rejeitado )}
); };