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 | 1x 1x 1x 1x 1x 1x 1x 14x 14x 14x 14x 14x 14x 1x 1x 14x 14x 14x 14x 14x 14x 14x 2x 2x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 7x 7x 7x 7x 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/articlesUtils";
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/useCurrentUser";
export default function ArticlesTable({
articles,
currentUser,
testIdPrefix = "ArticlesTable",
}) {
const navigate = useNavigate();
const editCallback = (cell) => {
navigate(`/articles/edit/${cell.row.original.id}`);
};
// Stryker disable all : hard to test for query caching side effects
const deleteMutation = useBackendMutation(
cellToAxiosParamsDelete,
{ onSuccess: onDeleteSuccess },
["/api/articles/all"],
);
// Stryker restore all
const deleteCallback = async (cell) => {
deleteMutation.mutate(cell);
};
const columns = [
{
header: "ID",
accessorKey: "id",
},
{
header: "Title",
accessorKey: "title",
},
{
header: "URL",
accessorKey: "url",
},
{
header: "Explanation",
accessorKey: "explanation",
},
{
header: "Submitter Email",
accessorKey: "submitterEmail",
},
{
header: "Date Added",
accessorKey: "dateAdded",
},
];
if (hasRole(currentUser, "ROLE_ADMIN")) {
columns.push(ButtonColumn("Edit", "primary", editCallback, testIdPrefix));
columns.push(
ButtonColumn("Delete", "danger", deleteCallback, testIdPrefix),
);
}
return <OurTable data={articles} columns={columns} testid={testIdPrefix} />;
}
|