@ic-reactor/react 3.12.5 → 4.0.0-beta.1
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 +236 -423
- package/dist/index.d.ts +259 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +470 -17
- package/dist/index.js.map +1 -1
- package/llms.txt +82 -54
- package/package.json +12 -28
- package/src/index.tsx +611 -0
- package/dist/auth/authentication-manager.d.ts +0 -123
- package/dist/auth/authentication-manager.d.ts.map +0 -1
- package/dist/auth/authentication-manager.js +0 -767
- package/dist/auth/authentication-manager.js.map +0 -1
- package/dist/auth/constants.d.ts +0 -24
- package/dist/auth/constants.d.ts.map +0 -1
- package/dist/auth/constants.js +0 -24
- package/dist/auth/constants.js.map +0 -1
- package/dist/auth/createIdentityAttributeHooks.d.ts +0 -14
- package/dist/auth/createIdentityAttributeHooks.d.ts.map +0 -1
- package/dist/auth/createIdentityAttributeHooks.js +0 -106
- package/dist/auth/createIdentityAttributeHooks.js.map +0 -1
- package/dist/auth/identity-attributes-manager.d.ts +0 -26
- package/dist/auth/identity-attributes-manager.d.ts.map +0 -1
- package/dist/auth/identity-attributes-manager.js +0 -107
- package/dist/auth/identity-attributes-manager.js.map +0 -1
- package/dist/auth/identity-attributes.d.ts +0 -19
- package/dist/auth/identity-attributes.d.ts.map +0 -1
- package/dist/auth/identity-attributes.js +0 -170
- package/dist/auth/identity-attributes.js.map +0 -1
- package/dist/auth/index.d.ts +0 -8
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -8
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/local-ii-probe.d.ts +0 -46
- package/dist/auth/local-ii-probe.d.ts.map +0 -1
- package/dist/auth/local-ii-probe.js +0 -102
- package/dist/auth/local-ii-probe.js.map +0 -1
- package/dist/auth/types.d.ts +0 -179
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -2
- package/dist/auth/types.js.map +0 -1
- package/dist/createActorHooks.d.ts +0 -52
- package/dist/createActorHooks.d.ts.map +0 -1
- package/dist/createActorHooks.js +0 -17
- package/dist/createActorHooks.js.map +0 -1
- package/dist/createInfiniteQuery.d.ts +0 -144
- package/dist/createInfiniteQuery.d.ts.map +0 -1
- package/dist/createInfiniteQuery.js +0 -174
- package/dist/createInfiniteQuery.js.map +0 -1
- package/dist/createMutation.d.ts +0 -30
- package/dist/createMutation.d.ts.map +0 -1
- package/dist/createMutation.js +0 -192
- package/dist/createMutation.js.map +0 -1
- package/dist/createQuery.d.ts +0 -30
- package/dist/createQuery.d.ts.map +0 -1
- package/dist/createQuery.js +0 -117
- package/dist/createQuery.js.map +0 -1
- package/dist/createSuspenseInfiniteQuery.d.ts +0 -147
- package/dist/createSuspenseInfiniteQuery.d.ts.map +0 -1
- package/dist/createSuspenseInfiniteQuery.js +0 -177
- package/dist/createSuspenseInfiniteQuery.js.map +0 -1
- package/dist/createSuspenseQuery.d.ts +0 -25
- package/dist/createSuspenseQuery.d.ts.map +0 -1
- package/dist/createSuspenseQuery.js +0 -111
- package/dist/createSuspenseQuery.js.map +0 -1
- package/dist/defineReactor.d.ts +0 -125
- package/dist/defineReactor.d.ts.map +0 -1
- package/dist/defineReactor.js +0 -180
- package/dist/defineReactor.js.map +0 -1
- package/dist/hooks/createAuthHooks.d.ts +0 -43
- package/dist/hooks/createAuthHooks.d.ts.map +0 -1
- package/dist/hooks/createAuthHooks.js +0 -131
- package/dist/hooks/createAuthHooks.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -21
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -24
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useActorInfiniteQuery.d.ts +0 -39
- package/dist/hooks/useActorInfiniteQuery.d.ts.map +0 -1
- package/dist/hooks/useActorInfiniteQuery.js +0 -56
- package/dist/hooks/useActorInfiniteQuery.js.map +0 -1
- package/dist/hooks/useActorMethod.d.ts +0 -115
- package/dist/hooks/useActorMethod.d.ts.map +0 -1
- package/dist/hooks/useActorMethod.js +0 -250
- package/dist/hooks/useActorMethod.js.map +0 -1
- package/dist/hooks/useActorMutation.d.ts +0 -48
- package/dist/hooks/useActorMutation.d.ts.map +0 -1
- package/dist/hooks/useActorMutation.js +0 -69
- package/dist/hooks/useActorMutation.js.map +0 -1
- package/dist/hooks/useActorQuery.d.ts +0 -32
- package/dist/hooks/useActorQuery.d.ts.map +0 -1
- package/dist/hooks/useActorQuery.js +0 -46
- package/dist/hooks/useActorQuery.js.map +0 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts +0 -39
- package/dist/hooks/useActorSuspenseInfiniteQuery.d.ts.map +0 -1
- package/dist/hooks/useActorSuspenseInfiniteQuery.js +0 -56
- package/dist/hooks/useActorSuspenseInfiniteQuery.js.map +0 -1
- package/dist/hooks/useActorSuspenseQuery.d.ts +0 -32
- package/dist/hooks/useActorSuspenseQuery.d.ts.map +0 -1
- package/dist/hooks/useActorSuspenseQuery.js +0 -47
- package/dist/hooks/useActorSuspenseQuery.js.map +0 -1
- package/dist/types.d.ts +0 -270
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -51
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -105
- package/dist/utils.js.map +0 -1
- package/dist/validation.d.ts +0 -131
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -125
- package/dist/validation.js.map +0 -1
- package/src/auth/authentication-manager.ts +0 -860
- package/src/auth/constants.ts +0 -32
- package/src/auth/createIdentityAttributeHooks.ts +0 -143
- package/src/auth/identity-attributes-manager.ts +0 -131
- package/src/auth/identity-attributes.ts +0 -270
- package/src/auth/index.ts +0 -7
- package/src/auth/local-ii-probe.ts +0 -147
- package/src/auth/types.ts +0 -200
- package/src/createActorHooks.ts +0 -220
- package/src/createInfiniteQuery.ts +0 -578
- package/src/createMutation.ts +0 -341
- package/src/createQuery.ts +0 -237
- package/src/createSuspenseInfiniteQuery.ts +0 -601
- package/src/createSuspenseQuery.ts +0 -234
- package/src/defineReactor.ts +0 -324
- package/src/hooks/createAuthHooks.ts +0 -189
- package/src/hooks/index.ts +0 -103
- package/src/hooks/useActorInfiniteQuery.ts +0 -205
- package/src/hooks/useActorMethod.ts +0 -507
- package/src/hooks/useActorMutation.ts +0 -205
- package/src/hooks/useActorQuery.ts +0 -124
- package/src/hooks/useActorSuspenseInfiniteQuery.ts +0 -205
- package/src/hooks/useActorSuspenseQuery.ts +0 -132
- package/src/index.ts +0 -23
- package/src/types.ts +0 -499
- package/src/utils.ts +0 -121
- package/src/validation.ts +0 -202
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react"
|
|
2
|
-
import {
|
|
3
|
-
QueryKey,
|
|
4
|
-
useQuery,
|
|
5
|
-
QueryObserverOptions,
|
|
6
|
-
UseQueryResult,
|
|
7
|
-
} from "@tanstack/react-query"
|
|
8
|
-
import {
|
|
9
|
-
FunctionName,
|
|
10
|
-
Reactor,
|
|
11
|
-
TransformKey,
|
|
12
|
-
ReactorArgs,
|
|
13
|
-
ReactorReturnOk,
|
|
14
|
-
ReactorQueryData,
|
|
15
|
-
ReactorReturnErr,
|
|
16
|
-
} from "@ic-reactor/core"
|
|
17
|
-
import { CallConfig } from "@icp-sdk/core/agent"
|
|
18
|
-
|
|
19
|
-
export interface UseActorQueryParameters<
|
|
20
|
-
Service,
|
|
21
|
-
Method extends FunctionName<Service>,
|
|
22
|
-
Transform extends TransformKey = "candid",
|
|
23
|
-
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
24
|
-
> extends Omit<
|
|
25
|
-
QueryObserverOptions<
|
|
26
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
27
|
-
ReactorReturnErr<Service, Method, Transform>,
|
|
28
|
-
Selected,
|
|
29
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
30
|
-
QueryKey
|
|
31
|
-
>,
|
|
32
|
-
"queryKey" | "queryFn"
|
|
33
|
-
> {
|
|
34
|
-
reactor: Reactor<Service, Transform>
|
|
35
|
-
functionName: Method
|
|
36
|
-
args?: ReactorArgs<Service, Method, Transform>
|
|
37
|
-
callConfig?: CallConfig
|
|
38
|
-
queryKey?: QueryKey
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type UseActorQueryConfig<
|
|
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
|
-
>
|
|
50
|
-
|
|
51
|
-
export type UseActorQueryResult<
|
|
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>>
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Hook for executing query calls on a canister.
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* const { data, isLoading } = useActorQuery({
|
|
63
|
-
* reactor,
|
|
64
|
-
* functionName: "getUser",
|
|
65
|
-
* args: ["user-123"],
|
|
66
|
-
* })
|
|
67
|
-
*
|
|
68
|
-
* // With select transformation
|
|
69
|
-
* const { data } = useActorQuery({
|
|
70
|
-
* reactor,
|
|
71
|
-
* functionName: "getUser",
|
|
72
|
-
* args: ["user-123"],
|
|
73
|
-
* select: (user) => user.name,
|
|
74
|
-
* })
|
|
75
|
-
*/
|
|
76
|
-
export const useActorQuery = <
|
|
77
|
-
Service,
|
|
78
|
-
Method extends FunctionName<Service>,
|
|
79
|
-
Transform extends TransformKey = "candid",
|
|
80
|
-
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
81
|
-
>({
|
|
82
|
-
reactor,
|
|
83
|
-
functionName,
|
|
84
|
-
args,
|
|
85
|
-
callConfig,
|
|
86
|
-
queryKey: defaultQueryKey,
|
|
87
|
-
...options
|
|
88
|
-
}: UseActorQueryParameters<
|
|
89
|
-
Service,
|
|
90
|
-
Method,
|
|
91
|
-
Transform,
|
|
92
|
-
Selected
|
|
93
|
-
>): UseActorQueryResult<Service, Method, Transform, Selected> => {
|
|
94
|
-
// Memoize query options to prevent unnecessary re-computations
|
|
95
|
-
const { queryKey, queryFn } = useMemo(
|
|
96
|
-
() =>
|
|
97
|
-
reactor.getQueryOptions<Method>({
|
|
98
|
-
callConfig,
|
|
99
|
-
functionName,
|
|
100
|
-
args,
|
|
101
|
-
queryKey: defaultQueryKey,
|
|
102
|
-
}),
|
|
103
|
-
// `canisterId` is mutable reactor state that `setCanisterId` can change,
|
|
104
|
-
// while `reactor` itself stays the same object — so it has to be a
|
|
105
|
-
// dependency in its own right or the key stays pinned to the old canister.
|
|
106
|
-
[
|
|
107
|
-
reactor,
|
|
108
|
-
reactor.canisterId?.toString(),
|
|
109
|
-
callConfig,
|
|
110
|
-
functionName,
|
|
111
|
-
args,
|
|
112
|
-
defaultQueryKey,
|
|
113
|
-
]
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
return useQuery(
|
|
117
|
-
{
|
|
118
|
-
queryFn,
|
|
119
|
-
...options,
|
|
120
|
-
queryKey,
|
|
121
|
-
},
|
|
122
|
-
reactor.queryClient
|
|
123
|
-
)
|
|
124
|
-
}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { useMemo, useCallback } from "react"
|
|
2
|
-
import {
|
|
3
|
-
QueryKey,
|
|
4
|
-
useSuspenseInfiniteQuery,
|
|
5
|
-
UseSuspenseInfiniteQueryResult,
|
|
6
|
-
UseSuspenseInfiniteQueryOptions,
|
|
7
|
-
InfiniteData,
|
|
8
|
-
} from "@tanstack/react-query"
|
|
9
|
-
import {
|
|
10
|
-
FunctionName,
|
|
11
|
-
Reactor,
|
|
12
|
-
TransformKey,
|
|
13
|
-
ReactorArgs,
|
|
14
|
-
ReactorReturnOk,
|
|
15
|
-
ReactorQueryData,
|
|
16
|
-
ReactorReturnErr,
|
|
17
|
-
} from "@ic-reactor/core"
|
|
18
|
-
import { CallConfig } from "@icp-sdk/core/agent"
|
|
19
|
-
import { mergeFactoryQueryKey, normalizeQueryData } from "../utils.js"
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Parameters for useActorSuspenseInfiniteQuery hook.
|
|
23
|
-
* Extends react-query's UseSuspenseInfiniteQueryOptions with custom reactor params.
|
|
24
|
-
*/
|
|
25
|
-
export interface UseActorSuspenseInfiniteQueryParameters<
|
|
26
|
-
Service,
|
|
27
|
-
Method extends FunctionName<Service>,
|
|
28
|
-
Transform extends TransformKey = "candid",
|
|
29
|
-
TPageParam = unknown,
|
|
30
|
-
Selected = InfiniteData<
|
|
31
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
32
|
-
TPageParam
|
|
33
|
-
>,
|
|
34
|
-
> extends Omit<
|
|
35
|
-
UseSuspenseInfiniteQueryOptions<
|
|
36
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
37
|
-
ReactorReturnErr<Service, Method, Transform>,
|
|
38
|
-
Selected,
|
|
39
|
-
QueryKey,
|
|
40
|
-
TPageParam
|
|
41
|
-
>,
|
|
42
|
-
"queryKey" | "queryFn" | "getNextPageParam" | "initialPageParam"
|
|
43
|
-
> {
|
|
44
|
-
/** The reactor instance to use for method calls */
|
|
45
|
-
reactor: Reactor<Service, Transform>
|
|
46
|
-
/** The method name to call on the canister */
|
|
47
|
-
functionName: Method
|
|
48
|
-
/** Function to get args from page parameter */
|
|
49
|
-
getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>
|
|
50
|
-
/** Agent call configuration (effectiveCanisterId, etc.) */
|
|
51
|
-
callConfig?: CallConfig
|
|
52
|
-
/** Custom query key (auto-generated if not provided) */
|
|
53
|
-
queryKey?: QueryKey
|
|
54
|
-
/** Initial page parameter */
|
|
55
|
-
initialPageParam: TPageParam
|
|
56
|
-
/** Function to determine next page parameter */
|
|
57
|
-
getNextPageParam: (
|
|
58
|
-
lastPage: ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
59
|
-
allPages: ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>[],
|
|
60
|
-
lastPageParam: TPageParam,
|
|
61
|
-
allPageParams: TPageParam[]
|
|
62
|
-
) => TPageParam | undefined | null
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export type UseActorSuspenseInfiniteQueryConfig<
|
|
66
|
-
Service,
|
|
67
|
-
Method extends FunctionName<Service>,
|
|
68
|
-
Transform extends TransformKey = "candid",
|
|
69
|
-
TPageParam = unknown,
|
|
70
|
-
Selected = InfiniteData<
|
|
71
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
72
|
-
TPageParam
|
|
73
|
-
>,
|
|
74
|
-
> = Omit<
|
|
75
|
-
UseActorSuspenseInfiniteQueryParameters<
|
|
76
|
-
Service,
|
|
77
|
-
Method,
|
|
78
|
-
Transform,
|
|
79
|
-
TPageParam,
|
|
80
|
-
Selected
|
|
81
|
-
>,
|
|
82
|
-
"reactor"
|
|
83
|
-
>
|
|
84
|
-
|
|
85
|
-
export type UseActorSuspenseInfiniteQueryResult<
|
|
86
|
-
Service,
|
|
87
|
-
Method extends FunctionName<Service>,
|
|
88
|
-
Transform extends TransformKey = "candid",
|
|
89
|
-
TPageParam = unknown,
|
|
90
|
-
Selected = InfiniteData<
|
|
91
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
92
|
-
TPageParam
|
|
93
|
-
>,
|
|
94
|
-
> = UseSuspenseInfiniteQueryResult<
|
|
95
|
-
Selected,
|
|
96
|
-
ReactorReturnErr<Service, Method, Transform>
|
|
97
|
-
>
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Hook for executing suspense-enabled infinite/paginated query calls on a canister.
|
|
101
|
-
*
|
|
102
|
-
* @example
|
|
103
|
-
* const { data, fetchNextPage, hasNextPage } = useActorSuspenseInfiniteQuery({
|
|
104
|
-
* reactor,
|
|
105
|
-
* functionName: "getItems",
|
|
106
|
-
* getArgs: (pageParam) => [{ offset: pageParam, limit: 10 }],
|
|
107
|
-
* initialPageParam: 0,
|
|
108
|
-
* getNextPageParam: (lastPage) => lastPage.nextOffset,
|
|
109
|
-
* })
|
|
110
|
-
*/
|
|
111
|
-
export const useActorSuspenseInfiniteQuery = <
|
|
112
|
-
Service,
|
|
113
|
-
Method extends FunctionName<Service>,
|
|
114
|
-
Transform extends TransformKey = "candid",
|
|
115
|
-
TPageParam = unknown,
|
|
116
|
-
Selected = InfiniteData<
|
|
117
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
118
|
-
TPageParam
|
|
119
|
-
>,
|
|
120
|
-
>({
|
|
121
|
-
reactor,
|
|
122
|
-
functionName,
|
|
123
|
-
getArgs,
|
|
124
|
-
callConfig,
|
|
125
|
-
queryKey,
|
|
126
|
-
...options
|
|
127
|
-
}: UseActorSuspenseInfiniteQueryParameters<
|
|
128
|
-
Service,
|
|
129
|
-
Method,
|
|
130
|
-
Transform,
|
|
131
|
-
TPageParam,
|
|
132
|
-
Selected
|
|
133
|
-
>): UseActorSuspenseInfiniteQueryResult<
|
|
134
|
-
Service,
|
|
135
|
-
Method,
|
|
136
|
-
Transform,
|
|
137
|
-
TPageParam,
|
|
138
|
-
Selected
|
|
139
|
-
> => {
|
|
140
|
-
// Always pass queryKey through generateQueryKey so it is merged with the
|
|
141
|
-
// reactor/function identity. Using the custom key verbatim would cause cache
|
|
142
|
-
// collisions if two different actors or methods share the same key string.
|
|
143
|
-
const baseQueryKey = useMemo(
|
|
144
|
-
() =>
|
|
145
|
-
reactor.generateQueryKey(
|
|
146
|
-
{
|
|
147
|
-
functionName,
|
|
148
|
-
// Fold the call arguments into the key. They live in the `getArgs`
|
|
149
|
-
// closure rather than in the config, so without this two hooks on the
|
|
150
|
-
// same method with different arguments share one cache entry and
|
|
151
|
-
// serve each other's pages.
|
|
152
|
-
queryKey: mergeFactoryQueryKey(
|
|
153
|
-
queryKey,
|
|
154
|
-
undefined,
|
|
155
|
-
getArgs(options.initialPageParam)
|
|
156
|
-
),
|
|
157
|
-
},
|
|
158
|
-
callConfig
|
|
159
|
-
),
|
|
160
|
-
[
|
|
161
|
-
queryKey,
|
|
162
|
-
reactor,
|
|
163
|
-
// `canisterId` is mutable reactor state that `setCanisterId` can change,
|
|
164
|
-
// while `reactor` itself stays the same object — so it has to be a
|
|
165
|
-
// dependency in its own right or the key stays pinned to the old canister
|
|
166
|
-
// while the queryFn already calls the new one.
|
|
167
|
-
reactor.canisterId?.toString(),
|
|
168
|
-
functionName,
|
|
169
|
-
callConfig,
|
|
170
|
-
getArgs,
|
|
171
|
-
options.initialPageParam,
|
|
172
|
-
]
|
|
173
|
-
)
|
|
174
|
-
|
|
175
|
-
// Memoize queryFn to prevent recreation on every render
|
|
176
|
-
const queryFn = useCallback(
|
|
177
|
-
async ({ pageParam }: { pageParam: TPageParam }) => {
|
|
178
|
-
const args = getArgs(pageParam)
|
|
179
|
-
const result = await reactor.callMethod({
|
|
180
|
-
functionName,
|
|
181
|
-
args,
|
|
182
|
-
callConfig,
|
|
183
|
-
})
|
|
184
|
-
return normalizeQueryData<ReactorReturnOk<Service, Method, Transform>>(
|
|
185
|
-
result as ReactorReturnOk<Service, Method, Transform>
|
|
186
|
-
)
|
|
187
|
-
},
|
|
188
|
-
[reactor, functionName, getArgs, callConfig]
|
|
189
|
-
)
|
|
190
|
-
|
|
191
|
-
return useSuspenseInfiniteQuery(
|
|
192
|
-
{
|
|
193
|
-
queryKey: baseQueryKey,
|
|
194
|
-
queryFn,
|
|
195
|
-
...options,
|
|
196
|
-
} as any,
|
|
197
|
-
reactor.queryClient
|
|
198
|
-
) as UseActorSuspenseInfiniteQueryResult<
|
|
199
|
-
Service,
|
|
200
|
-
Method,
|
|
201
|
-
Transform,
|
|
202
|
-
TPageParam,
|
|
203
|
-
Selected
|
|
204
|
-
>
|
|
205
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react"
|
|
2
|
-
import {
|
|
3
|
-
QueryKey,
|
|
4
|
-
useSuspenseQuery,
|
|
5
|
-
QueryObserverOptions,
|
|
6
|
-
UseSuspenseQueryResult,
|
|
7
|
-
QueryFunction,
|
|
8
|
-
} from "@tanstack/react-query"
|
|
9
|
-
import {
|
|
10
|
-
FunctionName,
|
|
11
|
-
Reactor,
|
|
12
|
-
TransformKey,
|
|
13
|
-
ReactorArgs,
|
|
14
|
-
ReactorReturnOk,
|
|
15
|
-
ReactorQueryData,
|
|
16
|
-
ReactorReturnErr,
|
|
17
|
-
} from "@ic-reactor/core"
|
|
18
|
-
import { CallConfig } from "@icp-sdk/core/agent"
|
|
19
|
-
|
|
20
|
-
export interface UseActorSuspenseQueryParameters<
|
|
21
|
-
Service,
|
|
22
|
-
Method extends FunctionName<Service>,
|
|
23
|
-
Transform extends TransformKey = "candid",
|
|
24
|
-
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
25
|
-
> extends Omit<
|
|
26
|
-
QueryObserverOptions<
|
|
27
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
28
|
-
ReactorReturnErr<Service, Method, Transform>,
|
|
29
|
-
Selected,
|
|
30
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
31
|
-
QueryKey
|
|
32
|
-
>,
|
|
33
|
-
"queryKey" | "queryFn"
|
|
34
|
-
> {
|
|
35
|
-
reactor: Reactor<Service, Transform>
|
|
36
|
-
functionName: Method
|
|
37
|
-
args?: ReactorArgs<Service, Method, Transform>
|
|
38
|
-
callConfig?: CallConfig
|
|
39
|
-
queryKey?: QueryKey
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export type UseActorSuspenseQueryConfig<
|
|
43
|
-
Service,
|
|
44
|
-
Method extends FunctionName<Service>,
|
|
45
|
-
Transform extends TransformKey = "candid",
|
|
46
|
-
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
47
|
-
> = Omit<
|
|
48
|
-
UseActorSuspenseQueryParameters<Service, Method, Transform, Selected>,
|
|
49
|
-
"reactor"
|
|
50
|
-
>
|
|
51
|
-
|
|
52
|
-
export type UseActorSuspenseQueryResult<
|
|
53
|
-
Service,
|
|
54
|
-
Method extends FunctionName<Service>,
|
|
55
|
-
Transform extends TransformKey = "candid",
|
|
56
|
-
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
57
|
-
> = UseSuspenseQueryResult<
|
|
58
|
-
Selected,
|
|
59
|
-
ReactorReturnErr<Service, Method, Transform>
|
|
60
|
-
>
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Hook for executing suspense-enabled query calls on a canister.
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* const { data } = useActorSuspenseQuery({
|
|
67
|
-
* reactor,
|
|
68
|
-
* functionName: "getUser",
|
|
69
|
-
* args: ["user-123"],
|
|
70
|
-
* })
|
|
71
|
-
*
|
|
72
|
-
* // With select transformation
|
|
73
|
-
* const { data } = useActorSuspenseQuery({
|
|
74
|
-
* reactor,
|
|
75
|
-
* functionName: "getUser",
|
|
76
|
-
* args: ["user-123"],
|
|
77
|
-
* select: (user) => user.name,
|
|
78
|
-
* })
|
|
79
|
-
*/
|
|
80
|
-
export const useActorSuspenseQuery = <
|
|
81
|
-
Service,
|
|
82
|
-
Method extends FunctionName<Service>,
|
|
83
|
-
Transform extends TransformKey = "candid",
|
|
84
|
-
Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
85
|
-
>({
|
|
86
|
-
reactor,
|
|
87
|
-
functionName,
|
|
88
|
-
args,
|
|
89
|
-
callConfig,
|
|
90
|
-
queryKey: defaultQueryKey,
|
|
91
|
-
...options
|
|
92
|
-
}: UseActorSuspenseQueryParameters<
|
|
93
|
-
Service,
|
|
94
|
-
Method,
|
|
95
|
-
Transform,
|
|
96
|
-
Selected
|
|
97
|
-
>): UseActorSuspenseQueryResult<Service, Method, Transform, Selected> => {
|
|
98
|
-
// Memoize query options to prevent unnecessary re-computations
|
|
99
|
-
const { queryKey, queryFn } = useMemo(
|
|
100
|
-
() =>
|
|
101
|
-
reactor.getQueryOptions<Method>({
|
|
102
|
-
callConfig,
|
|
103
|
-
functionName,
|
|
104
|
-
args,
|
|
105
|
-
queryKey: defaultQueryKey,
|
|
106
|
-
}),
|
|
107
|
-
// `canisterId` is mutable reactor state that `setCanisterId` can change,
|
|
108
|
-
// while `reactor` itself stays the same object — so it has to be a
|
|
109
|
-
// dependency in its own right or the key stays pinned to the old canister.
|
|
110
|
-
[
|
|
111
|
-
reactor,
|
|
112
|
-
reactor.canisterId?.toString(),
|
|
113
|
-
callConfig,
|
|
114
|
-
functionName,
|
|
115
|
-
args,
|
|
116
|
-
defaultQueryKey,
|
|
117
|
-
]
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
return useSuspenseQuery(
|
|
121
|
-
{
|
|
122
|
-
// Suspense queries don't support skipToken, so cast the queryFn
|
|
123
|
-
queryFn: queryFn as QueryFunction<
|
|
124
|
-
ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>,
|
|
125
|
-
QueryKey
|
|
126
|
-
>,
|
|
127
|
-
...options,
|
|
128
|
-
queryKey,
|
|
129
|
-
},
|
|
130
|
-
reactor.queryClient
|
|
131
|
-
)
|
|
132
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// Re-export core (following TanStack Query's pattern)
|
|
2
|
-
// Users can import everything from @ic-reactor/react without needing @ic-reactor/core
|
|
3
|
-
export * from "@ic-reactor/core"
|
|
4
|
-
|
|
5
|
-
// Re-export hooks
|
|
6
|
-
export * from "./hooks/index.js"
|
|
7
|
-
|
|
8
|
-
// Validation utilities for React
|
|
9
|
-
export * from "./validation.js"
|
|
10
|
-
|
|
11
|
-
// React-specific exports
|
|
12
|
-
export * from "./createActorHooks.js"
|
|
13
|
-
export * from "./defineReactor.js"
|
|
14
|
-
|
|
15
|
-
export * from "./createQuery.js"
|
|
16
|
-
export * from "./createSuspenseQuery.js"
|
|
17
|
-
export * from "./createInfiniteQuery.js"
|
|
18
|
-
export * from "./createSuspenseInfiniteQuery.js"
|
|
19
|
-
export * from "./createMutation.js"
|
|
20
|
-
|
|
21
|
-
export * from "./auth/index.js"
|
|
22
|
-
|
|
23
|
-
export * from "./types.js"
|