Skip to content

Commit

Permalink
Merge branch 'main' into fix-6341
Browse files Browse the repository at this point in the history
  • Loading branch information
TkDodo authored Nov 11, 2023
2 parents 7f6f4a6 + 7c87c3d commit 86b23ed
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 3 deletions.
64 changes: 64 additions & 0 deletions packages/query-core/src/tests/queryObserver.types.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { describe, it } from 'vitest'
import { QueryObserver } from '..'
import { createQueryClient, doNotExecute } from './utils'
import type { Equal, Expect } from './utils'

describe('placeholderData', () => {
describe('placeholderData function', () => {
it('previousQuery should have typed queryKey', () => {
doNotExecute(() => {
const queryKey = ['SomeQuery', 42, { foo: 'bar' }] as const
type QueryKey = typeof queryKey

new QueryObserver(createQueryClient(), {
queryKey,
placeholderData: (_, previousQuery) => {
const previousQueryKey = previousQuery?.queryKey

const result: Expect<
Equal<typeof previousQueryKey, QueryKey | undefined>
> = true
return result
},
})
})
})

it('previousQuery should have typed error', () => {
doNotExecute(() => {
class CustomError extends Error {
name = 'CustomError' as const
}

new QueryObserver<boolean, CustomError>(createQueryClient(), {
placeholderData: (_, previousQuery) => {
const error = previousQuery?.state.error

const result: Expect<
Equal<typeof error, CustomError | null | undefined>
> = true
return result
},
})
})
})

it('previousData should have the same type as query data', () => {
doNotExecute(() => {
const queryData = { foo: 'bar' } as const
type QueryData = typeof queryData

new QueryObserver(createQueryClient(), {
queryFn: () => queryData,
select: (data) => data.foo,
placeholderData: (previousData) => {
const result: Expect<
Equal<typeof previousData, QueryData | undefined>
> = true
return result ? previousData : undefined
},
})
})
})
})
})
7 changes: 6 additions & 1 deletion packages/query-core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,12 @@ export interface QueryObserverOptions<
*/
placeholderData?:
| NonFunctionGuard<TQueryData>
| PlaceholderDataFunction<NonFunctionGuard<TQueryData>>
| PlaceholderDataFunction<
NonFunctionGuard<TQueryData>,
TError,
NonFunctionGuard<TQueryData>,
TQueryKey
>

_optimisticResults?: 'optimistic' | 'isRestoring'
}
Expand Down
4 changes: 2 additions & 2 deletions packages/query-core/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -297,9 +297,9 @@ function hasObjectPrototype(o: any): boolean {
return Object.prototype.toString.call(o) === '[object Object]'
}

export function sleep(timeout: number): Promise<void> {
export function sleep(ms: number): Promise<void> {
return new Promise((resolve) => {
setTimeout(resolve, timeout)
setTimeout(resolve, ms)
})
}

Expand Down

0 comments on commit 86b23ed

Please sign in to comment.