import React, { useState } from 'react';
import { AppUser, ViewState } from '../types';
import {
Plus, Search, Shield, ShieldAlert, CheckCircle2,
XCircle, Edit2, Trash2, X, Save, User as UserIcon, Lock
} from 'lucide-react';
interface UserManagementViewProps {
users: AppUser[];
setUsers: (users: AppUser[]) => void;
availableModules: { id: ViewState; label: string }[];
currentUser: AppUser;
}
const ToggleSwitch: React.FC<{ checked: boolean, onChange: (val: boolean) => void, label: string }> = ({ checked, onChange, label }) => (
{label}
);
export const UserManagementView: React.FC = ({ users, setUsers, availableModules, currentUser }) => {
const [isModalOpen, setIsModalOpen] = useState(false);
const [editingUser, setEditingUser] = useState>({
role: 'user',
active: true,
permissions: []
});
const handleSaveUser = () => {
if (!editingUser.name || !editingUser.email) return;
if (editingUser.id) {
// Editar existente
setUsers(users.map(u => u.id === editingUser.id ? { ...u, ...editingUser } as AppUser : u));
} else {
// Criar novo
const newUser: AppUser = {
...editingUser,
id: Math.random().toString(36).substr(2, 9),
avatar: `https://ui-avatars.com/api/?name=${editingUser.name}&background=random`,
permissions: editingUser.role === 'super_admin' ? availableModules.map(m => m.id) : (editingUser.permissions || [])
} as AppUser;
setUsers([...users, newUser]);
}
setIsModalOpen(false);
setEditingUser({ role: 'user', active: true, permissions: [] });
};
const handleDeleteUser = (id: string) => {
if (id === currentUser.id) {
alert("Você não pode excluir a si mesmo.");
return;
}
if (window.confirm("Tem certeza que deseja remover este usuário?")) {
setUsers(users.filter(u => u.id !== id));
}
};
const togglePermission = (moduleId: ViewState) => {
const currentPermissions = editingUser.permissions || [];
if (currentPermissions.includes(moduleId)) {
setEditingUser({ ...editingUser, permissions: currentPermissions.filter(p => p !== moduleId) });
} else {
setEditingUser({ ...editingUser, permissions: [...currentPermissions, moduleId] });
}
};
const openModal = (user?: AppUser) => {
if (user) {
setEditingUser(user);
} else {
setEditingUser({ role: 'user', active: true, permissions: [], name: '', email: '' });
}
setIsModalOpen(true);
};
const inputClass = "w-full p-3 bg-slate-50 border border-slate-200 rounded-xl focus:ring-2 focus:ring-primary-200 outline-none text-slate-800 text-sm";
const labelClass = "block text-xs font-bold text-slate-700 mb-1 uppercase tracking-wide";
return (
Gerenciamento de Usuários
Controle de acesso e permissões do sistema.
| Usuário |
Função |
Status |
Permissões |
|
{users.map(user => (
|
|
{user.role === 'super_admin' ? : }
{user.role === 'super_admin' ? 'Super Admin' : 'Usuário'}
|
{user.active ? : }
{user.active ? 'Ativo' : 'Inativo'}
|
{user.role === 'super_admin' ? (
Acesso Total
) : (
{user.permissions.length === 0 && Sem acesso}
{user.permissions.slice(0, 3).map(p => (
{availableModules.find(m => m.id === p)?.label || p}
))}
{user.permissions.length > 3 && (
+{user.permissions.length - 3}
)}
)}
|
{user.id !== currentUser.id && (
)}
|
))}
{/* Modal User Edit/Create */}
{isModalOpen && (
setIsModalOpen(false)}>
{editingUser.id ? 'Editar Usuário' : 'Novo Usuário'}
{/* Permissions Area */}
Permissões de Acesso
{editingUser.role === 'super_admin' ? (
Acesso Irrestrito
Super Admins têm acesso a todos os módulos.
) : (
{availableModules.map(module => (
togglePermission(module.id)}
/>
))}
)}
)}
);
};