import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Edit, Power, PowerOff, Trash2 } from 'lucide-react'; import { UserProfile, UserFunction, UserPrivilege, UserDependency } from '@/hooks/useUserManagement'; import { UserAvatar } from '@/components/ui/user-avatar'; import { UserDeleteDialog } from './UserDeleteDialog'; import { useState } from 'react'; interface UsersTableProps { users: UserProfile[]; functions: UserFunction[]; privileges: UserPrivilege[]; onEditUser: (user: UserProfile) => void; onToggleStatus: (userId: string, currentStatus: string) => void; onDeleteUser?: (userId: string, replaceReferences: boolean) => Promise; canDeleteUser?: (userId: string) => Promise; getUserDependencies?: (userId: string) => Promise; } export function UsersTable({ users, functions, privileges, onEditUser, onToggleStatus, onDeleteUser, canDeleteUser, getUserDependencies }: UsersTableProps) { const [selectedUserForDeletion, setSelectedUserForDeletion] = useState(null); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const getFunctionName = (functionId: string | null) => { if (!functionId) return '-'; const func = functions.find(f => f.id === functionId); return func?.name || '-'; }; const getPrivilegeName = (privilegeId: string | null) => { if (!privilegeId) return '-'; const privilege = privileges.find(p => p.id === privilegeId); return privilege?.name || '-'; }; const getStatusBadge = (status: string) => { const statusConfig = { active: { label: 'Ativo', className: 'bg-green-600 text-white' }, inactive: { label: 'Inativo', className: 'bg-red-600 text-white' }, rejected: { label: 'Rejeitado', className: 'bg-gray-600 text-white' } }; const config = statusConfig[status as keyof typeof statusConfig] || statusConfig.inactive; return ( {config.label} ); }; const handleDeleteClick = (user: UserProfile) => { setSelectedUserForDeletion(user); setIsDeleteDialogOpen(true); }; const handleCloseDeleteDialog = () => { setSelectedUserForDeletion(null); setIsDeleteDialogOpen(false); }; const handleConfirmDelete = async (userId: string, replaceReferences: boolean = false) => { if (onDeleteUser) { return await onDeleteUser(userId, replaceReferences); } return false; }; if (users.length === 0) { return (
Nenhum usuário encontrado
); } return ( <>
Usuário Função Privilégio Status Inclusão Ações {users.map((user) => (
{user.full_name || 'Nome não informado'}
{user.email}
{/* Mobile: Show function and privilege on small screens */}
Função: {getFunctionName(user.function_id)}
Privilégio: {getPrivilegeName(user.privilege_id)}
{getFunctionName(user.function_id)} {getPrivilegeName(user.privilege_id)} {getStatusBadge(user.status)} {new Date(user.created_at).toLocaleDateString('pt-BR')}
{onDeleteUser && canDeleteUser && getUserDependencies && ( )}
))}
false)} getUserDependencies={getUserDependencies || (async () => [])} /> ); }