import { useMutation, useQueryClient } from "@tanstack/react-query"; import axios, { type Method } from "axios"; type MutationDataOptions = { url: string; method?: Method; onSuccess?: (data: TOutput) => void; onError?: (error: any) => void; invalidate?: string[][]; }; export function useMutationData({ url, method = "POST", onSuccess, onError, invalidate = [], }: MutationDataOptions) { const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ data, config }) => { const isFormData = data instanceof FormData; const response = await axios.request({ url, method, data, headers: { ...(isFormData ? {} : { "Content-Type": "application/json" }), }, ...config, }); return response.data; }, onSuccess: (data) => { invalidate.forEach((key) => queryClient.invalidateQueries({ queryKey: key }) ); onSuccess?.(data); }, onError, }); }