marco.pms.web/src/hooks/useProfile.js

79 lines
2.0 KiB
JavaScript

import { useState, useEffect, useCallback } from "react";
import AuthRepository from "../repositories/AuthRepository";
import {
cacheData,
cacheProfileData,
getCachedData,
getCachedProfileData,
useSelectedProject,
} from "../slices/apiDataManager";
import { useSelector } from "react-redux";
import eventBus from "../services/eventBus";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import ProjectRepository from "../repositories/ProjectRepository";
let hasFetched = false;
let hasReceived = false;
export const useProfile = () => {
const loggedUser = useSelector((store) => store.globalVariables.loginUser);
const queryClient = useQueryClient();
const {
data: profile,
error,
isLoading,
refetch,
} = useQuery({
queryKey: ["profile"],
queryFn: async () => {
const response = await AuthRepository.profile();
cacheProfileData(response.data);
return response.data;
},
initialData: loggedUser || undefined,
enabled: !loggedUser,
staleTime: 10 * 60 * 1000,
});
const handler = useCallback(() => {
queryClient.invalidateQueries({ queryKey: ["profile"] });
}, [queryClient]);
useEffect(() => {
eventBus.on("assign_project_one", handler);
return () => eventBus.off("assign_project_one", handler);
}, [handler]);
return {
profile,
loading: isLoading,
error,
refetch,
};
};
export const useSidBarMenu = () => {
const userLogged = useSelector((store) => store.globalVariables.loginUser);
return useQuery({
queryKey: ["AppMenu"],
queryFn: async () => await AuthRepository.appmenu(),
enabled: !!userLogged,
});
};
export const useAllProjectLevelPermissions = (projectId) => {
return useQuery({
queryKey: ["AllProjectLevelPermission", projectId],
queryFn: async () => {
const resp = await ProjectRepository.getAllProjectLevelPermission(
projectId
);
return resp.data;
},
enabled: !!projectId,
});
};