@ic-reactor/react 3.5.1 → 3.7.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 +28 -9
- package/dist/auth/authentication-manager.d.ts +66 -0
- package/dist/auth/authentication-manager.d.ts.map +1 -0
- package/dist/auth/authentication-manager.js +458 -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 +19 -0
- package/dist/auth/identity-attributes-manager.d.ts.map +1 -0
- package/dist/auth/identity-attributes-manager.js +94 -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 +75 -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 +12 -12
- package/dist/createActorHooks.d.ts.map +1 -1
- package/dist/createActorHooks.js.map +1 -1
- package/dist/createInfiniteQuery.d.ts +32 -32
- 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 +12 -1
- 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 +12 -2
- package/dist/createQuery.d.ts.map +1 -1
- package/dist/createQuery.js +15 -5
- package/dist/createQuery.js.map +1 -1
- package/dist/createSuspenseInfiniteQuery.d.ts +31 -31
- 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 +2 -2
- package/dist/createSuspenseQuery.d.ts.map +1 -1
- package/dist/createSuspenseQuery.js.map +1 -1
- package/dist/defineReactor.d.ts +74 -0
- package/dist/defineReactor.d.ts.map +1 -0
- package/dist/defineReactor.js +75 -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} +12 -57
- 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 +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- 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 +28 -22
- package/src/auth/authentication-manager.ts +519 -0
- package/src/auth/constants.ts +25 -0
- package/src/auth/createIdentityAttributeHooks.ts +83 -0
- package/src/auth/identity-attributes-manager.ts +127 -0
- package/src/auth/identity-attributes.ts +270 -0
- package/src/auth/index.ts +7 -0
- package/src/auth/types.ts +88 -0
- package/src/createActorHooks.ts +81 -49
- package/src/createInfiniteQuery.ts +153 -97
- package/src/createMutation.ts +34 -18
- package/src/createQuery.ts +92 -48
- package/src/createSuspenseInfiniteQuery.ts +165 -114
- package/src/createSuspenseQuery.ts +67 -41
- package/src/defineReactor.test.ts +70 -0
- package/src/defineReactor.ts +150 -0
- package/src/{createAuthHooks.ts → hooks/createAuthHooks.ts} +17 -98
- 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 +3 -1
- package/src/types.ts +76 -71
- package/src/utils.test.ts +14 -0
- package/src/utils.ts +15 -2
- package/dist/createAuthHooks.d.ts.map +0 -1
- package/dist/createAuthHooks.js.map +0 -1
|
@@ -31,6 +31,7 @@ import type {
|
|
|
31
31
|
BaseActor,
|
|
32
32
|
TransformKey,
|
|
33
33
|
ReactorReturnOk,
|
|
34
|
+
ReactorQueryData,
|
|
34
35
|
ReactorReturnErr,
|
|
35
36
|
} from "@ic-reactor/core"
|
|
36
37
|
import {
|
|
@@ -45,35 +46,35 @@ import {
|
|
|
45
46
|
} from "@tanstack/react-query"
|
|
46
47
|
import { CallConfig } from "@icp-sdk/core/agent"
|
|
47
48
|
import { NoInfer } from "./types"
|
|
48
|
-
import { mergeFactoryQueryKey } from "./utils"
|
|
49
|
+
import { mergeFactoryQueryKey, normalizeQueryData } from "./utils"
|
|
49
50
|
|
|
50
51
|
type SuspenseInfiniteFactoryCallOptions = {
|
|
51
52
|
queryKey?: QueryKey
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
type SuspenseInfiniteQueryFactoryFn<
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
Service,
|
|
57
|
+
Method extends FunctionName<Service>,
|
|
58
|
+
Transform extends TransformKey,
|
|
58
59
|
TPageParam,
|
|
59
|
-
|
|
60
|
+
Selected,
|
|
60
61
|
> = {
|
|
61
62
|
(
|
|
62
|
-
getArgs: (pageParam: TPageParam) => ReactorArgs<
|
|
63
|
+
getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>
|
|
63
64
|
): SuspenseInfiniteQueryResult<
|
|
64
|
-
SuspenseInfiniteQueryPageData<
|
|
65
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
65
66
|
TPageParam,
|
|
66
|
-
|
|
67
|
-
SuspenseInfiniteQueryError<
|
|
67
|
+
Selected,
|
|
68
|
+
SuspenseInfiniteQueryError<Service, Method, Transform>
|
|
68
69
|
>
|
|
69
70
|
(
|
|
70
|
-
getArgs: (pageParam: TPageParam) => ReactorArgs<
|
|
71
|
+
getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>,
|
|
71
72
|
options?: SuspenseInfiniteFactoryCallOptions
|
|
72
73
|
): SuspenseInfiniteQueryResult<
|
|
73
|
-
SuspenseInfiniteQueryPageData<
|
|
74
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
74
75
|
TPageParam,
|
|
75
|
-
|
|
76
|
-
SuspenseInfiniteQueryError<
|
|
76
|
+
Selected,
|
|
77
|
+
SuspenseInfiniteQueryError<Service, Method, Transform>
|
|
77
78
|
>
|
|
78
79
|
}
|
|
79
80
|
|
|
@@ -83,17 +84,17 @@ type SuspenseInfiniteQueryFactoryFn<
|
|
|
83
84
|
|
|
84
85
|
/** The raw page data type returned by the query function */
|
|
85
86
|
export type SuspenseInfiniteQueryPageData<
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
> = ReactorReturnOk<
|
|
87
|
+
Service = BaseActor,
|
|
88
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
89
|
+
Transform extends TransformKey = "candid",
|
|
90
|
+
> = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>
|
|
90
91
|
|
|
91
92
|
/** The error type for infinite queries */
|
|
92
93
|
export type SuspenseInfiniteQueryError<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
> = ReactorReturnErr<
|
|
94
|
+
Service = BaseActor,
|
|
95
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
96
|
+
Transform extends TransformKey = "candid",
|
|
97
|
+
> = ReactorReturnErr<Service, Method, Transform>
|
|
97
98
|
|
|
98
99
|
// ============================================================================
|
|
99
100
|
// Configuration Types
|
|
@@ -103,49 +104,55 @@ export type SuspenseInfiniteQueryError<
|
|
|
103
104
|
* Configuration for createActorSuspenseInfiniteQuery.
|
|
104
105
|
* Extends InfiniteQueryObserverOptions to accept all React Query options at the create level.
|
|
105
106
|
*
|
|
106
|
-
* @template
|
|
107
|
-
* @template
|
|
108
|
-
* @template
|
|
107
|
+
* @template Service - The actor interface type
|
|
108
|
+
* @template Method - The method name on the actor
|
|
109
|
+
* @template Transform - The transformation key (identity, display, etc.)
|
|
109
110
|
* @template TPageParam - The type of the page parameter
|
|
110
|
-
* @template
|
|
111
|
+
* @template Selected - The type returned after select transformation
|
|
111
112
|
*/
|
|
112
113
|
export interface SuspenseInfiniteQueryConfig<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
Service = BaseActor,
|
|
115
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
116
|
+
Transform extends TransformKey = "candid",
|
|
116
117
|
TPageParam = unknown,
|
|
117
|
-
|
|
118
|
+
Selected = InfiniteData<
|
|
119
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
120
|
+
TPageParam
|
|
121
|
+
>,
|
|
118
122
|
> extends Omit<
|
|
119
123
|
InfiniteQueryObserverOptions<
|
|
120
|
-
SuspenseInfiniteQueryPageData<
|
|
121
|
-
SuspenseInfiniteQueryError<
|
|
122
|
-
|
|
124
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
125
|
+
SuspenseInfiniteQueryError<Service, Method, Transform>,
|
|
126
|
+
Selected,
|
|
123
127
|
QueryKey,
|
|
124
128
|
TPageParam
|
|
125
129
|
>,
|
|
126
130
|
"queryKey" | "queryFn"
|
|
127
131
|
> {
|
|
128
132
|
/** The method to call on the canister */
|
|
129
|
-
functionName:
|
|
133
|
+
functionName: Method
|
|
130
134
|
/** Call configuration for the actor method */
|
|
131
135
|
callConfig?: CallConfig
|
|
132
136
|
/** Custom query key (optional, auto-generated if not provided) */
|
|
133
137
|
queryKey?: QueryKey
|
|
134
138
|
/** Function to get args from page parameter */
|
|
135
|
-
getArgs: (pageParam: TPageParam) => ReactorArgs<
|
|
139
|
+
getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>
|
|
136
140
|
}
|
|
137
141
|
|
|
138
142
|
/**
|
|
139
143
|
* Configuration for createActorSuspenseInfiniteQueryFactory (without getArgs; provided at call time).
|
|
140
144
|
*/
|
|
141
145
|
export type SuspenseInfiniteQueryFactoryConfig<
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
146
|
+
Service = BaseActor,
|
|
147
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
148
|
+
Transform extends TransformKey = "candid",
|
|
145
149
|
TPageParam = unknown,
|
|
146
|
-
|
|
150
|
+
Selected = InfiniteData<
|
|
151
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
152
|
+
TPageParam
|
|
153
|
+
>,
|
|
147
154
|
> = Omit<
|
|
148
|
-
SuspenseInfiniteQueryConfig<
|
|
155
|
+
SuspenseInfiniteQueryConfig<Service, Method, Transform, TPageParam, Selected>,
|
|
149
156
|
"getArgs"
|
|
150
157
|
> & {
|
|
151
158
|
/**
|
|
@@ -154,7 +161,7 @@ export type SuspenseInfiniteQueryFactoryConfig<
|
|
|
154
161
|
* a stable serializable representation of the logical query identity
|
|
155
162
|
* (typically excluding pagination/cursor fields).
|
|
156
163
|
*/
|
|
157
|
-
getKeyArgs?: (args: ReactorArgs<
|
|
164
|
+
getKeyArgs?: (args: ReactorArgs<Service, Method, Transform>) => unknown
|
|
158
165
|
}
|
|
159
166
|
|
|
160
167
|
// ============================================================================
|
|
@@ -167,16 +174,16 @@ export type SuspenseInfiniteQueryFactoryConfig<
|
|
|
167
174
|
export interface UseSuspenseInfiniteQueryWithSelect<
|
|
168
175
|
TPageData,
|
|
169
176
|
TPageParam,
|
|
170
|
-
|
|
177
|
+
Selected = InfiniteData<TPageData, TPageParam>,
|
|
171
178
|
TError = Error,
|
|
172
179
|
> {
|
|
173
|
-
// Overload 1: Without select - returns
|
|
180
|
+
// Overload 1: Without select - returns Selected
|
|
174
181
|
(
|
|
175
182
|
options?: Omit<
|
|
176
183
|
UseSuspenseInfiniteQueryOptions<
|
|
177
184
|
TPageData,
|
|
178
185
|
TError,
|
|
179
|
-
|
|
186
|
+
Selected,
|
|
180
187
|
QueryKey,
|
|
181
188
|
TPageParam
|
|
182
189
|
>,
|
|
@@ -187,10 +194,10 @@ export interface UseSuspenseInfiniteQueryWithSelect<
|
|
|
187
194
|
| "getNextPageParam"
|
|
188
195
|
| "getPreviousPageParam"
|
|
189
196
|
>
|
|
190
|
-
): UseSuspenseInfiniteQueryResult<
|
|
197
|
+
): UseSuspenseInfiniteQueryResult<Selected, TError>
|
|
191
198
|
|
|
192
199
|
// Overload 2: With select - chains on top and returns TFinal
|
|
193
|
-
<TFinal =
|
|
200
|
+
<TFinal = Selected>(
|
|
194
201
|
options: Omit<
|
|
195
202
|
UseSuspenseInfiniteQueryOptions<
|
|
196
203
|
TPageData,
|
|
@@ -206,7 +213,7 @@ export interface UseSuspenseInfiniteQueryWithSelect<
|
|
|
206
213
|
| "getNextPageParam"
|
|
207
214
|
| "getPreviousPageParam"
|
|
208
215
|
> & {
|
|
209
|
-
select: (data:
|
|
216
|
+
select: (data: Selected) => TFinal
|
|
210
217
|
}
|
|
211
218
|
): UseSuspenseInfiniteQueryResult<TFinal, TError>
|
|
212
219
|
}
|
|
@@ -220,23 +227,23 @@ export interface UseSuspenseInfiniteQueryWithSelect<
|
|
|
220
227
|
*
|
|
221
228
|
* @template TPageData - The raw page data type
|
|
222
229
|
* @template TPageParam - The page parameter type
|
|
223
|
-
* @template
|
|
230
|
+
* @template Selected - The type after select transformation
|
|
224
231
|
* @template TError - The error type
|
|
225
232
|
*/
|
|
226
233
|
export interface SuspenseInfiniteQueryResult<
|
|
227
234
|
TPageData,
|
|
228
235
|
TPageParam,
|
|
229
|
-
|
|
236
|
+
Selected = InfiniteData<TPageData, TPageParam>,
|
|
230
237
|
TError = Error,
|
|
231
238
|
> {
|
|
232
239
|
/** Fetch first page in loader (uses ensureInfiniteQueryData for cache-first) */
|
|
233
|
-
fetch: () => Promise<
|
|
240
|
+
fetch: () => Promise<Selected>
|
|
234
241
|
|
|
235
242
|
/** React hook for components - supports pagination */
|
|
236
243
|
useSuspenseInfiniteQuery: UseSuspenseInfiniteQueryWithSelect<
|
|
237
244
|
TPageData,
|
|
238
245
|
TPageParam,
|
|
239
|
-
|
|
246
|
+
Selected,
|
|
240
247
|
TError
|
|
241
248
|
>
|
|
242
249
|
|
|
@@ -251,8 +258,8 @@ export interface SuspenseInfiniteQueryResult<
|
|
|
251
258
|
* Returns undefined if data is not in cache.
|
|
252
259
|
*/
|
|
253
260
|
getCacheData: {
|
|
254
|
-
():
|
|
255
|
-
<TFinal>(select: (data:
|
|
261
|
+
(): Selected | undefined
|
|
262
|
+
<TFinal>(select: (data: Selected) => TFinal): TFinal | undefined
|
|
256
263
|
}
|
|
257
264
|
}
|
|
258
265
|
|
|
@@ -261,22 +268,31 @@ export interface SuspenseInfiniteQueryResult<
|
|
|
261
268
|
// ============================================================================
|
|
262
269
|
|
|
263
270
|
const createSuspenseInfiniteQueryImpl = <
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
271
|
+
Service,
|
|
272
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
273
|
+
Transform extends TransformKey = "candid",
|
|
267
274
|
TPageParam = unknown,
|
|
268
|
-
|
|
275
|
+
Selected = InfiniteData<
|
|
276
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
277
|
+
TPageParam
|
|
278
|
+
>,
|
|
269
279
|
>(
|
|
270
|
-
reactor: Reactor<
|
|
271
|
-
config: SuspenseInfiniteQueryConfig<
|
|
280
|
+
reactor: Reactor<Service, Transform>,
|
|
281
|
+
config: SuspenseInfiniteQueryConfig<
|
|
282
|
+
Service,
|
|
283
|
+
Method,
|
|
284
|
+
Transform,
|
|
285
|
+
TPageParam,
|
|
286
|
+
Selected
|
|
287
|
+
>
|
|
272
288
|
): SuspenseInfiniteQueryResult<
|
|
273
|
-
SuspenseInfiniteQueryPageData<
|
|
289
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
274
290
|
TPageParam,
|
|
275
|
-
|
|
276
|
-
SuspenseInfiniteQueryError<
|
|
291
|
+
Selected,
|
|
292
|
+
SuspenseInfiniteQueryError<Service, Method, Transform>
|
|
277
293
|
> => {
|
|
278
|
-
type TPageData = SuspenseInfiniteQueryPageData<
|
|
279
|
-
type TError = SuspenseInfiniteQueryError<
|
|
294
|
+
type TPageData = SuspenseInfiniteQueryPageData<Service, Method, Transform>
|
|
295
|
+
type TError = SuspenseInfiniteQueryError<Service, Method, Transform>
|
|
280
296
|
type TInfiniteData = InfiniteData<TPageData, TPageParam>
|
|
281
297
|
|
|
282
298
|
const {
|
|
@@ -316,7 +332,9 @@ const createSuspenseInfiniteQueryImpl = <
|
|
|
316
332
|
args,
|
|
317
333
|
callConfig,
|
|
318
334
|
})
|
|
319
|
-
return
|
|
335
|
+
return normalizeQueryData<ReactorReturnOk<Service, Method, Transform>>(
|
|
336
|
+
result as ReactorReturnOk<Service, Method, Transform>
|
|
337
|
+
)
|
|
320
338
|
}
|
|
321
339
|
|
|
322
340
|
// Get infinite query options for fetchInfiniteQuery
|
|
@@ -335,21 +353,21 @@ const createSuspenseInfiniteQueryImpl = <
|
|
|
335
353
|
})
|
|
336
354
|
|
|
337
355
|
// Fetch function for loaders (cache-first, fetches first page)
|
|
338
|
-
const fetch = async (): Promise<
|
|
356
|
+
const fetch = async (): Promise<Selected> => {
|
|
339
357
|
// Use ensureInfiniteQueryData to get cached data or fetch if stale
|
|
340
358
|
const result = await reactor.queryClient.ensureInfiniteQueryData(
|
|
341
359
|
getInfiniteQueryOptions()
|
|
342
360
|
)
|
|
343
361
|
|
|
344
362
|
// Result is already InfiniteData format
|
|
345
|
-
return select ? select(result) : (result as unknown as
|
|
363
|
+
return select ? select(result) : (result as unknown as Selected)
|
|
346
364
|
}
|
|
347
365
|
|
|
348
366
|
// Implementation
|
|
349
367
|
const useSuspenseInfiniteQueryHook: UseSuspenseInfiniteQueryWithSelect<
|
|
350
368
|
TPageData,
|
|
351
369
|
TPageParam,
|
|
352
|
-
|
|
370
|
+
Selected,
|
|
353
371
|
TError
|
|
354
372
|
> = (options: any): any => {
|
|
355
373
|
// Chain the selects: raw -> config.select -> options.select
|
|
@@ -385,7 +403,7 @@ const createSuspenseInfiniteQueryImpl = <
|
|
|
385
403
|
}
|
|
386
404
|
|
|
387
405
|
// Get data from cache without fetching
|
|
388
|
-
const getCacheData = (selectFn?: (data:
|
|
406
|
+
const getCacheData = (selectFn?: (data: Selected) => any) => {
|
|
389
407
|
const queryKey = getQueryKey()
|
|
390
408
|
const cachedRawData = reactor.queryClient.getQueryData(
|
|
391
409
|
queryKey
|
|
@@ -398,7 +416,7 @@ const createSuspenseInfiniteQueryImpl = <
|
|
|
398
416
|
// Apply config.select to raw cache data
|
|
399
417
|
const selectedData = (
|
|
400
418
|
select ? select(cachedRawData) : cachedRawData
|
|
401
|
-
) as
|
|
419
|
+
) as Selected
|
|
402
420
|
|
|
403
421
|
// Apply optional select parameter
|
|
404
422
|
if (selectFn) {
|
|
@@ -422,23 +440,38 @@ const createSuspenseInfiniteQueryImpl = <
|
|
|
422
440
|
// ============================================================================
|
|
423
441
|
|
|
424
442
|
export function createSuspenseInfiniteQuery<
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
443
|
+
Service,
|
|
444
|
+
Transform extends TransformKey,
|
|
445
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
428
446
|
TPageParam = unknown,
|
|
429
|
-
|
|
447
|
+
Selected = InfiniteData<
|
|
448
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
449
|
+
TPageParam
|
|
450
|
+
>,
|
|
430
451
|
>(
|
|
431
|
-
reactor: Reactor<
|
|
432
|
-
config: SuspenseInfiniteQueryConfig<
|
|
452
|
+
reactor: Reactor<Service, Transform>,
|
|
453
|
+
config: SuspenseInfiniteQueryConfig<
|
|
454
|
+
NoInfer<Service>,
|
|
455
|
+
Method,
|
|
456
|
+
Transform,
|
|
457
|
+
TPageParam,
|
|
458
|
+
Selected
|
|
459
|
+
>
|
|
433
460
|
): SuspenseInfiniteQueryResult<
|
|
434
|
-
SuspenseInfiniteQueryPageData<
|
|
461
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
435
462
|
TPageParam,
|
|
436
|
-
|
|
437
|
-
SuspenseInfiniteQueryError<
|
|
463
|
+
Selected,
|
|
464
|
+
SuspenseInfiniteQueryError<Service, Method, Transform>
|
|
438
465
|
> {
|
|
439
466
|
return createSuspenseInfiniteQueryImpl(
|
|
440
467
|
reactor,
|
|
441
|
-
config as SuspenseInfiniteQueryConfig<
|
|
468
|
+
config as SuspenseInfiniteQueryConfig<
|
|
469
|
+
Service,
|
|
470
|
+
Method,
|
|
471
|
+
Transform,
|
|
472
|
+
TPageParam,
|
|
473
|
+
Selected
|
|
474
|
+
>
|
|
442
475
|
)
|
|
443
476
|
}
|
|
444
477
|
|
|
@@ -450,11 +483,11 @@ export function createSuspenseInfiniteQuery<
|
|
|
450
483
|
* Create a suspense infinite query factory that accepts getArgs at call time.
|
|
451
484
|
* Useful when pagination logic varies by context.
|
|
452
485
|
*
|
|
453
|
-
* @template
|
|
454
|
-
* @template
|
|
455
|
-
* @template
|
|
486
|
+
* @template Service - The actor interface type
|
|
487
|
+
* @template Method - The method name on the actor
|
|
488
|
+
* @template Transform - The transformation key (identity, display, etc.)
|
|
456
489
|
* @template TPageParam - The page parameter type
|
|
457
|
-
* @template
|
|
490
|
+
* @template Selected - The type returned after select transformation
|
|
458
491
|
*
|
|
459
492
|
* @param reactor - The Reactor instance
|
|
460
493
|
* @param config - Suspense infinite query configuration (without getArgs)
|
|
@@ -483,29 +516,38 @@ export function createSuspenseInfiniteQuery<
|
|
|
483
516
|
*/
|
|
484
517
|
|
|
485
518
|
export function createSuspenseInfiniteQueryFactory<
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
519
|
+
Service,
|
|
520
|
+
Transform extends TransformKey,
|
|
521
|
+
Method extends FunctionName<Service> = FunctionName<Service>,
|
|
489
522
|
TPageParam = unknown,
|
|
490
|
-
|
|
523
|
+
Selected = InfiniteData<
|
|
524
|
+
SuspenseInfiniteQueryPageData<Service, Method, Transform>,
|
|
525
|
+
TPageParam
|
|
526
|
+
>,
|
|
491
527
|
>(
|
|
492
|
-
reactor: Reactor<
|
|
528
|
+
reactor: Reactor<Service, Transform>,
|
|
493
529
|
config: SuspenseInfiniteQueryFactoryConfig<
|
|
494
|
-
NoInfer<
|
|
495
|
-
|
|
496
|
-
|
|
530
|
+
NoInfer<Service>,
|
|
531
|
+
Method,
|
|
532
|
+
Transform,
|
|
497
533
|
TPageParam,
|
|
498
|
-
|
|
534
|
+
Selected
|
|
499
535
|
>
|
|
500
|
-
): SuspenseInfiniteQueryFactoryFn<
|
|
536
|
+
): SuspenseInfiniteQueryFactoryFn<
|
|
537
|
+
Service,
|
|
538
|
+
Method,
|
|
539
|
+
Transform,
|
|
540
|
+
TPageParam,
|
|
541
|
+
Selected
|
|
542
|
+
> {
|
|
501
543
|
const factory: SuspenseInfiniteQueryFactoryFn<
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
544
|
+
Service,
|
|
545
|
+
Method,
|
|
546
|
+
Transform,
|
|
505
547
|
TPageParam,
|
|
506
|
-
|
|
548
|
+
Selected
|
|
507
549
|
> = (
|
|
508
|
-
getArgs: (pageParam: TPageParam) => ReactorArgs<
|
|
550
|
+
getArgs: (pageParam: TPageParam) => ReactorArgs<Service, Method, Transform>,
|
|
509
551
|
options?: SuspenseInfiniteFactoryCallOptions
|
|
510
552
|
) => {
|
|
511
553
|
const initialArgs = getArgs(config.initialPageParam)
|
|
@@ -516,22 +558,31 @@ export function createSuspenseInfiniteQueryFactory<
|
|
|
516
558
|
keyArgs
|
|
517
559
|
)
|
|
518
560
|
|
|
519
|
-
return createSuspenseInfiniteQueryImpl<
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
561
|
+
return createSuspenseInfiniteQueryImpl<
|
|
562
|
+
Service,
|
|
563
|
+
Method,
|
|
564
|
+
Transform,
|
|
565
|
+
TPageParam,
|
|
566
|
+
Selected
|
|
567
|
+
>(reactor, {
|
|
568
|
+
...(({ getKeyArgs: _getKeyArgs, ...rest }) => rest)(
|
|
569
|
+
config as SuspenseInfiniteQueryFactoryConfig<
|
|
570
|
+
Service,
|
|
571
|
+
Method,
|
|
572
|
+
Transform,
|
|
573
|
+
TPageParam,
|
|
574
|
+
Selected
|
|
575
|
+
>
|
|
576
|
+
),
|
|
577
|
+
queryKey,
|
|
578
|
+
getArgs,
|
|
579
|
+
} as SuspenseInfiniteQueryConfig<
|
|
580
|
+
Service,
|
|
581
|
+
Method,
|
|
582
|
+
Transform,
|
|
583
|
+
TPageParam,
|
|
584
|
+
Selected
|
|
585
|
+
>)
|
|
535
586
|
}
|
|
536
587
|
|
|
537
588
|
return factory
|