diff --git a/packages/vue-apollo-composable/src/useMutation.ts b/packages/vue-apollo-composable/src/useMutation.ts index 775581bc..c4e63511 100644 --- a/packages/vue-apollo-composable/src/useMutation.ts +++ b/packages/vue-apollo-composable/src/useMutation.ts @@ -1,8 +1,10 @@ import { DocumentNode } from 'graphql' import { MutationOptions, OperationVariables } from 'apollo-client' import { ref } from '@vue/composition-api' +import { FetchResult } from 'apollo-link' import { useApolloClient } from './useApolloClient' import { ReactiveFunction } from './util/ReactiveFunction' +import { useEventHook } from './util/useEventHook' export interface UseMutationOptions< TResult = any, @@ -23,6 +25,9 @@ export function useMutation< const loading = ref(false) const error = ref(null) const called = ref(false) + + const doneEvent = useEventHook, Record>>() + const errorEvent = useEventHook() // Apollo Client const { resolveClient } = useApolloClient() @@ -55,10 +60,12 @@ export function useMutation< }, }) loading.value = false + doneEvent.trigger(result) return result } catch (e) { error.value = e loading.value = false + errorEvent.trigger(e) throw e } } @@ -68,5 +75,7 @@ export function useMutation< loading, error, called, + onDone: doneEvent.on, + onError: errorEvent.on, } } \ No newline at end of file