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, }); };