theme update latest project
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query';
|
||||
import apiClient from '../../api/client';
|
||||
import {
|
||||
normalizeApiError,
|
||||
resolveMutationRequest,
|
||||
} from './apiDebug';
|
||||
|
||||
export const useCreate = <T, R>(
|
||||
resource: string,
|
||||
options?: UseMutationOptions<R, Error, T>
|
||||
) => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation<R, Error, T>({
|
||||
...options,
|
||||
mutationFn: async (payload: T) => {
|
||||
const { url, body } = resolveMutationRequest(resource, payload);
|
||||
|
||||
try {
|
||||
const { data } = await apiClient.post<R>(url, body);
|
||||
return data;
|
||||
} catch (error) {
|
||||
throw normalizeApiError(error);
|
||||
}
|
||||
},
|
||||
onSuccess: (data, variables, onMutateResult, context) => {
|
||||
const { url } = resolveMutationRequest(resource, variables);
|
||||
queryClient.invalidateQueries({ queryKey: [url] });
|
||||
if (resource && resource !== url) {
|
||||
queryClient.invalidateQueries({ queryKey: [resource] });
|
||||
}
|
||||
options?.onSuccess?.(data, variables, onMutateResult, context);
|
||||
},
|
||||
onError: (error, variables, onMutateResult, context) => {
|
||||
options?.onError?.(error, variables, onMutateResult, context);
|
||||
},
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user