import { useQuery, keepPreviousData, useQueryClient, } from "@tanstack/react-query"; import type { UseQueryOptions } from "@tanstack/react-query"; interface PaginatedResult { data: T[]; pagination: { total: number; page: number; per_page: number; total_pages: number; }; } /** * Wrapper around useQuery for paginated list endpoints. * Accepts the return value of queryOptions() from lib/queries/* * and extracts items + pagination from the response. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function usePaginatedQuery(options: any) { const query = useQuery({ ...options, placeholderData: keepPreviousData, } as UseQueryOptions>); const data = query.data as PaginatedResult | undefined; return { items: (data?.data ?? []) as T[], pagination: data?.pagination ?? null, isPending: query.isPending, isFetching: query.isFetching, isPlaceholderData: query.isPlaceholderData, isError: query.isError, error: query.error, refetch: query.refetch, }; } export { useQueryClient, useQuery, keepPreviousData };