All files / components/MenuItemReview MenuItemReviewTable.jsx

100% Statements 53/53
100% Branches 13/13
100% Functions 5/5
100% Lines 53/53

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 661x 1x 1x 1x 1x 1x 1x   1x 10x 10x 10x 10x 10x 10x 10x   1x 3x 3x 3x   1x 16x 16x 16x 16x 16x   16x 1x 1x   16x 16x 16x 16x 16x   16x   16x 2x 2x   16x 16x 16x 16x 16x 16x 16x 16x   16x 8x 8x 8x   8x   16x 16x   16x  
/* eslint-disable react-refresh/only-export-components */
import React from "react";
import OurTable, { ButtonColumn } from "main/components/OurTable";
import { useBackendMutation } from "main/utils/useBackend";
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/useCurrentUser";
import { toast } from "react-toastify";
 
export const buildDeleteParams = (cell) => {
  const id = cell?.row?.values?.id ?? cell?.row?.original?.id;
  return {
    url: "/api/menuitemreview",
    method: "DELETE",
    params: { id },
  };
};
 
export const onDeleteSuccess = (_message) => {
  void _message;
  toast.success("MenuItemReview deleted successfully");
};
 
export default function MenuItemReviewTable({
  menuItemReviews,
  currentUser,
  testIdPrefix = "MenuItemReviewTable",
}) {
  const navigate = useNavigate();
 
  const editCallback = (cell) => {
    navigate(`/menuitemreview/edit/${cell.row.original.id}`);
  };
 
  // Stryker disable all : hard to test for query caching
  const deleteMutation = useBackendMutation(
    buildDeleteParams,
    { onSuccess: onDeleteSuccess },
    ["/api/menuitemreview/all"],
  );
  // Stryker restore all
 
  const deleteCallback = async (cell) => {
    await deleteMutation.mutateAsync(cell);
  };
 
  const columns = [
    { header: "id", accessorKey: "id" },
    { header: "Item ID", accessorKey: "itemId" },
    { header: "Reviewer Email", accessorKey: "reviewerEmail" },
    { header: "Stars", accessorKey: "stars" },
    { header: "Date Reviewed", accessorKey: "dateReviewed" },
    { header: "Comments", accessorKey: "comments" },
  ];
 
  if (hasRole(currentUser, "ROLE_ADMIN")) {
    columns.push(ButtonColumn("Edit", "primary", editCallback, testIdPrefix));
    columns.push(
      ButtonColumn("Delete", "danger", deleteCallback, testIdPrefix),
    );
  }
 
  return (
    <OurTable data={menuItemReviews} columns={columns} testid={testIdPrefix} />
  );
}