All files / utils currentUser.js

100% Statements 46/46
100% Branches 20/20
100% Functions 5/5
100% Lines 46/46

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 511x 1x 1x   1x 222x 222x 222x 222x 84x 84x 62x 62x 71x 1x 1x 62x 62x 82x 20x 1x 20x 19x 19x 19x 20x 222x 222x 222x 222x 222x   1x 142x 142x 142x 142x 1x 1x 1x 142x 142x 142x 142x   1x 2052x   2052x 2052x  
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import axios from "axios";
import { useNavigate } from "react-router";
 
export function useCurrentUser() {
  let rolesList = ["ERROR_GETTING_ROLES"];
  const queryResults = useQuery({
    queryKey: ["current user"],
    queryFn: 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) {
        if (e.status === 403) {
          return { loggedIn: false, root: {} };
        } else {
          console.error("Error invoking axios.get: ", e);
          throw e;
        }
      }
    },
    initialData: { loggedIn: false, root: null, initialData: true },
  });
  return queryResults.data;
}
 
export function useLogout() {
  const queryClient = useQueryClient();
  const navigate = useNavigate();
  const mutation = useMutation({
    mutationFn: async () => {
      await axios.post("/logout");
      await queryClient.resetQueries({ queryKey: ["current user"] });
      navigate("/");
    },
  });
  return mutation;
}
 
export function hasRole(currentUser, role) {
  if (currentUser == null) return false;
 
  return currentUser.root?.rolesList?.includes(role);
}