261 lines
7.0 KiB
JavaScript
261 lines
7.0 KiB
JavaScript
import { useEffect, useState } from "react";
|
|
import { cacheData, getCachedData } from "../slices/apiDataManager";
|
|
import AttendanceRepository from "../repositories/AttendanceRepository";
|
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
import showToast from "../services/toastService";
|
|
import { useSelector } from "react-redux";
|
|
import { store } from "../store/store";
|
|
|
|
// export const useAttendace =(projectId)=>{
|
|
|
|
// const [attendance, setAttendance] = useState([]);
|
|
// const[loading,setLoading] = useState(true)
|
|
// const [error, setError] = useState(null);
|
|
|
|
// const fetchData = () => {
|
|
// const Attendance_cache = getCachedData("Attendance");
|
|
// if(!Attendance_cache || Attendance_cache.projectId !== projectId){
|
|
|
|
// setLoading(true);
|
|
// AttendanceRepository.getAttendance(projectId)
|
|
// .then((response) => {
|
|
// setAttendance(response.data);
|
|
// cacheData( "Attendance", {data: response.data, projectId} )
|
|
// setLoading(false)
|
|
// })
|
|
// .catch((error) => {
|
|
// setLoading(false)
|
|
// setError("Failed to fetch data.");
|
|
// })
|
|
// } else {
|
|
// setAttendance(Attendance_cache.data);
|
|
// setLoading(false)
|
|
// }
|
|
// };
|
|
|
|
|
|
// useEffect(()=>{
|
|
// if ( projectId && projectId != 1 )
|
|
// {
|
|
// fetchData(projectId);
|
|
// }
|
|
// },[projectId])
|
|
|
|
// return {attendance,loading,error,recall:fetchData}
|
|
// }
|
|
|
|
// export const useEmployeeAttendacesLog = (id) => {
|
|
// const [logs, setLogs] = useState([]);
|
|
// const [loading, setLoading] = useState(false);
|
|
// const [error, setError] = useState(null);
|
|
|
|
|
|
// const fetchData = () => {
|
|
// const AttendanceLog_cache = getCachedData("AttendanceLogs");
|
|
// if(!AttendanceLog_cache || AttendanceLog_cache.id !== id ){
|
|
// setLoading(true)
|
|
// AttendanceRepository.getAttendanceLogs(id).then((response)=>{
|
|
// setLogs(response.data)
|
|
// cacheData("AttendanceLogs", { data: response.data, id })
|
|
// setLoading(false)
|
|
// }).catch((error)=>{
|
|
// setError("Failed to fetch data.");
|
|
// setLoading(false);
|
|
// })
|
|
// }else{
|
|
|
|
// setLogs(AttendanceLog_cache.data);
|
|
// }
|
|
// };
|
|
|
|
// useEffect(() => {
|
|
// if (id) {
|
|
// fetchData();
|
|
// }
|
|
|
|
// }, [id]);
|
|
|
|
// return { logs, loading, error };
|
|
// };
|
|
|
|
// export const useRegularizationRequests = ( projectId ) =>
|
|
// {
|
|
// const [regularizes, setregularizes] = useState([]);
|
|
// const [loading, setLoading] = useState(false);
|
|
// const [error, setError] = useState(null);
|
|
|
|
|
|
// const fetchData = () => {
|
|
// const regularizedList_cache = getCachedData("regularizedList");
|
|
// if(!regularizedList_cache || regularizedList_cache.projectId !== projectId ){
|
|
// setLoading(true)
|
|
// AttendanceRepository.getRegularizeList(projectId).then((response)=>{
|
|
// setregularizes( response.data )
|
|
// cacheData("regularizedList", { data: response.data, projectId })
|
|
// setLoading(false)
|
|
// }).catch((error)=>{
|
|
// setError("Failed to fetch data.");
|
|
// setLoading(false);
|
|
// })
|
|
// }else{
|
|
|
|
// setregularizes(regularizedList_cache.data);
|
|
// }
|
|
// };
|
|
|
|
// useEffect(() => {
|
|
// if (projectId) {
|
|
// fetchData();
|
|
// }
|
|
|
|
// }, [ projectId ] );
|
|
// return {regularizes,loading,error,refetch:fetchData}
|
|
// }
|
|
|
|
|
|
// ----------------------------Query-----------------------------
|
|
|
|
|
|
export const useAttendance = (projectId) => {
|
|
const {
|
|
data: attendance = [],
|
|
isLoading: loading,
|
|
error,
|
|
refetch: recall,
|
|
} = useQuery({
|
|
queryKey: ["attendance", projectId],
|
|
queryFn: async () => {
|
|
const response = await AttendanceRepository.getAttendance(projectId);
|
|
return response.data;
|
|
},
|
|
enabled: !!projectId,
|
|
onError: (error) => {
|
|
showToast(error.message || "Error while fetching Attendance", "error");
|
|
},
|
|
});
|
|
|
|
return {
|
|
attendance,
|
|
loading,
|
|
error,
|
|
recall,
|
|
};
|
|
};
|
|
|
|
export const useAttendancesLogs = (projectId, fromDate, toDate) => {
|
|
const enabled = !!projectId && !!fromDate && !!toDate;
|
|
return useQuery({
|
|
queryKey: ["attendanceLogs", projectId, fromDate, toDate],
|
|
queryFn: async () => {
|
|
const res = await AttendanceRepository.getAttendanceFilteredByDate(
|
|
projectId,
|
|
fromDate,
|
|
toDate
|
|
);
|
|
return res.data;
|
|
},
|
|
enabled,
|
|
});
|
|
};
|
|
|
|
|
|
|
|
export const useEmployeeAttendacesLog = (id) => {
|
|
const {
|
|
data: logs = [],
|
|
isLoading: loading,
|
|
error,
|
|
refetch: recall,
|
|
} = useQuery({
|
|
queryKey: ["employeeAttendanceLogs", id],
|
|
queryFn: async () => {
|
|
const response = await AttendanceRepository.getAttendanceLogs(id);
|
|
return response.data;
|
|
},
|
|
enabled: !!id,
|
|
onError: (error) => {
|
|
showToast(error.message || "Error while fetching Attendance Logs", "error");
|
|
},
|
|
});
|
|
|
|
return {
|
|
logs,
|
|
loading,
|
|
error,
|
|
recall,
|
|
};
|
|
};
|
|
|
|
export const useAttendanceByEmployee = (employeeId, fromDate, toDate) => {
|
|
const enabled = !!employeeId && !!fromDate && !!toDate;
|
|
|
|
return useQuery({
|
|
queryKey: ["employeeAttendance", employeeId, fromDate, toDate],
|
|
queryFn: async () => {
|
|
const res = await AttendanceRepository.getAttendanceByEmployee(employeeId, fromDate, toDate);
|
|
return res.data;
|
|
},
|
|
enabled,
|
|
});
|
|
};
|
|
|
|
export const useRegularizationRequests = (projectId) => {
|
|
const {
|
|
data: regularizes = [],
|
|
isLoading: loading,
|
|
error,
|
|
refetch,
|
|
} = useQuery({
|
|
queryKey: ["regularizedList", projectId],
|
|
queryFn: async () => {
|
|
const response = await AttendanceRepository.getRegularizeList(projectId);
|
|
return response.data;
|
|
},
|
|
enabled: !!projectId,
|
|
onError: (error) => {
|
|
showToast(error.message || "Error while fetching Regularization Requests", "error");
|
|
},
|
|
});
|
|
|
|
return {
|
|
regularizes,
|
|
loading,
|
|
error,
|
|
refetch,
|
|
};
|
|
};
|
|
|
|
|
|
// -------------------Mutation--------------------------------------
|
|
|
|
export const useMarkAttendance = () => {
|
|
const queryClient = useQueryClient();
|
|
const selectedProject = useSelector((store)=>store.localVariables.projectId)
|
|
|
|
return useMutation({
|
|
mutationFn: async ({payload,forWhichTab}) => {
|
|
const res = await AttendanceRepository.markAttendance(payload);
|
|
return res.data;
|
|
},
|
|
|
|
onSuccess: (data,variables) => {
|
|
if(variables.forWhichTab == 1){
|
|
queryClient.setQueryData(["attendance",selectedProject], (oldData) => {
|
|
if (!oldData) return oldData;
|
|
return oldData.map((emp) =>
|
|
emp.employeeId === data.employeeId ? { ...emp, ...data } : emp
|
|
);
|
|
});
|
|
}else{
|
|
queryClient.invalidateQueries({
|
|
queryKey: ["attendanceLogs"],
|
|
});
|
|
}
|
|
if(variables.forWhichTab !== 3) showToast("Attendance marked successfully", "success");
|
|
},
|
|
onError: (error) => {
|
|
showToast(error.message || "Failed to mark attendance", "error");
|
|
},
|
|
});
|
|
};
|