import {useState,useEffect} from "react" import { MasterRespository } from "../../repositories/MastersRepository"; import { cacheData,getCachedData } from "../../slices/apiDataManager"; import { useSelector } from "react-redux"; export const useFeatures = () => useMasterData("masterFeatures", MasterRespository.getFeatures); export const useMasterRole = () => useMasterData("masterRole", MasterRespository.getRoles); const useMaster = (isMa) => { const selectedMaster = useSelector((store)=>store.localVariables.selectedMaster); const [data, setData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); useEffect(() => { const fetchData = async () => { if (!selectedMaster) return; setLoading(true); try { const cachedData = getCachedData(selectedMaster); if (cachedData) { setData(cachedData); } else { let response; switch (selectedMaster) { case "Application Role": response = await MasterRespository.getRoles(); response = response.data; break; case "Job Role": response = await MasterRespository.getJobRole(); response = response.data break; case "Activity": response = await MasterRespository.getActivites(); response = response.data break; case "Work Category": response = await MasterRespository.getWorkCategory(); response = response.data break; case "Contact Category": response = await MasterRespository.getContactCategory(); response = response.data break; case "Contact Tag": response = await MasterRespository.getContactTag(); response = response.data break; case "Status": response = [{description: null,featurePermission: null,id: "02dd4761-363c-49ed-8851-3d2489a3e98d",status:"status 1"},{description: null,featurePermission: null,id: "03dy9761-363c-49ed-8851-3d2489a3e98d",status:"status 2"},{description: null,featurePermission: null,id: "03dy7761-263c-49ed-8851-3d2489a3e98d",status:"Status 3"}]; break; default: response = []; } if (response) { setData(response); cacheData(selectedMaster, response); } } } catch (err) { setError("Failed to fetch data."); } finally { setLoading(false); } }; if ( selectedMaster ) { fetchData(); } }, [selectedMaster]); return { data, loading, error } }; export default useMaster; export const useActivitiesMaster = () => { const [ activities, setActivites ] = useState( [] ) const [ loading, setloading ] = useState( false ); const [ error, setError ] = useState( "" ) const fetchActivities =async () => { const cacheddata = getCachedData("ActivityMaster"); if (!cacheddata) { setloading(true); try { const response = await MasterRespository.getActivites(); setActivites(response.data); cacheData("ActivityMaster", response.data); } catch (err) { setError(err); console.log(err); } finally { setloading(false); } } else { setActivites(cacheddata); } } useEffect( () => { fetchActivities() }, [] ) return {activities,loading,error} } export const useWorkCategoriesMaster = () => { const [ categories, setCategories ] = useState( [] ) const [ categoryLoading, setloading ] = useState( false ); const [ categoryError, setError ] = useState( "" ) const fetchCategories =async () => { const cacheddata = getCachedData("Work Category"); if (!cacheddata) { setloading(true); try { const response = await MasterRespository.getWorkCategory(); setCategories(response.data); cacheData("Work Category", response.data); } catch (err) { setError(err); console.log(err); } finally { setloading(false); } } else { setCategories(cacheddata); } } useEffect( () => { fetchCategories() }, [] ) return {categories,categoryLoading,categoryError} } export const useContactCategory = () => { const [ contactCategory, setContactCategory ] = useState( [] ) const [ loading, setLoading ] = useState( false ) const [ Error, setError ] = useState() const fetchConatctCategory = async() => { const cache_Category = getCachedData( "Contact Category" ); if ( !cache_Category ) { try { let resp = await MasterRespository.getContactCategory(); setContactCategory( resp.data ); cacheData("Contact Category",resp.data) } catch ( error ) { setError(error) } } else { setContactCategory(cache_Category) } } useEffect( () => { fetchConatctCategory() }, [] ) return { contactCategory,loading,Error} } export const useContactTags = () => { const [contactTags, setContactTags] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { const fetchContactTag = async () => { const cache_Tags = getCachedData("Contact Tag"); if (!cache_Tags) { setLoading(true); try { const resp = await MasterRespository.getContactTag(); setContactTags(resp.data); cacheData("Contact Tag", resp.data); } catch (err) { setError(err); } finally { setLoading(false); } } else { setContactTags(cache_Tags); } }; fetchContactTag(); }, []); return { contactTags, loading, error }; };