feat(sector-radar): 支持排名列表滚动加载

This commit is contained in:
yuxuanhui
2026-09-01 11:16:18 +08:00
parent c8b08add76
commit be31235fc7
4 changed files with 396 additions and 182 deletions
@@ -1,7 +1,14 @@
import { useQuery } from "@tanstack/react-query"
import {
useInfiniteQuery,
useQuery,
type InfiniteData,
} from "@tanstack/react-query"
import { getSectorRadarDates, getSectorRadarRankings } from "./sector-radar.api"
import type { RadarRankingsQuery } from "./sector-radar.types"
import type {
RadarRankingsQuery,
RadarRankingsResponse,
} from "./sector-radar.types"
export const sectorRadarDatesQueryKey = ["sectorRadar", "dates"] as const
@@ -16,7 +23,6 @@ export const sectorRadarRankingsQueryKey = (query: RadarRankingsQuery) =>
query.rankChangeDays,
query.side,
query.search ?? "",
query.page,
query.pageSize,
] as const
@@ -28,8 +34,33 @@ export function useSectorRadarDates() {
}
export function useSectorRadarRankings(query: RadarRankingsQuery) {
return useQuery({
queryFn: ({ signal }) => getSectorRadarRankings(query, signal),
return useInfiniteQuery<
RadarRankingsResponse,
Error,
InfiniteData<RadarRankingsResponse>,
ReturnType<typeof sectorRadarRankingsQueryKey>,
number
>({
getNextPageParam: (lastPage, pages, lastPageParam) => {
const loadedRowCount = pages.reduce(
(count, page) => count + page.rows.length,
0,
)
if (
lastPage.status !== "success" ||
lastPage.rows.length === 0 ||
lastPage.page !== lastPageParam ||
loadedRowCount >= lastPage.total
) {
return undefined
}
const nextPageParam = lastPageParam + 1
return Number.isSafeInteger(nextPageParam) ? nextPageParam : undefined
},
initialPageParam: 1,
queryFn: ({ pageParam, signal }) =>
getSectorRadarRankings({ ...query, page: pageParam }, signal),
queryKey: sectorRadarRankingsQueryKey(query),
})
}