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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | 1x 1x 8x 1x 8x 1x 8x 1x 8x 1x 8x 25x 1x 25x 1x 8x 19x 8x | import OurTable from "main/components/OurTable";
import { useBackendMutation } from "main/utils/useBackend";
import { Button } from "react-bootstrap";
import { toast } from "react-toastify";
export default function PendingRequestsTable({ requests }) {
function cellToAxiosParamsAccept(cell) {
return {
url: "/api/requests/updateStatus",
method: "POST",
data: {
id: cell.row.values.id,
status: "Accepted",
},
};
}
function cellToAxiosParamsDeny(cell) {
return {
url: "/api/requests/updateStatus",
method: "POST",
data: {
id: cell.row.values.id,
status: "Denied",
},
};
}
// Stryker disable all : Hard to test for query caching and side effects
const acceptMutation = useBackendMutation(cellToAxiosParamsAccept, {
onSuccess: () => {
toast.success("Request successfully accepted");
},
onError: (error) => {
const errorMessage =
error.response?.data?.message || "Failed to accept request";
toast.error(`Error: ${errorMessage}`);
},
});
const denyMutation = useBackendMutation(cellToAxiosParamsDeny, {
onSuccess: () => {
toast.success("Request successfully denied");
},
onError: (error) => {
const errorMessage =
error.response?.data?.message || "Failed to deny request";
toast.error(`Error: ${errorMessage}`);
},
});
// Stryker enable all
// Stryker disable next-line all : Callback functions are simple and invoke mutations
const acceptCallback = (cell) => {
acceptMutation.mutate(cell);
};
// Stryker disable next-line all : Callback functions are simple and invoke mutations
const denyCallback = (cell) => {
denyMutation.mutate(cell);
};
// Stryker enable next-line all
const columns = [
{
Header: "ID",
accessor: "id",
},
{
Header: "Student Email",
accessor: "studentEmail",
},
{
Header: "Status",
accessor: "status",
},
{
Header: "Request Date",
accessor: "requestDate",
},
{
Header: "Accept",
id: "Accept",
Cell: ({ cell }) =>
cell.row.values.status === "Pending" ? (
<Button
variant="success"
onClick={() => acceptCallback(cell)}
data-testid={`PendingRequestsTable-cell-row-${cell.row.index}-col-Accept-button`}
>
Accept
</Button>
) : null,
},
{
Header: "Deny",
id: "Deny",
Cell: ({ cell }) =>
cell.row.values.status === "Pending" ? (
<Button
variant="danger"
onClick={() => denyCallback(cell)}
data-testid={`PendingRequestsTable-cell-row-${cell.row.index}-col-Deny-button`}
>
Deny
</Button>
) : null,
},
];
// Stryker disable all : Filtering logic is straightforward and not worth testing each condition
const filteredRequests = requests.filter(
(request) => request.status === "Pending" || request.status === "Accepted",
);
// Stryker enable all
return (
<OurTable
data={filteredRequests}
columns={columns}
testid={"PendingRequestsTable"}
/>
);
}
|