@shopify/react-graphql
Version:
Tools for creating type-safe and asynchronous GraphQL components for React
46 lines (43 loc) • 1.26 kB
JavaScript
import { useCallback } from 'react';
import useApolloClient from './apollo-client.mjs';
function useMutation(mutation, options = {}) {
const {
client: overrideClient,
variables,
optimisticResponse,
refetchQueries,
awaitRefetchQueries,
update,
context,
fetchPolicy,
errorPolicy
} = options;
const client = useApolloClient(overrideClient);
const runMutation = useCallback((perMutationOptions = {}) => {
const mutateVariables = {
...(variables || {}),
...(perMutationOptions.variables || {})
};
delete perMutationOptions.variables;
return client.mutate({
mutation,
variables: mutateVariables,
optimisticResponse,
refetchQueries,
awaitRefetchQueries,
update,
context,
fetchPolicy,
errorPolicy,
...perMutationOptions
});
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[client, mutation, refetchQueries, awaitRefetchQueries, update, context, fetchPolicy, errorPolicy,
// eslint-disable-next-line react-hooks/exhaustive-deps
JSON.stringify(variables),
// eslint-disable-next-line react-hooks/exhaustive-deps
JSON.stringify(optimisticResponse)]);
return runMutation;
}
export { useMutation as default };