1
1
import {
2
2
ref ,
3
3
Ref ,
4
- unref ,
5
4
computed ,
6
5
watch ,
7
6
onServerPrefetch ,
@@ -10,6 +9,8 @@ import {
10
9
onScopeDispose ,
11
10
nextTick ,
12
11
shallowRef ,
12
+ MaybeRefOrGetter ,
13
+ toRef ,
13
14
} from 'vue-demi'
14
15
import { DocumentNode } from 'graphql'
15
16
import type {
@@ -27,9 +28,6 @@ import type {
27
28
} from '@apollo/client/core/index.js'
28
29
import { throttle , debounce } from 'throttle-debounce'
29
30
import { useApolloClient } from './useApolloClient'
30
- import { ReactiveFunction } from './util/ReactiveFunction'
31
- import { paramToRef } from './util/paramToRef'
32
- import { paramToReactive } from './util/paramToReactive'
33
31
import { useEventHook } from './util/useEventHook'
34
32
import { trackQuery } from './util/loadingTracking'
35
33
import { resultErrorsToApolloError , toApolloError } from './util/toApolloError'
@@ -54,9 +52,9 @@ interface SubscribeToMoreItem {
54
52
}
55
53
56
54
// Parameters
57
- export type DocumentParameter < TResult , TVariables > = DocumentNode | Ref < DocumentNode | null | undefined > | ReactiveFunction < DocumentNode | null | undefined > | TypedDocumentNode < TResult , TVariables > | Ref < TypedDocumentNode < TResult , TVariables > | null | undefined > | ReactiveFunction < TypedDocumentNode < TResult , TVariables > | null | undefined >
58
- export type VariablesParameter < TVariables > = TVariables | Ref < TVariables > | ReactiveFunction < TVariables >
59
- export type OptionsParameter < TResult , TVariables extends OperationVariables > = UseQueryOptions < TResult , TVariables > | Ref < UseQueryOptions < TResult , TVariables > > | ReactiveFunction < UseQueryOptions < TResult , TVariables > >
55
+ export type DocumentParameter < TResult , TVariables > = DocumentNode | TypedDocumentNode < TResult , TVariables > | null | undefined
56
+ export type VariablesParameter < TVariables > = TVariables
57
+ export type OptionsParameter < TResult , TVariables extends OperationVariables > = UseQueryOptions < TResult , TVariables >
60
58
61
59
export interface OnResultContext {
62
60
client : ApolloClient < any >
@@ -78,12 +76,12 @@ export interface UseQueryReturn<TResult, TVariables extends OperationVariables>
78
76
forceDisabled : Ref < boolean >
79
77
document : Ref < DocumentNode | null | undefined >
80
78
variables : Ref < TVariables | undefined >
81
- options : UseQueryOptions < TResult , TVariables > | Ref < UseQueryOptions < TResult , TVariables > >
79
+ options : Ref < UseQueryOptions < TResult , TVariables > >
82
80
query : Ref < ObservableQuery < TResult , TVariables > | null | undefined >
83
81
refetch : ( variables ?: TVariables ) => Promise < ApolloQueryResult < TResult > > | undefined
84
82
fetchMore : ( options : FetchMoreQueryOptions < TVariables , TResult > & FetchMoreOptions < TResult , TVariables > ) => Promise < ApolloQueryResult < TResult > > | undefined
85
83
updateQuery : ( mapFn : ( previousQueryResult : TResult , options : Pick < WatchQueryOptions < TVariables , TResult > , 'variables' > ) => TResult ) => void
86
- subscribeToMore : < TSubscriptionVariables = OperationVariables , TSubscriptionData = TResult > ( options : SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > | Ref < SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > > | ReactiveFunction < SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > > ) => void
84
+ subscribeToMore : < TSubscriptionVariables = OperationVariables , TSubscriptionData = TResult > ( options : MaybeRefOrGetter < SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > > ) => void
87
85
onResult : ( fn : ( param : ApolloQueryResult < TResult > , context : OnResultContext ) => void ) => {
88
86
off : ( ) => void
89
87
}
@@ -96,49 +94,49 @@ export interface UseQueryReturn<TResult, TVariables extends OperationVariables>
96
94
* Use a query that does not require variables or options.
97
95
* */
98
96
export function useQuery < TResult = any > (
99
- document : DocumentParameter < TResult , undefined >
97
+ document : MaybeRefOrGetter < DocumentParameter < TResult , undefined > >
100
98
) : UseQueryReturn < TResult , Record < string , never > >
101
99
102
100
/**
103
101
* Use a query that has optional variables but not options
104
102
*/
105
103
export function useQuery < TResult = any , TVariables extends OperationVariables = OperationVariables > (
106
- document : DocumentParameter < TResult , TVariables >
104
+ document : MaybeRefOrGetter < DocumentParameter < TResult , TVariables > >
107
105
) : UseQueryReturn < TResult , TVariables >
108
106
109
107
/**
110
108
* Use a query that has required variables but not options
111
109
*/
112
110
export function useQuery < TResult = any , TVariables extends OperationVariables = OperationVariables > (
113
- document : DocumentParameter < TResult , TVariables > ,
114
- variables : VariablesParameter < TVariables >
111
+ document : MaybeRefOrGetter < DocumentParameter < TResult , TVariables > > ,
112
+ variables : MaybeRefOrGetter < VariablesParameter < TVariables > >
115
113
) : UseQueryReturn < TResult , TVariables >
116
114
117
115
/**
118
116
* Use a query that requires options but not variables.
119
117
*/
120
118
export function useQuery < TResult = any > (
121
- document : DocumentParameter < TResult , undefined > ,
119
+ document : MaybeRefOrGetter < DocumentParameter < TResult , undefined > > ,
122
120
variables : undefined | null ,
123
- options : OptionsParameter < TResult , Record < string , never > > ,
121
+ options : MaybeRefOrGetter < OptionsParameter < TResult , Record < string , never > > > ,
124
122
) : UseQueryReturn < TResult , Record < string , never > >
125
123
126
124
/**
127
125
* Use a query that requires variables and options.
128
126
*/
129
127
export function useQuery < TResult = any , TVariables extends OperationVariables = OperationVariables > (
130
- document : DocumentParameter < TResult , TVariables > ,
131
- variables : VariablesParameter < TVariables > ,
132
- options : OptionsParameter < TResult , TVariables > ,
128
+ document : MaybeRefOrGetter < DocumentParameter < TResult , TVariables > > ,
129
+ variables : MaybeRefOrGetter < VariablesParameter < TVariables > > ,
130
+ options : MaybeRefOrGetter < OptionsParameter < TResult , TVariables > > ,
133
131
) : UseQueryReturn < TResult , TVariables >
134
132
135
133
export function useQuery <
136
134
TResult ,
137
135
TVariables extends OperationVariables
138
136
> (
139
- document : DocumentParameter < TResult , TVariables > ,
140
- variables ?: VariablesParameter < TVariables > ,
141
- options ?: OptionsParameter < TResult , TVariables > ,
137
+ document : MaybeRefOrGetter < DocumentParameter < TResult , TVariables > > ,
138
+ variables ?: MaybeRefOrGetter < VariablesParameter < TVariables > > ,
139
+ options ?: MaybeRefOrGetter < OptionsParameter < TResult , TVariables > > ,
142
140
) : UseQueryReturn < TResult , TVariables > {
143
141
return useQueryImpl < TResult , TVariables > ( document , variables , options )
144
142
}
@@ -147,19 +145,19 @@ export function useQueryImpl<
147
145
TResult ,
148
146
TVariables extends OperationVariables
149
147
> (
150
- document : DocumentParameter < TResult , TVariables > ,
151
- variables ?: VariablesParameter < TVariables > ,
152
- options : OptionsParameter < TResult , TVariables > = { } ,
148
+ document : MaybeRefOrGetter < DocumentParameter < TResult , TVariables > > ,
149
+ variables ?: MaybeRefOrGetter < VariablesParameter < TVariables > > ,
150
+ options : MaybeRefOrGetter < OptionsParameter < TResult , TVariables > > = { } ,
153
151
lazy = false ,
154
152
) : UseQueryReturn < TResult , TVariables > {
155
153
const currentScope = getCurrentScope ( )
156
154
const currentInstance = getCurrentInstance ( )
157
155
158
156
const currentOptions = ref < UseQueryOptions < TResult , TVariables > > ( )
159
157
160
- const documentRef = paramToRef ( document )
161
- const variablesRef = paramToRef ( variables )
162
- const optionsRef = paramToReactive ( options )
158
+ const documentRef = toRef ( document )
159
+ const variablesRef = toRef ( variables ) as Ref < TVariables | undefined >
160
+ const optionsRef = toRef ( options )
163
161
164
162
// Result
165
163
/**
@@ -255,7 +253,7 @@ export function useQueryImpl<
255
253
if ( isServer ) {
256
254
applyDocument ( documentRef . value )
257
255
applyVariables ( variablesRef . value )
258
- applyOptions ( unref ( optionsRef ) )
256
+ applyOptions ( optionsRef . value )
259
257
}
260
258
261
259
started = true
@@ -478,7 +476,7 @@ export function useQueryImpl<
478
476
const isEnabled = computed ( ( ) => enabledOption . value && ! forceDisabled . value && ! ! documentRef . value )
479
477
480
478
// Applying options first (in case it disables the query)
481
- watch ( ( ) => unref ( optionsRef ) , applyOptions , {
479
+ watch ( optionsRef , applyOptions , {
482
480
deep : true ,
483
481
immediate : true ,
484
482
} )
@@ -574,12 +572,10 @@ export function useQueryImpl<
574
572
TSubscriptionVariables = OperationVariables ,
575
573
TSubscriptionData = TResult
576
574
> (
577
- options : SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > |
578
- Ref < SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > > |
579
- ReactiveFunction < SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > > ,
575
+ options : MaybeRefOrGetter < SubscribeToMoreOptions < TResult , TSubscriptionVariables , TSubscriptionData > > ,
580
576
) {
581
577
if ( isServer ) return
582
- const optionsRef = paramToRef ( options )
578
+ const optionsRef = toRef ( options )
583
579
watch ( optionsRef , ( value , oldValue , onCleanup ) => {
584
580
const index = subscribeToMoreItems . findIndex ( item => item . options === oldValue )
585
581
if ( index !== - 1 ) {
0 commit comments