Skip to content

Commit

Permalink
refactor: remove query status bools (#1009)
Browse files Browse the repository at this point in the history
  • Loading branch information
boschni committed Sep 13, 2020
1 parent 065ffe0 commit 380a049
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 31 deletions.
46 changes: 20 additions & 26 deletions src/core/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import {
Console,
Updater,
functionalUpdate,
getStatusProps,
isCancelable,
isCancelledError,
isDocumentVisible,
Expand Down Expand Up @@ -32,13 +31,9 @@ export interface QueryState<TResult, TError> {
data?: TResult
error: TError | null
failureCount: number
isError: boolean
isFetching: boolean
isFetchingMore: IsFetchingMoreValue
isIdle: boolean
isInitialData: boolean
isLoading: boolean
isSuccess: boolean
status: QueryStatus
throwInErrorBoundary?: boolean
updateCount: number
Expand Down Expand Up @@ -231,7 +226,8 @@ export class Query<TResult, TError> {

isStaleByTime(staleTime = 0): boolean {
return (
!this.state.isSuccess || this.state.updatedAt + staleTime <= Date.now()
this.state.status !== QueryStatus.Success ||
this.state.updatedAt + staleTime <= Date.now()
)
}

Expand Down Expand Up @@ -578,28 +574,27 @@ function hasMorePages<TResult, TError>(
function getDefaultState<TResult, TError>(
config: ResolvedQueryConfig<TResult, TError>
): QueryState<TResult, TError> {
const initialData =
const data =
typeof config.initialData === 'function'
? (config.initialData as InitialDataFunction<TResult>)()
: config.initialData

const hasInitialData = typeof initialData !== 'undefined'

const initialStatus = hasInitialData
? QueryStatus.Success
: config.enabled
? QueryStatus.Loading
: QueryStatus.Idle
const status =
typeof data !== 'undefined'
? QueryStatus.Success
: config.enabled
? QueryStatus.Loading
: QueryStatus.Idle

return {
...getStatusProps(initialStatus),
canFetchMore: hasMorePages(config, initialData),
data: initialData,
canFetchMore: hasMorePages(config, data),
data,
error: null,
failureCount: 0,
isFetching: initialStatus === QueryStatus.Loading,
isFetching: status === QueryStatus.Loading,
isFetchingMore: false,
isInitialData: true,
status,
updateCount: 0,
updatedAt: Date.now(),
}
Expand All @@ -616,39 +611,38 @@ export function queryReducer<TResult, TError>(
failureCount: state.failureCount + 1,
}
case ActionType.Fetch:
const status =
typeof state.data !== 'undefined'
? QueryStatus.Success
: QueryStatus.Loading
return {
...state,
...getStatusProps(status),
failureCount: 0,
isFetching: true,
isFetchingMore: action.isFetchingMore || false,
failureCount: 0,
status:
typeof state.data !== 'undefined'
? QueryStatus.Success
: QueryStatus.Loading,
}
case ActionType.Success:
return {
...state,
...getStatusProps(QueryStatus.Success),
canFetchMore: action.canFetchMore,
data: action.data,
error: null,
failureCount: 0,
isFetching: false,
isFetchingMore: false,
isInitialData: false,
status: QueryStatus.Success,
updateCount: state.updateCount + 1,
updatedAt: action.updatedAt ?? Date.now(),
}
case ActionType.Error:
return {
...state,
...getStatusProps(QueryStatus.Error),
error: action.error,
failureCount: state.failureCount + 1,
isFetching: false,
isFetchingMore: false,
status: QueryStatus.Error,
throwInErrorBoundary: true,
updateCount: state.updateCount + 1,
}
Expand Down
7 changes: 4 additions & 3 deletions src/core/queryObserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
isValidTimeout,
noop,
} from './utils'
import type { QueryResult, ResolvedQueryConfig } from './types'
import { QueryResult, ResolvedQueryConfig, QueryStatus } from './types'
import type { Query, Action, FetchMoreOptions, RefetchOptions } from './query'

export type UpdateListener<TResult, TError> = (
Expand Down Expand Up @@ -216,8 +216,9 @@ export class QueryObserver<TResult, TError> {
// Keep previous data if needed
if (
config.keepPreviousData &&
(state.isIdle || state.isLoading) &&
previousQueryResult?.isSuccess
(state.status === QueryStatus.Idle ||
state.status === QueryStatus.Loading) &&
previousQueryResult?.status === QueryStatus.Success
) {
data = previousQueryResult.data
updatedAt = previousQueryResult.updatedAt
Expand Down
4 changes: 2 additions & 2 deletions src/core/tests/queryCache.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ describe('queryCache', () => {

expect(query.state).toMatchObject({
data: 'data',
isLoading: false,
status: 'success',
updateCount: 1,
})
})
Expand Down Expand Up @@ -577,7 +577,7 @@ describe('queryCache', () => {
expect(cancel).toHaveBeenCalled()
expect(query.state).toMatchObject({
data: undefined,
isLoading: false,
status: 'error',
updateCount: 1,
})
})
Expand Down

1 comment on commit 380a049

@vercel
Copy link

@vercel vercel bot commented on 380a049 Sep 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.