32 lines
970 B
TypeScript
32 lines
970 B
TypeScript
import { AxiosError } from "axios";
|
|
import { useMutation, type UseMutationOptions } from "@tanstack/react-query";
|
|
import { useAlertStore } from "./use-alert-store";
|
|
|
|
export const useMutationWrapper = <
|
|
TData = unknown,
|
|
TError = unknown,
|
|
TVariables = void,
|
|
TContext = unknown,
|
|
>(
|
|
mutationOptions: UseMutationOptions<TData, TError, TVariables, TContext>,
|
|
) => {
|
|
const alert = useAlertStore((state) => state.setMessage);
|
|
return useMutation({
|
|
...mutationOptions,
|
|
onError: (error) => {
|
|
let errorMessage = "";
|
|
|
|
if (error instanceof AxiosError) {
|
|
if (error.response?.status)
|
|
errorMessage += `status: ${error.response.status}\n`;
|
|
if (error.response?.data?.message)
|
|
errorMessage += `${error.response.data.message}\n`;
|
|
if (error.response?.data?.errors[0]?.message)
|
|
errorMessage += `${error.response.data.errors[0].message}\n`;
|
|
}
|
|
|
|
alert(`[Error] ${errorMessage}`);
|
|
},
|
|
});
|
|
};
|