109 lines
3.0 KiB
JavaScript
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"
|
|
);
|
|
},
|
|
});
|
|
};
|