MCPcopy Create free account
hub / github.com/TanStack/router / useMutation

Function useMutation

examples/solid/start-basic-auth/src/hooks/useMutation.ts:3–41  ·  view source on GitHub ↗
(opts: {
  fn: (variables: TVariables) => Promise<TData>
  onSuccess?: (ctx: { data: TData }) => void | Promise<void>
})

Source from the content-addressed store, hash-verified

1import * as Solid from 'solid-js'
2
3export function useMutation<TVariables, TData, TError = Error>(opts: {
4 fn: (variables: TVariables) => Promise<TData>
5 onSuccess?: (ctx: { data: TData }) => void | Promise<void>
6}) {
7 const [submittedAt, setSubmittedAt] = Solid.createSignal<number | undefined>()
8 const [variables, setVariables] = Solid.createSignal<TVariables | undefined>()
9 const [error, setError] = Solid.createSignal<TError | undefined>()
10 const [data, setData] = Solid.createSignal<TData | undefined>()
11 const [status, setStatus] = Solid.createSignal<
12 'idle' | 'pending' | 'success' | 'error'
13 >('idle')
14
15 const mutate = async (variables: TVariables): Promise<TData | undefined> => {
16 setStatus('pending')
17 setSubmittedAt(Date.now())
18 setVariables(variables as any)
19 //
20 try {
21 const data = await opts.fn(variables)
22 await opts.onSuccess?.({ data })
23 setStatus('success')
24 setError(undefined)
25 setData(data as any)
26 return data
27 } catch (err: any) {
28 setStatus('error')
29 setError(err)
30 }
31 }
32
33 return {
34 status,
35 variables,
36 submittedAt,
37 mutate,
38 error,
39 data,
40 }
41}

Callers 2

LoginFunction · 0.90
SignupCompFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected