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

109 lines
3.0 KiB
JavaScript

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import ExpenseRepository from "../repositories/ExpsenseRepository";
import showToast from "../services/toastService";
import { queryClient } from "../layouts/AuthLayout";
// -------------------Query------------------------------------------------------
export const useExpenseList = (pageSize, pageNumber, filter) => {
return useQuery({
queryKey: ["Expenses", pageNumber, pageSize, filter],
queryFn: async () =>
await ExpenseRepository.GetExpenseList(pageSize, pageNumber, filter).then(
(res) => res.data
),
keepPreviousData: true,
});
};
export const useExpense = (ExpenseId) => {
console.log("ExpenseId:", ExpenseId, "Enabled:", ExpenseId !== undefined && ExpenseId !== null);
return useQuery({
queryKey: ["Expense", ExpenseId],
queryFn: async () => await ExpenseRepository.GetExpenseDetails(ExpenseId).then(
(res) => res.data
),
enabled: !!ExpenseId,
});
};
// ---------------------------Mutation---------------------------------------------
export const useCreateExpnse = (onSuccessCallBack) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (payload) => {
await ExpenseRepository.CreateExpense(payload);
},
onSuccess: (_, variables) => {
showToast("Expense Created Successfully", "success");
queryClient.invalidateQueries({ queryKey: ["expenses"] });
if (onSuccessCallBack) onSuccessCallBack();
},
onError: (error) => {
showToast(
error.message || "Something went wrong please try again !",
"error"
);
},
});
};
export const useUpdateExepse =()=>{
const queryClient = useQueryClient();
return useMutation({
mutationFn:async (id,payload)=>{
const response = await ExpenseRepository.UpdateExpense(id,payload)
},
onSuccess:(updatedExpense,variables)=>{
// updation list and details
}
})
}
export const useActionOnExpense = (onSuccessCallBack) => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (payload) => {
const response = await ExpenseRepository.ActionOnExpense(payload);
return response.data;
},
onSuccess: (updatedExpense, variables) => {
showToast("Expense updated successfully", "success");
queryClient.setQueriesData(
{
queryKey: ["expenses"],
exact: false,
},
(oldData) => {
if (!oldData) return oldData;
return {
...oldData,
data: oldData.data.map((item) =>
item.id === updatedExpense.id
? {
...item,
nextStatus: updatedExpense.nextStatus,
status: updatedExpense.status,
}
: item
),
};
}
);
if (onSuccessCallBack) onSuccessCallBack();
},
onError: (error) => {
showToast(
error.message || "Something went wrong, please try again!",
"error"
);
},
});
};