All files / pages/Admin AdminUsersPage.jsx

100% Statements 10/10
100% Branches 4/4
100% Functions 4/4
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78            1x 47x 47x           47x                 47x 47x                           2x 2x                             1x                       5x                      
import React, { useState } from "react";
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import UsersTable from "main/components/Users/UsersTable";
 
import { useBackend } from "main/utils/useBackend";
 
const AdminUsersPage = () => {
  const [page, setPage] = useState(0);
  const [size, setSize] = useState(5);
 
  const {
    data: pagedUsers,
    error: _error,
    status: _status,
  } = useBackend(
    [`/api/admin/users/paged`, page, size],
    {
      method: "GET",
      url: `/api/admin/users/paged?page=${page}&size=${size}`,
    },
    [page, size],
  );
 
  const users = pagedUsers?.content || [];
  const totalPages = pagedUsers?.totalPages ?? 1;
 
  return (
    <BasicLayout>
      <h2>Users</h2>
 
      {/* Page Size Selector */}
      <div className="d-flex align-items-center gap-2 mb-3">
        <label htmlFor="pageSizeSelect">Page Size:</label>
        <select
          id="pageSizeSelect"
          className="form-select w-auto"
          value={size}
          onChange={(e) => {
            setSize(Number(e.target.value));
            setPage(0); // Return to pg 0
          }}
        >
          <option value={5}>5</option>
          <option value={10}>10</option>
          <option value={20}>20</option>
        </select>
      </div>
 
      <UsersTable users={users} />
 
      {/* Page Buttons (Inc/Dec) */}
      <div className="d-flex justify-content-between align-items-center mt-3">
        <button
          className="btn btn-primary"
          onClick={() => setPage(page - 1)}
          disabled={page === 0}
        >
          Previous
        </button>
 
        <span>
          Page {page + 1} of {totalPages}
        </span>
 
        <button
          className="btn btn-primary"
          onClick={() => setPage(page + 1)}
          disabled={page + 1 >= totalPages}
        >
          Next
        </button>
      </div>
    </BasicLayout>
  );
};
 
export default AdminUsersPage;