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