All files / utils currentUser.jsx

100% Statements 47/47
100% Branches 22/22
100% Functions 4/4
100% Lines 47/47

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 561x 1x 1x   1x 167x 167x 167x 167x 51x 51x 43x 43x 49x 1x 1x 43x 43x 51x 8x 8x 8x 51x 167x 167x 167x   167x   1x 96x 96x 96x 1x 1x 1x 1x 96x 96x   1x 839x 839x 839x   839x   839x   839x 102x 102x   839x 839x  
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(
    "current user",
    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);
        throw e;
      }
    },
    {
      initialData: { loggedIn: false, root: null, initialData: true },
    },
  );
}
 
export function useLogout() {
  const queryClient = useQueryClient();
  const navigate = useNavigate();
  const mutation = useMutation(async () => {
    await axios.post("/logout");
    await queryClient.resetQueries("current user", { exact: true });
    navigate("/");
  });
  return mutation;
}
 
export function hasRole(currentUser, role) {
  // The following hack is because there is some bug in terms of the
  // shape of the data returned by useCurrentUser.  Is there a separate
  // data level, or not?
 
  // We will file an issue to track that down and then remove this hack
 
  if (currentUser == null) return false;
 
  if (currentUser.data?.root?.rolesList) {
    return currentUser.data.root.rolesList.includes(role);
  }
 
  return currentUser.root?.rolesList?.includes(role);
}