All files / components/Reviews ReviewsTable.js

100% Statements 24/24
100% Branches 4/4
100% Functions 9/9
100% Lines 24/24

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                                27x   27x 1x       27x               27x 2x       27x 1x         27x 1x         27x 1x     27x 1x       27x                       52x                   52x                 27x 5x 5x         27x 3x     3x         27x    
import React from "react";
import OurTable, { ButtonColumn } from "../OurTable";
import { useNavigate } from "react-router-dom";
import { useBackendMutation } from "main/utils/useBackend";
import {
  cellToAxiosParamsDelete,
  onDeleteSuccess,
  cellToAxiosParamsModerate,
  onModerateSuccess,
} from "main/utils/Reviews";
 
export default function ReviewsTable({
  reviews,
  userOptions,
  moderatorOptions,
}) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/reviews/edit/${cell.row.original.id}`);
  };
 
  // Stryker disable all
  const deleteMutation = useBackendMutation(
    cellToAxiosParamsDelete,
    { onSuccess: onDeleteSuccess },
    ["/api/reviews/userReviews"],
  );
  // Stryker restore all
 
  // Stryker disable next-line all
  const deleteCallback = async (cell) => {
    deleteMutation.mutate(cell);
  };
 
  // Stryker disable all
  const approveMutation = useBackendMutation(
    (cell) => cellToAxiosParamsModerate(cell, "APPROVED"),
    { onSuccess: onModerateSuccess },
    ["/api/reviews/all"],
  );
 
  const rejectMutation = useBackendMutation(
    (cell) => cellToAxiosParamsModerate(cell, "REJECTED"),
    { onSuccess: onModerateSuccess },
    ["/api/reviews/all"],
  );
 
  const approveCallback = async (cell) => {
    approveMutation.mutate(cell);
  };
 
  const rejectCallback = async (cell) => {
    rejectMutation.mutate(cell);
  };
  // Stryker restore all
 
  const columns = [
    {
      Header: "Item Id",
      accessor: "item.id",
    },
    {
      Header: "Item Name",
      accessor: "item.name",
    },
    {
      Header: "Score",
      accessor: "itemsStars",
      Cell: ({ value }) => "⭐".repeat(value),
    },
    {
      Header: "Comments",
      accessor: "reviewerComments",
    },
    {
      Header: "Date Served",
      accessor: "dateItemServed",
      Cell: ({ value }) => (
        <span>{new Date(value).toLocaleDateString("en-US")}</span>
      ),
    },
    {
      Header: "Dining Commons Code",
      accessor: "item.diningCommonsCode",
    },
  ];
 
  if (userOptions) {
    columns.push(ButtonColumn("Edit", "primary", editCallback, "Reviewstable"));
    columns.push(
      ButtonColumn("Delete", "danger", deleteCallback, "Reviewstable"),
    );
  }
 
  if (moderatorOptions) {
    columns.push(
      ButtonColumn("Approve", "primary", approveCallback, "Reviewstable"),
    );
    columns.push(
      ButtonColumn("Reject", "danger", rejectCallback, "Reviewstable"),
    );
  }
 
  return <OurTable data={reviews} columns={columns} testid={"Reviewstable"} />;
}