All files / publisher-admin/hooks useSendMutation.ts

100% Statements 13/13
75% Branches 3/4
100% Functions 4/4
100% Lines 13/13

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                              6x   3x 1x     2x           1x   1x       1x 1x     1x       1x 1x     3x 3x              
import { QueryClient, useMutation } from "react-query";
import { generateInviteToken } from "../utils/generateInviteToken";
 
function useSendMutation(
  packageName: string | undefined,
  publisherName: string | undefined,
  activeInviteEmail: string | undefined,
  setInviteLink: (value: string) => void,
  setInviteEmailLink: (value: string) => void,
  setShowInviteSuccess: (value: boolean) => void,
  setShowInviteError: (value: boolean) => void,
  queryClient: QueryClient,
  csrfToken: string,
  setShowSidePanel?: (value: boolean) => void
) {
  return useMutation(
    async () => {
      if (!activeInviteEmail) {
        return;
      }
 
      const { inviteLink } = await generateInviteToken(
        activeInviteEmail,
        packageName!,
        csrfToken
      );
 
      setInviteLink(inviteLink);
 
      setInviteEmailLink(
        `mailto:${activeInviteEmail}?subject=${publisherName} has invited you to collaborate on ${packageName}&body=Click this link to accept the invite: ${encodeURIComponent(inviteLink)}`
      );
 
      Eif (setShowSidePanel) {
        setShowSidePanel(false);
      }
 
      setShowInviteSuccess(true);
    },
    {
      onError: ({ context }) => {
        queryClient.setQueryData("invitesData", context?.previousInvites);
        setShowInviteError(true);
      },
      onSettled: () => {
        queryClient.invalidateQueries();
        window.scrollTo({ top: 0, left: 0, behavior: "smooth" });
      },
    }
  );
}
 
export default useSendMutation;