From 581219c280fda19e91ce4fa7780fa3a5ae9a75ef Mon Sep 17 00:00:00 2001 From: Conrawl Rogers Date: Thu, 29 Feb 2024 16:00:37 -0400 Subject: [PATCH] feat: allow control of AsyncData options --- src/runtime/composables.ts | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/runtime/composables.ts b/src/runtime/composables.ts index 734f88e5..0b597df3 100644 --- a/src/runtime/composables.ts +++ b/src/runtime/composables.ts @@ -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' @@ -26,7 +26,7 @@ export function useAsyncQuery < PickKeys extends KeysOf = KeysOf, DefaultT = null, NuxtErrorDataT = unknown -> (opts: TAsyncQuery): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> +> (opts: TAsyncQuery, options?: AsyncDataOptions): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> export function useAsyncQuery < T, @@ -34,11 +34,11 @@ export function useAsyncQuery < PickKeys extends KeysOf = KeysOf, DefaultT = null, NuxtErrorDataT = unknown -> (query: TQuery, variables?: TVariables, clientId?: string, context?: DefaultContext): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> +> (query: TQuery, variables?: TVariables, clientId?: string, context?: DefaultContext, options?: AsyncDataOptions): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> export function useAsyncQuery (...args: any[]) { - const { key, fn } = prep(...args) - return useAsyncData(key, fn) + const { key, fn, options } = prep(...args) + return useAsyncData(key, fn, options) } export function useLazyAsyncQuery < @@ -47,7 +47,7 @@ export function useLazyAsyncQuery < PickKeys extends KeysOf = KeysOf, DefaultT = null, NuxtErrorDataT = unknown -> (opts: TAsyncQuery): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> +> (opts: TAsyncQuery, options?: AsyncDataOptions): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> export function useLazyAsyncQuery < T, @@ -55,11 +55,11 @@ export function useLazyAsyncQuery < PickKeys extends KeysOf = KeysOf, DefaultT = null, NuxtErrorDataT = unknown -> (query: TQuery, variables?: TVariables, clientId?: string, context?: DefaultContext): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> +> (query: TQuery, variables?: TVariables, clientId?: string, context?: DefaultContext, options?: AsyncDataOptions): AsyncData | DefaultT, (NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError) | null> export function useLazyAsyncQuery (...args: any) { - const { key, fn } = prep(...args) - return useAsyncData(key, fn, { lazy: true }) + const { key, fn, options } = prep(...args) + return useAsyncData(key, fn, { ...options, lazy: true }) } const prep = (...args: any[]) => { @@ -72,6 +72,8 @@ const prep = (...args: any[]) => { let clientId: string | undefined let context: DefaultContext + let options: AsyncDataOptions, null> = {} + if ((typeof args?.[0] === 'object' && 'query' in args[0])) { query = args?.[0]?.query variables = args?.[0]?.variables @@ -79,12 +81,20 @@ const prep = (...args: any[]) => { 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') } @@ -104,7 +114,7 @@ const prep = (...args: any[]) => { context }).then(r => r.data) - return { key, query, clientId, variables, fn } + return { key, query, clientId, variables, fn, options } } export const useApollo = () => {