@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,115 +0,0 @@
|
|
|
1
|
-
import { type UseQueryResult, type UseMutationResult, type QueryKey, type QueryObserverOptions } from "@tanstack/react-query";
|
|
2
|
-
import { Reactor, BaseActor, FunctionName, TransformKey, ReactorArgs, ReactorReturnOk, ReactorQueryData, ReactorReturnErr, FunctionType } from "@ic-reactor/core";
|
|
3
|
-
import { CallConfig } from "@icp-sdk/core/agent";
|
|
4
|
-
/**
|
|
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.
|
|
11
|
-
*/
|
|
12
|
-
export interface UseActorMethodParameters<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid"> extends Omit<QueryObserverOptions<ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, ReactorReturnErr<Service, Method, Transform>, ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, QueryKey>, "queryKey" | "queryFn"> {
|
|
13
|
-
/** The reactor instance to use for method calls */
|
|
14
|
-
reactor: Reactor<Service, Transform>;
|
|
15
|
-
/** The method name to call on the canister */
|
|
16
|
-
functionName: Method;
|
|
17
|
-
/** Arguments to pass to the method (optional for parameterless methods) */
|
|
18
|
-
args?: ReactorArgs<Service, Method, Transform>;
|
|
19
|
-
/** Agent call configuration (effectiveCanisterId, etc.) */
|
|
20
|
-
callConfig?: CallConfig;
|
|
21
|
-
/** Custom query key (auto-generated if not provided) */
|
|
22
|
-
queryKey?: QueryKey;
|
|
23
|
-
/**
|
|
24
|
-
* Callback when the method call succeeds.
|
|
25
|
-
* Works for both query and mutation methods.
|
|
26
|
-
*
|
|
27
|
-
* A method's `undefined` result arrives as `null`, as in `useActorQuery`,
|
|
28
|
-
* for query and update methods alike.
|
|
29
|
-
*/
|
|
30
|
-
onSuccess?: (data: ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>) => void;
|
|
31
|
-
/**
|
|
32
|
-
* Callback when the method call fails.
|
|
33
|
-
* Works for both query and mutation methods.
|
|
34
|
-
*/
|
|
35
|
-
onError?: (error: ReactorReturnErr<Service, Method, Transform>) => void;
|
|
36
|
-
/**
|
|
37
|
-
* Query keys to invalidate after a successful mutation.
|
|
38
|
-
* Only applies to mutation methods (updates).
|
|
39
|
-
*/
|
|
40
|
-
invalidateQueries?: QueryKey[];
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Configuration type for bound useActorMethod hook (reactor omitted).
|
|
44
|
-
* For use with createActorHooks.
|
|
45
|
-
*/
|
|
46
|
-
export type UseActorMethodConfig<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid"> = Omit<UseActorMethodParameters<Service, Method, Transform>, "reactor">;
|
|
47
|
-
/**
|
|
48
|
-
* Result type for useActorMethod hook.
|
|
49
|
-
* Provides a unified interface for both query and mutation methods.
|
|
50
|
-
*/
|
|
51
|
-
export interface UseActorMethodResult<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid"> {
|
|
52
|
-
/**
|
|
53
|
-
* The returned data from the method call. A method's `undefined` result is
|
|
54
|
-
* `null` here, as in `useActorQuery`, so `undefined` only means no call has
|
|
55
|
-
* settled yet.
|
|
56
|
-
*/
|
|
57
|
-
data: ReactorQueryData<ReactorReturnOk<Service, Method, Transform>> | undefined;
|
|
58
|
-
/** Whether the method is currently executing */
|
|
59
|
-
isLoading: boolean;
|
|
60
|
-
/** Alias for isLoading - whether a mutation is pending */
|
|
61
|
-
isPending: boolean;
|
|
62
|
-
/** Whether there was an error */
|
|
63
|
-
isError: boolean;
|
|
64
|
-
/** Whether the method has successfully completed at least once */
|
|
65
|
-
isSuccess: boolean;
|
|
66
|
-
/** The error if one occurred */
|
|
67
|
-
error: ReactorReturnErr<Service, Method, Transform> | null;
|
|
68
|
-
/** Whether this is a query method (true) or mutation method (false) */
|
|
69
|
-
isQuery: boolean;
|
|
70
|
-
/** The function type (query, update, composite_query) */
|
|
71
|
-
functionType: FunctionType;
|
|
72
|
-
/**
|
|
73
|
-
* Call the method with optional arguments.
|
|
74
|
-
* For queries: triggers a refetch
|
|
75
|
-
* For mutations: executes the mutation with the provided args
|
|
76
|
-
*/
|
|
77
|
-
call: (args?: ReactorArgs<Service, Method, Transform>) => Promise<ReactorQueryData<ReactorReturnOk<Service, Method, Transform>> | undefined>;
|
|
78
|
-
/**
|
|
79
|
-
* Reset the state (data and error).
|
|
80
|
-
* For queries: resets this hook's own cache entry to its initial state, so
|
|
81
|
-
* `data` goes back to `initialData` when one was given and is cleared
|
|
82
|
-
* otherwise. An enabled hook then refetches. Other args of the same method
|
|
83
|
-
* are left alone.
|
|
84
|
-
* For mutations: resets the mutation state
|
|
85
|
-
*/
|
|
86
|
-
reset: () => void;
|
|
87
|
-
/**
|
|
88
|
-
* For queries only: Refetch the query
|
|
89
|
-
*/
|
|
90
|
-
refetch: () => Promise<ReactorQueryData<ReactorReturnOk<Service, Method, Transform>> | undefined>;
|
|
91
|
-
/** The raw query result (only available for query methods) */
|
|
92
|
-
queryResult?: UseQueryResult<ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, ReactorReturnErr<Service, Method, Transform>>;
|
|
93
|
-
/** The raw mutation result (only available for mutation methods) */
|
|
94
|
-
mutationResult?: UseMutationResult<ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, ReactorReturnErr<Service, Method, Transform>, ReactorArgs<Service, Method, Transform>>;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* A unified hook for calling canister methods that automatically handles
|
|
98
|
-
* both query and mutation methods based on the Candid interface.
|
|
99
|
-
*/
|
|
100
|
-
export declare function useActorMethod<Service = BaseActor, Method extends FunctionName<Service> = FunctionName<Service>, Transform extends TransformKey = "candid">({ reactor, functionName, args, callConfig, queryKey: customQueryKey, enabled, onSuccess, onError, invalidateQueries, ...queryOptions }: UseActorMethodParameters<Service, Method, Transform>): UseActorMethodResult<Service, Method, Transform>;
|
|
101
|
-
/**
|
|
102
|
-
* Creates a bound useMethod hook for a specific reactor instance.
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* ```tsx
|
|
106
|
-
* const { useMethod } = createActorMethodHooks(reactor)
|
|
107
|
-
* ```
|
|
108
|
-
*/
|
|
109
|
-
export declare function createActorMethodHooks<Service = BaseActor, Transform extends TransformKey = "candid">(reactor: Reactor<Service, Transform>): {
|
|
110
|
-
/**
|
|
111
|
-
* Hook for calling methods on the bound reactor.
|
|
112
|
-
*/
|
|
113
|
-
useMethod: <Method extends FunctionName<Service>>(config: Omit<UseActorMethodParameters<Service, Method, Transform>, "reactor">) => UseActorMethodResult<Service, Method, Transform>;
|
|
114
|
-
};
|
|
115
|
-
//# sourceMappingURL=useActorMethod.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useActorMethod.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorMethod.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
2
|
-
import { useQuery, useMutation, } from "@tanstack/react-query";
|
|
3
|
-
import { normalizeQueryData } from "../utils.js";
|
|
4
|
-
/**
|
|
5
|
-
* A unified hook for calling canister methods that automatically handles
|
|
6
|
-
* both query and mutation methods based on the Candid interface.
|
|
7
|
-
*/
|
|
8
|
-
export function useActorMethod({ reactor, functionName, args, callConfig, queryKey: customQueryKey, enabled = true, onSuccess, onError, invalidateQueries, ...queryOptions }) {
|
|
9
|
-
// Determine if this is a query method by checking the IDL
|
|
10
|
-
const isQuery = useMemo(() => {
|
|
11
|
-
if (!reactor)
|
|
12
|
-
throw new Error("Reactor instance is required");
|
|
13
|
-
return reactor.isQueryMethod(functionName);
|
|
14
|
-
}, [reactor, functionName]);
|
|
15
|
-
const functionType = isQuery ? "query" : "update";
|
|
16
|
-
// Latest callbacks, read at dispatch time: this keeps a rerendered closure
|
|
17
|
-
// from being ignored, and keeps callback identity out of the effect deps.
|
|
18
|
-
const onSuccessRef = useRef(onSuccess);
|
|
19
|
-
const onErrorRef = useRef(onError);
|
|
20
|
-
onSuccessRef.current = onSuccess;
|
|
21
|
-
onErrorRef.current = onError;
|
|
22
|
-
// Build the key for a given set of call arguments.
|
|
23
|
-
//
|
|
24
|
-
// A custom `queryKey` is appended to the canister/function prefix rather than
|
|
25
|
-
// replacing it, matching `useActorQuery`. Used verbatim it would carry no
|
|
26
|
-
// canister id, so the entry would be invisible to the canister-scoped
|
|
27
|
-
// invalidation `ClientManager.updateAgent` runs on identity change and would
|
|
28
|
-
// keep serving the previous principal's data after sign-in or sign-out.
|
|
29
|
-
const buildQueryKey = useCallback((keyArgs) => reactor.generateQueryKey({ functionName, args: keyArgs, queryKey: customQueryKey }, callConfig),
|
|
30
|
-
// `canisterId` is mutable reactor state that `setCanisterId` can change,
|
|
31
|
-
// while `reactor` itself stays the same object — so it has to be a
|
|
32
|
-
// dependency in its own right or the key stays pinned to the old canister.
|
|
33
|
-
[
|
|
34
|
-
reactor,
|
|
35
|
-
reactor.canisterId?.toString(),
|
|
36
|
-
functionName,
|
|
37
|
-
callConfig,
|
|
38
|
-
customQueryKey,
|
|
39
|
-
]);
|
|
40
|
-
const queryKey = useMemo(() => buildQueryKey(args), [buildQueryKey, args]);
|
|
41
|
-
// ============================================================================
|
|
42
|
-
// Query Implementation
|
|
43
|
-
// ============================================================================
|
|
44
|
-
const queryResult = useQuery({
|
|
45
|
-
queryKey,
|
|
46
|
-
// Callbacks deliberately do NOT live here: a queryFn runs once per fetch
|
|
47
|
-
// attempt, so `onError` fired on every retry (four times with the default
|
|
48
|
-
// QueryClient) and `onSuccess` never fired when data came from the cache
|
|
49
|
-
// or a deduped sibling. They are dispatched from the settled observer
|
|
50
|
-
// result below instead.
|
|
51
|
-
//
|
|
52
|
-
// TanStack Query fails a query whose queryFn resolves `undefined`, with
|
|
53
|
-
// "data is undefined", and a successful call can resolve it. A
|
|
54
|
-
// DisplayReactor decodes an `opt` None to `undefined`, and a `()` query
|
|
55
|
-
// returns nothing. Every other query path normalizes the value to `null`.
|
|
56
|
-
queryFn: async () => normalizeQueryData((await reactor.callMethod({
|
|
57
|
-
functionName,
|
|
58
|
-
args,
|
|
59
|
-
callConfig,
|
|
60
|
-
}))),
|
|
61
|
-
enabled: isQuery && enabled,
|
|
62
|
-
...queryOptions,
|
|
63
|
-
}, reactor.queryClient);
|
|
64
|
-
// Dispatch the query callbacks from the settled observer result, once per
|
|
65
|
-
// distinct outcome. TanStack v5 removed `onSuccess`/`onError` from useQuery
|
|
66
|
-
// for exactly this reason, so the settle timestamps are what identify a new
|
|
67
|
-
// result: they also advance for a cache hit on a fresh mount, which is the
|
|
68
|
-
// case that previously never notified at all.
|
|
69
|
-
const notifiedSuccessAt = useRef(undefined);
|
|
70
|
-
const notifiedErrorAt = useRef(undefined);
|
|
71
|
-
const { status, data, error, dataUpdatedAt, errorUpdatedAt } = queryResult;
|
|
72
|
-
useEffect(() => {
|
|
73
|
-
if (!isQuery)
|
|
74
|
-
return;
|
|
75
|
-
if (status === "success" && dataUpdatedAt !== notifiedSuccessAt.current) {
|
|
76
|
-
notifiedSuccessAt.current = dataUpdatedAt;
|
|
77
|
-
onSuccessRef.current?.(data);
|
|
78
|
-
}
|
|
79
|
-
}, [isQuery, status, data, dataUpdatedAt]);
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
if (!isQuery)
|
|
82
|
-
return;
|
|
83
|
-
if (status === "error" && errorUpdatedAt !== notifiedErrorAt.current) {
|
|
84
|
-
notifiedErrorAt.current = errorUpdatedAt;
|
|
85
|
-
onErrorRef.current?.(error);
|
|
86
|
-
}
|
|
87
|
-
}, [isQuery, status, error, errorUpdatedAt]);
|
|
88
|
-
// ============================================================================
|
|
89
|
-
// Mutation Implementation
|
|
90
|
-
// ============================================================================
|
|
91
|
-
const mutationResult = useMutation({
|
|
92
|
-
mutationKey: queryKey,
|
|
93
|
-
// Normalized like the query branch, so `data`, `call()` and `onSuccess`
|
|
94
|
-
// mean the same thing for both kinds of method. The hook cannot type the
|
|
95
|
-
// two branches apart: a Candid service type does not say which methods
|
|
96
|
-
// are queries.
|
|
97
|
-
mutationFn: async (mutationArgs) => normalizeQueryData((await reactor.callMethod({
|
|
98
|
-
functionName,
|
|
99
|
-
args: mutationArgs ?? args,
|
|
100
|
-
callConfig,
|
|
101
|
-
}))),
|
|
102
|
-
onSuccess: (data) => {
|
|
103
|
-
onSuccessRef.current?.(data);
|
|
104
|
-
// Invalidate specified queries after successful mutation
|
|
105
|
-
if (invalidateQueries && invalidateQueries.length > 0) {
|
|
106
|
-
invalidateQueries.forEach((key) => {
|
|
107
|
-
void reactor.queryClient.invalidateQueries({ queryKey: key });
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
onError: (error) => {
|
|
112
|
-
onErrorRef.current?.(error);
|
|
113
|
-
},
|
|
114
|
-
}, reactor.queryClient);
|
|
115
|
-
// ============================================================================
|
|
116
|
-
// Unified Call Function
|
|
117
|
-
// ============================================================================
|
|
118
|
-
const call = useCallback(async (callArgs) => {
|
|
119
|
-
if (isQuery) {
|
|
120
|
-
// For queries, refetch with new args if provided
|
|
121
|
-
if (callArgs !== undefined) {
|
|
122
|
-
// Key on the args actually being called. Reusing the hook's
|
|
123
|
-
// mount-time key would store this result under the previous args'
|
|
124
|
-
// entry — poisoning it for every other reader — and let fetchQuery
|
|
125
|
-
// dedupe onto an in-flight request for the old args, returning that
|
|
126
|
-
// response as though it answered this one.
|
|
127
|
-
try {
|
|
128
|
-
const result = await reactor.queryClient.fetchQuery({
|
|
129
|
-
queryKey: buildQueryKey(callArgs),
|
|
130
|
-
// Normalize for the same reason as the observer's queryFn.
|
|
131
|
-
queryFn: async () => normalizeQueryData((await reactor.callMethod({
|
|
132
|
-
functionName,
|
|
133
|
-
args: callArgs,
|
|
134
|
-
callConfig,
|
|
135
|
-
}))),
|
|
136
|
-
staleTime: 0,
|
|
137
|
-
});
|
|
138
|
-
// Dispatched here rather than by the observer effect: this result
|
|
139
|
-
// lands under the called args' key, which the mounted observer (bound
|
|
140
|
-
// to the hook's own args) does not watch. That separation is also why
|
|
141
|
-
// this can no longer double-fire the way it did when both wrote to
|
|
142
|
-
// the same key.
|
|
143
|
-
onSuccessRef.current?.(result);
|
|
144
|
-
return result;
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
onErrorRef.current?.(error);
|
|
148
|
-
return undefined;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Otherwise just refetch
|
|
152
|
-
const { data } = await queryResult.refetch();
|
|
153
|
-
return data;
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
// For mutations, execute with provided args
|
|
157
|
-
return mutationResult
|
|
158
|
-
.mutateAsync(callArgs)
|
|
159
|
-
.catch(() => undefined);
|
|
160
|
-
}
|
|
161
|
-
}, [
|
|
162
|
-
isQuery,
|
|
163
|
-
reactor,
|
|
164
|
-
functionName,
|
|
165
|
-
callConfig,
|
|
166
|
-
buildQueryKey,
|
|
167
|
-
queryResult,
|
|
168
|
-
mutationResult,
|
|
169
|
-
]);
|
|
170
|
-
// ============================================================================
|
|
171
|
-
// Reset Function
|
|
172
|
-
// ============================================================================
|
|
173
|
-
const reset = useCallback(() => {
|
|
174
|
-
if (isQuery) {
|
|
175
|
-
// Reset, not remove. `removeQueries` drops the entry without notifying
|
|
176
|
-
// its observers, so this hook kept rendering the old data while bound to
|
|
177
|
-
// a query that was no longer in the cache. No later invalidation reached
|
|
178
|
-
// it, including the one an identity switch runs. `resetQueries` notifies
|
|
179
|
-
// the observer and refetches the entry when the hook is enabled. It is
|
|
180
|
-
// `exact` because only this hook's entry should reset. A prefix match on
|
|
181
|
-
// a no-args key would also reset every args variant other hooks render.
|
|
182
|
-
void reactor.queryClient.resetQueries({ queryKey, exact: true });
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
mutationResult.reset();
|
|
186
|
-
}
|
|
187
|
-
}, [isQuery, reactor, queryKey, mutationResult]);
|
|
188
|
-
// ============================================================================
|
|
189
|
-
// Refetch Function
|
|
190
|
-
// ============================================================================
|
|
191
|
-
const refetch = useCallback(async () => {
|
|
192
|
-
if (isQuery) {
|
|
193
|
-
const result = await queryResult.refetch();
|
|
194
|
-
return result.data;
|
|
195
|
-
}
|
|
196
|
-
return undefined;
|
|
197
|
-
}, [isQuery, queryResult]);
|
|
198
|
-
// ============================================================================
|
|
199
|
-
// Return Unified Result
|
|
200
|
-
// ============================================================================
|
|
201
|
-
if (isQuery) {
|
|
202
|
-
return {
|
|
203
|
-
data: queryResult.data,
|
|
204
|
-
isLoading: queryResult.isLoading,
|
|
205
|
-
isPending: queryResult.isLoading,
|
|
206
|
-
isError: queryResult.isError,
|
|
207
|
-
isSuccess: queryResult.isSuccess,
|
|
208
|
-
error: queryResult.error,
|
|
209
|
-
isQuery: true,
|
|
210
|
-
functionType,
|
|
211
|
-
call,
|
|
212
|
-
reset,
|
|
213
|
-
refetch,
|
|
214
|
-
queryResult,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
return {
|
|
219
|
-
data: mutationResult.data,
|
|
220
|
-
isLoading: mutationResult.isPending,
|
|
221
|
-
isPending: mutationResult.isPending,
|
|
222
|
-
isError: mutationResult.isError,
|
|
223
|
-
isSuccess: mutationResult.isSuccess,
|
|
224
|
-
error: mutationResult.error,
|
|
225
|
-
isQuery: false,
|
|
226
|
-
functionType,
|
|
227
|
-
call,
|
|
228
|
-
reset,
|
|
229
|
-
refetch,
|
|
230
|
-
mutationResult,
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Creates a bound useMethod hook for a specific reactor instance.
|
|
236
|
-
*
|
|
237
|
-
* @example
|
|
238
|
-
* ```tsx
|
|
239
|
-
* const { useMethod } = createActorMethodHooks(reactor)
|
|
240
|
-
* ```
|
|
241
|
-
*/
|
|
242
|
-
export function createActorMethodHooks(reactor) {
|
|
243
|
-
return {
|
|
244
|
-
/**
|
|
245
|
-
* Hook for calling methods on the bound reactor.
|
|
246
|
-
*/
|
|
247
|
-
useMethod: (config) => useActorMethod({ ...config, reactor }),
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
//# sourceMappingURL=useActorMethod.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useActorMethod.js","sourceRoot":"","sources":["../../src/hooks/useActorMethod.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { UseMutationOptions, UseMutationResult, QueryKey } from "@tanstack/react-query";
|
|
2
|
-
import { Reactor, ReactorArgs, ReactorReturnOk, FunctionName, TransformKey, ReactorReturnErr, CanisterError, ErrResult, ActorMethodReturnType, TransformReturnRegistry } from "@ic-reactor/core";
|
|
3
|
-
import { CallConfig } from "@icp-sdk/core/agent";
|
|
4
|
-
export interface UseActorMutationParameters<Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", TOnMutateResult = unknown> extends Omit<UseMutationOptions<ReactorReturnOk<Service, Method, Transform>, ReactorReturnErr<Service, Method, Transform>, ReactorArgs<Service, Method, Transform>, TOnMutateResult>, "mutationFn"> {
|
|
5
|
-
reactor: Reactor<Service, Transform>;
|
|
6
|
-
functionName: Method;
|
|
7
|
-
callConfig?: CallConfig;
|
|
8
|
-
/**
|
|
9
|
-
* Queries to invalidate upon successful mutation.
|
|
10
|
-
*
|
|
11
|
-
* `undefined` entries are skipped, so the common
|
|
12
|
-
* `[maybeQuery?.getQueryKey()]` idiom is safe when the optional query object
|
|
13
|
-
* is absent.
|
|
14
|
-
*/
|
|
15
|
-
invalidateQueries?: (QueryKey | undefined)[];
|
|
16
|
-
/**
|
|
17
|
-
* Callback for canister-level business logic errors.
|
|
18
|
-
* Called when the canister returns a Result { Err: E } variant.
|
|
19
|
-
* Separate from `onError`, which fires for all errors including network failures.
|
|
20
|
-
*/
|
|
21
|
-
onCanisterError?: (error: CanisterError<TransformReturnRegistry<ErrResult<ActorMethodReturnType<Service[Method]>>, Service>[Transform]>, variables: ReactorArgs<Service, Method, Transform>) => void;
|
|
22
|
-
}
|
|
23
|
-
export type UseActorMutationConfig<Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", TOnMutateResult = unknown> = Omit<UseActorMutationParameters<Service, Method, Transform, TOnMutateResult>, "reactor">;
|
|
24
|
-
export type UseActorMutationResult<Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", TOnMutateResult = unknown> = UseMutationResult<ReactorReturnOk<Service, Method, Transform>, ReactorReturnErr<Service, Method, Transform>, ReactorArgs<Service, Method, Transform>, TOnMutateResult>;
|
|
25
|
-
/**
|
|
26
|
-
* Hook for executing mutation calls on a canister.
|
|
27
|
-
* Use this for component-level mutation flows.
|
|
28
|
-
* For non-React usage, prefer `createMutation(...).execute(args)`.
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* const { mutate, isPending } = useActorMutation({
|
|
32
|
-
* reactor,
|
|
33
|
-
* functionName: "transfer",
|
|
34
|
-
* onSuccess: () => console.log("Success!"),
|
|
35
|
-
* onCanisterError: (err) => console.error("Canister Err:", err.code),
|
|
36
|
-
* })
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* const transferMutation = createMutation(reactor, {
|
|
40
|
-
* functionName: "transfer",
|
|
41
|
-
* onCanisterError: (err) => console.error(err.code),
|
|
42
|
-
* })
|
|
43
|
-
*
|
|
44
|
-
* // Non-React execution path
|
|
45
|
-
* await transferMutation.execute([{ to: "aaaaa-aa", amount: "100" }])
|
|
46
|
-
*/
|
|
47
|
-
export declare const useActorMutation: <Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", TOnMutateResult = unknown>({ reactor, functionName, invalidateQueries, onSuccess, onError, onCanisterError, callConfig, ...options }: UseActorMutationParameters<Service, Method, Transform, TOnMutateResult>) => UseActorMutationResult<Service, Method, Transform, TOnMutateResult>;
|
|
48
|
-
//# sourceMappingURL=useActorMutation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useActorMutation.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorMutation.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACT,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAEhB,aAAa,EACb,SAAS,EACT,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,WAAW,0BAA0B,CACzC,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,eAAe,GAAG,OAAO,CACzB,SAAQ,IAAI,CACZ,kBAAkB,CAChB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAC3C,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAC5C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EACvC,eAAe,CAChB,EACD,YAAY,CACb;IACC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAA;IAC5C;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,KAAK,EAAE,aAAa,CAClB,uBAAuB,CACrB,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EACjD,OAAO,CACR,CAAC,SAAS,CAAC,CACb,EACD,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,KAC/C,IAAI,CAAA;CACV;AAED,MAAM,MAAM,sBAAsB,CAChC,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,eAAe,GAAG,OAAO,IACvB,IAAI,CACN,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,EACvE,SAAS,CACV,CAAA;AAED,MAAM,MAAM,sBAAsB,CAChC,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,eAAe,GAAG,OAAO,IACvB,iBAAiB,CACnB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAC3C,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAC5C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EACvC,eAAe,CAChB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,eAAe,GAAG,OAAO,EACzB,2GASC,0BAA0B,CAC3B,OAAO,EACP,MAAM,EACN,SAAS,EACT,eAAe,CAChB,KAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CA8ErE,CAAA"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { useCallback } from "react";
|
|
2
|
-
import { useMutation, } from "@tanstack/react-query";
|
|
3
|
-
import { isCanisterError, } from "@ic-reactor/core";
|
|
4
|
-
/**
|
|
5
|
-
* Hook for executing mutation calls on a canister.
|
|
6
|
-
* Use this for component-level mutation flows.
|
|
7
|
-
* For non-React usage, prefer `createMutation(...).execute(args)`.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* const { mutate, isPending } = useActorMutation({
|
|
11
|
-
* reactor,
|
|
12
|
-
* functionName: "transfer",
|
|
13
|
-
* onSuccess: () => console.log("Success!"),
|
|
14
|
-
* onCanisterError: (err) => console.error("Canister Err:", err.code),
|
|
15
|
-
* })
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* const transferMutation = createMutation(reactor, {
|
|
19
|
-
* functionName: "transfer",
|
|
20
|
-
* onCanisterError: (err) => console.error(err.code),
|
|
21
|
-
* })
|
|
22
|
-
*
|
|
23
|
-
* // Non-React execution path
|
|
24
|
-
* await transferMutation.execute([{ to: "aaaaa-aa", amount: "100" }])
|
|
25
|
-
*/
|
|
26
|
-
export const useActorMutation = ({ reactor, functionName, invalidateQueries, onSuccess, onError, onCanisterError, callConfig, ...options }) => {
|
|
27
|
-
const mutationFn = useCallback(async (args) => reactor.callMethod({ functionName, callConfig, args }), [reactor, functionName, callConfig]);
|
|
28
|
-
const handleSuccess = useCallback(async (...params) => {
|
|
29
|
-
if (invalidateQueries) {
|
|
30
|
-
// Skip undefined entries. React Query reads `{ queryKey: undefined }`
|
|
31
|
-
// as "match everything", so a single undefined — which the natural
|
|
32
|
-
// `invalidateQueries: [maybeQuery?.getQueryKey()]` idiom produces
|
|
33
|
-
// whenever the optional query object is absent — would invalidate every
|
|
34
|
-
// query in the client, including an app's unrelated non-canister ones.
|
|
35
|
-
// `createMutation.invalidateAll` already filters the same way.
|
|
36
|
-
await Promise.all(invalidateQueries
|
|
37
|
-
.filter((queryKey) => queryKey !== undefined)
|
|
38
|
-
.map((queryKey) => reactor.queryClient.invalidateQueries({ queryKey })));
|
|
39
|
-
}
|
|
40
|
-
await onSuccess?.(...params);
|
|
41
|
-
}, [reactor, invalidateQueries, onSuccess]);
|
|
42
|
-
const handleError = useCallback(async (error, variables, context, mutation) => {
|
|
43
|
-
if (isCanisterError(error)) {
|
|
44
|
-
onCanisterError?.(error, variables);
|
|
45
|
-
}
|
|
46
|
-
// Awaited like `onSuccess` above. TanStack Query waits for the promise
|
|
47
|
-
// `onError` returns before it runs `onSettled` and settles the mutation,
|
|
48
|
-
// and it can only wait for a promise this wrapper passes back.
|
|
49
|
-
await onError?.(error, variables, context, mutation);
|
|
50
|
-
}, [onCanisterError, onError]);
|
|
51
|
-
// Not memoized. The deps could only ever list the values destructured above,
|
|
52
|
-
// never the `options` rest bucket, so everything passed straight through —
|
|
53
|
-
// `onMutate`, `onSettled`, `retry`, `meta`, `gcTime` — was frozen at the first
|
|
54
|
-
// render: `useMutation` calls `observer.setOptions` from an effect keyed on
|
|
55
|
-
// the options identity, so a later render's closures never reached it. A
|
|
56
|
-
// component passing only `onSettled` would report the recipient selected at
|
|
57
|
-
// mount rather than at submit.
|
|
58
|
-
//
|
|
59
|
-
// `createMutation`'s own hook builds its options inline for the same reason.
|
|
60
|
-
// A fresh object per render costs nothing here: `setOptions` diffs the values
|
|
61
|
-
// rather than the reference.
|
|
62
|
-
return useMutation({
|
|
63
|
-
...options,
|
|
64
|
-
mutationFn,
|
|
65
|
-
onSuccess: handleSuccess,
|
|
66
|
-
onError: handleError,
|
|
67
|
-
}, reactor.queryClient);
|
|
68
|
-
};
|
|
69
|
-
//# sourceMappingURL=useActorMutation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useActorMutation.js","sourceRoot":"","sources":["../../src/hooks/useActorMutation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EACL,WAAW,GAIZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAOL,eAAe,GAKhB,MAAM,kBAAkB,CAAA;AAkEzB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAK9B,EACA,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,eAAe,EACf,UAAU,EACV,GAAG,OAAO,EAMX,EAAuE,EAAE;IACxE,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EAAE,IAA6C,EAAE,EAAE,CACtD,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EACxD,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CACpC,CAAA;IAED,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EACH,GAAG,MASF,EACD,EAAE;QACF,IAAI,iBAAiB,EAAE,CAAC;YACtB,sEAAsE;YACtE,mEAAmE;YACnE,kEAAkE;YAClE,wEAAwE;YACxE,uEAAuE;YACvE,+DAA+D;YAC/D,MAAM,OAAO,CAAC,GAAG,CACf,iBAAiB;iBACd,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC;iBAC5C,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAChB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CACpD,CACJ,CAAA;QACH,CAAC;QACD,MAAM,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,CAAA;IAC9B,CAAC,EACD,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,CACxC,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EACH,KAAmD,EACnD,SAAkD,EAClD,OAAgB,EAChB,QAAiB,EACjB,EAAE;QACF,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,eAAe,EAAE,CAAC,KAAY,EAAE,SAAS,CAAC,CAAA;QAC5C,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,+DAA+D;QAC/D,MAAM,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAc,EAAE,QAAe,CAAC,CAAA;IACpE,CAAC,EACD,CAAC,eAAe,EAAE,OAAO,CAAC,CAC3B,CAAA;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,+EAA+E;IAC/E,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,+BAA+B;IAC/B,EAAE;IACF,6EAA6E;IAC7E,8EAA8E;IAC9E,6BAA6B;IAC7B,OAAO,WAAW,CAChB;QACE,GAAG,OAAO;QACV,UAAU;QACV,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,WAAW;KACrB,EACD,OAAO,CAAC,WAAW,CACpB,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { QueryKey, QueryObserverOptions, UseQueryResult } from "@tanstack/react-query";
|
|
2
|
-
import { FunctionName, Reactor, TransformKey, ReactorArgs, ReactorReturnOk, ReactorQueryData, ReactorReturnErr } from "@ic-reactor/core";
|
|
3
|
-
import { CallConfig } from "@icp-sdk/core/agent";
|
|
4
|
-
export interface UseActorQueryParameters<Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>> extends Omit<QueryObserverOptions<ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, ReactorReturnErr<Service, Method, Transform>, Selected, ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>, QueryKey>, "queryKey" | "queryFn"> {
|
|
5
|
-
reactor: Reactor<Service, Transform>;
|
|
6
|
-
functionName: Method;
|
|
7
|
-
args?: ReactorArgs<Service, Method, Transform>;
|
|
8
|
-
callConfig?: CallConfig;
|
|
9
|
-
queryKey?: QueryKey;
|
|
10
|
-
}
|
|
11
|
-
export type UseActorQueryConfig<Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>> = Omit<UseActorQueryParameters<Service, Method, Transform, Selected>, "reactor">;
|
|
12
|
-
export type UseActorQueryResult<Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>> = UseQueryResult<Selected, ReactorReturnErr<Service, Method, Transform>>;
|
|
13
|
-
/**
|
|
14
|
-
* Hook for executing query calls on a canister.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* const { data, isLoading } = useActorQuery({
|
|
18
|
-
* reactor,
|
|
19
|
-
* functionName: "getUser",
|
|
20
|
-
* args: ["user-123"],
|
|
21
|
-
* })
|
|
22
|
-
*
|
|
23
|
-
* // With select transformation
|
|
24
|
-
* const { data } = useActorQuery({
|
|
25
|
-
* reactor,
|
|
26
|
-
* functionName: "getUser",
|
|
27
|
-
* args: ["user-123"],
|
|
28
|
-
* select: (user) => user.name,
|
|
29
|
-
* })
|
|
30
|
-
*/
|
|
31
|
-
export declare const useActorQuery: <Service, Method extends FunctionName<Service>, Transform extends TransformKey = "candid", Selected = ReactorQueryData<ReactorReturnOk<Service, Method, Transform>>>({ reactor, functionName, args, callConfig, queryKey: defaultQueryKey, ...options }: UseActorQueryParameters<Service, Method, Transform, Selected>) => UseActorQueryResult<Service, Method, Transform, Selected>;
|
|
32
|
-
//# sourceMappingURL=useActorQuery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useActorQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useActorQuery.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EAER,oBAAoB,EACpB,cAAc,EACf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,WAAW,uBAAuB,CACtC,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CACxE,SAAQ,IAAI,CACZ,oBAAoB,CAClB,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAC7D,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAC5C,QAAQ,EACR,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAC7D,QAAQ,CACT,EACD,UAAU,GAAG,SAAS,CACvB;IACC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC9C,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,MAAM,MAAM,mBAAmB,CAC7B,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,IACtE,IAAI,CACN,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC7D,SAAS,CACV,CAAA;AAED,MAAM,MAAM,mBAAmB,CAC7B,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,IACtE,cAAc,CAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,EACP,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,EACpC,SAAS,SAAS,YAAY,GAAG,QAAQ,EACzC,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EACxE,oFAOC,uBAAuB,CACxB,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,CACT,KAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CA+B3D,CAAA"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react";
|
|
2
|
-
import { useQuery, } from "@tanstack/react-query";
|
|
3
|
-
/**
|
|
4
|
-
* Hook for executing query calls on a canister.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* const { data, isLoading } = useActorQuery({
|
|
8
|
-
* reactor,
|
|
9
|
-
* functionName: "getUser",
|
|
10
|
-
* args: ["user-123"],
|
|
11
|
-
* })
|
|
12
|
-
*
|
|
13
|
-
* // With select transformation
|
|
14
|
-
* const { data } = useActorQuery({
|
|
15
|
-
* reactor,
|
|
16
|
-
* functionName: "getUser",
|
|
17
|
-
* args: ["user-123"],
|
|
18
|
-
* select: (user) => user.name,
|
|
19
|
-
* })
|
|
20
|
-
*/
|
|
21
|
-
export const useActorQuery = ({ reactor, functionName, args, callConfig, queryKey: defaultQueryKey, ...options }) => {
|
|
22
|
-
// Memoize query options to prevent unnecessary re-computations
|
|
23
|
-
const { queryKey, queryFn } = useMemo(() => reactor.getQueryOptions({
|
|
24
|
-
callConfig,
|
|
25
|
-
functionName,
|
|
26
|
-
args,
|
|
27
|
-
queryKey: defaultQueryKey,
|
|
28
|
-
}),
|
|
29
|
-
// `canisterId` is mutable reactor state that `setCanisterId` can change,
|
|
30
|
-
// while `reactor` itself stays the same object — so it has to be a
|
|
31
|
-
// dependency in its own right or the key stays pinned to the old canister.
|
|
32
|
-
[
|
|
33
|
-
reactor,
|
|
34
|
-
reactor.canisterId?.toString(),
|
|
35
|
-
callConfig,
|
|
36
|
-
functionName,
|
|
37
|
-
args,
|
|
38
|
-
defaultQueryKey,
|
|
39
|
-
]);
|
|
40
|
-
return useQuery({
|
|
41
|
-
queryFn,
|
|
42
|
-
...options,
|
|
43
|
-
queryKey,
|
|
44
|
-
}, reactor.queryClient);
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=useActorQuery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useActorQuery.js","sourceRoot":"","sources":["../../src/hooks/useActorQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAEL,QAAQ,GAGT,MAAM,uBAAuB,CAAA;AAmD9B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAK3B,EACA,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,QAAQ,EAAE,eAAe,EACzB,GAAG,OAAO,EAMX,EAA6D,EAAE;IAC9D,+DAA+D;IAC/D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CACnC,GAAG,EAAE,CACH,OAAO,CAAC,eAAe,CAAS;QAC9B,UAAU;QACV,YAAY;QACZ,IAAI;QACJ,QAAQ,EAAE,eAAe;KAC1B,CAAC;IACJ,yEAAyE;IACzE,mEAAmE;IACnE,2EAA2E;IAC3E;QACE,OAAO;QACP,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE;QAC9B,UAAU;QACV,YAAY;QACZ,IAAI;QACJ,eAAe;KAChB,CACF,CAAA;IAED,OAAO,QAAQ,CACb;QACE,OAAO;QACP,GAAG,OAAO;QACV,QAAQ;KACT,EACD,OAAO,CAAC,WAAW,CACpB,CAAA;AACH,CAAC,CAAA"}
|