102 lines
2.6 KiB
JavaScript
102 lines
2.6 KiB
JavaScript
import {useState,useEffect, useCallback} from "react";
|
|
import AuthRepository from "../repositories/AuthRepository";
|
|
import {cacheData, cacheProfileData, getCachedData, getCachedProfileData} from "../slices/apiDataManager";
|
|
import {useSelector} from "react-redux";
|
|
import eventBus from "../services/eventBus";
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
|
|
let hasFetched = false;
|
|
let hasReceived = false;
|
|
|
|
// export const useProfile = () => {
|
|
// const loggedUser = useSelector( ( store ) => store.globalVariables.loginUser );
|
|
// const [profile, setProfile] = useState(null);
|
|
// const [loading, setLoading] = useState(false);
|
|
// const [error, setError] = useState("");
|
|
|
|
// const fetchData = async () => {
|
|
// try {
|
|
// setLoading(true);
|
|
// let response = await AuthRepository.profile();
|
|
// setProfile(response.data);
|
|
// cacheProfileData(response.data);
|
|
// } catch (error) {
|
|
// setError("Failed to fetch data.");
|
|
// } finally {
|
|
// setLoading(false);
|
|
// }
|
|
// };
|
|
|
|
// const validation = () => {
|
|
// if (!hasFetched) {
|
|
// hasFetched = true;
|
|
// if (!loggedUser) {
|
|
// fetchData();
|
|
// } else {
|
|
// setProfile(loggedUser);
|
|
// }
|
|
// }
|
|
|
|
// setProfile(loggedUser);
|
|
// }
|
|
|
|
// useEffect(() => {
|
|
// validation();
|
|
// }, [loggedUser]);
|
|
|
|
// const handler = useCallback(
|
|
// (data) => {
|
|
// if(!getCachedData("hasReceived")){
|
|
// cacheData("hasReceived", true);
|
|
// hasFetched = false;
|
|
// validation();
|
|
// }
|
|
// },[]
|
|
// );
|
|
|
|
// useEffect(() => {
|
|
// eventBus.on("assign_project_one", handler);
|
|
// return () => eventBus.off("assign_project_one", handler);
|
|
// }, [handler]);
|
|
|
|
// return { profile, loading, error };
|
|
// };
|
|
|
|
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,
|
|
};
|
|
};
|