{"version":3,"file":"useMutation.mjs","sources":["../../../src/react/useMutation.ts"],"sourcesContent":["import * as React from 'react'\n\nimport {\n  MutationInfo,\n  MutationInfoOptions,\n  getDefaultState,\n} from '../vanilla/mutationInfo'\nimport { UNDEFINED } from '../vanilla/utils'\nimport { useQueryClient } from './QueryClientProvider'\nimport { shouldThrowError } from './utils'\n\nexport interface UseMutationOptions<\n  TData = unknown,\n  TVars = void,\n  TError = Error\n> extends Omit<MutationInfoOptions<TData, TVars, TError>, 'defaulted'> {\n  throwOnError?: boolean | ((error: TError) => boolean)\n}\n\nexport interface TriggerOptions<\n  TData = unknown,\n  TVars = void,\n  TError = Error\n> extends Pick<\n    MutationInfoOptions<TData, TVars, TError>,\n    'onError' | 'onSettled' | 'onSuccess'\n  > {}\n\nexport type TriggerFn<TData = unknown, TVars = void, TError = Error> = (\n  variables: TVars extends void ? void | TVars : TVars,\n  mutateOptions?: TriggerOptions<TData, TVars, TError>\n) => Promise<TData>\n\nexport type UseMutationResult<\n  TData = unknown,\n  TVars = void,\n  TError = Error\n> = {\n  data?: TData\n  error: TError | null\n  variables?: TVars\n  isMutating: boolean\n  trigger: TriggerFn<TData, TVars, TError>\n  reset: () => void\n}\n\nexport const useMutation = <TData = unknown, TVars = void, TError = Error>(\n  mutaionOptions: UseMutationOptions<TData, TVars, TError>\n): UseMutationResult<TData, TVars, TError> => {\n  const client = useQueryClient()\n\n  const currentMutationInfoRef =\n    React.useRef<MutationInfo<TData, TVars, TError>>()\n\n  const options = client.defaultMutationOptions(mutaionOptions)\n  const optionsRef = React.useRef(options)\n  optionsRef.current = options\n\n  React.useEffect(() => {\n    currentMutationInfoRef.current?.setOptions(options)\n  })\n\n  const [, rerender] = React.useReducer(count => ++count, 0)\n\n  const [trigger, reset, cleanup] = React.useMemo(() => {\n    let unsubscribe: (() => void) | undefined\n\n    const cleanup = () => {\n      unsubscribe?.()\n      unsubscribe = UNDEFINED\n      currentMutationInfoRef.current = UNDEFINED\n    }\n\n    const trigger: TriggerFn<TData, TVars, TError> = (\n      variables,\n      mutateOptions\n    ) => {\n      cleanup()\n\n      const currentMutationInfo = (currentMutationInfoRef.current = client\n        .getMutationCache()\n        .build(client, optionsRef.current))\n\n      unsubscribe = currentMutationInfo.subscribe(rerender)\n\n      return currentMutationInfo.trigger(variables as TVars).then(\n        data => {\n          mutateOptions?.onSuccess?.(data, variables as TVars, currentMutationInfo)\n          mutateOptions?.onSettled?.(data, null, variables as TVars, currentMutationInfo)\n          return data\n        },\n        error => {\n          mutateOptions?.onError?.(error, variables as TVars, currentMutationInfo)\n          mutateOptions?.onSettled?.(\n            UNDEFINED,\n            error,\n            variables as TVars,\n            currentMutationInfo\n          )\n          throw error\n        }\n      )\n    }\n\n    const reset = () => {\n      cleanup()\n      rerender()\n    }\n\n    return [trigger, reset, cleanup]\n  }, [client])\n\n  // Cleanup on unmount\n  React.useEffect(() => cleanup, [cleanup])\n\n  const state =\n    currentMutationInfoRef.current?.state ??\n    getDefaultState<TData, TVars, TError>()\n\n  // Throw error if needed\n  if (state.error && shouldThrowError(options.throwOnError, [state.error])) {\n    throw state.error\n  }\n\n  return {\n    data: state.data,\n    error: state.error,\n    variables: state.variables,\n    isMutating: state.status === 'mutating',\n    trigger,\n    reset,\n  }\n}\n\n\n"],"names":["useMutation","mutaionOptions","_currentMutationInfoR2","_currentMutationInfoR3","client","useQueryClient","currentMutationInfoRef","React","useRef","options","defaultMutationOptions","optionsRef","current","useEffect","_currentMutationInfoR","setOptions","rerender","useReducer","count","trigger","reset","cleanup","useMemo","unsubscribe","UNDEFINED","variables","mutateOptions","currentMutationInfo","getMutationCache","build","subscribe","then","data","onSuccess","onSettled","error","onError","state","getDefaultState","shouldThrowError","throwOnError","isMutating","status"],"mappings":"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"}