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 74 | 1x 1x 1x 1x 1x 1x 1x 15x 15x 15x 15x 15x 15x 1x 15x 15x 15x 15x 15x 15x 15x 15x 15x 2x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 15x 9x 9x 9x 9x 15x 15x | 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"; // move between pages on the website
import { hasRole } from "main/utils/useCurrentUser"; // admin or not
export default function ArticlesTable({
articles,
currentUser,
testIdPrefix = "ArticlesTable",
}) {
const navigate = useNavigate();
const editCallback = (cell) => {
navigate(`/articles/edit/${cell.row.original.id}`);
}; // this is what happens when you click the edit button
// Stryker disable all : hard to test for query caching
const deleteMutation = useBackendMutation(
cellToAxiosParamsDelete,
{ onSuccess: onDeleteSuccess },
["/api/articles/all"], // when something is deleted, we refresh the data
);
// Stryker restore all
// Stryker disable next-line all : TODO try to make a good test for this
const deleteCallback = async (cell) => {
deleteMutation.mutate(cell);
}; // call delete on the cell
const columns = [
{
header: "id",
accessorKey: "id", // accessor is the "key" in the data
},
{
header: "Title",
accessorKey: "title",
},
{
header: "URL",
accessorKey: "url",
},
{
header: "Explanation",
accessorKey: "explanation",
},
{
header: "Email",
accessorKey: "email",
},
{
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} />;
}
|