MCPcopy Index your code
hub / github.com/coder/coder / usePaginatedQuery

Function usePaginatedQuery

site/src/hooks/usePaginatedQuery.ts:85–327  ·  view source on GitHub ↗
(
	options: UsePaginatedQueryOptions<
		TQueryFnData,
		TQueryPayload,
		TError,
		TData,
		TQueryKey
	>,
)

Source from the content-addressed store, hash-verified

83> = UseQueryResult<TData, TError> & PaginationResultInfo;
84
85export function usePaginatedQuery<
86 TQueryFnData extends PaginatedData = PaginatedData,
87 TQueryPayload = never,
88 TError = unknown,
89 TData extends PaginatedData = TQueryFnData,
90 TQueryKey extends QueryKey = QueryKey,
91>(
92 options: UsePaginatedQueryOptions<
93 TQueryFnData,
94 TQueryPayload,
95 TError,
96 TData,
97 TQueryKey
98 >,
99): UsePaginatedQueryResult<TData, TError> {
100 const {
101 queryKey,
102 queryPayload,
103 onInvalidPageChange,
104 searchParams: outerSearchParams,
105 queryFn: outerQueryFn,
106 prefetch = true,
107 staleTime = 60 * 1000, // One minute
108 ...extraOptions
109 } = options;
110
111 const [innerSearchParams, setSearchParams] = useSearchParams();
112 const searchParams = outerSearchParams ?? innerSearchParams;
113
114 const limit = DEFAULT_RECORDS_PER_PAGE;
115 const currentPage = parsePage(searchParams);
116 const currentPageOffset = (currentPage - 1) * limit;
117
118 type Options = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>;
119 const getQueryOptionsFromPage = (pageNumber: number): Options => {
120 const pageParams: QueryPageParams = {
121 pageNumber,
122 limit,
123 offset: (pageNumber - 1) * limit,
124 searchParams: getParamsWithoutPage(searchParams),
125 };
126
127 const payload = queryPayload?.(pageParams) as RuntimePayload<TQueryPayload>;
128 return {
129 staleTime,
130 queryKey: queryKey({ ...pageParams, payload }),
131 queryFn: (context: QueryFunctionContext<TQueryKey>) => {
132 return outerQueryFn({ ...context, ...pageParams, payload });
133 },
134 };
135 };
136
137 // Not using infinite query right now because that requires a fair bit of list
138 // virtualization as the lists get bigger (especially for the audit logs).
139 // Keeping initial implementation simple.
140 const query = useQuery<TQueryFnData, TError, TData, TQueryKey>({
141 ...extraOptions,
142 ...getQueryOptionsFromPage(currentPage),

Callers 9

GroupPageFunction · 0.90
ConnectionLogPageFunction · 0.90
UsersPageFunction · 0.90
AuditPageFunction · 0.90
RequestLogsPageFunction · 0.90
AISessionListPageFunction · 0.90
OrganizationMembersPageFunction · 0.90
AgentSettingsSpendPageFunction · 0.90
renderFunction · 0.90

Calls 7

parsePageFunction · 0.85
getQueryOptionsFromPageFunction · 0.85
clampFunction · 0.85
getParamsWithoutPageFunction · 0.85
onPageChangeFunction · 0.85
StringFunction · 0.50
setMethod · 0.45

Tested by 1

renderFunction · 0.72