Skip to content

Commit 581219c

Browse files
committed
feat: allow control of AsyncData options
1 parent eea16e6 commit 581219c

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/runtime/composables.ts

+20-10
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { hash } from 'ohash'
22
import { print } from 'graphql'
33
import type { OperationVariables, QueryOptions, DefaultContext } from '@apollo/client'
4-
import type { AsyncData, NuxtError } from 'nuxt/app'
4+
import type { AsyncData, AsyncDataOptions, NuxtError } from 'nuxt/app'
55
import type { NuxtAppApollo } from '../types'
66
import { ref, useCookie, useNuxtApp, useAsyncData } from '#imports'
77
import NuxtApollo from '#build/apollo'
@@ -26,19 +26,19 @@ export function useAsyncQuery <
2626
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
2727
DefaultT = null,
2828
NuxtErrorDataT = unknown
29-
> (opts: TAsyncQuery<T>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
29+
> (opts: TAsyncQuery<T>, options?: AsyncDataOptions<T, DataT, PickKeys, DefaultT>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
3030

3131
export function useAsyncQuery <
3232
T,
3333
DataT = T,
3434
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
3535
DefaultT = null,
3636
NuxtErrorDataT = unknown
37-
> (query: TQuery<T>, variables?: TVariables<T>, clientId?: string, context?: DefaultContext): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
37+
> (query: TQuery<T>, variables?: TVariables<T>, clientId?: string, context?: DefaultContext, options?: AsyncDataOptions<T, DataT, PickKeys, DefaultT>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
3838

3939
export function useAsyncQuery <T> (...args: any[]) {
40-
const { key, fn } = prep<T>(...args)
41-
return useAsyncData<T>(key, fn)
40+
const { key, fn, options } = prep<T>(...args)
41+
return useAsyncData<T>(key, fn, options)
4242
}
4343

4444
export function useLazyAsyncQuery <
@@ -47,19 +47,19 @@ export function useLazyAsyncQuery <
4747
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
4848
DefaultT = null,
4949
NuxtErrorDataT = unknown
50-
> (opts: TAsyncQuery<T>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
50+
> (opts: TAsyncQuery<T>, options?: AsyncDataOptions<T, DataT, PickKeys, DefaultT>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
5151

5252
export function useLazyAsyncQuery <
5353
T,
5454
DataT = T,
5555
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
5656
DefaultT = null,
5757
NuxtErrorDataT = unknown
58-
> (query: TQuery<T>, variables?: TVariables<T>, clientId?: string, context?: DefaultContext): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
58+
> (query: TQuery<T>, variables?: TVariables<T>, clientId?: string, context?: DefaultContext, options?: AsyncDataOptions<T, DataT, PickKeys, DefaultT>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
5959

6060
export function useLazyAsyncQuery <T> (...args: any) {
61-
const { key, fn } = prep<T>(...args)
62-
return useAsyncData<T>(key, fn, { lazy: true })
61+
const { key, fn, options } = prep<T>(...args)
62+
return useAsyncData<T>(key, fn, { ...options, lazy: true })
6363
}
6464

6565
const prep = <T> (...args: any[]) => {
@@ -72,19 +72,29 @@ const prep = <T> (...args: any[]) => {
7272
let clientId: string | undefined
7373
let context: DefaultContext
7474

75+
let options: AsyncDataOptions<T, T, KeysOf<T>, null> = {}
76+
7577
if ((typeof args?.[0] === 'object' && 'query' in args[0])) {
7678
query = args?.[0]?.query
7779
variables = args?.[0]?.variables
7880

7981
cache = args?.[0]?.cache ?? true
8082
context = args?.[0]?.context
8183
clientId = args?.[0]?.clientId
84+
85+
if (typeof args?.[1] === 'object') {
86+
options = args?.[1]
87+
}
8288
} else {
8389
query = args?.[0]
8490
variables = args?.[1]
8591

8692
clientId = args?.[2]
8793
context = args?.[3]
94+
95+
if (typeof args?.[4] === 'object') {
96+
options = args?.[4]
97+
}
8898
}
8999

90100
if (!query) { throw new Error('@nuxtjs/apollo: no query provided') }
@@ -104,7 +114,7 @@ const prep = <T> (...args: any[]) => {
104114
context
105115
}).then(r => r.data)
106116

107-
return { key, query, clientId, variables, fn }
117+
return { key, query, clientId, variables, fn, options }
108118
}
109119

110120
export const useApollo = () => {

0 commit comments

Comments
 (0)