All files / components AliasApprovalTable.js

100% Statements 22/22
100% Branches 11/11
100% Functions 5/5
100% Lines 20/20

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              32x 32x           32x           32x 5x         4x 4x   1x                   32x 2x     2x     32x   32x       1x 1x     5x 5x       32x 31x   29x    
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
import { useBackendMutation, useBackend } from "main/utils/useBackend";
import { toast } from "react-toastify";
import { useQueryClient } from "react-query";
 
export default function AliasApprovalTable() {
  const testid = "AliasApprovalTable";
  const queryClient = useQueryClient();
 
  const {
    data: users,
    error,
    status,
  } = useBackend(
    ["/api/admin/usersWithProposedAlias"],
    { method: "GET", url: "/api/admin/usersWithProposedAlias" },
    [],
  );
 
  const objectToAxiosParams = (variables) => {
    if (
      !variables ||
      typeof variables.id === "undefined" ||
      typeof variables.approved === "undefined"
    ) {
      console.error("Missing id or approved in mutation variables:", variables);
      return {};
    }
    return {
      url: "/api/currentUser/updateAliasModeration",
      method: "PUT",
      params: {
        id: variables.id,
        approved: variables.approved,
      },
    };
  };
 
  const onSuccess = (returnedUser, variables) => {
    toast(
      `${variables.approved ? "Approved" : "Rejected"} alias: ${returnedUser.alias}`,
    );
    queryClient.invalidateQueries("/api/admin/usersWithProposedAlias");
  };
 
  const mutation = useBackendMutation(objectToAxiosParams, { onSuccess });
 
  const columns = [
    { Header: "Alias", accessor: "alias" },
    { Header: "Proposed Alias", accessor: "proposedAlias" },
    ButtonColumn("Approve", "success", (cell) => {
      const user = cell.row.original;
      mutation.mutate({ id: user.id, approved: true });
    }),
    ButtonColumn("Reject", "danger", (cell) => {
      const user = cell.row.original;
      mutation.mutate({ id: user.id, approved: false });
    }),
  ];
 
  if (status === "loading") return <div>Loading...</div>;
  if (error) return <div>Error loading aliases</div>;
 
  return <OurTable data={users} columns={columns} testid={testid} />;
}