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 | 1x 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} />;
}
|