marco.pms.web/src/hooks/useServiceProject.jsx

150 lines
4.2 KiB
JavaScript

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { ServiceProjectRepository } from "../repositories/ServiceProjectRepository";
import showToast from "../services/toastService";
//#region Service Project
export const useServiceProjects = (pageSize, pageNumber) => {
return useQuery({
queryKey: ["serviceProjects", pageSize, pageNumber],
queryFn: async () => {
const response = await ServiceProjectRepository.GetServiceProjects(
pageSize,
pageNumber
);
return response.data;
},
});
};
export const useServiceProject = (projectId) => {
return useQuery({
queryKey: ["serviceProject", projectId],
queryFn: async () => {
const response = await ServiceProjectRepository.GetServiceProject(
projectId
);
return response.data;
},
enabled: !!projectId,
});
};
export const useCreateServiceProject = (onSuccessCallback) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (playload) =>
await ServiceProjectRepository.CreateServiceProject(playload),
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: ["serviceProjects"] });
if (onSuccessCallback) onSuccessCallback();
showToast("Project created successfully", "success");
},
onError: (error) => {
showToast(
error?.response?.data?.message ||
error.message ||
"Failed to delete task",
"error"
);
},
});
};
export const useUpdateServiceProject = (onSuccessCallback) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({ id, payload }) => {
return await ServiceProjectRepository.UpdateServiceProject(id, payload);
},
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: ["serviceProjects"] });
queryClient.invalidateQueries({
queryKey: ["serviceProject", variables.id],
});
if (onSuccessCallback) onSuccessCallback();
showToast("Project updated successfully", "success");
},
onError: (error) => {
showToast(
error?.response?.data?.message ||
error.message ||
"Failed to update project",
"error"
);
},
});
};
export const useActiveInActiveServiceProject = (onSuccessCallback) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (id, status) => {
return await ServiceProjectRepository.DeleteServiceProject(id, status);
},
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: ["serviceProjects"] });
if (onSuccessCallback) onSuccessCallback();
showToast(
`Project ${status ? "restored" : "deleted"} successfully`,
"success"
);
},
onError: (error) => {
showToast(
error?.response?.data?.message ||
error.message ||
"Failed to update project",
"error"
);
},
});
};
//#endregion
//#region Service Jobs
export const useServiceProjectJobs=(pageSize,pageNumber,isActive=true,project)=>{
return useQuery({
queryKey:["serviceProjectJobs",pageSize,pageNumber,isActive,project],
queryFn:async() =>{
const resp = await ServiceProjectRepository.GetJobList(pageSize,pageNumber,isActive,project);
return resp.data;
}
})
}
export const useServiceProjectJobDetails = (job)=>{
return useQuery({
queryKey:['service-job',job],
queryFn:async() =>{
const resp = await ServiceProjectRepository.GetJobDetails(job);
return resp.data;
},
enabled:!!job
})
}
export const useCreateServiceProjectJob = (onSuccessCallback) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (payload) => {
return await ServiceProjectRepository.CreateJob(payload);
},
onSuccess: (data, variables) => {
queryClient.invalidateQueries({ queryKey: [""] });
if (onSuccessCallback) onSuccessCallback();
showToast("Job Created successfully", "success");
},
onError: (error) => {
showToast(
error?.response?.data?.message ||
error.message ||
"Failed to update project",
"error"
);
},
});
};
//#endregion