Skip to content

Commit

Permalink
feat: allow control of AsyncData options
Browse files Browse the repository at this point in the history
  • Loading branch information
Diizzayy committed Feb 29, 2024
1 parent eea16e6 commit 581219c
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions src/runtime/composables.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { hash } from 'ohash'
import { print } from 'graphql'
import type { OperationVariables, QueryOptions, DefaultContext } from '@apollo/client'
import type { AsyncData, NuxtError } from 'nuxt/app'
import type { AsyncData, AsyncDataOptions, NuxtError } from 'nuxt/app'
import type { NuxtAppApollo } from '../types'
import { ref, useCookie, useNuxtApp, useAsyncData } from '#imports'
import NuxtApollo from '#build/apollo'
Expand All @@ -26,19 +26,19 @@ export function useAsyncQuery <
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
DefaultT = null,
NuxtErrorDataT = unknown
> (opts: TAsyncQuery<T>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
> (opts: TAsyncQuery<T>, options?: AsyncDataOptions<T, DataT, PickKeys, DefaultT>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>

export function useAsyncQuery <
T,
DataT = T,
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
DefaultT = null,
NuxtErrorDataT = unknown
> (query: TQuery<T>, variables?: TVariables<T>, clientId?: string, context?: DefaultContext): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
> (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>

export function useAsyncQuery <T> (...args: any[]) {
const { key, fn } = prep<T>(...args)
return useAsyncData<T>(key, fn)
const { key, fn, options } = prep<T>(...args)
return useAsyncData<T>(key, fn, options)
}

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

export function useLazyAsyncQuery <
T,
DataT = T,
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
DefaultT = null,
NuxtErrorDataT = unknown
> (query: TQuery<T>, variables?: TVariables<T>, clientId?: string, context?: DefaultContext): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError<NuxtErrorDataT>) | null>
> (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>

export function useLazyAsyncQuery <T> (...args: any) {
const { key, fn } = prep<T>(...args)
return useAsyncData<T>(key, fn, { lazy: true })
const { key, fn, options } = prep<T>(...args)
return useAsyncData<T>(key, fn, { ...options, lazy: true })
}

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

let options: AsyncDataOptions<T, T, KeysOf<T>, null> = {}

if ((typeof args?.[0] === 'object' && 'query' in args[0])) {
query = args?.[0]?.query
variables = args?.[0]?.variables

cache = args?.[0]?.cache ?? true
context = args?.[0]?.context
clientId = args?.[0]?.clientId

if (typeof args?.[1] === 'object') {
options = args?.[1]
}
} else {
query = args?.[0]
variables = args?.[1]

clientId = args?.[2]
context = args?.[3]

if (typeof args?.[4] === 'object') {
options = args?.[4]
}
}

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

return { key, query, clientId, variables, fn }
return { key, query, clientId, variables, fn, options }
}

export const useApollo = () => {
Expand Down

0 comments on commit 581219c

Please sign in to comment.