All files / components/Articles ArticlesTable.jsx

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

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