All files / components/RecommendationRequest RecommendationRequestTable.jsx

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

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 85 86 87 88 89 901x 1x   1x 1x   1x 1x   1x 16x   16x 1x 1x   16x 16x 2x 2x 2x 2x 16x 16x     16x 2x 2x   16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x   16x 9x 9x 9x 9x 9x 9x     9x 9x 9x 9x 9x 9x     9x   16x 16x 16x 16x 16x     16x  
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
 
import { useBackendMutation } from "main/utils/useBackend";
import { onDeleteSuccess } from "main/utils/UCSBDateUtils";
 
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/useCurrentUser";
 
export default function RecommendationRequestTable({ requests, currentUser }) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/recommendationrequests/edit/${cell.row.original.id}`);
  };
 
  const deleteMutation = useBackendMutation(
    (cell) => ({
      url: "/api/recommendationrequests",
      method: "DELETE",
      params: { id: cell.row.original.id }, 
    }),
    { onSuccess: onDeleteSuccess },
    ["/api/recommendationrequests/all"],
  );
 
  const deleteCallback = async (cell) => {
    deleteMutation.mutate(cell);
  };
 
  const columns = [
    {
      header: "ID",
      accessorKey: "id",
    },
    {
      header: "Requester Email",
      accessorKey: "requesterEmail",
    },
    {
      header: "Professor Email",
      accessorKey: "professorEmail",
    },
    {
      header: "Explanation",
      accessorKey: "explanation",
    },
    {
      header: "Date Requested",
      accessorKey: "dateRequested",
    },
    {
      header: "Date Needed",
      accessorKey: "dateNeeded",
    },
    {
      header: "Done",
      accessorKey: "done",
      cell: (cell) => String(cell.getValue()), 
    },
  ];
 
  if (hasRole(currentUser, "ROLE_ADMIN")) {
    columns.push(
      ButtonColumn(
        "Edit",
        "primary",
        editCallback,
        "RecommendationRequestTable",
      ),
    );
    columns.push(
      ButtonColumn(
        "Delete",
        "danger",
        deleteCallback,
        "RecommendationRequestTable",
      ),
    );
  }
 
  return (
    <OurTable
      data={requests}
      columns={columns}
      testid={"RecommendationRequestTable"}
    />
  );
}