import React, { useState } from 'react'; import { Users, Plus, MoreHorizontal, Mail, Shield, Search, X, Edit, Trash2, Save } from 'lucide-react'; import { getUsers } from '../services/dataService'; import { CURRENT_TENANT_ID } from '../constants'; import { User } from '../types'; export const TeamManagement: React.FC = () => { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [isModalOpen, setIsModalOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { const fetchUsers = async () => { setLoading(true); const tenantId = localStorage.getItem('ctms_tenant_id') || CURRENT_TENANT_ID; const data = await getUsers(tenantId); // Hide super admin from the list for standard admin view setUsers(data.filter(u => u.role !== 'super_admin')); setLoading(false); }; fetchUsers(); }, []); // State for handling Add/Edit const [editingUser, setEditingUser] = useState(null); const [formData, setFormData] = useState({ name: '', email: '', role: 'agent' as 'super_admin' | 'admin' | 'manager' | 'agent', team_id: 'sales_1', status: 'active' as 'active' | 'inactive' }); const filteredUsers = users.filter(u => u.name.toLowerCase().includes(searchTerm.toLowerCase()) || u.email.toLowerCase().includes(searchTerm.toLowerCase()) ); if (loading && users.length === 0) { return
Carregando equipe...
; } const getRoleBadge = (role: string) => { switch (role) { case 'super_admin': return 'bg-slate-900 text-white border-slate-700'; case 'admin': return 'bg-purple-100 text-purple-700 border-purple-200'; case 'manager': return 'bg-blue-100 text-blue-700 border-blue-200'; default: return 'bg-slate-100 text-slate-700 border-slate-200'; } }; const getStatusBadge = (status: string) => { if (status === 'active') { return 'bg-green-100 text-green-700 border-green-200'; } return 'bg-slate-100 text-slate-500 border-slate-200'; }; // Actions const handleDelete = (userId: string) => { if (window.confirm('Tem certeza que deseja excluir este usuário? Esta ação não pode ser desfeita.')) { setUsers(prev => prev.filter(u => u.id !== userId)); } }; const openAddModal = () => { setEditingUser(null); setFormData({ name: '', email: '', role: 'agent', team_id: 'sales_1', status: 'active' }); setIsModalOpen(true); }; const openEditModal = (user: User) => { setEditingUser(user); setFormData({ name: user.name, email: user.email, role: user.role, team_id: user.team_id, status: user.status }); setIsModalOpen(true); }; const handleSave = (e: React.FormEvent) => { e.preventDefault(); if (editingUser) { // Update existing user setUsers(prev => prev.map(u => u.id === editingUser.id ? { ...u, ...formData } : u)); } else { // Create new user const newUser: User = { id: Date.now().toString(), tenant_id: 'tenant_123', // Mock default avatar_url: `https://ui-avatars.com/api/?name=${encodeURIComponent(formData.name)}&background=random`, ...formData }; setUsers(prev => [...prev, newUser]); } setIsModalOpen(false); }; return (

Gerenciamento de Equipe

Gerencie acesso, funções e times de vendas da sua organização.

{/* Toolbar */}
setSearchTerm(e.target.value)} />
{filteredUsers.length} membros encontrados
{/* Table */}
{filteredUsers.map((user) => ( ))} {filteredUsers.length === 0 && ( )}
Usuário Função Time Status Ações
{user.name}
{user.email}
{user.role === 'manager' ? 'Gerente' : user.role === 'agent' ? 'Agente' : user.role === 'admin' ? 'Admin' : 'Super Admin'} {user.team_id === 'sales_1' ? 'Vendas Alpha' : user.team_id === 'sales_2' ? 'Vendas Beta' : '-'} {user.status === 'active' ? 'Ativo' : 'Inativo'}
Nenhum usuário encontrado.
{/* Add/Edit Modal */} {isModalOpen && (

{editingUser ? 'Editar Usuário' : 'Convidar Novo Membro'}

setFormData({...formData, name: e.target.value})} />
setFormData({...formData, email: e.target.value})} />
)}
); };