All files / components/Announcement AnnouncementTable.jsx

100% Statements 65/65
100% Branches 6/6
100% Functions 5/5
100% Lines 65/65

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 75 76 77 78 79 80 81 82 83 84 851x 1x 1x 1x       1x 1x 1x   1x 22x 22x 22x 22x 22x   22x 1x 1x   22x 22x 22x 22x     22x 2x 2x   22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x   22x 20x 20x   20x 20x   20x   22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x   22x     22x   22x 22x 22x 22x 22x     22x  
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";
import { hasRole } from "main/utils/currentUser";
import { formatDateTime } from "main/utils/dateUtils";
 
export default function AnnouncementTable({
  announcements,
  currentUser,
  commonsId,
}) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/admin/announcements/${commonsId}/edit/${cell.row.values.id}`);
  };
 
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    [`/api/announcements/getbycommonsid?commonsId=${commonsId}`],
  );
 
  const deleteCallback = async (cell) => {
    deleteMutation.mutate(cell);
  };
 
  const columns = [
    {
      Header: "id",
      accessor: "id",
    },
    {
      Header: "Start Date",
      accessor: "startDate",
      Cell: ({ value }) => formatDateTime(value),
    },
    {
      Header: "End Date",
      accessor: "endDate",
      Cell: ({ value }) => formatDateTime(value),
    },
  ];
 
  if (hasRole(currentUser, "ROLE_ADMIN")) {
    columns.push(
      ButtonColumn("Edit", "primary", editCallback, "AnnouncementTable"),
    );
    columns.push(
      ButtonColumn("Delete", "danger", deleteCallback, "AnnouncementTable"),
    );
  }
 
  columns.push({
    Header: "Announcement",
    accessor: "announcementText",
    width: 400,
    Cell: ({ value }) => (
      // Stryker disable all - styles that don't need to be mut tested
      <div
        style={{
          whiteSpace: "normal",
          wordBreak: "break-word",
          maxWidth: "400px",
        }}
      >
        {value}
      </div>
    ),
  });
 
  return (
    <OurTable
      data={announcements}
      columns={columns}
      testid={"AnnouncementTable"}
    />
  );
}