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 665x 665x 665x 665x 174x 174x 171x 171x 174x 1x 1x 171x 171x 174x 3x 3x 3x 665x 665x 665x 665x 665x 665x 665x 665x 665x   1x 327x 327x 327x 1x 1x 1x 327x 327x 327x   1x 690x 690x 690x 690x 690x 536x 690x 690x  
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)
  );
}