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" ); }, }); };