Code of my snackbar wrapper below
export interface SnackbarOptions<TData = unknown, TVariables = unknown> {
successSnackbarMessage?: (data: TData, variables: TVariables) => string;
showSnackbarOnError?: boolean;
errorSnackbarMessage?: string;
}
const defaultSnackbarOptions: SnackbarOptions = {
showSnackbarOnError: true
};
const useSnackbarMutation = <TData = unknown, TError = unknown, TVariables = void>(
mutationKey: MutationKey,
mutationFn: MutationFunction<TData, TVariables>,
options?: Omit<UseMutationOptions<TData, TError, TVariables, SnackbarOptions<TData, TVariables>>, "mutationFn">,
snackbarOptions: SnackbarOptions<TData, TVariables> = {}
): UseMutationResult<TData, TError, TVariables, SnackbarOptions<TData, TVariables>> => {
const { enqueueSnackbar } = useSnackbar();
const { successSnackbarMessage, showSnackbarOnError, errorSnackbarMessage } = {
...defaultSnackbarOptions,
...snackbarOptions
};
return useMutation<TData, TError, TVariables, SnackbarOptions<TData, TVariables>>(mutationKey, mutationFn, {
...options,
meta: {
...defaultSnackbarOptions,
...snackbarOptions
},
onMutate: () => {
return {
...defaultSnackbarOptions,
...snackbarOptions
};
},
onSuccess: (data, variables, context) => {
if (successSnackbarMessage) {
}
if (options?.onSuccess) {
options.onSuccess(data, variables, context);
}
},
onError: (error, variables, context) => {
if (showSnackbarOnError) {
}
}
});
};