aboutsummaryrefslogtreecommitdiff
path: root/src/components/hooks/usePagedQuery.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/hooks/usePagedQuery.ts')
-rw-r--r--src/components/hooks/usePagedQuery.ts27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/components/hooks/usePagedQuery.ts b/src/components/hooks/usePagedQuery.ts
new file mode 100644
index 0000000..c818de6
--- /dev/null
+++ b/src/components/hooks/usePagedQuery.ts
@@ -0,0 +1,27 @@
+import type { UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
+import type { PageResult } from '@/lib/types';
+import { useApi } from './useApi';
+import { useNavigation } from './useNavigation';
+
+export function usePagedQuery<TData = any, TError = Error>({
+ queryKey,
+ queryFn,
+ ...options
+}: Omit<
+ UseQueryOptions<PageResult<TData>, TError, PageResult<TData>, readonly unknown[]>,
+ 'queryFn' | 'queryKey'
+> & {
+ queryKey: readonly unknown[];
+ queryFn: (params?: object) => Promise<PageResult<TData>> | PageResult<TData>;
+}): UseQueryResult<PageResult<TData>, TError> {
+ const {
+ query: { page, search },
+ } = useNavigation();
+ const { useQuery } = useApi();
+
+ return useQuery<PageResult<TData>, TError>({
+ queryKey: [...queryKey, page, search] as const,
+ queryFn: () => queryFn({ page, search }),
+ ...options,
+ });
+}