export function useCustomMutation<T extends AppRouter>(
config: ProcedureConfig<T>
) {
const utils = api.useContext()
const { service, action, optimisticUpdateEndpoint } = config
return api[service][action].useMutation({
onMutate: async input => {
await utils[service][optimisticUpdateEndpoint].cancel()
const updatedResults = utils[service][optimisticUpdateEndpoint].getData()
const optimisticUpdate = updatedResults && [
{ ...input, id: updatedResults.length + 1 },
...updatedResults,
]
utils[service][optimisticUpdateEndpoint].setData(
undefined,
optimisticUpdate
)
},
onError: () => {
utils[service][optimisticUpdateEndpoint].invalidate()
},
onSuccess: () => {
utils[service][optimisticUpdateEndpoint].invalidate()
},
})
}
export function useCustomMutation<T extends AppRouter>(
config: ProcedureConfig<T>
) {
const utils = api.useContext()
const { service, action, optimisticUpdateEndpoint } = config
return api[service][action].useMutation({
onMutate: async input => {
await utils[service][optimisticUpdateEndpoint].cancel()
const updatedResults = utils[service][optimisticUpdateEndpoint].getData()
const optimisticUpdate = updatedResults && [
{ ...input, id: updatedResults.length + 1 },
...updatedResults,
]
utils[service][optimisticUpdateEndpoint].setData(
undefined,
optimisticUpdate
)
},
onError: () => {
utils[service][optimisticUpdateEndpoint].invalidate()
},
onSuccess: () => {
utils[service][optimisticUpdateEndpoint].invalidate()
},
})
}