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

269 lines
6.8 KiB
JavaScript

import { useEffect, useState } from "react";
import { cacheData, getCachedData } from "../slices/apiDataManager";
import { RolesRepository } from "../repositories/MastersRepository";
import EmployeeRepository from "../repositories/EmployeeRepository";
import ProjectRepository from "../repositories/ProjectRepository";
export const useAllEmployees = () =>
{
const [employeesList, setEmployeeList] = useState([]);
const [ loading, setLoading ] = useState( false )
const [ error, setError ] = useState()
const fetchData = async () =>
{
try
{
let EmployeeList_cached = getCachedData( "AllEmployees" )
if ( ! EmployeeList_cached )
{
setLoading(true)
const response = await EmployeeRepository.getAllEmployeeList();
cacheData( "AllEmployees", response.data )
setEmployeeList(response.data)
} else
{
setEmployeeList( EmployeeList_cached )
setLoading(false)
}
} catch ( error )
{
console.error(error);
setError( "Failed to fetch data." );
setLoading(false)
}
}
useEffect( () =>
{
fetchData()
}, [] )
return {employeesList,loading,error}
}
export const useEmployees =(selectedProject)=>{
const [employees, setEmployeeList] = useState([]);
const[loading,setLoading] = useState(true)
const [projects, setProjects] = useState([]);
const fetchData = async (projectid) => {
try {
let EmployeeByProject_Cache = getCachedData("employeeListByProject")
if(!EmployeeByProject_Cache || !EmployeeByProject_Cache.projectId === projectid) {
EmployeeRepository.getEmployeeListByproject(projectid)
.then((response) => {
setEmployeeList(response);
cacheData("employeeListByProject",{data:response,projectId:projectid});
})
.catch((error) => {
setError("Failed to fetch data.");
});
}else{
setEmployeeList(EmployeeByProject_Cache.data)
}
setLoading(false)
} catch (err) {
setError("Failed to fetch data.");
setLoading(false)
}
};
useEffect(()=>{
if(selectedProject){
fetchData(selectedProject);
}
},[selectedProject])
return {employees,loading,projects,reCallAllEmployee}
}
export const useEmployeeRoles = (employeeId)=>{
const [loading,setLoading] = useState(true)
const[error, setError] =useState()
const [employeeRoles,setEmployeeRoles] = useState([])
const fetchData = async (employeeid) => {
try {
RolesRepository.getEmployeeRoles(employeeid)
.then((response) => {
setEmployeeRoles(response);
cacheData("employeelist", response);
})
.catch((error) => {
setError("Failed to fetch data.");
});
} catch (err) {
setError("Failed to fetch data.");
} finally {
setLoading(false);
}
};
useEffect( () =>
{
if ( employeeId )
{
fetchData(employeeId);
}
},[employeeId])
return {employeeRoles,loading,error}
}
export const useEmployeesByProject=(projectId)=>{
const [loading,setLoading] = useState(false)
const[error, setError] =useState()
const [employees,setEmployees] = useState([])
const fetchData = async () => {
const Employees_cache = getCachedData("employeeListByProject");
if(!Employees_cache || Employees_cache.projectId !== projectId){
setEmployees(true)
ProjectRepository.getEmployeesByProject(projectId)
.then( ( response ) =>
{
setEmployees(response.data);
cacheData("employeeListByProject", { data: response.data, projectId })
setLoading(false)
})
.catch((error) => {
setError("Failed to fetch data.");
setLoading(false)
});
}else{
setEmployees(Employees_cache.data)
setLoading(false)
}
};
useEffect(()=>{
fetchData(projectId);
},[projectId])
return {employees,loading,error,recallProjectEmplloyee:fetchData}
}
export const useEmployeesAllOrByProjectId = (projectId) => {
const [employees, setEmployees] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const fetchData = async () =>
{
if (projectId) {
const Employees_cache = getCachedData("employeeListByProject");
if (!Employees_cache || Employees_cache.projectId !== projectId) {
setLoading(true);
setError(null);
try {
const response = await ProjectRepository.getEmployeesByProject(projectId);
setEmployees(response.data);
cacheData("employeeListByProject", { data: response.data, projectId });
setLoading(false);
} catch (err) {
setError("Failed to fetch data.");
setLoading(false);
}
} else {
setEmployees(Employees_cache.data);
setLoading(false);
}
} else {
const employeesCache = getCachedData("allEmployeeList");
if (!employeesCache) {
setLoading(true);
setError(null);
try {
const response = await EmployeeRepository.getAllEmployeeList();
setEmployees(response.data);
cacheData("allEmployeeList", { data: response.data });
setLoading(false);
} catch (err) {
setError("Failed to fetch data.");
setLoading(false);
}
} else {
setEmployees(employeesCache.data);
setLoading(false);
}
}
};
useEffect(() => {
fetchData(); // Fetch data when the component mounts or projectId changes
}, [projectId]); // Re-fetch when projectId changes
return {
employees,
loading,
error,
recallEmployeeData: fetchData,
};
};
export const useEmployeeProfile =(employeeId)=>{
const [loading,setLoading] = useState(true)
const[error, setError] =useState()
const [employee,setEmployees] = useState()
const fetchData = async () => {
const Employee_cache = getCachedData("employeeProfile");
if(!Employee_cache || Employee_cache.employeeId !== employeeId){
EmployeeRepository.getEmployeeProfile(employeeId)
.then((response) => {
setEmployees(response.data);
cacheData("employeeProfile", { data: response.data, employeeId })
setLoading(false)
})
.catch((error) => {
setError("Failed to fetch data.");
setLoading(false)
});
}else{
setEmployees(Employee_cache.data)
setLoading(false)
}
};
useEffect(()=>{
if(employeeId){
fetchData(employeeId);
}
},[employeeId])
return {employee,loading,error}
}