import React, { useState, useEffect } from 'react'; import '../../login-logs-activity/assets/style.css'; const UserTable = () => { const [data, setData] = useState([]); const [searchTerm, setSearchTerm] = useState(''); const [roleFilter, setRoleFilter] = useState('All'); const [itemsPerPage, setItemsPerPage] = useState(5); const [currentPage, setCurrentPage] = useState(1); const [selectedRows, setSelectedRows] = useState([]); const [totalEntries, setTotalEntries] = useState(0); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const fetchUsers = async () => { setLoading(true); setError(null); try { const params = new URLSearchParams({ per_page: itemsPerPage, page: currentPage, }); if (searchTerm.trim() !== '') params.append('s', searchTerm.trim()); if (roleFilter !== 'All') params.append('role', roleFilter.toLowerCase()); const response = await fetch( `${tpsaAdmin.rest_url}secure-admin/v1/2fa/app/users?${params.toString()}`, { method: 'GET', headers: { 'X-WP-Nonce': tpsaAdmin.rest_nonce }, credentials: 'include', }, ); if (!response.ok) throw new Error('Failed to fetch users'); const json = await response.json(); setData(json.data || []); setTotalEntries(json.total || 0); } catch (err) { setError(err.message || 'Unknown error'); } finally { setLoading(false); setSelectedRows([]); // reset selection on fetch } }; useEffect(() => { fetchUsers(); }, [currentPage, itemsPerPage, searchTerm, roleFilter]); const totalPages = Math.ceil(totalEntries / itemsPerPage); const handleSelectAll = (e) => { if (e.target.checked) { setSelectedRows(data.map((item) => item.ID)); } else { setSelectedRows([]); } }; const handleSelectRow = (id) => { setSelectedRows((prev) => prev.includes(id) ? prev.filter((rowId) => rowId !== id) : [...prev, id], ); }; const handlePrevPage = () => { if (currentPage > 1) setCurrentPage(currentPage - 1); }; const handleNextPage = () => { if (currentPage < totalPages) setCurrentPage(currentPage + 1); }; return (
Loading...
} {error &&{error}
}| 0 && data.every((item) => selectedRows.includes(item.ID)) } /> | Name | Username | Role | |
|---|---|---|---|---|
| handleSelectRow(user.ID)} /> | {user.name} | {user.username} | {user.email} | {user.roles.join(', ')} |
| No results found | ||||