Skip to content

fix(types): extract DefinedQueryResult and use that in tests #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
useQuery,
UseQueryResult,
useQueries,
DefinedUseQueryResult,
} from '@tanstack/react-query'
import {
createQueryClient,
Expand Down Expand Up @@ -200,7 +201,7 @@ describe('PersistQueryClientProvider', () => {

test('should show initialData while restoring', async () => {
const key = queryKey()
const states: UseQueryResult<string>[] = []
const states: DefinedUseQueryResult<string>[] = []

const queryClient = createQueryClient()
await queryClient.prefetchQuery(key, () => Promise.resolve('hydrated'))
Expand Down
25 changes: 13 additions & 12 deletions packages/react-query/src/__tests__/useQuery.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
QueryFunction,
QueryFunctionContext,
UseQueryOptions,
DefinedUseQueryResult,
} from '..'
import { ErrorBoundary } from 'react-error-boundary'

Expand Down Expand Up @@ -142,7 +143,7 @@ describe('useQuery', () => {
) => Promise<TQueryFnData>,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'queryFn'
'queryKey' | 'queryFn' | 'initialData'
>,
) => useQuery(qk, () => fetcher(qk[1], 'token'), options)
const test = useWrappedQuery([''], async () => '1')
Expand All @@ -159,7 +160,7 @@ describe('useQuery', () => {
fetcher: () => Promise<TQueryFnData>,
options?: Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'queryFn'
'queryKey' | 'queryFn' | 'initialData'
>,
) => useQuery(qk, fetcher, options)
const testFuncStyle = useWrappedFuncStyleQuery([''], async () => true)
Expand Down Expand Up @@ -1295,7 +1296,7 @@ describe('useQuery', () => {

it('should use query function from hook when the existing query does not have a query function', async () => {
const key = queryKey()
const results: UseQueryResult<string>[] = []
const results: DefinedUseQueryResult<string>[] = []

queryClient.setQueryData(key, 'set')

Expand Down Expand Up @@ -1712,7 +1713,7 @@ describe('useQuery', () => {

it('should not show initial data from next query if keepPreviousData is set', async () => {
const key = queryKey()
const states: UseQueryResult<number>[] = []
const states: DefinedUseQueryResult<number>[] = []

function Page() {
const [count, setCount] = React.useState(0)
Expand Down Expand Up @@ -3025,7 +3026,7 @@ describe('useQuery', () => {

it('should fetch if initial data is set', async () => {
const key = queryKey()
const states: UseQueryResult<string>[] = []
const states: DefinedUseQueryResult<string>[] = []

function Page() {
const state = useQuery(key, () => 'data', {
Expand Down Expand Up @@ -3055,7 +3056,7 @@ describe('useQuery', () => {

it('should not fetch if initial data is set with a stale time', async () => {
const key = queryKey()
const states: UseQueryResult<string>[] = []
const states: DefinedUseQueryResult<string>[] = []

function Page() {
const state = useQuery(key, () => 'data', {
Expand Down Expand Up @@ -3085,7 +3086,7 @@ describe('useQuery', () => {

it('should fetch if initial data updated at is older than stale time', async () => {
const key = queryKey()
const states: UseQueryResult<string>[] = []
const states: DefinedUseQueryResult<string>[] = []

const oneSecondAgo = Date.now() - 1000

Expand Down Expand Up @@ -3123,7 +3124,7 @@ describe('useQuery', () => {

it('should fetch if "initial data updated at" is exactly 0', async () => {
const key = queryKey()
const states: UseQueryResult<string>[] = []
const states: DefinedUseQueryResult<string>[] = []

function Page() {
const state = useQuery(key, () => 'data', {
Expand Down Expand Up @@ -3154,7 +3155,7 @@ describe('useQuery', () => {

it('should keep initial data when the query key changes', async () => {
const key = queryKey()
const states: UseQueryResult<{ count: number }>[] = []
const states: DefinedUseQueryResult<{ count: number }>[] = []

function Page() {
const [count, setCount] = React.useState(0)
Expand Down Expand Up @@ -3629,7 +3630,7 @@ describe('useQuery', () => {

it('should mark query as fetching, when using initialData', async () => {
const key = queryKey()
const results: UseQueryResult<string>[] = []
const results: DefinedUseQueryResult<string>[] = []

function Page() {
const result = useQuery(key, () => 'serverData', { initialData: 'data' })
Expand All @@ -3648,7 +3649,7 @@ describe('useQuery', () => {

it('should initialize state properly, when initialData is falsy', async () => {
const key = queryKey()
const results: UseQueryResult<number>[] = []
const results: DefinedUseQueryResult<number>[] = []

function Page() {
const result = useQuery(key, () => 1, { initialData: 0 })
Expand All @@ -3668,7 +3669,7 @@ describe('useQuery', () => {
// // See https://github.com/tannerlinsley/react-query/issues/214
it('data should persist when enabled is changed to false', async () => {
const key = queryKey()
const results: UseQueryResult<string>[] = []
const results: DefinedUseQueryResult<string>[] = []

function Page() {
const [shouldFetch, setShouldFetch] = React.useState(true)
Expand Down
4 changes: 2 additions & 2 deletions packages/react-query/src/__tests__/useQuery.types.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <

export type Expect<T extends true> = T

const doNotExecute = (_func: () => void) => {}
const doNotExecute = (_func: () => void) => true

describe('useQuery', () => {
describe('initialData', () => {
describe('Config object overload', () => {
it('TData should always be defined when initialData is provided as an object', () => {
doNotExecute(() => {
Expand Down
5 changes: 5 additions & 0 deletions packages/react-query/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ export type UseQueryResult<
TError = unknown,
> = UseBaseQueryResult<TData, TError>

export type DefinedUseQueryResult<TData = unknown, TError = unknown> = Omit<
UseQueryResult<TData, TError>,
'data'
> & { data: TData }

export type UseInfiniteQueryResult<
TData = unknown,
TError = unknown,
Expand Down
8 changes: 4 additions & 4 deletions packages/react-query/src/useQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
QueryKey,
QueryObserver,
} from '@tanstack/query-core'
import { UseQueryOptions, UseQueryResult } from './types'
import { DefinedUseQueryResult, UseQueryOptions, UseQueryResult } from './types'
import { useBaseQuery } from './useBaseQuery'

// HOOK
Expand All @@ -31,7 +31,7 @@ export function useQuery<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'initialData'
> & { initialData: TData | (() => TData) },
): Omit<UseQueryResult<TData, TError>, 'data'> & { data: TData }
): DefinedUseQueryResult<TData, TError>

export function useQuery<
TQueryFnData = unknown,
Expand All @@ -57,7 +57,7 @@ export function useQuery<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'initialData'
> & { initialData: TData | (() => TData) },
): Omit<UseQueryResult<TData, TError>, 'data'> & { data: TData }
): DefinedUseQueryResult<TData, TError>

export function useQuery<
TQueryFnData = unknown,
Expand Down Expand Up @@ -85,7 +85,7 @@ export function useQuery<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
'queryKey' | 'queryFn' | 'initialData'
> & { initialData: TData | (() => TData) },
): Omit<UseQueryResult<TData, TError>, 'data'> & { data: TData }
): DefinedUseQueryResult<TData, TError>

export function useQuery<
TQueryFnData,
Expand Down