All files / utils currentUser.js

100% Statements 49/49
100% Branches 14/14
100% Functions 4/4
100% Lines 49/49

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 531x 1x 1x   1x 572x 572x 572x 572x 144x 144x 142x 142x 144x 1x 1x 142x 142x 144x 2x 2x 2x 572x 572x 572x 572x 572x 572x 572x 572x 572x   1x 274x 274x 274x 1x 1x 1x 274x 274x 274x   1x 614x 614x 614x 614x 614x 505x 614x 614x  
import { useMutation, useQuery, useQueryClient } from "react-query";
import axios from "axios";
import { useNavigate } from "react-router";
 
export function useCurrentUser() {
  let rolesList = ["ERROR_GETTING_ROLES"];
  return useQuery(
    "/api/currentUser",
    async () => {
      try {
        const response = await axios.get("/api/currentUser");
        try {
          rolesList = response.data.roles.map((r) => r.authority);
        } catch (e) {
          console.error("Error getting roles: ", e);
        }
        response.data = { ...response.data, rolesList: rolesList };
        return { loggedIn: true, root: response.data };
      } catch (e) {
        console.error("Error invoking axios.get: ", e);
        return { loggedIn: false, root: null };
      }
    },
    {
      initialData: {
        loggedIn: false,
        root: null,
      },
    },
  );
}
 
export function useLogout() {
  const queryClient = useQueryClient();
  const navigate = useNavigate();
  const mutation = useMutation(async () => {
    await axios.post("/logout");
    await queryClient.resetQueries("/api/currentUser", { exact: true });
    navigate("/");
  });
  return mutation;
}
 
export function hasRole(currentUser, role) {
  return (
    currentUser &&
    currentUser.loggedIn &&
    currentUser.root &&
    currentUser.root.rolesList &&
    currentUser.root.rolesList.includes(role)
  );
}