All files / components/Announcement AnnouncementTable.jsx

100% Statements 51/51
100% Branches 5/5
100% Functions 3/3
100% Lines 51/51

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 691x 1x   1x 1x       1x 1x   1x 7x   7x 1x 1x   7x   7x 7x 7x 7x   7x   7x 7x 1x 1x   7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x   7x 5x 5x   5x 5x   5x   6x 6x 6x 6x 6x     6x  
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
 
import { useBackendMutation } from "main/utils/useBackend";
import {
  cellToAxiosParamsDelete,
  onDeleteSuccess,
} from "main/utils/announcementUtils";
import { useNavigate } from "react-router-dom";
import { hasRole } from "main/utils/currentUser";
 
export default function AnnouncementTable({ announcements, currentUser }) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/announcements/edit/${cell.row.values.id}`);
  };
 
  // Stryker disable all : hard to test for query caching
 
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    ["/api/announcements/all"],
  );
  // Stryker restore all
 
  // Stryker disable next-line all : TODO try to make a good test for this
  const deleteCallback = async (cell) => {
    deleteMutation.mutate(cell);
  };
 
  const columns = [
    {
      Header: "id",
      accessor: "id", // accessor is the "key" in the data
    },
    {
      Header: "Start Date ISO Format",
      accessor: "startDate",
    },
    {
      Header: "End Date ISO Format",
      accessor: "endDate",
    },
    {
      Header: "Announcement",
      accessor: "announcementText",
    },
  ];
 
  if (hasRole(currentUser, "ROLE_ADMIN")) {
    columns.push(
      ButtonColumn("Edit", "primary", editCallback, "AnnouncementTable"),
    );
    columns.push(
      ButtonColumn("Delete", "danger", deleteCallback, "AnnouncementTable"),
    );
  }
 
  return (
    <OurTable
      data={announcements}
      columns={columns}
      testid={"AnnouncementTable"}
    />
  );
}