All files / pages/UCSBOrganization UCSBOrganizationEditPage.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 79 801x 1x 1x 1x 1x 1x   1x 4x   4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x     4x 4x 1x 1x 1x 1x 1x 1x 1x 1x 1x   4x 4x 1x 1x   1x   4x 4x 4x 4x 4x 4x     4x   4x 4x 1x 1x   4x 4x 1x 1x   3x 3x 3x 3x 3x 4x 4x 4x 4x           4x  
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import { useParams } from "react-router";
import UCSBOrganizationForm from "main/components/UCSBOrganization/UCSBOrganizationForm";
import { Navigate } from "react-router";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
 
export default function UCSBOrganizationEditPage({ storybook = false }) {
  let { orgCode } = useParams();
 
  const {
    data: organization,
    _error,
    _status,
  } = useBackend(
    // Stryker disable next-line all : don't test internal caching of React Query
    [`/api/ucsborganization?orgCode=${orgCode}`],
    {
      // Stryker disable next-line all : GET is the default, so mutating this to "" doesn't introduce a bug
      method: "GET",
      url: "/api/ucsborganization",
      params: { orgCode },
    },
  );
 
  // Convert form data to PUT request
  const objectToAxiosPutParams = (organization) => ({
    url: "/api/ucsborganization",
    method: "PUT",
    params: { orgCode: organization.orgCode },
    data: {
      orgTranslationShort: organization.orgTranslationShort,
      orgTranslation: organization.orgTranslation,
      inactive: organization.inactive,
    },
  });
 
  // Toast success message
  const onSuccess = (organization) => {
    toast(
      `UCSB Organization Updated - orgCode: ${organization.orgCode} orgTranslationShort: ${organization.orgTranslationShort}`,
    );
  };
 
  // Mutation setup
  const mutation = useBackendMutation(
    objectToAxiosPutParams,
    { onSuccess },
    // Stryker disable next-line all : hard to test caching
    [`/api/ucsborganization?orgCode=${orgCode}`],
  );
 
  const { isSuccess } = mutation;
 
  // Handle submit
  const onSubmit = async (data) => {
    mutation.mutate(data);
  };
 
  // Redirect back after update (except in Storybook)
  if (isSuccess && !storybook) {
    return <Navigate to="/ucsborganization" />;
  }
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit UCSB Organization</h1>
        {organization && (
          <UCSBOrganizationForm
            submitAction={onSubmit}
            buttonLabel="Update"
            initialContents={organization}
          />
        )}
      </div>
    </BasicLayout>
  );
}