umami/src/components/hooks/queries/useFilterQuery.ts

40 lines
914 B
TypeScript
Raw Normal View History

2024-02-03 07:20:13 +01:00
'use client';
2023-12-03 12:07:03 +01:00
import { UseQueryOptions } from '@tanstack/react-query';
2023-12-02 05:27:59 +01:00
import { useState, Dispatch, SetStateAction } from 'react';
2024-01-29 03:33:40 +01:00
import { useApi } from './useApi';
2023-12-03 12:07:03 +01:00
import { FilterResult, SearchFilter } from 'lib/types';
2023-09-29 14:29:22 +02:00
2023-12-02 05:27:59 +01:00
export interface FilterQueryResult<T> {
2023-12-03 12:07:03 +01:00
result: FilterResult<T>;
2023-12-02 05:27:59 +01:00
query: any;
params: SearchFilter;
setParams: Dispatch<SetStateAction<T | SearchFilter>>;
}
export function useFilterQuery<T = any>({
2023-12-03 12:07:03 +01:00
queryKey,
queryFn,
...options
}: UseQueryOptions): FilterQueryResult<T> {
2023-12-02 05:27:59 +01:00
const [params, setParams] = useState<T | SearchFilter>({
2023-09-29 14:29:22 +02:00
query: '',
page: 1,
});
2023-12-03 12:19:27 +01:00
2023-09-29 14:29:22 +02:00
const { useQuery } = useApi();
2023-12-03 12:07:03 +01:00
const { data, ...query } = useQuery({
2023-12-03 12:19:27 +01:00
queryKey: [{ ...queryKey, ...params }],
queryFn: () => queryFn(params as any),
2023-12-03 12:07:03 +01:00
...options,
});
2023-09-29 14:29:22 +02:00
2023-10-04 10:46:00 +02:00
return {
2023-12-03 12:07:03 +01:00
result: data as FilterResult<any>,
2023-12-02 05:27:59 +01:00
query,
2023-10-04 10:46:00 +02:00
params,
setParams,
};
2023-09-29 14:29:22 +02:00
}
export default useFilterQuery;