import instance from '@/config/instance/instance'; import { UseMutationOptions, useMutation, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; interface PatchDataOptions { url: string; refetchQueries?: string[]; headers?: Record; mutationOptions?: UseMutationOptions; } const usePatchData = ({ url, refetchQueries = [], headers, mutationOptions }: PatchDataOptions) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: async (variables: TVariables): Promise => { const response = await instance.patch({ url, data: variables, headers }); if (response?.statusCode === 200) { return response.data as TData; } const errorMessage = response?.message || 'Failed to update data'; const error = new Error(errorMessage); if (response?.statusCode === 400) { throw Object.assign(error, { statusCode: 400 }); } if (response?.statusCode === 401) { throw Object.assign(error, { statusCode: 401, message: 'Unauthorized' }); } throw error; }, onSuccess: () => { refetchQueries.forEach((query) => queryClient.invalidateQueries({ queryKey: [query] }) ); }, onError: (error: Error & { statusCode?: number }) => { toast.error(error.message || 'Failed to update data'); }, ...mutationOptions }); }; export default usePatchData;