All files / components/RecommendationRequest RecommendationRequestsTable.jsx

100% Statements 54/54
100% Branches 4/4
100% Functions 3/3
100% Lines 54/54

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 741x 1x   1x 1x       1x 1x   1x 14x 14x 14x 14x   14x 1x 1x   14x   14x 14x 14x 14x   14x   14x 14x 2x 2x   14x 14x 14x 14x 14x 14x 14x 14x 14x 14x   14x 8x 8x 8x 8x 8x 8x     8x 8x 8x 8x 8x 8x     8x   14x 14x 14x 14x 14x     14x  
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
 
import { useBackendMutation } from "main/utils/useBackend";
import {
  cellToAxiosParamsDelete,
  onDeleteSuccess,
} from "main/utils/recommendationRequestUtils";
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/useCurrentUser";
 
export default function RecommendationRequestsTable({
  recommendationRequests,
  currentUser,
}) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/recommendationrequests/edit/${cell.row.original.id}`);
  };
 
  // Stryker disable all : hard to test for query caching
 
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    ["/api/recommendationrequests/all"],
  );
  // 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 columns = [
    { header: "id", accessorKey: "id" },
    { header: "Code", accessorKey: "code" },
    { header: "Requester Email", accessorKey: "requesterEmail" },
    { header: "Professor Email", accessorKey: "professorEmail" },
    { header: "Explanation", accessorKey: "explanation" },
    { header: "Date Requested", accessorKey: "dateRequested" },
    { header: "Date Needed", accessorKey: "dateNeeded" },
    { header: "Done", accessorKey: "done" },
  ];
 
  if (hasRole(currentUser, "ROLE_ADMIN")) {
    columns.push(
      ButtonColumn(
        "Edit",
        "primary",
        editCallback,
        "RecommendationRequestsTable",
      ),
    );
    columns.push(
      ButtonColumn(
        "Delete",
        "danger",
        deleteCallback,
        "RecommendationRequestsTable",
      ),
    );
  }
 
  return (
    <OurTable
      data={recommendationRequests}
      columns={columns}
      testid={"RecommendationRequestsTable"}
    />
  );
}