import { useMutation, useQueryClient } from "@tanstack/react-query" import axios, { type Method } from "axios" type MutationDataOptions = { url: string method?: Method // POST, PUT, PATCH, DELETE onSuccess?: (data: TOutput) => void onError?: (error: any) => void config?: { onUploadProgress?: (e: ProgressEvent) => void } invalidate?: string[][] // List of queryKeys to invalidate } export function useMutationData({ url, method = "POST", onSuccess, onError, invalidate = [], }: MutationDataOptions) { const queryClient = useQueryClient() return useMutation({ mutationFn: async (data: TInput) => { const response = await axios.request({ url, method, data, }) return response.data }, onSuccess: (data) => { invalidate.forEach((key) => queryClient.invalidateQueries({ queryKey: key }) ) onSuccess?.(data) }, onError, }) }