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 7x   7x 1x 1x   7x 7x 1x 1x 1x 1x 7x 7x     7x 1x 1x   7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x   7x 5x 5x 5x 5x 5x 5x     5x 5x 5x 5x 5x 5x     5x   7x 7x 7x 7x 7x     7x  
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.values.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()), // true/false 显示
    },
  ];
 
  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"}
    />
  );
}