@ic-reactor/react 3.0.3-beta.5 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -14
- package/dist/createInfiniteQuery.d.ts +23 -10
- package/dist/createInfiniteQuery.d.ts.map +1 -1
- package/dist/createInfiniteQuery.js +24 -3
- package/dist/createInfiniteQuery.js.map +1 -1
- package/dist/createMutation.d.ts.map +1 -1
- package/dist/createMutation.js +11 -1
- package/dist/createMutation.js.map +1 -1
- package/dist/createSuspenseInfiniteQuery.d.ts +29 -5
- package/dist/createSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/createSuspenseInfiniteQuery.js +31 -3
- package/dist/createSuspenseInfiniteQuery.js.map +1 -1
- package/dist/hooks/index.d.ts +18 -6
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +15 -6
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useActorInfiniteQuery.d.ts +13 -11
- package/dist/hooks/useActorInfiniteQuery.d.ts.map +1 -1
- package/dist/hooks/useActorInfiniteQuery.js.map +1 -1
- package/dist/hooks/useActorMethod.d.ts +20 -24
- package/dist/hooks/useActorMethod.d.ts.map +1 -1
- package/dist/hooks/useActorMethod.js +29 -18
- package/dist/hooks/useActorMethod.js.map +1 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +13 -10
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +1 -1
- package/package.json +8 -7
- package/src/createActorHooks.ts +146 -0
- package/src/createAuthHooks.ts +137 -0
- package/src/createInfiniteQuery.ts +522 -0
- package/src/createMutation.ts +173 -0
- package/src/createQuery.ts +197 -0
- package/src/createSuspenseInfiniteQuery.ts +556 -0
- package/src/createSuspenseQuery.ts +215 -0
- package/src/hooks/index.ts +93 -0
- package/src/hooks/useActorInfiniteQuery.test.tsx +457 -0
- package/src/hooks/useActorInfiniteQuery.ts +134 -0
- package/src/hooks/useActorMethod.test.tsx +798 -0
- package/src/hooks/useActorMethod.ts +397 -0
- package/src/hooks/useActorMutation.test.tsx +220 -0
- package/src/hooks/useActorMutation.ts +124 -0
- package/src/hooks/useActorQuery.test.tsx +287 -0
- package/src/hooks/useActorQuery.ts +110 -0
- package/src/hooks/useActorSuspenseInfiniteQuery.test.tsx +472 -0
- package/src/hooks/useActorSuspenseInfiniteQuery.ts +137 -0
- package/src/hooks/useActorSuspenseQuery.test.tsx +254 -0
- package/src/hooks/useActorSuspenseQuery.ts +112 -0
- package/src/index.ts +21 -0
- package/src/types.ts +435 -0
- package/src/validation.ts +202 -0
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import { QueryKey, UseInfiniteQueryResult, InfiniteData } from "@tanstack/react-query";
|
|
1
|
+
import { QueryKey, UseInfiniteQueryResult, UseInfiniteQueryOptions, InfiniteData } from "@tanstack/react-query";
|
|
2
2
|
import { FunctionName, Reactor, TransformKey, ReactorArgs, ReactorReturnOk, ReactorReturnErr } from "@ic-reactor/core";
|
|
3
3
|
import { CallConfig } from "@icp-sdk/core/agent";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for useActorInfiniteQuery hook.
|
|
6
|
+
* Extends react-query's UseInfiniteQueryOptions with custom reactor params.
|
|
7
|
+
*/
|
|
8
|
+
export interface UseActorInfiniteQueryParameters<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown, TSelected = InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>> extends Omit<UseInfiniteQueryOptions<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>, TSelected, QueryKey, TPageParam>, "queryKey" | "queryFn" | "getNextPageParam" | "initialPageParam"> {
|
|
9
|
+
/** The reactor instance to use for method calls */
|
|
5
10
|
reactor: Reactor<A, T>;
|
|
11
|
+
/** The method name to call on the canister */
|
|
6
12
|
functionName: M;
|
|
13
|
+
/** Function to get args from page parameter */
|
|
7
14
|
getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>;
|
|
15
|
+
/** Agent call configuration (effectiveCanisterId, etc.) */
|
|
8
16
|
callConfig?: CallConfig;
|
|
17
|
+
/** Custom query key (auto-generated if not provided) */
|
|
9
18
|
queryKey?: QueryKey;
|
|
19
|
+
/** Initial page parameter */
|
|
10
20
|
initialPageParam: TPageParam;
|
|
21
|
+
/** Function to determine next page parameter */
|
|
11
22
|
getNextPageParam: (lastPage: ReactorReturnOk<A, M, T>, allPages: ReactorReturnOk<A, M, T>[], lastPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;
|
|
12
|
-
getPreviousPageParam?: (firstPage: ReactorReturnOk<A, M, T>, allPages: ReactorReturnOk<A, M, T>[], firstPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;
|
|
13
|
-
maxPages?: number;
|
|
14
|
-
enabled?: boolean;
|
|
15
|
-
staleTime?: number;
|
|
16
|
-
gcTime?: number;
|
|
17
|
-
refetchOnWindowFocus?: boolean;
|
|
18
|
-
refetchOnMount?: boolean;
|
|
19
|
-
refetchOnReconnect?: boolean;
|
|
20
|
-
select?: (data: InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>) => InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>;
|
|
21
23
|
}
|
|
22
24
|
export type UseActorInfiniteQueryConfig<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> = Omit<UseActorInfiniteQueryParameters<A, M, T, TPageParam>, "reactor">;
|
|
23
25
|
export type UseActorInfiniteQueryResult<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> = UseInfiniteQueryResult<InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>, ReactorReturnErr<A, M, T>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActorInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorInfiniteQuery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAER,sBAAsB,EACtB,YAAY,EACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,WAAW,+BAA+B,CAC9C,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO
|
|
1
|
+
{"version":3,"file":"useActorInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorInfiniteQuery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAER,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD;;;GAGG;AACH,MAAM,WAAW,+BAA+B,CAC9C,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,EACpB,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAC9D,SAAQ,IAAI,CACZ,uBAAuB,CACrB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,SAAS,EACT,QAAQ,EACR,UAAU,CACX,EACD,UAAU,GAAG,SAAS,GAAG,kBAAkB,GAAG,kBAAkB,CACjE;IACC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtB,8CAA8C;IAC9C,YAAY,EAAE,CAAC,CAAA;IACf,+CAA+C;IAC/C,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACxD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,6BAA6B;IAC7B,gBAAgB,EAAE,UAAU,CAAA;IAC5B,gDAAgD;IAChD,gBAAgB,EAAE,CAChB,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EACpC,aAAa,EAAE,UAAU,EACzB,aAAa,EAAE,UAAU,EAAE,KACxB,UAAU,GAAG,SAAS,GAAG,IAAI,CAAA;CACnC;AAED,MAAM,MAAM,2BAA2B,CACrC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,IAClB,IAAI,CAAC,+BAA+B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAA;AAEzE,MAAM,MAAM,2BAA2B,CACrC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,IAClB,sBAAsB,CACxB,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,EAClD,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAC1B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,GAChC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,EACpB,sEAOC,+BAA+B,CAChC,CAAC,EACD,CAAC,EACD,CAAC,EACD,UAAU,CACX,KAAG,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CA4BlD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActorInfiniteQuery.js","sourceRoot":"","sources":["../../src/hooks/useActorInfiniteQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAEL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"useActorInfiniteQuery.js","sourceRoot":"","sources":["../../src/hooks/useActorInfiniteQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAEL,gBAAgB,GAIjB,MAAM,uBAAuB,CAAA;AAqE9B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAKnC,EACA,OAAO,EACP,YAAY,EACZ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,GAAG,OAAO,EAMX,EAAoD,EAAE;IACrD,0DAA0D;IAC1D,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC,EAC5D,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAClC,CAAA;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,EAAE,SAAS,EAA6B,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,OAAO,CAAC,UAAU,CAAC;YACxB,YAAY;YACZ,IAAI;YACJ,UAAU;SACX,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAC7C,CAAA;IAED,OAAO,gBAAgB,CACrB;QACE,QAAQ,EAAE,YAAY;QACtB,OAAO;QACP,GAAG,OAAO;KACJ,EACR,OAAO,CAAC,WAAW,CACgC,CAAA;AACvD,CAAC,CAAA"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { type UseQueryResult, type UseMutationResult, type QueryKey } from "@tanstack/react-query";
|
|
1
|
+
import { type UseQueryResult, type UseMutationResult, type QueryKey, type QueryObserverOptions } from "@tanstack/react-query";
|
|
2
2
|
import { Reactor, BaseActor, FunctionName, TransformKey, ReactorArgs, ReactorReturnOk, ReactorReturnErr, FunctionType } from "@ic-reactor/core";
|
|
3
3
|
import { CallConfig } from "@icp-sdk/core/agent";
|
|
4
4
|
/**
|
|
5
5
|
* Configuration for useActorMethod hook.
|
|
6
|
+
* Extends react-query's QueryObserverOptions with custom reactor params.
|
|
7
|
+
*
|
|
8
|
+
* This is a unified hook that handles both query and mutation methods.
|
|
9
|
+
* Query-specific options (like refetchInterval) only apply to query methods.
|
|
10
|
+
* Mutation-specific options (like invalidateQueries) only apply to mutation methods.
|
|
6
11
|
*/
|
|
7
|
-
export interface UseActorMethodParameters<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid"> {
|
|
12
|
+
export interface UseActorMethodParameters<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid"> extends Omit<QueryObserverOptions<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>, ReactorReturnOk<A, M, T>, ReactorReturnOk<A, M, T>, QueryKey>, "queryKey" | "queryFn"> {
|
|
8
13
|
/** The reactor instance to use for method calls */
|
|
9
14
|
reactor: Reactor<A, T>;
|
|
10
15
|
/** The method name to call on the canister */
|
|
@@ -16,34 +21,26 @@ export interface UseActorMethodParameters<A = BaseActor, M extends FunctionName<
|
|
|
16
21
|
/** Custom query key (auto-generated if not provided) */
|
|
17
22
|
queryKey?: QueryKey;
|
|
18
23
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*/
|
|
22
|
-
enabled?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* For query methods: How long data stays fresh before refetching (ms)
|
|
25
|
-
* Default: 5 minutes
|
|
26
|
-
*/
|
|
27
|
-
staleTime?: number;
|
|
28
|
-
/**
|
|
29
|
-
* For query methods: Refetch interval in milliseconds
|
|
30
|
-
* Set to a number to enable polling
|
|
31
|
-
*/
|
|
32
|
-
refetchInterval?: number | false;
|
|
33
|
-
/**
|
|
34
|
-
* Callback when the method call succeeds
|
|
24
|
+
* Callback when the method call succeeds.
|
|
25
|
+
* Works for both query and mutation methods.
|
|
35
26
|
*/
|
|
36
27
|
onSuccess?: (data: ReactorReturnOk<A, M, T>) => void;
|
|
37
28
|
/**
|
|
38
|
-
* Callback when the method call fails
|
|
29
|
+
* Callback when the method call fails.
|
|
30
|
+
* Works for both query and mutation methods.
|
|
39
31
|
*/
|
|
40
32
|
onError?: (error: ReactorReturnErr<A, M, T>) => void;
|
|
41
33
|
/**
|
|
42
|
-
* Query keys to invalidate after a successful mutation
|
|
43
|
-
* Only applies to mutation methods
|
|
34
|
+
* Query keys to invalidate after a successful mutation.
|
|
35
|
+
* Only applies to mutation methods (updates).
|
|
44
36
|
*/
|
|
45
37
|
invalidateQueries?: QueryKey[];
|
|
46
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Configuration type for bound useActorMethod hook (reactor omitted).
|
|
41
|
+
* For use with createActorHooks.
|
|
42
|
+
*/
|
|
43
|
+
export type UseActorMethodConfig<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid"> = Omit<UseActorMethodParameters<A, M, T>, "reactor">;
|
|
47
44
|
/**
|
|
48
45
|
* Result type for useActorMethod hook.
|
|
49
46
|
* Provides a unified interface for both query and mutation methods.
|
|
@@ -70,7 +67,7 @@ export interface UseActorMethodResult<A = BaseActor, M extends FunctionName<A> =
|
|
|
70
67
|
* For queries: triggers a refetch
|
|
71
68
|
* For mutations: executes the mutation with the provided args
|
|
72
69
|
*/
|
|
73
|
-
call: (args?: ReactorArgs<A, M, T>) => Promise<ReactorReturnOk<A, M, T
|
|
70
|
+
call: (args?: ReactorArgs<A, M, T>) => Promise<ReactorReturnOk<A, M, T> | undefined>;
|
|
74
71
|
/**
|
|
75
72
|
* Reset the state (clear data and error).
|
|
76
73
|
* For queries: removes the query from cache
|
|
@@ -90,8 +87,7 @@ export interface UseActorMethodResult<A = BaseActor, M extends FunctionName<A> =
|
|
|
90
87
|
* A unified hook for calling canister methods that automatically handles
|
|
91
88
|
* both query and mutation methods based on the Candid interface.
|
|
92
89
|
*/
|
|
93
|
-
export declare function useActorMethod<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid">({ reactor, functionName, args, callConfig, queryKey: customQueryKey, enabled,
|
|
94
|
-
refetchInterval, onSuccess, onError, invalidateQueries, }: UseActorMethodParameters<A, M, T>): UseActorMethodResult<A, M, T>;
|
|
90
|
+
export declare function useActorMethod<A = BaseActor, M extends FunctionName<A> = FunctionName<A>, T extends TransformKey = "candid">({ reactor, functionName, args, callConfig, queryKey: customQueryKey, enabled, onSuccess, onError, invalidateQueries, ...queryOptions }: UseActorMethodParameters<A, M, T>): UseActorMethodResult<A, M, T>;
|
|
95
91
|
/**
|
|
96
92
|
* Creates a bound useMethod hook for a specific reactor instance.
|
|
97
93
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActorMethod.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorMethod.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"useActorMethod.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorMethod.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,11 @@ import { useQuery, useMutation, } from "@tanstack/react-query";
|
|
|
4
4
|
* A unified hook for calling canister methods that automatically handles
|
|
5
5
|
* both query and mutation methods based on the Candid interface.
|
|
6
6
|
*/
|
|
7
|
-
export function useActorMethod({ reactor, functionName, args, callConfig, queryKey: customQueryKey, enabled = true,
|
|
8
|
-
refetchInterval, onSuccess, onError, invalidateQueries, }) {
|
|
7
|
+
export function useActorMethod({ reactor, functionName, args, callConfig, queryKey: customQueryKey, enabled = true, onSuccess, onError, invalidateQueries, ...queryOptions }) {
|
|
9
8
|
// Determine if this is a query method by checking the IDL
|
|
10
9
|
const isQuery = useMemo(() => {
|
|
10
|
+
if (!reactor)
|
|
11
|
+
throw new Error("Reactor instance is required");
|
|
11
12
|
return reactor.isQueryMethod(functionName);
|
|
12
13
|
}, [reactor, functionName]);
|
|
13
14
|
const functionType = isQuery ? "query" : "update";
|
|
@@ -41,13 +42,13 @@ refetchInterval, onSuccess, onError, invalidateQueries, }) {
|
|
|
41
42
|
}
|
|
42
43
|
},
|
|
43
44
|
enabled: isQuery && enabled,
|
|
44
|
-
|
|
45
|
-
refetchInterval: refetchInterval || undefined,
|
|
45
|
+
...queryOptions,
|
|
46
46
|
}, reactor.queryClient);
|
|
47
47
|
// ============================================================================
|
|
48
48
|
// Mutation Implementation
|
|
49
49
|
// ============================================================================
|
|
50
50
|
const mutationResult = useMutation({
|
|
51
|
+
mutationKey: queryKey,
|
|
51
52
|
mutationFn: async (mutationArgs) => {
|
|
52
53
|
const result = await reactor.callMethod({
|
|
53
54
|
functionName,
|
|
@@ -76,34 +77,44 @@ refetchInterval, onSuccess, onError, invalidateQueries, }) {
|
|
|
76
77
|
if (isQuery) {
|
|
77
78
|
// For queries, refetch with new args if provided
|
|
78
79
|
if (callArgs !== undefined) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
try {
|
|
81
|
+
const result = await reactor.queryClient.fetchQuery({
|
|
82
|
+
queryKey,
|
|
83
|
+
queryFn: () => reactor.callMethod({
|
|
84
|
+
functionName,
|
|
85
|
+
args: callArgs,
|
|
86
|
+
callConfig,
|
|
87
|
+
}),
|
|
88
|
+
staleTime: 0,
|
|
89
|
+
});
|
|
90
|
+
onSuccess?.(result);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
onError?.(error);
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
87
97
|
}
|
|
88
98
|
// Otherwise just refetch
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
throw refetchResult.error;
|
|
92
|
-
}
|
|
93
|
-
return refetchResult.data;
|
|
99
|
+
const { data } = await queryResult.refetch();
|
|
100
|
+
return data;
|
|
94
101
|
}
|
|
95
102
|
else {
|
|
96
103
|
// For mutations, execute with provided args
|
|
97
|
-
return mutationResult
|
|
104
|
+
return mutationResult
|
|
105
|
+
.mutateAsync(callArgs)
|
|
106
|
+
.catch(() => undefined);
|
|
98
107
|
}
|
|
99
108
|
}, [
|
|
100
109
|
isQuery,
|
|
101
110
|
reactor,
|
|
102
111
|
functionName,
|
|
103
112
|
callConfig,
|
|
113
|
+
queryKey,
|
|
104
114
|
queryResult,
|
|
105
115
|
mutationResult,
|
|
106
116
|
onSuccess,
|
|
117
|
+
onError,
|
|
107
118
|
]);
|
|
108
119
|
// ============================================================================
|
|
109
120
|
// Reset Function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActorMethod.js","sourceRoot":"","sources":["../../src/hooks/useActorMethod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EACL,QAAQ,EACR,WAAW,
|
|
1
|
+
{"version":3,"file":"useActorMethod.js","sourceRoot":"","sources":["../../src/hooks/useActorMethod.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import { QueryKey, UseSuspenseInfiniteQueryResult, InfiniteData } from "@tanstack/react-query";
|
|
1
|
+
import { QueryKey, UseSuspenseInfiniteQueryResult, UseSuspenseInfiniteQueryOptions, InfiniteData } from "@tanstack/react-query";
|
|
2
2
|
import { FunctionName, Reactor, TransformKey, ReactorArgs, ReactorReturnOk, ReactorReturnErr } from "@ic-reactor/core";
|
|
3
3
|
import { CallConfig } from "@icp-sdk/core/agent";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for useActorSuspenseInfiniteQuery hook.
|
|
6
|
+
* Extends react-query's UseSuspenseInfiniteQueryOptions with custom reactor params.
|
|
7
|
+
*/
|
|
8
|
+
export interface UseActorSuspenseInfiniteQueryParameters<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown, TSelected = InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>> extends Omit<UseSuspenseInfiniteQueryOptions<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>, TSelected, QueryKey, TPageParam>, "queryKey" | "queryFn" | "getNextPageParam" | "initialPageParam"> {
|
|
9
|
+
/** The reactor instance to use for method calls */
|
|
5
10
|
reactor: Reactor<A, T>;
|
|
11
|
+
/** The method name to call on the canister */
|
|
6
12
|
functionName: M;
|
|
13
|
+
/** Function to get args from page parameter */
|
|
7
14
|
getArgs: (pageParam: TPageParam) => ReactorArgs<A, M, T>;
|
|
15
|
+
/** Agent call configuration (effectiveCanisterId, etc.) */
|
|
8
16
|
callConfig?: CallConfig;
|
|
17
|
+
/** Custom query key (auto-generated if not provided) */
|
|
9
18
|
queryKey?: QueryKey;
|
|
19
|
+
/** Initial page parameter */
|
|
10
20
|
initialPageParam: TPageParam;
|
|
21
|
+
/** Function to determine next page parameter */
|
|
11
22
|
getNextPageParam: (lastPage: ReactorReturnOk<A, M, T>, allPages: ReactorReturnOk<A, M, T>[], lastPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;
|
|
12
|
-
getPreviousPageParam?: (firstPage: ReactorReturnOk<A, M, T>, allPages: ReactorReturnOk<A, M, T>[], firstPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;
|
|
13
|
-
maxPages?: number;
|
|
14
|
-
staleTime?: number;
|
|
15
|
-
gcTime?: number;
|
|
16
|
-
refetchOnWindowFocus?: boolean;
|
|
17
|
-
refetchOnMount?: boolean;
|
|
18
|
-
refetchOnReconnect?: boolean;
|
|
19
|
-
select?: (data: InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>) => InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>;
|
|
20
23
|
}
|
|
21
24
|
export type UseActorSuspenseInfiniteQueryConfig<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> = Omit<UseActorSuspenseInfiniteQueryParameters<A, M, T, TPageParam>, "reactor">;
|
|
22
25
|
export type UseActorSuspenseInfiniteQueryResult<A, M extends FunctionName<A>, T extends TransformKey = "candid", TPageParam = unknown> = UseSuspenseInfiniteQueryResult<InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>, ReactorReturnErr<A, M, T>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActorSuspenseInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorSuspenseInfiniteQuery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAER,8BAA8B,EAC9B,YAAY,EACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,WAAW,uCAAuC,CACtD,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO
|
|
1
|
+
{"version":3,"file":"useActorSuspenseInfiniteQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorSuspenseInfiniteQuery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAER,8BAA8B,EAC9B,+BAA+B,EAC/B,YAAY,EACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD;;;GAGG;AACH,MAAM,WAAW,uCAAuC,CACtD,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,EACpB,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAC9D,SAAQ,IAAI,CACZ,+BAA+B,CAC7B,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzB,SAAS,EACT,QAAQ,EACR,UAAU,CACX,EACD,UAAU,GAAG,SAAS,GAAG,kBAAkB,GAAG,kBAAkB,CACjE;IACC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtB,8CAA8C;IAC9C,YAAY,EAAE,CAAC,CAAA;IACf,+CAA+C;IAC/C,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACxD,2DAA2D;IAC3D,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,6BAA6B;IAC7B,gBAAgB,EAAE,UAAU,CAAA;IAC5B,gDAAgD;IAChD,gBAAgB,EAAE,CAChB,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EACpC,aAAa,EAAE,UAAU,EACzB,aAAa,EAAE,UAAU,EAAE,KACxB,UAAU,GAAG,SAAS,GAAG,IAAI,CAAA;CACnC;AAED,MAAM,MAAM,mCAAmC,CAC7C,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,IAClB,IAAI,CACN,uCAAuC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAC5D,SAAS,CACV,CAAA;AAED,MAAM,MAAM,mCAAmC,CAC7C,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,IAClB,8BAA8B,CAChC,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,EAClD,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAC1B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,6BAA6B,GACxC,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACzB,CAAC,SAAS,YAAY,GAAG,QAAQ,EACjC,UAAU,GAAG,OAAO,EACpB,sEAOC,uCAAuC,CACxC,CAAC,EACD,CAAC,EACD,CAAC,EACD,UAAU,CACX,KAAG,mCAAmC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CA4B1D,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActorSuspenseInfiniteQuery.js","sourceRoot":"","sources":["../../src/hooks/useActorSuspenseInfiniteQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAEL,wBAAwB,
|
|
1
|
+
{"version":3,"file":"useActorSuspenseInfiniteQuery.js","sourceRoot":"","sources":["../../src/hooks/useActorSuspenseInfiniteQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAEL,wBAAwB,GAIzB,MAAM,uBAAuB,CAAA;AAwE9B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAK3C,EACA,OAAO,EACP,YAAY,EACZ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,GAAG,OAAO,EAMX,EAA4D,EAAE;IAC7D,0DAA0D;IAC1D,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC,EAC5D,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAClC,CAAA;IAED,wDAAwD;IACxD,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,EAAE,SAAS,EAA6B,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,OAAO,CAAC,UAAU,CAAC;YACxB,YAAY;YACZ,IAAI;YACJ,UAAU;SACX,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAC7C,CAAA;IAED,OAAO,wBAAwB,CAC7B;QACE,QAAQ,EAAE,YAAY;QACtB,OAAO;QACP,GAAG,OAAO;KACJ,EACR,OAAO,CAAC,WAAW,CACwC,CAAA;AAC/D,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ic-reactor/react",
|
|
3
|
-
"version": "3.0.3
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "IC Reactor React Library",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
19
|
+
"src",
|
|
19
20
|
"README.md"
|
|
20
21
|
],
|
|
21
22
|
"repository": {
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
"author": "Behrad Deylami",
|
|
42
43
|
"license": "MIT",
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@ic-reactor/core": "^3.0.3
|
|
45
|
+
"@ic-reactor/core": "^3.0.3"
|
|
45
46
|
},
|
|
46
47
|
"peerDependencies": {
|
|
47
48
|
"react": ">=18.0.0",
|
|
@@ -55,15 +56,15 @@
|
|
|
55
56
|
"@tanstack/react-query": "^5.90",
|
|
56
57
|
"@testing-library/dom": "^10.4.1",
|
|
57
58
|
"@testing-library/jest-dom": "^6.9.1",
|
|
58
|
-
"@testing-library/react": "^16.3.
|
|
59
|
-
"@types/react": "^19.2.
|
|
59
|
+
"@testing-library/react": "^16.3.2",
|
|
60
|
+
"@types/react": "^19.2.14",
|
|
60
61
|
"@types/react-dom": "^19.2.3",
|
|
61
62
|
"fake-indexeddb": "^6.2.5",
|
|
62
|
-
"jsdom": "^
|
|
63
|
+
"jsdom": "^28.1.0",
|
|
63
64
|
"react": "^19.2.3",
|
|
64
65
|
"react-dom": "^19.2.3",
|
|
65
66
|
"size-limit": "^12.0.0",
|
|
66
|
-
"vitest": "^4.0.
|
|
67
|
+
"vitest": "^4.0.18"
|
|
67
68
|
},
|
|
68
69
|
"size-limit": [
|
|
69
70
|
{
|
|
@@ -83,6 +84,6 @@
|
|
|
83
84
|
"build": "tsc",
|
|
84
85
|
"test": "vitest run",
|
|
85
86
|
"size": "size-limit",
|
|
86
|
-
"analyze": "size-limit
|
|
87
|
+
"analyze": "size-limit"
|
|
87
88
|
}
|
|
88
89
|
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actor Hooks Factory - Creates a full set of React hooks for a reactor instance.
|
|
3
|
+
*
|
|
4
|
+
* This is the primary entry point for using the library in React applications.
|
|
5
|
+
* It generates type-safe hooks for:
|
|
6
|
+
* - Queries (useActorQuery)
|
|
7
|
+
* - Suspense Queries (useActorSuspenseQuery)
|
|
8
|
+
* - Infinite Queries (useActorInfiniteQuery)
|
|
9
|
+
* - Suspense Infinite Queries (useActorSuspenseInfiniteQuery)
|
|
10
|
+
* - Mutations (useActorMutation)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const { useActorQuery, useActorMutation } = createActorHooks(reactor)
|
|
14
|
+
*
|
|
15
|
+
* // In component
|
|
16
|
+
* const { data } = useActorQuery({ functionName: 'get_user' })
|
|
17
|
+
* const { mutate } = useActorMutation({ functionName: 'update_user' })
|
|
18
|
+
*/
|
|
19
|
+
import {
|
|
20
|
+
Reactor,
|
|
21
|
+
DisplayReactor,
|
|
22
|
+
ReactorReturnErr,
|
|
23
|
+
ReactorReturnOk,
|
|
24
|
+
BaseActor,
|
|
25
|
+
FunctionName,
|
|
26
|
+
TransformKey,
|
|
27
|
+
} from "@ic-reactor/core"
|
|
28
|
+
import {
|
|
29
|
+
UseQueryResult,
|
|
30
|
+
UseSuspenseQueryResult,
|
|
31
|
+
UseInfiniteQueryResult,
|
|
32
|
+
UseSuspenseInfiniteQueryResult,
|
|
33
|
+
UseMutationResult,
|
|
34
|
+
InfiniteData,
|
|
35
|
+
} from "@tanstack/react-query"
|
|
36
|
+
import { createQuery } from "./createQuery"
|
|
37
|
+
import { createSuspenseQuery } from "./createSuspenseQuery"
|
|
38
|
+
import { createInfiniteQuery, InfiniteQueryConfig } from "./createInfiniteQuery"
|
|
39
|
+
import {
|
|
40
|
+
createSuspenseInfiniteQuery,
|
|
41
|
+
SuspenseInfiniteQueryConfig,
|
|
42
|
+
} from "./createSuspenseInfiniteQuery"
|
|
43
|
+
import { createMutation } from "./createMutation"
|
|
44
|
+
import {
|
|
45
|
+
useActorMethod,
|
|
46
|
+
UseActorMethodParameters,
|
|
47
|
+
} from "./hooks/useActorMethod"
|
|
48
|
+
import { QueryConfig, SuspenseQueryConfig, MutationConfig } from "./types"
|
|
49
|
+
|
|
50
|
+
export type ActorHooks<A, T extends TransformKey> = {
|
|
51
|
+
useActorQuery: {
|
|
52
|
+
<M extends FunctionName<A>>(
|
|
53
|
+
config: QueryConfig<A, M, T, ReactorReturnOk<A, M, T>>
|
|
54
|
+
): UseQueryResult<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>>
|
|
55
|
+
<M extends FunctionName<A>, TData>(
|
|
56
|
+
config: QueryConfig<A, M, T, TData>
|
|
57
|
+
): UseQueryResult<TData, ReactorReturnErr<A, M, T>>
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
useActorSuspenseQuery: {
|
|
61
|
+
<M extends FunctionName<A>>(
|
|
62
|
+
config: SuspenseQueryConfig<A, M, T, ReactorReturnOk<A, M, T>>
|
|
63
|
+
): UseSuspenseQueryResult<
|
|
64
|
+
ReactorReturnOk<A, M, T>,
|
|
65
|
+
ReactorReturnErr<A, M, T>
|
|
66
|
+
>
|
|
67
|
+
<M extends FunctionName<A>, TData>(
|
|
68
|
+
config: SuspenseQueryConfig<A, M, T, TData>
|
|
69
|
+
): UseSuspenseQueryResult<TData, ReactorReturnErr<A, M, T>>
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
useActorInfiniteQuery: <M extends FunctionName<A>, TPageParam = unknown>(
|
|
73
|
+
config: InfiniteQueryConfig<A, M, T, TPageParam>
|
|
74
|
+
) => UseInfiniteQueryResult<
|
|
75
|
+
InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>,
|
|
76
|
+
ReactorReturnErr<A, M, T>
|
|
77
|
+
>
|
|
78
|
+
|
|
79
|
+
useActorSuspenseInfiniteQuery: <
|
|
80
|
+
M extends FunctionName<A>,
|
|
81
|
+
TPageParam = unknown,
|
|
82
|
+
>(
|
|
83
|
+
config: SuspenseInfiniteQueryConfig<A, M, T, TPageParam>
|
|
84
|
+
) => UseSuspenseInfiniteQueryResult<
|
|
85
|
+
InfiniteData<ReactorReturnOk<A, M, T>, TPageParam>,
|
|
86
|
+
ReactorReturnErr<A, M, T>
|
|
87
|
+
>
|
|
88
|
+
|
|
89
|
+
useActorMutation: <M extends FunctionName<A>>(
|
|
90
|
+
config: MutationConfig<A, M, T>
|
|
91
|
+
) => UseMutationResult<ReactorReturnOk<A, M, T>, ReactorReturnErr<A, M, T>>
|
|
92
|
+
|
|
93
|
+
useActorMethod: <M extends FunctionName<A>>(
|
|
94
|
+
config: Omit<UseActorMethodParameters<A, M, T>, "reactor">
|
|
95
|
+
) => ReturnType<typeof useActorMethod<A, M, T>>
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function createActorHooks<A>(
|
|
99
|
+
reactor: DisplayReactor<A>
|
|
100
|
+
): ActorHooks<A, "display">
|
|
101
|
+
|
|
102
|
+
export function createActorHooks<
|
|
103
|
+
A = BaseActor,
|
|
104
|
+
T extends TransformKey = "candid",
|
|
105
|
+
>(reactor: Reactor<A, T>): ActorHooks<A, T>
|
|
106
|
+
|
|
107
|
+
export function createActorHooks<A, T extends TransformKey>(
|
|
108
|
+
reactor: Reactor<A, T>
|
|
109
|
+
): ActorHooks<A, T> {
|
|
110
|
+
return {
|
|
111
|
+
useActorQuery: ((config: any) => {
|
|
112
|
+
const { select, ...options } = config
|
|
113
|
+
return createQuery(reactor, config).useQuery(options)
|
|
114
|
+
}) as ActorHooks<A, T>["useActorQuery"],
|
|
115
|
+
|
|
116
|
+
useActorSuspenseQuery: ((config: any) => {
|
|
117
|
+
const { select, ...options } = config
|
|
118
|
+
return createSuspenseQuery(reactor, config).useSuspenseQuery(options)
|
|
119
|
+
}) as ActorHooks<A, T>["useActorSuspenseQuery"],
|
|
120
|
+
|
|
121
|
+
useActorInfiniteQuery: ((config) => {
|
|
122
|
+
const { select, ...options } = config
|
|
123
|
+
return createInfiniteQuery(reactor, config).useInfiniteQuery(options)
|
|
124
|
+
}) as ActorHooks<A, T>["useActorInfiniteQuery"],
|
|
125
|
+
|
|
126
|
+
useActorSuspenseInfiniteQuery: ((config) => {
|
|
127
|
+
const { select, ...options } = config
|
|
128
|
+
return createSuspenseInfiniteQuery(
|
|
129
|
+
reactor,
|
|
130
|
+
config
|
|
131
|
+
).useSuspenseInfiniteQuery(options)
|
|
132
|
+
}) as ActorHooks<A, T>["useActorSuspenseInfiniteQuery"],
|
|
133
|
+
|
|
134
|
+
useActorMutation: ((config) => {
|
|
135
|
+
const { onSuccess, invalidateQueries, ...options } = config
|
|
136
|
+
return createMutation(reactor, config).useMutation(options)
|
|
137
|
+
}) as ActorHooks<A, T>["useActorMutation"],
|
|
138
|
+
|
|
139
|
+
useActorMethod: (config) =>
|
|
140
|
+
useActorMethod({ ...config, reactor } as UseActorMethodParameters<
|
|
141
|
+
A,
|
|
142
|
+
any,
|
|
143
|
+
T
|
|
144
|
+
>),
|
|
145
|
+
}
|
|
146
|
+
}
|