All files / components/Users RoleEmailTable.jsx

100% Statements 63/63
100% Branches 12/12
100% Functions 7/7
100% Lines 63/63

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 791x 1x   1x 1x 1x   1x 26x 26x 26x 26x 26x 26x 26x 4x 4x 4x 4x 4x 4x 4x 4x   26x 4x 4x   26x 26x 26x 26x   26x 4x 4x   26x   26x 26x 26x 26x 26x 26x 26x 26x 26x 59x 58x 58x 58x 58x 58x 58x       58x 1x 1x 1x 1x 1x     1x 26x 26x   26x 26x 26x 26x 26x     26x  
import React from "react";
import OurTable from "main/components/OurTable";
 
import { useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
import { Button } from "react-bootstrap";
 
export default function RoleEmailTable({
  data,
  deleteEndpoint = "/api/admin/delete",
  getEndpoint = "/api/admin/all",
  testIdPrefix = "RoleEmailTable",
  customDeleteCallback = null, // optional deleteCallback, used in AdminsIndexPage
}) {
  const cellToAxiosParamsDelete = (cell, deleteEndpoint) => {
    return {
      url: deleteEndpoint,
      method: "DELETE",
      params: {
        email: cell.row.original.email,
      },
    };
  };
 
  const onDeleteSuccess = (message) => {
    toast(message);
  };
 
  const deleteMutation = useBackendMutation(
    (cell) => cellToAxiosParamsDelete(cell, deleteEndpoint),
    { onSuccess: onDeleteSuccess },
    [getEndpoint],
  );
  const defaultDeleteCallback = async (cell) => {
    deleteMutation.mutate(cell);
  };
 
  const deleteCallback = customDeleteCallback || defaultDeleteCallback;
 
  const columns = [
    {
      header: "Email",
      accessorKey: "email", // accessor is the "key" in the data
    },
    {
      header: "Delete",
      accessorKey: "isInAdminEmails",
      cell: ({ cell }) => {
        if (!cell.row.original.isInAdminEmails) {
          return (
            <Button
              className="btn btn-danger"
              onClick={() => deleteCallback(cell)}
              data-testid={`${testIdPrefix}-cell-row-${cell.row.index}-col-delete-button`}
            >
              Delete
            </Button>
          );
        }
        return (
          <span
            data-testid={`${testIdPrefix}-cell-row-${cell.row.index}-cannot-delete`}
          >
            In <code>ADMIN_EMAILS</code>
          </span>
        );
      },
    },
  ];
 
  return (
    <OurTable
      data={Array.isArray(data) ? data : []}
      columns={columns}
      testid={testIdPrefix}
    />
  );
}