Skip to content

Commit 23c8908

Browse files
authored
feat(core): QueryObserver returns isEnabled flag (#9408)
* feat(core): QueryObserver returns isEnabled flag * test: solid and svelte
1 parent 0569891 commit 23c8908

File tree

9 files changed

+47
-0
lines changed

9 files changed

+47
-0
lines changed

docs/framework/react/reference/useQuery.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const {
2626
isRefetching,
2727
isStale,
2828
isSuccess,
29+
isEnabled,
2930
promise,
3031
refetch,
3132
status,
@@ -234,6 +235,8 @@ const {
234235
- `isInitialLoading: boolean`
235236
- **deprecated**
236237
- An alias for `isLoading`, will be removed in the next major version.
238+
- `isEnabled: boolean`
239+
- Is `true` if this query observer is enabled, `false` otherwise.
237240
- `failureCount: number`
238241
- The failure count for the query.
239242
- Incremented every time the query fails.

packages/query-core/src/__tests__/queryObserver.test.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,4 +1405,27 @@ describe('queryObserver', () => {
14051405
const result = observer.getCurrentResult()
14061406
expect(result.fetchStatus).toBe('idle')
14071407
})
1408+
1409+
test('should return isEnabled depending on enabled being resolved', () => {
1410+
const key = queryKey()
1411+
const observer = new QueryObserver(queryClient, {
1412+
queryKey: key,
1413+
queryFn: () => 'data',
1414+
enabled: () => false,
1415+
})
1416+
1417+
const result = observer.getCurrentResult()
1418+
expect(result.isEnabled).toBe(false)
1419+
})
1420+
1421+
test('should return isEnabled as true per default', () => {
1422+
const key = queryKey()
1423+
const observer = new QueryObserver(queryClient, {
1424+
queryKey: key,
1425+
queryFn: () => 'data',
1426+
})
1427+
1428+
const result = observer.getCurrentResult()
1429+
expect(result.isEnabled).toBe(true)
1430+
})
14081431
})

packages/query-core/src/queryObserver.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ export class QueryObserver<
576576
isStale: isStale(query, options),
577577
refetch: this.refetch,
578578
promise: this.#currentThenable,
579+
isEnabled: resolveEnabled(options.enabled, query) !== false,
579580
}
580581

581582
const nextResult = result as QueryObserverResult<TData, TError>

packages/query-core/src/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,10 @@ export interface QueryObserverBaseResult<
717717
* - `true` if the query has received a response with no errors and is ready to display its data.
718718
*/
719719
isSuccess: boolean
720+
/**
721+
* `true` if this observer is enabled, `false` otherwise.
722+
*/
723+
isEnabled: boolean
720724
/**
721725
* A function to manually refetch the query.
722726
*/

packages/react-query/src/__tests__/useInfiniteQuery.test.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ describe('useInfiniteQuery', () => {
114114
isRefetching: false,
115115
isStale: true,
116116
isSuccess: false,
117+
isEnabled: true,
117118
refetch: expect.any(Function),
118119
status: 'pending',
119120
fetchStatus: 'fetching',
@@ -150,6 +151,7 @@ describe('useInfiniteQuery', () => {
150151
isRefetching: false,
151152
isStale: true,
152153
isSuccess: true,
154+
isEnabled: true,
153155
refetch: expect.any(Function),
154156
status: 'success',
155157
fetchStatus: 'idle',

packages/react-query/src/__tests__/useQuery.test.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ describe('useQuery', () => {
121121
isRefetching: false,
122122
isStale: true,
123123
isSuccess: false,
124+
isEnabled: true,
124125
refetch: expect.any(Function),
125126
status: 'pending',
126127
fetchStatus: 'fetching',
@@ -149,6 +150,7 @@ describe('useQuery', () => {
149150
isRefetching: false,
150151
isStale: true,
151152
isSuccess: true,
153+
isEnabled: true,
152154
refetch: expect.any(Function),
153155
status: 'success',
154156
fetchStatus: 'idle',
@@ -211,6 +213,7 @@ describe('useQuery', () => {
211213
isRefetching: false,
212214
isStale: true,
213215
isSuccess: false,
216+
isEnabled: true,
214217
refetch: expect.any(Function),
215218
status: 'pending',
216219
fetchStatus: 'fetching',
@@ -239,6 +242,7 @@ describe('useQuery', () => {
239242
isRefetching: false,
240243
isStale: true,
241244
isSuccess: false,
245+
isEnabled: true,
242246
refetch: expect.any(Function),
243247
status: 'pending',
244248
fetchStatus: 'fetching',
@@ -267,6 +271,7 @@ describe('useQuery', () => {
267271
isRefetching: false,
268272
isStale: true,
269273
isSuccess: false,
274+
isEnabled: true,
270275
refetch: expect.any(Function),
271276
status: 'error',
272277
fetchStatus: 'idle',

packages/solid-query/src/__tests__/useInfiniteQuery.test.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ describe('useInfiniteQuery', () => {
120120
isRefetching: false,
121121
isStale: true,
122122
isSuccess: false,
123+
isEnabled: true,
123124
refetch: expect.any(Function),
124125
status: 'pending',
125126
fetchStatus: 'fetching',
@@ -156,6 +157,7 @@ describe('useInfiniteQuery', () => {
156157
isRefetching: false,
157158
isStale: true,
158159
isSuccess: true,
160+
isEnabled: true,
159161
refetch: expect.any(Function),
160162
status: 'success',
161163
fetchStatus: 'idle',

packages/solid-query/src/__tests__/useQuery.test.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ describe('useQuery', () => {
301301
isRefetching: false,
302302
isStale: true,
303303
isSuccess: false,
304+
isEnabled: true,
304305
refetch: expect.any(Function),
305306
status: 'pending',
306307
fetchStatus: 'fetching',
@@ -329,6 +330,7 @@ describe('useQuery', () => {
329330
isRefetching: false,
330331
isStale: true,
331332
isSuccess: true,
333+
isEnabled: true,
332334
refetch: expect.any(Function),
333335
status: 'success',
334336
fetchStatus: 'idle',
@@ -392,6 +394,7 @@ describe('useQuery', () => {
392394
isRefetching: false,
393395
isStale: true,
394396
isSuccess: false,
397+
isEnabled: true,
395398
refetch: expect.any(Function),
396399
status: 'pending',
397400
fetchStatus: 'fetching',
@@ -420,6 +423,7 @@ describe('useQuery', () => {
420423
isRefetching: false,
421424
isStale: true,
422425
isSuccess: false,
426+
isEnabled: true,
423427
refetch: expect.any(Function),
424428
status: 'pending',
425429
fetchStatus: 'fetching',
@@ -448,6 +452,7 @@ describe('useQuery', () => {
448452
isRefetching: false,
449453
isStale: true,
450454
isSuccess: false,
455+
isEnabled: true,
451456
refetch: expect.any(Function),
452457
status: 'error',
453458
fetchStatus: 'idle',

packages/svelte-query/tests/createInfiniteQuery/createInfiniteQuery.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ describe('createInfiniteQuery', () => {
6262
isRefetching: false,
6363
isStale: true,
6464
isSuccess: false,
65+
isEnabled: true,
6566
refetch: expect.any(Function),
6667
status: 'pending',
6768
fetchStatus: 'fetching',
@@ -98,6 +99,7 @@ describe('createInfiniteQuery', () => {
9899
isRefetching: false,
99100
isStale: true,
100101
isSuccess: true,
102+
isEnabled: true,
101103
refetch: expect.any(Function),
102104
status: 'success',
103105
fetchStatus: 'idle',

0 commit comments

Comments
 (0)