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