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 1x 14x 14x 14x 14x 14x 14x 1x 1x 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 8x 8x 8x 8x 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 const ARTICLES_QUERY_KEY = "/api/articles/all";
export default function ArticlesTable({
articles,
currentUser,
testIdPrefix = "ArticlesTable",
}) {
const navigate = useNavigate();
const editCallback = (cell) => {
navigate(`/articles/edit/${cell.row.original.id}`);
};
const deleteMutation = useBackendMutation(
cellToAxiosParamsDelete,
{ onSuccess: onDeleteSuccess },
[ARTICLES_QUERY_KEY],
);
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: "Email",
accessorKey: "email",
},
{
header: "Date",
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} />;
}
|