Skip to content
4 changes: 2 additions & 2 deletions packages/query-core/src/infiniteQueryObserver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ type InfiniteQueryObserverListener<TData, TError> = (
export class InfiniteQueryObserver<
TQueryFnData = unknown,
TError = RegisteredError,
TData = TQueryFnData,
TData = InfiniteData<TQueryFnData>,
TQueryData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
> extends QueryObserver<
TQueryFnData,
TError,
InfiniteData<TData>,
TData,
InfiniteData<TQueryData>,
TQueryKey
> {
Expand Down
8 changes: 4 additions & 4 deletions packages/query-core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ export interface InfiniteQueryObserverOptions<
> extends QueryObserverOptions<
TQueryFnData,
TError,
InfiniteData<TData>,
TData,
InfiniteData<TQueryData>,
TQueryKey,
TPageParam
Expand Down Expand Up @@ -501,7 +501,7 @@ export type QueryObserverResult<TData = unknown, TError = RegisteredError> =
export interface InfiniteQueryObserverBaseResult<
TData = unknown,
TError = RegisteredError,
> extends QueryObserverBaseResult<InfiniteData<TData>, TError> {
> extends QueryObserverBaseResult<TData, TError> {
fetchNextPage: (
options?: FetchNextPageOptions,
) => Promise<InfiniteQueryObserverResult<TData, TError>>
Expand Down Expand Up @@ -546,7 +546,7 @@ export interface InfiniteQueryObserverRefetchErrorResult<
TData = unknown,
TError = RegisteredError,
> extends InfiniteQueryObserverBaseResult<TData, TError> {
data: InfiniteData<TData>
data: TData
error: TError
isError: true
isPending: false
Expand All @@ -560,7 +560,7 @@ export interface InfiniteQueryObserverSuccessResult<
TData = unknown,
TError = RegisteredError,
> extends InfiniteQueryObserverBaseResult<TData, TError> {
data: InfiniteData<TData>
data: TData
error: null
isError: false
isPending: false
Expand Down
4 changes: 2 additions & 2 deletions packages/react-query/src/__tests__/suspense.test.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { fireEvent, waitFor } from '@testing-library/react'
import * as React from 'react'
import { ErrorBoundary } from 'react-error-boundary'
import type { UseInfiniteQueryResult, UseQueryResult } from '..'
import type { InfiniteData, UseInfiniteQueryResult, UseQueryResult } from '..'
import {
QueryCache,
QueryErrorResetBoundary,
Expand Down Expand Up @@ -68,7 +68,7 @@ describe("useQuery's in Suspense mode", () => {

it('should return the correct states for a successful infinite query', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const [multiplier, setMultiplier] = React.useState(1)
Expand Down
32 changes: 17 additions & 15 deletions packages/react-query/src/__tests__/useInfiniteQuery.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe('useInfiniteQuery', () => {

it('should return the correct states for a successful query', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -172,7 +172,7 @@ describe('useInfiniteQuery', () => {

it('should keep the previous data when placeholderData is set', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<string>[] = []
const states: UseInfiniteQueryResult<InfiniteData<string>>[] = []

function Page() {
const [order, setOrder] = React.useState('desc')
Expand Down Expand Up @@ -268,7 +268,7 @@ describe('useInfiniteQuery', () => {

it('should be able to select a part of the data', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<string>[] = []
const states: UseInfiniteQueryResult<InfiniteData<string>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -305,7 +305,9 @@ describe('useInfiniteQuery', () => {

it('should be able to select a new result and not cause infinite renders', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<{ count: number; id: number }>[] = []
const states: UseInfiniteQueryResult<
InfiniteData<{ count: number; id: number }>
>[] = []
let selectCalled = 0

function Page() {
Expand Down Expand Up @@ -353,7 +355,7 @@ describe('useInfiniteQuery', () => {

it('should be able to reverse the data', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -410,7 +412,7 @@ describe('useInfiniteQuery', () => {

it('should be able to fetch a previous page', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const start = 10
Expand Down Expand Up @@ -493,7 +495,7 @@ describe('useInfiniteQuery', () => {

it('should be able to refetch when providing page params automatically', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -602,7 +604,7 @@ describe('useInfiniteQuery', () => {

it('should silently cancel any ongoing fetch when fetching more', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const start = 10
Expand Down Expand Up @@ -821,7 +823,7 @@ describe('useInfiniteQuery', () => {

it('should keep fetching first page when not loaded yet and triggering fetch more', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const start = 10
Expand Down Expand Up @@ -920,7 +922,7 @@ describe('useInfiniteQuery', () => {

it('should be able to set new pages with the query client', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const [firstPage, setFirstPage] = React.useState(0)
Expand Down Expand Up @@ -1002,7 +1004,7 @@ describe('useInfiniteQuery', () => {

it('should only refetch the first page when initialData is provided', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -1067,7 +1069,7 @@ describe('useInfiniteQuery', () => {

it('should set hasNextPage to false if getNextPageParam returns undefined', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -1105,7 +1107,7 @@ describe('useInfiniteQuery', () => {

it('should compute hasNextPage correctly using initialData', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -1144,7 +1146,7 @@ describe('useInfiniteQuery', () => {

it('should compute hasNextPage correctly for falsy getFetchMore return value using initialData', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<number>[] = []
const states: UseInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down Expand Up @@ -1183,7 +1185,7 @@ describe('useInfiniteQuery', () => {

it('should not use selected data when computing hasNextPage', async () => {
const key = queryKey()
const states: UseInfiniteQueryResult<string>[] = []
const states: UseInfiniteQueryResult<InfiniteData<string>>[] = []

function Page() {
const state = useInfiniteQuery({
Expand Down
22 changes: 20 additions & 2 deletions packages/react-query/src/__tests__/useInfiniteQuery.type.test.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { InfiniteData } from '@tanstack/query-core'
import { QueryClient } from '@tanstack/query-core'
import { useInfiniteQuery } from '../useInfiniteQuery'
import { useQuery } from '../useQuery'
import type { Expect, Equal } from './utils'
import { doNotExecute } from './utils'
import type { InfiniteData } from '@tanstack/query-core'
import { QueryClient } from '@tanstack/query-core'

describe('pageParam', () => {
it('defaultPageParam should define type of param passed to queryFunctionContext', () => {
Expand Down Expand Up @@ -62,6 +62,24 @@ describe('pageParam', () => {
})

describe('select', () => {
it('should still return paginated data if no select result', () => {
doNotExecute(() => {
const infiniteQuery = useInfiniteQuery({
queryKey: ['key'],
queryFn: ({ pageParam }) => {
return pageParam * 5
},
defaultPageParam: 1,
getNextPageParam: () => undefined,
})

const result: Expect<
Equal<InfiniteData<number> | undefined, (typeof infiniteQuery)['data']>
> = true
return result
})
})

it('should be able to transform data to arbitrary result', () => {
doNotExecute(() => {
const infiniteQuery = useInfiniteQuery({
Expand Down
3 changes: 2 additions & 1 deletion packages/react-query/src/useInfiniteQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type {
QueryKey,
QueryClient,
RegisteredError,
InfiniteData,
} from '@tanstack/query-core'
import { InfiniteQueryObserver } from '@tanstack/query-core'
import type { UseInfiniteQueryOptions, UseInfiniteQueryResult } from './types'
Expand All @@ -12,7 +13,7 @@ import { useBaseQuery } from './useBaseQuery'
export function useInfiniteQuery<
TQueryFnData,
TError = RegisteredError,
TData = TQueryFnData,
TData = InfiniteData<TQueryFnData>,
TQueryKey extends QueryKey = QueryKey,
TPageParam = unknown,
>(
Expand Down
33 changes: 17 additions & 16 deletions packages/solid-query/src/__tests__/createInfiniteQuery.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ describe('useInfiniteQuery', () => {

it('should return the correct states for a successful query', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -191,7 +191,7 @@ describe('useInfiniteQuery', () => {

it('should keep the previous data when placeholderData is set', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<string>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<string>>[] = []

function Page() {
const [order, setOrder] = createSignal('desc')
Expand Down Expand Up @@ -286,7 +286,7 @@ describe('useInfiniteQuery', () => {

it('should be able to select a part of the data', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<string>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<string>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -326,8 +326,9 @@ describe('useInfiniteQuery', () => {

it('should be able to select a new result and not cause infinite renders', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<{ count: number; id: number }>[] =
[]
const states: CreateInfiniteQueryResult<
InfiniteData<{ count: number; id: number }>
>[] = []
let selectCalled = 0

function Page() {
Expand Down Expand Up @@ -372,7 +373,7 @@ describe('useInfiniteQuery', () => {

it('should be able to reverse the data', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -436,7 +437,7 @@ describe('useInfiniteQuery', () => {

it('should be able to fetch a previous page', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const start = 10
Expand Down Expand Up @@ -515,7 +516,7 @@ describe('useInfiniteQuery', () => {

it('should be able to refetch when providing page params automatically', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -629,7 +630,7 @@ describe('useInfiniteQuery', () => {

it('should silently cancel any ongoing fetch when fetching more', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const start = 10
Expand Down Expand Up @@ -865,7 +866,7 @@ describe('useInfiniteQuery', () => {

it('should keep fetching first page when not loaded yet and triggering fetch more', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const start = 10
Expand Down Expand Up @@ -975,7 +976,7 @@ describe('useInfiniteQuery', () => {

it('should be able to set new pages with the query client', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const [firstPage, setFirstPage] = createSignal(0)
Expand Down Expand Up @@ -1063,7 +1064,7 @@ describe('useInfiniteQuery', () => {

it('should only refetch the first page when initialData is provided', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -1134,7 +1135,7 @@ describe('useInfiniteQuery', () => {

it('should set hasNextPage to false if getNextPageParam returns undefined', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -1178,7 +1179,7 @@ describe('useInfiniteQuery', () => {

it('should compute hasNextPage correctly using initialData', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -1222,7 +1223,7 @@ describe('useInfiniteQuery', () => {

it('should compute hasNextPage correctly for falsy getFetchMore return value using initialData', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<number>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down Expand Up @@ -1266,7 +1267,7 @@ describe('useInfiniteQuery', () => {

it('should not use selected data when computing hasNextPage', async () => {
const key = queryKey()
const states: CreateInfiniteQueryResult<string>[] = []
const states: CreateInfiniteQueryResult<InfiniteData<string>>[] = []

function Page() {
const state = createInfiniteQuery(() => ({
Expand Down
Loading