88 type CreateMutationOptions ,
99 type CreateInfiniteQueryOptions ,
1010 type InfiniteData ,
11- CreateInfiniteQueryResult ,
12- QueryKey ,
1311} from '@tanstack/angular-query-v5' ;
1412import type { ModelMeta } from '@zenstackhq/runtime/cross' ;
1513import { inject , InjectionToken } from '@angular/core' ;
@@ -29,6 +27,9 @@ import {
2927
3028export { APIContext as RequestHandlerContext } from '../runtime/common' ;
3129
30+ type AnyFn = ( ...a : unknown [ ] ) => unknown ;
31+ const isFn = ( v : unknown ) : v is AnyFn => typeof v === 'function' ;
32+
3233export const AngularQueryContextKey = new InjectionToken < APIContext > ( 'zenstack-angular-query-context' ) ;
3334
3435/**
@@ -74,19 +75,21 @@ export function useModelQuery<TQueryFnData, TData, TError>(
7475 options ?: Omit < CreateQueryOptions < TQueryFnData , TError , TData > , 'queryKey' > & ExtraQueryOptions ,
7576 fetch ?: FetchFn
7677) {
77- const reqUrl = makeUrl ( url , args ) ;
78- const queryKey = getQueryKey ( model , url , args , {
79- infinite : false ,
80- optimisticUpdate : options ?. optimisticUpdate !== false ,
81- } ) ;
82- return {
83- queryKey,
84- ...injectQuery ( ( ) => ( {
78+ const query = injectQuery ( ( ) => {
79+ const resolvedArgs = isFn ( args ) ? args ( ) : args ;
80+
81+ const reqUrl = makeUrl ( url , resolvedArgs ) ;
82+ const queryKey = getQueryKey ( model , url , resolvedArgs , {
83+ infinite : false ,
84+ optimisticUpdate : options ?. optimisticUpdate !== false ,
85+ } ) ;
86+ return {
8587 queryKey,
8688 queryFn : ( { signal } ) => fetcher < TQueryFnData , false > ( reqUrl , { signal } , fetch , false ) ,
8789 ...options ,
88- } ) ) ,
89- } ;
90+ } ;
91+ } ) ;
92+ return query ;
9093}
9194
9295/**
@@ -108,19 +111,22 @@ export function useInfiniteModelQuery<TQueryFnData, TData, TError>(
108111 'queryKey' | 'initialPageParam'
109112 > ,
110113 fetch ?: FetchFn
111- ) : CreateInfiniteQueryResult < InfiniteData < TData > , TError > & { queryKey : QueryKey } {
112- const queryKey = getQueryKey ( model , url , args , { infinite : true , optimisticUpdate : false } ) ;
113- return {
114- queryKey,
115- ...injectInfiniteQuery ( ( ) => ( {
114+ ) {
115+ const query = injectInfiniteQuery ( ( ) => {
116+ const resolvedArgs = isFn ( args ) ? args ( ) : args ;
117+
118+ const queryKey = getQueryKey ( model , url , resolvedArgs , { infinite : true , optimisticUpdate : false } ) ;
119+
120+ return {
116121 queryKey,
117122 queryFn : ( { pageParam, signal } ) => {
118- return fetcher < TQueryFnData , false > ( makeUrl ( url , pageParam ?? args ) , { signal } , fetch , false ) ;
123+ return fetcher < TQueryFnData , false > ( makeUrl ( url , pageParam ?? resolvedArgs ) , { signal } , fetch , false ) ;
119124 } ,
120- initialPageParam : args ,
125+ initialPageParam : resolvedArgs ,
121126 ...options ,
122- } ) ) ,
123- } ;
127+ } ;
128+ } ) ;
129+ return query ;
124130}
125131
126132/**
0 commit comments