RequestIndexPaginationDto
列表查询 — currentPage / pageSize / query。
TSXfeature.queries.ts
1import { useQuery, type UseQueryOptions } from "@tanstack/react-query";
2import type { RequestIndexPaginationDto } from "@quan-erp/shared-frontend-core";
3import { getItemsApi } from "./feature.api";
4
5function resolveIndexPagination(
6 query: RequestIndexPaginationDto = {},
7 defaults: { pageSize?: number } = {},
8) {
9 const currentPage = query.currentPage ?? 1;
10 const pageSize = query.pageSize ?? defaults.pageSize ?? 100;
11 const skip = (currentPage - 1) * pageSize;
12 return { currentPage, pageSize, skip, query: query.query };
13}
14
15export function useItemsQuery(
16 query: RequestIndexPaginationDto = {},
17 option?: Omit<UseQueryOptions<ItemDto[]>, "queryFn" | "queryKey">,
18) {
19 const { currentPage, pageSize, skip, query: search } =
20 resolveIndexPagination(query);
21 return useQuery({
22 queryKey: ["items", currentPage, pageSize, search],
23 queryFn: () => getItemsApi.fetchFn(skip, pageSize),
24 ...(option || {}),
25 });
26}
27
28// Call site
29const { data: items = [] } = useItemsQuery({
30 currentPage: 1,
31 pageSize: 50,
32 query: "milk",
33});