import React from 'react'; import { Models } from 'appwrite'; import SearchBar from './SearchBar'; import RefreshButton from './RefreshButton'; import ListHeader from './ListHeader'; import DataTable, { Column } from './DataTable'; import Pagination from './Pagination'; import TableActions from './TableActions'; interface UsuarioListProps { usuarios: Models.Document[]; loading: boolean; isChangingPage?: boolean; error: string | null; totalUsuarios: number; currentPage: number; pageSize: number; onEdit: (user: Models.Document) => void; onDelete: (id: string) => Promise; onRefresh: () => void; onPrevPage: () => void; onNextPage: () => void; onSearch: (term: string) => void; } const columns: Column[] = [ { key: 'nome-civil', header: 'Nome Civil' }, { key: 'nome-social', header: 'Nome Social' }, { key: 'email', header: 'Email' }, { key: 'empresas', header: 'Empresa', render: row => { const empresa = (row as any).empresas; if (empresa && typeof empresa === 'object') { return ( empresa['razao-social'] || empresa['nome-fantasia'] || empresa.$id || '' ); } return empresa; }, }, { key: 'cpf', header: 'CPF' }, ]; const UsuarioList: React.FC = ({ usuarios, loading, isChangingPage = false, error, totalUsuarios, currentPage, pageSize, onEdit, onDelete, onRefresh, onPrevPage, onNextPage, onSearch, }) => { const [search, setSearch] = React.useState(''); const totalPages = Math.ceil(totalUsuarios / pageSize); const startItem = (currentPage - 1) * pageSize + 1; const endItem = Math.min(currentPage * pageSize, totalUsuarios); const handleSearch = () => onSearch(search); const handleDelete = async (id: string) => { if (confirm('Tem certeza que deseja deletar este usuário?')) { await onDelete(id); } }; return (
{error && (
{error}
)} {isChangingPage && (
Carregando página...
)} {loading ? (
Carregando usuários...
) : ( <> ( onEdit(u)} onDelete={() => handleDelete(u.$id)} /> )} />
{totalUsuarios > 0 ? ( <>Mostrando {startItem} - {endItem} de {totalUsuarios} usuários ) : ( 'Total de usuários: 0' )}
)}
); }; export default UsuarioList;