All files / components/RosterStudents RosterStudentsTable.js

100% Statements 10/10
100% Branches 3/3
100% Functions 3/3
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 79 80 81 82 83 84 85 86 87 88                  2x                                                                                     11x   11x 1x     11x     11x               11x 2x     11x           11x                
import OurTable, { ButtonColumn } from "main/components/OurTable";
import { useBackendMutation } from "main/utils/useBackend";
import { useNavigate, useParams } from "react-router-dom";
 
import {
  cellToAxiosParamsDelete,
  onDeleteSuccess,
} from "main/utils/rosterStudentUtils";
 
const columns = [
  {
    Header: "id",
    accessor: "id", // accessor is the "key" in the data
  },
  {
    Header: "Student ID",
    accessor: "studentId",
  },
  {
    Header: "First Name",
    accessor: "firstName",
  },
  {
    Header: "Last Name",
    accessor: "lastName",
  },
  {
    Header: "Email",
    accessor: "email",
  },
  {
    Header: "Roster Status",
    accessor: "rosterStatus",
  },
  {
    Header: "Github Org Status",
    accessor: "orgStatus",
  },
  {
    Header: "Github ID",
    accessor: "githubId",
  },
  {
    Header: "Github Username",
    accessor: "githubLogin",
  },
];
 
export default function RosterStudentsTable({
  rosterStudents,
  showButtons = false,
}) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`edit/${cell.row.values.id}`);
  };
 
  const { courseId } = useParams();
 
  // Stryker disable all : hard to test for query caching
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    [`/api/rosterstudents/course?courseId=${courseId}`],
  );
  // Stryker restore all
 
  // Stryker disable next-line all : TODO try to make a good test for this
  const deleteCallback = async (cell) => {
    deleteMutation.mutate(cell);
  };
 
  const buttonColumns = [
    ...columns,
    ButtonColumn("Edit", "primary", editCallback, "RosterStudentsTable"),
    ButtonColumn("Delete", "danger", deleteCallback, "RosterStudentsTable"),
  ];
 
  return (
    <OurTable
      data={rosterStudents}
      columns={showButtons ? buttonColumns : columns}
      testid={"RosterStudentsTable"}
    />
  );
}