useMutationOnClient<TParsed> function

MutationHookResult<TParsed> useMutationOnClient<TParsed>(
  1. GraphQLClient client,
  2. MutationOptions<TParsed> options
)

Implementation

MutationHookResult<TParsed> useMutationOnClient<TParsed>(
  GraphQLClient client,
  MutationOptions<TParsed> options,
) {
  final watchOptions = useMemoized(
    () => options.asWatchQueryOptions(),
    [options],
  );
  final query = useWatchMutationOnClient<TParsed>(client, watchOptions);
  final snapshot = useStream(
    query.stream,
    initialData: query.latestResult ?? QueryResult.unexecuted,
  );
  final runMutation = useCallback((
    Map<String, dynamic> variables, {
    Object? optimisticResult,
  }) {
    final mutationCallbacks = MutationCallbackHandler(
      cache: client.cache,
      queryId: query.queryId,
      options: options,
    );
    return (query
          ..variables = variables
          ..optimisticResult = optimisticResult
          ..onData(mutationCallbacks.callbacks) // add callbacks to observable
        )
        .fetchResults();
  }, [client, query, options]);
  return MutationHookResult(
    runMutation: runMutation,
    result: snapshot.data!,
  );
}