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 563x 563x 563x 563x 139x 139x 137x 137x 139x 1x 1x 137x 137x 139x 2x 2x 2x 563x 563x 563x 563x 563x 563x 563x 563x 563x   1x 259x 259x 259x 1x 1x 1x 259x 259x 259x   1x 596x 596x 596x 596x 596x 482x 596x 596x  
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)
  );
}