All files / pages/MenuItemReview MenuItemReviewEditPage.jsx

100% Statements 62/62
100% Branches 7/7
100% Functions 4/4
100% Lines 62/62

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   1x 7x   7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x     7x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x   7x 1x 1x   7x 7x 7x 7x 7x     7x   7x 2x 2x   7x 1x 1x   6x 6x 6x 6x 6x 7x 7x 7x 7x           7x  
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import { useParams } from "react-router";
import MenuItemReviewForm from "main/components/MenuItemReview/MenuItemReviewForm";
import { Navigate } from "react-router";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
 
export default function MenuItemReviewEditPage({ storybook = false }) {
  let { id } = useParams();
 
  const {
    data: menuItemReview,
    _error,
    _status,
  } = useBackend(
    // Stryker disable next-line all : don't test internal caching of React Query
    [`/api/menuitemreviews?id=${id}`],
    {
      // Stryker disable next-line all : GET is the default, so mutating this to "" doesn't introduce a bug
      method: "GET",
      url: `/api/menuitemreviews`,
      params: {
        id,
      },
    },
  );
 
  const objectToAxiosPutParams = (review) => ({
    url: "/api/menuitemreviews",
    method: "PUT",
    params: {
      id: review.id,
    },
    data: {
      itemId: review.itemId,
      reviewerEmail: review.reviewerEmail,
      stars: review.stars,
      dateReviewed: review.dateReviewed,
      comments: review.comments,
    },
  });
 
  const onSuccess = (updatedReview) => {
    toast(`Review Updated - id: ${updatedReview.id}`);
  };
 
  const mutation = useBackendMutation(
    objectToAxiosPutParams,
    { onSuccess },
    // Stryker disable next-line all : hard to set up test for caching
    [`/api/menuitemreviews?id=${id}`],
  );
 
  const { isSuccess } = mutation;
 
  const onSubmit = async (data) => {
    mutation.mutate(data);
  };
 
  if (isSuccess && !storybook) {
    return <Navigate to="/MenuItemReview" />;
  }
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit Review</h1>
        {menuItemReview && (
          <MenuItemReviewForm
            submitAction={onSubmit}
            buttonLabel={"Update"}
            initialContents={menuItemReview}
          />
        )}
      </div>
    </BasicLayout>
  );
}