All files / utils currentUser.js

100% Statements 49/49
100% Branches 15/15
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 645x 645x 645x 645x 169x 169x 165x 165x 168x 1x 1x 165x 165x 169x 4x 4x 4x 645x 645x 645x 645x 645x 645x 645x 645x 645x   1x 318x 318x 318x 1x 1x 1x 318x 318x 318x   1x 591x 591x 591x 591x 591x 461x 591x 591x  
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)
  );
}