All files / components/RequestType RequestTypeTable.jsx

100% Statements 52/52
100% Branches 9/9
100% Functions 3/3
100% Lines 52/52

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 701x 1x   1x 1x       1x 1x   1x 36x   36x 2x 2x   36x 36x 36x 36x 36x   36x   36x 36x 4x 4x   36x 36x 36x 36x 36x 36x 36x 36x 36x 36x   36x 36x 36x 22x 36x 25x 25x   25x   34x 34x 22x 36x 25x 25x   25x   34x 34x 34x 34x 34x     34x  
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
 
import { useBackendMutation } from "main/utils/useBackend";
import {
  cellToAxiosParamsDelete,
  onDeleteSuccess,
} from "main/utils/RequestTypeUtils";
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/currentUser";
 
export default function RequestTypeTable({ requestTypes, currentUser }) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/requesttypes/edit/${cell.row.values.id}`);
  };
 
  // Stryker disable all : hard to test for query caching
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    ["/api/requesttypes/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",
      accessor: "id", // accessor is the "key" in the data
    },
    {
      Header: "Request Type",
      accessor: "requestType",
    },
  ];
 
  // only professors can delete / edit
  if (
    hasRole(currentUser, "ROLE_PROFESSOR") ||
    hasRole(currentUser, "ROLE_ADMIN")
  ) {
    columns.push(
      ButtonColumn("Delete", "danger", deleteCallback, "RequestTypeTable"),
    );
  }
 
  if (
    hasRole(currentUser, "ROLE_PROFESSOR") ||
    hasRole(currentUser, "ROLE_ADMIN")
  ) {
    columns.push(
      ButtonColumn("Edit", "primary", editCallback, "RequestTypeTable"),
    );
  }
 
  return (
    <OurTable
      data={requestTypes}
      columns={columns}
      testid={"RequestTypeTable"}
    />
  );
}