Skip to content

Commit

Permalink
fix: keep previous query status when fetching
Browse files Browse the repository at this point in the history
  • Loading branch information
boschni committed Oct 23, 2020
1 parent 6e8ed8d commit 6e7de8f
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
8 changes: 2 additions & 6 deletions src/core/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ export class Query<TData = unknown, TError = unknown, TQueryFnData = TData> {
fetchMeta: action.meta,
isFetching: true,
isPaused: false,
status: state.updatedAt ? 'success' : 'loading',
status: state.status === 'idle' ? 'loading' : state.status,
}
case 'success':
return {
Expand All @@ -503,11 +503,7 @@ export class Query<TData = unknown, TError = unknown, TQueryFnData = TData> {
failureCount: 0,
isFetching: false,
isPaused: false,
status: state.error
? 'error'
: state.updatedAt
? 'success'
: 'idle',
status: state.status === 'loading' ? 'idle' : state.status,
}
}

Expand Down
29 changes: 29 additions & 0 deletions src/core/tests/queryCache.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1356,6 +1356,35 @@ describe('queryCache', () => {

consoleMock.mockRestore()
})

test('the previous query status should be kept when refetching', async () => {
const consoleMock = mockConsoleError()
const key = queryKey()

await queryClient.prefetchQuery(key, () => 'data')
const query = queryCache.find(key)!
expect(query.state.status).toBe('success')

await queryClient.prefetchQuery(key, () => Promise.reject('reject'), {
retry: false,
})
expect(query.state.status).toBe('error')

queryClient.prefetchQuery(
key,
async () => {
await sleep(10)
return Promise.reject('reject')
},
{ retry: false }
)
expect(query.state.status).toBe('error')

await sleep(100)
expect(query.state.status).toBe('error')

consoleMock.mockRestore()
})
})

describe('QueryObserver', () => {
Expand Down
6 changes: 5 additions & 1 deletion src/react/useBaseQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,11 @@ export function useBaseQuery<TData, TError, TQueryFnData, TQueryData>(

// Handle suspense
if (observer.options.suspense || observer.options.useErrorBoundary) {
if (currentResult.isError && !errorResetBoundary.isReset()) {
if (
currentResult.isError &&
!errorResetBoundary.isReset() &&
!observer.getCurrentQuery().isFetching()
) {
throw currentResult.error
}

Expand Down

0 comments on commit 6e7de8f

Please sign in to comment.