import React, { useState } from "react"; import { useData } from "../contexts/DataContext"; import { UserApprovalStatus } from "../types"; import { CheckCircle, XCircle, Clock, Search, Filter, Users, Briefcase, } 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 [activeTab, setActiveTab] = useState<"normal" | "professional">( "normal" ); 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); }; // Separar usuários normais e profissionais (profissionais têm role PHOTOGRAPHER) const normalUsers = pendingUsers.filter( (user) => user.role !== "PHOTOGRAPHER" ); const professionalUsers = pendingUsers.filter( (user) => user.role === "PHOTOGRAPHER" ); // Filtrar usuários baseado na aba ativa const currentUsers = activeTab === "normal" ? normalUsers : professionalUsers; const filteredUsers = currentUsers.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 = currentUsers.filter( (u) => u.approvalStatus === UserApprovalStatus.PENDING ).length; const approvedCount = currentUsers.filter( (u) => u.approvalStatus === UserApprovalStatus.APPROVED ).length; const rejectedCount = currentUsers.filter( (u) => u.approvalStatus === UserApprovalStatus.REJECTED ).length; return (
{/* Header */}

Aprovação de Cadastros

Gerencie os cadastros pendentes de aprovação

{/* Tabs */}
{/* 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 */}
{activeTab === "normal" ? ( // Tabela de Cadastros Normais {filteredUsers.length === 0 ? ( ) : ( filteredUsers.map((user) => ( )) )}
Nome Email Telefone Empresa 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 )}
) : ( // Tabela de Cadastros Profissionais {filteredUsers.length === 0 ? ( ) : ( filteredUsers.map((user) => ( )) )}
Nome Email Telefone Função Profissional Data de Cadastro Status Ações

Nenhum cadastro profissional encontrado

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

{user.name}
{user.email}
{user.phone || "-"}
{(user as any).funcao || ( 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 )}
)}
); };