All files / pages/RecommendationRequest RecommendationRequestEditPage.jsx

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

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 771x 1x 1x 1x 1x   1x 5x   5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x     5x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   5x 1x 1x   1x   5x 5x 5x 5x 5x     5x   5x 1x 1x   5x 1x 1x   4x 4x 4x 4x 4x 5x 5x 5x 5x           5x  
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import { useParams, Navigate } from "react-router";
import RecommendationRequestForm from "main/components/RestaurantRecommendation/RecommendationRequestForm";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
 
export default function RecommendationRequestEditPage({ storybook = false }) {
  const { id } = useParams();
 
  const {
    data: recommendationRequest,
    error: _error,
    status: _status,
  } = useBackend(
    // Stryker disable next-line all : don't test internal caching of React Query
    ["/api/recommendationrequests?id=" + id],
    {
      // Stryker disable next-line all : GET is default, so mutating to "" doesn't change behavior
      method: "GET",
      url: "/api/recommendationrequests",
      params: { id },
    },
  );
 
  const objectToAxiosPutParams = (rr) => ({
    url: "/api/recommendationrequests",
    method: "PUT",
    params: { id: rr.id },
    data: {
      requesterEmail: rr.requesterEmail,
      professorEmail: rr.professorEmail,
      explanation: rr.explanation,
      dateRequested: rr.dateRequested,
      dateNeeded: rr.dateNeeded,
      done: rr.done,
    },
  });
 
  const onSuccess = (rr) => {
    toast(
      `RecommendationRequest Updated - id: ${rr.id} requesterEmail: ${rr.requesterEmail}`,
    );
  };
 
  const mutation = useBackendMutation(
    objectToAxiosPutParams,
    { onSuccess },
    // Stryker disable next-line all : PUT should invalidate specific request cache
    ["/api/recommendationrequests?id=" + id],
  );
 
  const { isSuccess } = mutation;
 
  const onSubmit = async (data) => {
    mutation.mutate(data);
  };
 
  if (isSuccess && !storybook) {
    return <Navigate to="/recommendationrequest" />;
  }
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit Recommendation Request</h1>
        {recommendationRequest && (
          <RecommendationRequestForm
            submitAction={onSubmit}
            buttonLabel="Update"
            initialContents={recommendationRequest}
          />
        )}
      </div>
    </BasicLayout>
  );
}