Skip to content

Commit 4e457e3

Browse files
committed
feat: query helper functions
1 parent 786e95a commit 4e457e3

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

src/index.ts

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable ts/no-unsafe-argument, ts/no-unsafe-assignment, ts/no-unsafe-return, ts/no-unsafe-member-access, ts/no-unsafe-call */
2-
import { type QueryKey, useMutation, useQuery } from '@tanstack/vue-query'
2+
import { type QueryKey, useMutation, useQuery, useQueryClient } from '@tanstack/vue-query'
33
import {
44
type CreateTRPCClientOptions,
55
createTRPCProxyClient,
@@ -35,17 +35,17 @@ function createVueQueryProxyDecoration<TRouter extends AnyRouter>(
3535
const lastProperty = path.pop()!
3636

3737
const joinedPath = path.join('.')
38-
const [input, options] = args
38+
const [firstParam, secondParam] = args
3939

4040
if (lastProperty === '_def') {
4141
return { path }
4242
}
4343

4444
if (lastProperty === 'useQuery') {
45-
const { trpc, ...queryOptions } = options || ({} as any)
45+
const { trpc, ...queryOptions } = secondParam || ({} as any)
4646

4747
return useQuery({
48-
queryKey: computed(() => getQueryKey(path, toValue(input))),
48+
queryKey: computed(() => getQueryKey(path, toValue(firstParam))),
4949
queryFn: ({ queryKey, signal }) =>
5050
(client as any)[joinedPath].query(queryKey.at(-1), {
5151
signal,
@@ -55,7 +55,33 @@ function createVueQueryProxyDecoration<TRouter extends AnyRouter>(
5555
})
5656
}
5757

58+
if (lastProperty === 'invalidate') {
59+
try {
60+
const queryClient = useQueryClient()
61+
return queryClient.invalidateQueries({
62+
queryKey: getQueryKey(path, toValue(firstParam)),
63+
})
64+
} catch (error) {
65+
console.error(error)
66+
}
67+
}
68+
69+
if (lastProperty === 'setQueryData') {
70+
try {
71+
const queryClient = useQueryClient()
72+
return queryClient.setQueryData(getQueryKey(path, toValue(secondParam)), firstParam)
73+
} catch (error) {
74+
console.error(error)
75+
}
76+
}
77+
78+
if (lastProperty === 'key') {
79+
return getQueryKey(path, toValue(firstParam))
80+
}
81+
5882
if (lastProperty === 'useMutation') {
83+
const { trpc, ...mutationOptions } = firstParam || ({} as any)
84+
5985
const vueApp = getCurrentInstance()?.appContext.app
6086
const mutationOptionsWithContext = Object.fromEntries(
6187
Object.entries(mutationOptions).map(([key, value]) => {

src/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type {
2+
QueryClient,
23
QueryKey,
34
UseMutationOptions,
45
UseMutationReturnType,
@@ -66,6 +67,12 @@ export type DecorateProcedure<
6667
>,
6768
) => UseQueryReturnType<DataT, DataE>
6869
query: Resolver<TProcedure>
70+
invalidate: (input?: MaybeRefOrGetter<inferProcedureInput<TProcedure>>) => Promise<void>
71+
setQueryData: (
72+
updater: inferTransformedProcedureOutput<TProcedure>,
73+
input?: MaybeRefOrGetter<inferProcedureInput<TProcedure>>,
74+
) => ReturnType<QueryClient['setQueryData']>
75+
key: (input?: MaybeRefOrGetter<inferProcedureInput<TProcedure>>) => QueryKey
6976
}
7077
: TProcedure extends AnyMutationProcedure
7178
? {

0 commit comments

Comments
 (0)