63 lines
1.6 KiB
JavaScript
63 lines
1.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";
|
|
|
|
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 };
|
|
};
|