import React, { useState, useEffect } from 'react'; import { Users, Plus, Mail, Search, X, Edit, Trash2, Loader2, CheckCircle2, AlertCircle, AlertTriangle } from 'lucide-react'; import { getUsers, getTeams, createMember, deleteUser, updateUser, getUserById } from '../services/dataService'; import { User } from '../types'; export const TeamManagement: React.FC = () => { const [users, setUsers] = useState([]); const [teams, setTeams] = useState([]); const [loading, setLoading] = useState(true); const [isSaving, setIsSaving] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const [currentUser, setCurrentUser] = useState(null); const [userToDelete, setUserToDelete] = useState(null); const [deleteConfirmName, setDeleteConfirmName] = useState(''); const [editingUser, setEditingUser] = useState(null); const [formData, setFormData] = useState({ name: '', email: '', role: 'agent' as any, team_id: '', status: 'active' as any }); const loadData = async () => { const tid = localStorage.getItem('ctms_tenant_id'); const uid = localStorage.getItem('ctms_user_id'); if (!tid) return; setLoading(true); try { const [fu, ft, me] = await Promise.all([getUsers(tid), getTeams(tid), uid ? getUserById(uid) : null]); setUsers(fu.filter(u => u.role !== 'super_admin')); setTeams(ft); if (me) setCurrentUser(me); } catch (err) { console.error(err); } finally { setLoading(false); } }; useEffect(() => { loadData(); }, []); const handleSave = async (e: React.FormEvent) => { e.preventDefault(); setIsSaving(true); try { const tid = localStorage.getItem('ctms_tenant_id') || ''; const success = editingUser ? await updateUser(editingUser.id, formData) : await createMember({ ...formData, tenant_id: tid }); if (success) { setIsModalOpen(false); loadData(); } } catch (err) { console.error(err); } finally { setIsSaving(false); } }; const handleConfirmDelete = async () => { if (!userToDelete || deleteConfirmName !== userToDelete.name) return; setIsSaving(true); try { if (await deleteUser(userToDelete.id)) { setIsDeleteModalOpen(false); loadData(); } } catch (err) { console.error(err); } finally { setIsSaving(false); } }; if (loading && users.length === 0) return
Carregando...
; const canManage = currentUser?.role === 'admin' || currentUser?.role === 'super_admin'; const filtered = users.filter(u => u.name.toLowerCase().includes(searchTerm.toLowerCase()) || u.email.toLowerCase().includes(searchTerm.toLowerCase())); const getRoleBadge = (role: string) => { switch (role) { 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'; } }; return (

Membros

Gerencie os acessos da sua organização.

{canManage && ( )}
setSearchTerm(e.target.value)} className="w-full max-w-md border border-slate-200 p-2 rounded-lg text-sm outline-none" />
{canManage && } {filtered.map(user => ( {canManage && ( )} ))}
Usuário Função Time StatusAções
{user.name}
{user.email}
{user.role} {teams.find(t => t.id === user.team_id)?.name || '-'} {user.status}
{isModalOpen && (

{editingUser ? 'Editar' : 'Novo'} Membro

setFormData({...formData, name:e.target.value})} className="w-full border p-2 rounded-lg" required />
setFormData({...formData, email:e.target.value})} className="w-full border p-2 rounded-lg" disabled={!!editingUser} required />
)} {isDeleteModalOpen && userToDelete && (

Excluir {userToDelete.name}?

setDeleteConfirmName(e.target.value)} className="w-full border-2 p-2 rounded-lg mb-4 text-center font-bold" placeholder="Digite o nome para confirmar" />
)}
); };