@ic-reactor/react 3.6.0 → 3.8.0
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 +117 -13
- package/dist/auth/authentication-manager.d.ts +98 -0
- package/dist/auth/authentication-manager.d.ts.map +1 -0
- package/dist/auth/authentication-manager.js +532 -0
- package/dist/auth/authentication-manager.js.map +1 -0
- package/dist/auth/constants.d.ts +18 -0
- package/dist/auth/constants.d.ts.map +1 -0
- package/dist/auth/constants.js +18 -0
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/createIdentityAttributeHooks.d.ts +14 -0
- package/dist/auth/createIdentityAttributeHooks.d.ts.map +1 -0
- package/dist/auth/createIdentityAttributeHooks.js +54 -0
- package/dist/auth/createIdentityAttributeHooks.js.map +1 -0
- package/dist/auth/identity-attributes-manager.d.ts +26 -0
- package/dist/auth/identity-attributes-manager.d.ts.map +1 -0
- package/dist/auth/identity-attributes-manager.js +108 -0
- package/dist/auth/identity-attributes-manager.js.map +1 -0
- package/dist/auth/identity-attributes.d.ts +19 -0
- package/dist/auth/identity-attributes.d.ts.map +1 -0
- package/dist/auth/identity-attributes.js +170 -0
- package/dist/auth/identity-attributes.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/types.d.ts +182 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/createActorHooks.d.ts +16 -16
- package/dist/createActorHooks.d.ts.map +1 -1
- package/dist/createActorHooks.js +6 -6
- package/dist/createActorHooks.js.map +1 -1
- package/dist/createInfiniteQuery.d.ts +33 -33
- package/dist/createInfiniteQuery.d.ts.map +1 -1
- package/dist/createInfiniteQuery.js +6 -6
- package/dist/createInfiniteQuery.js.map +1 -1
- package/dist/createMutation.d.ts +13 -2
- package/dist/createMutation.d.ts.map +1 -1
- package/dist/createMutation.js +11 -0
- package/dist/createMutation.js.map +1 -1
- package/dist/createQuery.d.ts +13 -3
- package/dist/createQuery.d.ts.map +1 -1
- package/dist/createQuery.js +16 -6
- package/dist/createQuery.js.map +1 -1
- package/dist/createSuspenseInfiniteQuery.d.ts +32 -32
- package/dist/createSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/createSuspenseInfiniteQuery.js +6 -6
- package/dist/createSuspenseInfiniteQuery.js.map +1 -1
- package/dist/createSuspenseQuery.d.ts +3 -3
- package/dist/createSuspenseQuery.d.ts.map +1 -1
- package/dist/createSuspenseQuery.js +1 -1
- package/dist/createSuspenseQuery.js.map +1 -1
- package/dist/defineReactor.d.ts +124 -0
- package/dist/defineReactor.d.ts.map +1 -0
- package/dist/defineReactor.js +145 -0
- package/dist/defineReactor.js.map +1 -0
- package/dist/{createAuthHooks.d.ts → hooks/createAuthHooks.d.ts} +6 -13
- package/dist/hooks/createAuthHooks.d.ts.map +1 -0
- package/dist/{createAuthHooks.js → hooks/createAuthHooks.js} +18 -58
- package/dist/hooks/createAuthHooks.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useActorInfiniteQuery.d.ts +9 -9
- package/dist/hooks/useActorInfiniteQuery.d.ts.map +1 -1
- package/dist/hooks/useActorInfiniteQuery.js +3 -1
- package/dist/hooks/useActorInfiniteQuery.js.map +1 -1
- package/dist/hooks/useActorMethod.d.ts +17 -17
- package/dist/hooks/useActorMethod.d.ts.map +1 -1
- package/dist/hooks/useActorMethod.js.map +1 -1
- package/dist/hooks/useActorMutation.d.ts +18 -7
- package/dist/hooks/useActorMutation.d.ts.map +1 -1
- package/dist/hooks/useActorMutation.js +11 -0
- package/dist/hooks/useActorMutation.js.map +1 -1
- package/dist/hooks/useActorQuery.d.ts +8 -8
- package/dist/hooks/useActorQuery.d.ts.map +1 -1
- package/dist/hooks/useActorQuery.js.map +1 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +9 -9
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +1 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.js +3 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +1 -1
- package/dist/hooks/useActorSuspenseQuery.d.ts +8 -8
- package/dist/hooks/useActorSuspenseQuery.d.ts.map +1 -1
- package/dist/hooks/useActorSuspenseQuery.js.map +1 -1
- package/dist/index.d.ts +11 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +24 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -2
- package/dist/utils.js.map +1 -1
- package/llms.txt +48 -0
- package/package.json +34 -23
- package/src/auth/authentication-manager.ts +591 -0
- package/src/auth/constants.ts +25 -0
- package/src/auth/createIdentityAttributeHooks.ts +83 -0
- package/src/auth/identity-attributes-manager.ts +136 -0
- package/src/auth/identity-attributes.ts +270 -0
- package/src/auth/index.ts +7 -0
- package/src/auth/types.ts +204 -0
- package/src/createActorHooks.ts +90 -58
- package/src/createInfiniteQuery.ts +154 -98
- package/src/createMutation.ts +35 -19
- package/src/createQuery.ts +94 -50
- package/src/createSuspenseInfiniteQuery.ts +166 -115
- package/src/createSuspenseQuery.ts +69 -43
- package/src/defineReactor.ts +272 -0
- package/src/{createAuthHooks.ts → hooks/createAuthHooks.ts} +23 -99
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useActorInfiniteQuery.ts +44 -30
- package/src/hooks/useActorMethod.ts +62 -53
- package/src/hooks/useActorMutation.ts +47 -30
- package/src/hooks/useActorQuery.ts +36 -32
- package/src/hooks/useActorSuspenseInfiniteQuery.ts +56 -30
- package/src/hooks/useActorSuspenseQuery.ts +42 -32
- package/src/index.ts +12 -10
- package/src/types.ts +76 -71
- package/src/utils.ts +15 -2
- package/dist/createAuthHooks.d.ts.map +0 -1
- package/dist/createAuthHooks.js.map +0 -1
- package/src/hooks/useActorInfiniteQuery.test.tsx +0 -457
- package/src/hooks/useActorMethod.test.tsx +0 -798
- package/src/hooks/useActorMutation.test.tsx +0 -220
- package/src/hooks/useActorQuery.test.tsx +0 -287
- package/src/hooks/useActorSuspenseInfiniteQuery.test.tsx +0 -472
- package/src/hooks/useActorSuspenseQuery.test.tsx +0 -254
|
@@ -12,36 +12,41 @@ import {
|
|
|
12
12
|
TransformKey,
|
|
13
13
|
ReactorArgs,
|
|
14
14
|
ReactorReturnOk,
|
|
15
|
+
ReactorQueryData,
|
|
15
16
|
ReactorReturnErr,
|
|
16
17
|
} from "@ic-reactor/core"
|
|
17
18
|
import { CallConfig } from "@icp-sdk/core/agent"
|
|
19
|
+
import { normalizeQueryData } from "../utils.js"
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* Parameters for useActorInfiniteQuery hook.
|
|
21
23
|
* Extends react-query's UseInfiniteQueryOptions with custom reactor params.
|
|
22
24
|
*/
|
|
23
25
|
export interface UseActorInfiniteQueryParameters<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
Service,
|
|
27
|
+
Method extends FunctionName<Service>,
|
|
28
|
+
Transform extends TransformKey = "candid",
|
|
27
29
|
TPageParam = unknown,
|
|
28
|
-
|
|
30
|
+
Selected = InfiniteData<
|
|
31
|
+
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
32
|
+
TPageParam
|
|
33
|
+
>,
|
|
29
34
|
> extends Omit<
|
|
30
35
|
UseInfiniteQueryOptions<
|
|
31
|
-
ReactorReturnOk<
|
|
32
|
-
ReactorReturnErr<
|
|
33
|
-
|
|
36
|
+
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
37
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
38
|
+
Selected,
|
|
34
39
|
QueryKey,
|
|
35
40
|
TPageParam
|
|
36
41
|
>,
|
|
37
42
|
"queryKey" | "queryFn" | "getNextPageParam" | "initialPageParam"
|
|
38
43
|
> {
|
|
39
44
|
/** The reactor instance to use for method calls */
|
|
40
|
-
reactor: Reactor<
|
|
45
|
+
reactor: Reactor<Service, Transform>
|
|
41
46
|
/** The method name to call on the canister */
|
|
42
|
-
functionName:
|
|
47
|
+
functionName: Method
|
|
43
48
|
/** Function to get args from page parameter */
|
|
44
|
-
getArgs: (pageParam: TPageParam) => ReactorArgs<
|
|
49
|
+
getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>
|
|
45
50
|
/** Agent call configuration (effectiveCanisterId, etc.) */
|
|
46
51
|
callConfig?: CallConfig
|
|
47
52
|
/** Custom query key (auto-generated if not provided) */
|
|
@@ -50,28 +55,34 @@ export interface UseActorInfiniteQueryParameters<
|
|
|
50
55
|
initialPageParam: TPageParam
|
|
51
56
|
/** Function to determine next page parameter */
|
|
52
57
|
getNextPageParam: (
|
|
53
|
-
lastPage: ReactorReturnOk<
|
|
54
|
-
allPages: ReactorReturnOk<
|
|
58
|
+
lastPage: ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
59
|
+
allPages: ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>[],
|
|
55
60
|
lastPageParam: TPageParam,
|
|
56
61
|
allPageParams: TPageParam[]
|
|
57
62
|
) => TPageParam | undefined | null
|
|
58
63
|
}
|
|
59
64
|
|
|
60
65
|
export type UseActorInfiniteQueryConfig<
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
Service,
|
|
67
|
+
Method extends FunctionName<Service>,
|
|
68
|
+
Transform extends TransformKey = "candid",
|
|
64
69
|
TPageParam = unknown,
|
|
65
|
-
> = Omit<
|
|
70
|
+
> = Omit<
|
|
71
|
+
UseActorInfiniteQueryParameters<Service, Method, Transform, TPageParam>,
|
|
72
|
+
"reactor"
|
|
73
|
+
>
|
|
66
74
|
|
|
67
75
|
export type UseActorInfiniteQueryResult<
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
76
|
+
Service,
|
|
77
|
+
Method extends FunctionName<Service>,
|
|
78
|
+
Transform extends TransformKey = "candid",
|
|
71
79
|
TPageParam = unknown,
|
|
72
80
|
> = UseInfiniteQueryResult<
|
|
73
|
-
InfiniteData<
|
|
74
|
-
|
|
81
|
+
InfiniteData<
|
|
82
|
+
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
83
|
+
TPageParam
|
|
84
|
+
>,
|
|
85
|
+
ReactorReturnErr<Service, Method, Transform>
|
|
75
86
|
>
|
|
76
87
|
|
|
77
88
|
/**
|
|
@@ -87,9 +98,9 @@ export type UseActorInfiniteQueryResult<
|
|
|
87
98
|
* })
|
|
88
99
|
*/
|
|
89
100
|
export const useActorInfiniteQuery = <
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
Service,
|
|
102
|
+
Method extends FunctionName<Service>,
|
|
103
|
+
Transform extends TransformKey = "candid",
|
|
93
104
|
TPageParam = unknown,
|
|
94
105
|
>({
|
|
95
106
|
reactor,
|
|
@@ -99,11 +110,11 @@ export const useActorInfiniteQuery = <
|
|
|
99
110
|
queryKey,
|
|
100
111
|
...options
|
|
101
112
|
}: UseActorInfiniteQueryParameters<
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
113
|
+
Service,
|
|
114
|
+
Method,
|
|
115
|
+
Transform,
|
|
105
116
|
TPageParam
|
|
106
|
-
>): UseActorInfiniteQueryResult<
|
|
117
|
+
>): UseActorInfiniteQueryResult<Service, Method, Transform, TPageParam> => {
|
|
107
118
|
// Always pass queryKey through generateQueryKey so it is merged with the
|
|
108
119
|
// reactor/function identity. Using the custom key verbatim would cause cache
|
|
109
120
|
// collisions if two different actors or methods share the same key string.
|
|
@@ -116,11 +127,14 @@ export const useActorInfiniteQuery = <
|
|
|
116
127
|
const queryFn = useCallback(
|
|
117
128
|
async ({ pageParam }: { pageParam: TPageParam }) => {
|
|
118
129
|
const args = getArgs(pageParam)
|
|
119
|
-
|
|
130
|
+
const result = await reactor.callMethod({
|
|
120
131
|
functionName,
|
|
121
132
|
args,
|
|
122
133
|
callConfig,
|
|
123
134
|
})
|
|
135
|
+
return normalizeQueryData<ReactorReturnOk<Service, Method, Transform>>(
|
|
136
|
+
result as ReactorReturnOk<Service, Method, Transform>
|
|
137
|
+
)
|
|
124
138
|
},
|
|
125
139
|
[reactor, functionName, getArgs, callConfig]
|
|
126
140
|
)
|
|
@@ -132,5 +146,5 @@ export const useActorInfiniteQuery = <
|
|
|
132
146
|
...options,
|
|
133
147
|
} as any,
|
|
134
148
|
reactor.queryClient
|
|
135
|
-
) as UseActorInfiniteQueryResult<
|
|
149
|
+
) as UseActorInfiniteQueryResult<Service, Method, Transform, TPageParam>
|
|
136
150
|
}
|
|
@@ -28,27 +28,27 @@ import { CallConfig } from "@icp-sdk/core/agent"
|
|
|
28
28
|
* Mutation-specific options (like invalidateQueries) only apply to mutation methods.
|
|
29
29
|
*/
|
|
30
30
|
export interface UseActorMethodParameters<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
Service = BaseActor,
|
|
32
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
33
|
+
Transform extends TransformKey = "candid",
|
|
34
34
|
> extends Omit<
|
|
35
35
|
QueryObserverOptions<
|
|
36
|
-
ReactorReturnOk<
|
|
37
|
-
ReactorReturnErr<
|
|
38
|
-
ReactorReturnOk<
|
|
39
|
-
ReactorReturnOk<
|
|
36
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
37
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
38
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
39
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
40
40
|
QueryKey
|
|
41
41
|
>,
|
|
42
42
|
"queryKey" | "queryFn"
|
|
43
43
|
> {
|
|
44
44
|
/** The reactor instance to use for method calls */
|
|
45
|
-
reactor: Reactor<
|
|
45
|
+
reactor: Reactor<Service, Transform>
|
|
46
46
|
|
|
47
47
|
/** The method name to call on the canister */
|
|
48
|
-
functionName:
|
|
48
|
+
functionName: Method
|
|
49
49
|
|
|
50
50
|
/** Arguments to pass to the method (optional for parameterless methods) */
|
|
51
|
-
args?: ReactorArgs<
|
|
51
|
+
args?: ReactorArgs<Service, Method, Transform>
|
|
52
52
|
|
|
53
53
|
/** Agent call configuration (effectiveCanisterId, etc.) */
|
|
54
54
|
callConfig?: CallConfig
|
|
@@ -60,13 +60,13 @@ export interface UseActorMethodParameters<
|
|
|
60
60
|
* Callback when the method call succeeds.
|
|
61
61
|
* Works for both query and mutation methods.
|
|
62
62
|
*/
|
|
63
|
-
onSuccess?: (data: ReactorReturnOk<
|
|
63
|
+
onSuccess?: (data: ReactorReturnOk<Service, Method, Transform>) => void
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* Callback when the method call fails.
|
|
67
67
|
* Works for both query and mutation methods.
|
|
68
68
|
*/
|
|
69
|
-
onError?: (error: ReactorReturnErr<
|
|
69
|
+
onError?: (error: ReactorReturnErr<Service, Method, Transform>) => void
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
72
|
* Query keys to invalidate after a successful mutation.
|
|
@@ -80,22 +80,22 @@ export interface UseActorMethodParameters<
|
|
|
80
80
|
* For use with createActorHooks.
|
|
81
81
|
*/
|
|
82
82
|
export type UseActorMethodConfig<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
> = Omit<UseActorMethodParameters<
|
|
83
|
+
Service = BaseActor,
|
|
84
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
85
|
+
Transform extends TransformKey = "candid",
|
|
86
|
+
> = Omit<UseActorMethodParameters<Service, Method, Transform>, "reactor">
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* Result type for useActorMethod hook.
|
|
90
90
|
* Provides a unified interface for both query and mutation methods.
|
|
91
91
|
*/
|
|
92
92
|
export interface UseActorMethodResult<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
Service = BaseActor,
|
|
94
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
95
|
+
Transform extends TransformKey = "candid",
|
|
96
96
|
> {
|
|
97
97
|
/** The returned data from the method call */
|
|
98
|
-
data: ReactorReturnOk<
|
|
98
|
+
data: ReactorReturnOk<Service, Method, Transform> | undefined
|
|
99
99
|
|
|
100
100
|
/** Whether the method is currently executing */
|
|
101
101
|
isLoading: boolean
|
|
@@ -110,7 +110,7 @@ export interface UseActorMethodResult<
|
|
|
110
110
|
isSuccess: boolean
|
|
111
111
|
|
|
112
112
|
/** The error if one occurred */
|
|
113
|
-
error: ReactorReturnErr<
|
|
113
|
+
error: ReactorReturnErr<Service, Method, Transform> | null
|
|
114
114
|
|
|
115
115
|
/** Whether this is a query method (true) or mutation method (false) */
|
|
116
116
|
isQuery: boolean
|
|
@@ -124,8 +124,8 @@ export interface UseActorMethodResult<
|
|
|
124
124
|
* For mutations: executes the mutation with the provided args
|
|
125
125
|
*/
|
|
126
126
|
call: (
|
|
127
|
-
args?: ReactorArgs<
|
|
128
|
-
) => Promise<ReactorReturnOk<
|
|
127
|
+
args?: ReactorArgs<Service, Method, Transform>
|
|
128
|
+
) => Promise<ReactorReturnOk<Service, Method, Transform> | undefined>
|
|
129
129
|
|
|
130
130
|
/**
|
|
131
131
|
* Reset the state (clear data and error).
|
|
@@ -137,20 +137,22 @@ export interface UseActorMethodResult<
|
|
|
137
137
|
/**
|
|
138
138
|
* For queries only: Refetch the query
|
|
139
139
|
*/
|
|
140
|
-
refetch: () => Promise<
|
|
140
|
+
refetch: () => Promise<
|
|
141
|
+
ReactorReturnOk<Service, Method, Transform> | undefined
|
|
142
|
+
>
|
|
141
143
|
|
|
142
144
|
// Expose underlying results for advanced use cases
|
|
143
145
|
/** The raw query result (only available for query methods) */
|
|
144
146
|
queryResult?: UseQueryResult<
|
|
145
|
-
ReactorReturnOk<
|
|
146
|
-
ReactorReturnErr<
|
|
147
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
148
|
+
ReactorReturnErr<Service, Method, Transform>
|
|
147
149
|
>
|
|
148
150
|
|
|
149
151
|
/** The raw mutation result (only available for mutation methods) */
|
|
150
152
|
mutationResult?: UseMutationResult<
|
|
151
|
-
ReactorReturnOk<
|
|
152
|
-
ReactorReturnErr<
|
|
153
|
-
ReactorArgs<
|
|
153
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
154
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
155
|
+
ReactorArgs<Service, Method, Transform>
|
|
154
156
|
>
|
|
155
157
|
}
|
|
156
158
|
|
|
@@ -159,9 +161,9 @@ export interface UseActorMethodResult<
|
|
|
159
161
|
* both query and mutation methods based on the Candid interface.
|
|
160
162
|
*/
|
|
161
163
|
export function useActorMethod<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
Service = BaseActor,
|
|
165
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
166
|
+
Transform extends TransformKey = "candid",
|
|
165
167
|
>({
|
|
166
168
|
reactor,
|
|
167
169
|
functionName,
|
|
@@ -173,7 +175,11 @@ export function useActorMethod<
|
|
|
173
175
|
onError,
|
|
174
176
|
invalidateQueries,
|
|
175
177
|
...queryOptions
|
|
176
|
-
}: UseActorMethodParameters<
|
|
178
|
+
}: UseActorMethodParameters<Service, Method, Transform>): UseActorMethodResult<
|
|
179
|
+
Service,
|
|
180
|
+
Method,
|
|
181
|
+
Transform
|
|
182
|
+
> {
|
|
177
183
|
// Determine if this is a query method by checking the IDL
|
|
178
184
|
const isQuery = useMemo(() => {
|
|
179
185
|
if (!reactor) throw new Error("Reactor instance is required")
|
|
@@ -199,8 +205,8 @@ export function useActorMethod<
|
|
|
199
205
|
// ============================================================================
|
|
200
206
|
|
|
201
207
|
const queryResult = useQuery<
|
|
202
|
-
ReactorReturnOk<
|
|
203
|
-
ReactorReturnErr<
|
|
208
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
209
|
+
ReactorReturnErr<Service, Method, Transform>
|
|
204
210
|
>(
|
|
205
211
|
{
|
|
206
212
|
queryKey,
|
|
@@ -214,7 +220,7 @@ export function useActorMethod<
|
|
|
214
220
|
onSuccess?.(result)
|
|
215
221
|
return result
|
|
216
222
|
} catch (error) {
|
|
217
|
-
onError?.(error as ReactorReturnErr<
|
|
223
|
+
onError?.(error as ReactorReturnErr<Service, Method, Transform>)
|
|
218
224
|
throw error
|
|
219
225
|
}
|
|
220
226
|
},
|
|
@@ -229,9 +235,9 @@ export function useActorMethod<
|
|
|
229
235
|
// ============================================================================
|
|
230
236
|
|
|
231
237
|
const mutationResult = useMutation<
|
|
232
|
-
ReactorReturnOk<
|
|
233
|
-
ReactorReturnErr<
|
|
234
|
-
ReactorArgs<
|
|
238
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
239
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
240
|
+
ReactorArgs<Service, Method, Transform>
|
|
235
241
|
>(
|
|
236
242
|
{
|
|
237
243
|
mutationKey: queryKey,
|
|
@@ -265,8 +271,8 @@ export function useActorMethod<
|
|
|
265
271
|
|
|
266
272
|
const call = useCallback(
|
|
267
273
|
async (
|
|
268
|
-
callArgs?: ReactorArgs<
|
|
269
|
-
): Promise<ReactorReturnOk<
|
|
274
|
+
callArgs?: ReactorArgs<Service, Method, Transform>
|
|
275
|
+
): Promise<ReactorReturnOk<Service, Method, Transform> | undefined> => {
|
|
270
276
|
if (isQuery) {
|
|
271
277
|
// For queries, refetch with new args if provided
|
|
272
278
|
if (callArgs !== undefined) {
|
|
@@ -284,7 +290,7 @@ export function useActorMethod<
|
|
|
284
290
|
onSuccess?.(result)
|
|
285
291
|
return result
|
|
286
292
|
} catch (error) {
|
|
287
|
-
onError?.(error as ReactorReturnErr<
|
|
293
|
+
onError?.(error as ReactorReturnErr<Service, Method, Transform>)
|
|
288
294
|
return undefined
|
|
289
295
|
}
|
|
290
296
|
}
|
|
@@ -294,7 +300,7 @@ export function useActorMethod<
|
|
|
294
300
|
} else {
|
|
295
301
|
// For mutations, execute with provided args
|
|
296
302
|
return mutationResult
|
|
297
|
-
.mutateAsync(callArgs as ReactorArgs<
|
|
303
|
+
.mutateAsync(callArgs as ReactorArgs<Service, Method, Transform>)
|
|
298
304
|
.catch(() => undefined)
|
|
299
305
|
}
|
|
300
306
|
},
|
|
@@ -353,7 +359,7 @@ export function useActorMethod<
|
|
|
353
359
|
reset,
|
|
354
360
|
refetch,
|
|
355
361
|
queryResult,
|
|
356
|
-
} as UseActorMethodResult<
|
|
362
|
+
} as UseActorMethodResult<Service, Method, Transform>
|
|
357
363
|
} else {
|
|
358
364
|
return {
|
|
359
365
|
data: mutationResult.data,
|
|
@@ -368,7 +374,7 @@ export function useActorMethod<
|
|
|
368
374
|
reset,
|
|
369
375
|
refetch,
|
|
370
376
|
mutationResult,
|
|
371
|
-
} as UseActorMethodResult<
|
|
377
|
+
} as UseActorMethodResult<Service, Method, Transform>
|
|
372
378
|
}
|
|
373
379
|
}
|
|
374
380
|
|
|
@@ -381,20 +387,23 @@ export function useActorMethod<
|
|
|
381
387
|
* ```
|
|
382
388
|
*/
|
|
383
389
|
export function createActorMethodHooks<
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
>(reactor: Reactor<
|
|
390
|
+
Service = BaseActor,
|
|
391
|
+
Transform extends TransformKey = "candid",
|
|
392
|
+
>(reactor: Reactor<Service, Transform>) {
|
|
387
393
|
return {
|
|
388
394
|
/**
|
|
389
395
|
* Hook for calling methods on the bound reactor.
|
|
390
396
|
*/
|
|
391
|
-
useMethod: <
|
|
392
|
-
config: Omit<
|
|
397
|
+
useMethod: <Method extends FunctionName<Service>>(
|
|
398
|
+
config: Omit<
|
|
399
|
+
UseActorMethodParameters<Service, Method, Transform>,
|
|
400
|
+
"reactor"
|
|
401
|
+
>
|
|
393
402
|
) =>
|
|
394
403
|
useActorMethod({ ...config, reactor } as UseActorMethodParameters<
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
404
|
+
Service,
|
|
405
|
+
Method,
|
|
406
|
+
Transform
|
|
398
407
|
>),
|
|
399
408
|
}
|
|
400
409
|
}
|
|
@@ -21,19 +21,19 @@ import {
|
|
|
21
21
|
import { CallConfig } from "@icp-sdk/core/agent"
|
|
22
22
|
|
|
23
23
|
export interface UseActorMutationParameters<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
Service,
|
|
25
|
+
Method extends FunctionName<Service>,
|
|
26
|
+
Transform extends TransformKey = "candid",
|
|
27
27
|
> extends Omit<
|
|
28
28
|
UseMutationOptions<
|
|
29
|
-
ReactorReturnOk<
|
|
30
|
-
ReactorReturnErr<
|
|
31
|
-
ReactorArgs<
|
|
29
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
30
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
31
|
+
ReactorArgs<Service, Method, Transform>
|
|
32
32
|
>,
|
|
33
33
|
"mutationFn"
|
|
34
34
|
> {
|
|
35
|
-
reactor: Reactor<
|
|
36
|
-
functionName:
|
|
35
|
+
reactor: Reactor<Service, Transform>
|
|
36
|
+
functionName: Method
|
|
37
37
|
callConfig?: CallConfig
|
|
38
38
|
invalidateQueries?: QueryKey[]
|
|
39
39
|
/**
|
|
@@ -43,30 +43,34 @@ export interface UseActorMutationParameters<
|
|
|
43
43
|
*/
|
|
44
44
|
onCanisterError?: (
|
|
45
45
|
error: CanisterError<
|
|
46
|
-
TransformReturnRegistry<
|
|
46
|
+
TransformReturnRegistry<
|
|
47
|
+
ErrResult<ActorMethodReturnType<Service[Method]>>
|
|
48
|
+
>[Transform]
|
|
47
49
|
>,
|
|
48
|
-
variables: ReactorArgs<
|
|
50
|
+
variables: ReactorArgs<Service, Method, Transform>
|
|
49
51
|
) => void
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
export type UseActorMutationConfig<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
> = Omit<UseActorMutationParameters<
|
|
55
|
+
Service,
|
|
56
|
+
Method extends FunctionName<Service>,
|
|
57
|
+
Transform extends TransformKey = "candid",
|
|
58
|
+
> = Omit<UseActorMutationParameters<Service, Method, Transform>, "reactor">
|
|
57
59
|
|
|
58
60
|
export type UseActorMutationResult<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
Service,
|
|
62
|
+
Method extends FunctionName<Service>,
|
|
63
|
+
Transform extends TransformKey = "candid",
|
|
62
64
|
> = UseMutationResult<
|
|
63
|
-
ReactorReturnOk<
|
|
64
|
-
ReactorReturnErr<
|
|
65
|
-
ReactorArgs<
|
|
65
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
66
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
67
|
+
ReactorArgs<Service, Method, Transform>
|
|
66
68
|
>
|
|
67
69
|
|
|
68
70
|
/**
|
|
69
71
|
* Hook for executing mutation calls on a canister.
|
|
72
|
+
* Use this for component-level mutation flows.
|
|
73
|
+
* For non-React usage, prefer `createMutation(...).execute(args)`.
|
|
70
74
|
*
|
|
71
75
|
* @example
|
|
72
76
|
* const { mutate, isPending } = useActorMutation({
|
|
@@ -75,11 +79,20 @@ export type UseActorMutationResult<
|
|
|
75
79
|
* onSuccess: () => console.log("Success!"),
|
|
76
80
|
* onCanisterError: (err) => console.error("Canister Err:", err.code),
|
|
77
81
|
* })
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* const transferMutation = createMutation(reactor, {
|
|
85
|
+
* functionName: "transfer",
|
|
86
|
+
* onCanisterError: (err) => console.error(err.code),
|
|
87
|
+
* })
|
|
88
|
+
*
|
|
89
|
+
* // Non-React execution path
|
|
90
|
+
* await transferMutation.execute([{ to: "aaaaa-aa", amount: "100" }])
|
|
78
91
|
*/
|
|
79
92
|
export const useActorMutation = <
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
93
|
+
Service,
|
|
94
|
+
Method extends FunctionName<Service>,
|
|
95
|
+
Transform extends TransformKey = "candid",
|
|
83
96
|
>({
|
|
84
97
|
reactor,
|
|
85
98
|
functionName,
|
|
@@ -89,9 +102,13 @@ export const useActorMutation = <
|
|
|
89
102
|
onCanisterError,
|
|
90
103
|
callConfig,
|
|
91
104
|
...options
|
|
92
|
-
}: UseActorMutationParameters<
|
|
105
|
+
}: UseActorMutationParameters<
|
|
106
|
+
Service,
|
|
107
|
+
Method,
|
|
108
|
+
Transform
|
|
109
|
+
>): UseActorMutationResult<Service, Method, Transform> => {
|
|
93
110
|
const mutationFn = useCallback(
|
|
94
|
-
async (args: ReactorArgs<
|
|
111
|
+
async (args: ReactorArgs<Service, Method, Transform>) =>
|
|
95
112
|
reactor.callMethod({ functionName, callConfig, args }),
|
|
96
113
|
[reactor, functionName, callConfig]
|
|
97
114
|
)
|
|
@@ -101,9 +118,9 @@ export const useActorMutation = <
|
|
|
101
118
|
...params: Parameters<
|
|
102
119
|
NonNullable<
|
|
103
120
|
UseMutationOptions<
|
|
104
|
-
ReactorReturnOk<
|
|
105
|
-
ReactorReturnErr<
|
|
106
|
-
ReactorArgs<
|
|
121
|
+
ReactorReturnOk<Service, Method, Transform>,
|
|
122
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
123
|
+
ReactorArgs<Service, Method, Transform>
|
|
107
124
|
>["onSuccess"]
|
|
108
125
|
>
|
|
109
126
|
>
|
|
@@ -122,8 +139,8 @@ export const useActorMutation = <
|
|
|
122
139
|
|
|
123
140
|
const handleError = useCallback(
|
|
124
141
|
(
|
|
125
|
-
error: ReactorReturnErr<
|
|
126
|
-
variables: ReactorArgs<
|
|
142
|
+
error: ReactorReturnErr<Service, Method, Transform>,
|
|
143
|
+
variables: ReactorArgs<Service, Method, Transform>,
|
|
127
144
|
context: unknown,
|
|
128
145
|
mutation: unknown
|
|
129
146
|
) => {
|
|
@@ -11,45 +11,49 @@ import {
|
|
|
11
11
|
TransformKey,
|
|
12
12
|
ReactorArgs,
|
|
13
13
|
ReactorReturnOk,
|
|
14
|
+
ReactorQueryData,
|
|
14
15
|
ReactorReturnErr,
|
|
15
16
|
} from "@ic-reactor/core"
|
|
16
17
|
import { CallConfig } from "@icp-sdk/core/agent"
|
|
17
18
|
|
|
18
19
|
export interface UseActorQueryParameters<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
Service,
|
|
21
|
+
Method extends FunctionName<Service>,
|
|
22
|
+
Transform extends TransformKey = "candid",
|
|
23
|
+
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
23
24
|
> extends Omit<
|
|
24
25
|
QueryObserverOptions<
|
|
25
|
-
ReactorReturnOk<
|
|
26
|
-
ReactorReturnErr<
|
|
27
|
-
|
|
28
|
-
ReactorReturnOk<
|
|
26
|
+
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
27
|
+
ReactorReturnErr<Service, Method, Transform>,
|
|
28
|
+
Selected,
|
|
29
|
+
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
29
30
|
QueryKey
|
|
30
31
|
>,
|
|
31
32
|
"queryKey" | "queryFn"
|
|
32
33
|
> {
|
|
33
|
-
reactor: Reactor<
|
|
34
|
-
functionName:
|
|
35
|
-
args?: ReactorArgs<
|
|
34
|
+
reactor: Reactor<Service, Transform>
|
|
35
|
+
functionName: Method
|
|
36
|
+
args?: ReactorArgs<Service, Method, Transform>
|
|
36
37
|
callConfig?: CallConfig
|
|
37
38
|
queryKey?: QueryKey
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
export type UseActorQueryConfig<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
> = Omit<
|
|
42
|
+
Service,
|
|
43
|
+
Method extends FunctionName<Service>,
|
|
44
|
+
Transform extends TransformKey = "candid",
|
|
45
|
+
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
46
|
+
> = Omit<
|
|
47
|
+
UseActorQueryParameters<Service, Method, Transform, Selected>,
|
|
48
|
+
"reactor"
|
|
49
|
+
>
|
|
46
50
|
|
|
47
51
|
export type UseActorQueryResult<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
> = UseQueryResult<
|
|
52
|
+
Service,
|
|
53
|
+
Method extends FunctionName<Service>,
|
|
54
|
+
Transform extends TransformKey = "candid",
|
|
55
|
+
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
56
|
+
> = UseQueryResult<Selected, ReactorReturnErr<Service, Method, Transform>>
|
|
53
57
|
|
|
54
58
|
/**
|
|
55
59
|
* Hook for executing query calls on a canister.
|
|
@@ -70,10 +74,10 @@ export type UseActorQueryResult<
|
|
|
70
74
|
* })
|
|
71
75
|
*/
|
|
72
76
|
export const useActorQuery = <
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
Service,
|
|
78
|
+
Method extends FunctionName<Service>,
|
|
79
|
+
Transform extends TransformKey = "candid",
|
|
80
|
+
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
77
81
|
>({
|
|
78
82
|
reactor,
|
|
79
83
|
functionName,
|
|
@@ -81,16 +85,16 @@ export const useActorQuery = <
|
|
|
81
85
|
callConfig,
|
|
82
86
|
queryKey: defaultQueryKey,
|
|
83
87
|
...options
|
|
84
|
-
}: UseActorQueryParameters<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
> => {
|
|
88
|
+
}: UseActorQueryParameters<
|
|
89
|
+
Service,
|
|
90
|
+
Method,
|
|
91
|
+
Transform,
|
|
92
|
+
Selected
|
|
93
|
+
>): UseActorQueryResult<Service, Method, Transform, Selected> => {
|
|
90
94
|
// Memoize query options to prevent unnecessary re-computations
|
|
91
95
|
const { queryKey, queryFn } = useMemo(
|
|
92
96
|
() =>
|
|
93
|
-
reactor.getQueryOptions<
|
|
97
|
+
reactor.getQueryOptions<Method>({
|
|
94
98
|
callConfig,
|
|
95
99
|
functionName,
|
|
96
100
|
args,
|