logaretm / villus

🏎 A tiny and fast GraphQL client for Vue.js
https://villus.dev
MIT License
790 stars 31 forks source link

feat(useMutation): export MutationExecutionOptions interface #203

Closed jbaubree closed 8 months ago

jbaubree commented 11 months ago

Just a simple export that is needed when we want to override some data or hooks.

Example:

import type { Client, CombinedError, MaybeRef, MutationApi, Operation, QueryExecutionContext } from 'villus'
import { useMutation as useMutationRequeset } from 'villus'
import { isNil, omitBy } from 'lodash-es'

// NEED THIS THAT IS NOT EXPORTED ------------------------------>
interface MutationExecutionOptions<TData> {
  context: MaybeRef<QueryExecutionContext>
  client?: Client
  clearCacheTags?: string[]
  refetchTags?: string[]
  onData?: (data: TData) => void
  onError?: (err: CombinedError) => void
}

export function useMutation<TData = any, TVars = any>(
  query: Operation<TData, TVars>['query'],
  // HERE ------------------------------>
  args: Partial<MutationExecutionOptions<TData>>): MutationApi<TData, TVars> {
  const { onData } = args

  return useMutationRequeset<TData, TVars>(unref(query), {
    ...args,
    onData: (data) => {
      // TO DO SOME EXAMPLE OF OVERRIDE THERE ------------------------------>
      if (typeof data === 'object' && !Object.keys(omitBy(data, isNil)).length)
        return
      onData?.(data)
    },
  })
}
logaretm commented 8 months ago

Many thanks, and sorry for the delay.