export function createQuery<
// eslint-disable-next-line @typescript-eslint/no-explicit-any
TArgs extends any[],
TQueryFnData = unknown,
TError = Error,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
queryOptionsFn: (
...args: TArgs
) => Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "select">,
defaultOptions?: Partial<
Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryFn" | "queryKey"
>
>,
) {
return <TSelectedData = TData>(
args: TArgs,
options?: Partial<
Omit<
UseQueryOptions<TQueryFnData, TError, TSelectedData, TQueryKey>,
"queryFn" | "queryKey"
>
>,
): UseQueryResult<TSelectedData, TError> => {
const queryOptions = {
...queryOptionsFn(...args),
...defaultOptions,
...options,
} as UseQueryOptions<TQueryFnData, TError, TSelectedData, TQueryKey>;
return useQuery(queryOptions);
};
}
export function createQuery<
// eslint-disable-next-line @typescript-eslint/no-explicit-any
TArgs extends any[],
TQueryFnData = unknown,
TError = Error,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
queryOptionsFn: (
...args: TArgs
) => Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "select">,
defaultOptions?: Partial<
Omit<
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
"queryFn" | "queryKey"
>
>,
) {
return <TSelectedData = TData>(
args: TArgs,
options?: Partial<
Omit<
UseQueryOptions<TQueryFnData, TError, TSelectedData, TQueryKey>,
"queryFn" | "queryKey"
>
>,
): UseQueryResult<TSelectedData, TError> => {
const queryOptions = {
...queryOptionsFn(...args),
...defaultOptions,
...options,
} as UseQueryOptions<TQueryFnData, TError, TSelectedData, TQueryKey>;
return useQuery(queryOptions);
};
}