All files / components/Courses CoursesTable.jsx

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

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 641x 1x   1x 1x       1x 1x   1x 20x 20x 20x 20x 20x   20x 1x 1x   20x 20x 20x 20x 20x   20x   20x 20x 2x 2x   20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x 20x   20x 11x 11x 11x   11x   20x 20x  
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
 
import { useBackendMutation } from "main/utils/useBackend";
import {
  cellToAxiosParamsDelete,
  onDeleteSuccess,
} from "main/utils/courseUtils";
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/currentUser";
 
export default function CoursesTable({
  courses,
  currentUser,
  testIdPrefix = "CoursesTable",
}) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/admin/editcourses/${cell.row.values.id}`);
  };
 
  // Stryker disable all : hard to test query caching
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    [`/api/course/all`],
  );
  // Stryker restore all
 
  // Stryker disable next-line all : tested through useBackendMutation behavior
  const deleteCallback = (cell) => {
    deleteMutation.mutate(cell);
  };
 
  const columns = [
    {
      Header: "id",
      accessor: "id",
    },
    {
      Header: "Code",
      accessor: "code",
    },
    {
      Header: "Name",
      accessor: "name",
    },
    {
      Header: "Term",
      accessor: "term",
    },
  ];
 
  if (hasRole(currentUser, "ROLE_ADMIN")) {
    columns.push(ButtonColumn("Edit", "primary", editCallback, testIdPrefix));
    columns.push(
      ButtonColumn("Delete", "danger", deleteCallback, testIdPrefix),
    );
  }
 
  return <OurTable data={courses} columns={columns} testid={testIdPrefix} />;
}