@ic-reactor/react 1.1.2 → 1.1.4
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/dist/context/actor.js +7 -3
- package/dist/context/agent.js +6 -2
- package/dist/context/types.d.ts +3 -1
- package/dist/helpers/actorHooks.js +4 -0
- package/dist/helpers/extractActorContext.js +2 -0
- package/dist/helpers/extractAgentContext.js +1 -1
- package/dist/helpers/types.d.ts +2 -0
- package/dist/hooks/actor/index.d.ts +1 -0
- package/dist/hooks/actor/index.js +1 -0
- package/dist/hooks/actor/useVisitService.d.ts +8 -0
- package/dist/hooks/actor/useVisitService.js +14 -0
- package/dist/hooks/types.d.ts +2 -0
- package/dist/hooks/useActor.js +19 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +17 -0
- package/package.json +3 -3
package/dist/context/actor.js
CHANGED
|
@@ -83,13 +83,17 @@ function createActorContext(config = {}) {
|
|
|
83
83
|
const { canisterId: defaultCanisterId } = config, defaultConfig = __rest(config, ["canisterId"]);
|
|
84
84
|
const ActorContext = react_1.default.createContext(null);
|
|
85
85
|
const ActorProvider = (_a) => {
|
|
86
|
-
var { children, canisterId = defaultCanisterId, loadingComponent = react_1.default.createElement("div", null, "Fetching canister...") } = _a, restConfig = __rest(_a, ["children", "canisterId", "loadingComponent"]);
|
|
86
|
+
var { children, canisterId = defaultCanisterId, loadingComponent = react_1.default.createElement("div", null, "Fetching canister..."), authenticatingComponent = react_1.default.createElement("div", null, "Authenticating...") } = _a, restConfig = __rest(_a, ["children", "canisterId", "loadingComponent", "authenticatingComponent"]);
|
|
87
87
|
if (!canisterId) {
|
|
88
88
|
throw new Error("canisterId is required");
|
|
89
89
|
}
|
|
90
90
|
const config = react_1.default.useMemo(() => (Object.assign(Object.assign({}, defaultConfig), restConfig)), [defaultConfig, restConfig]);
|
|
91
|
-
const { fetchError,
|
|
92
|
-
return (react_1.default.createElement(ActorContext.Provider, { value: hooks },
|
|
91
|
+
const { fetchError, authenticating, hooks } = (0, useActor_1.useActor)(Object.assign({ canisterId, fetchOnMount: false }, config));
|
|
92
|
+
return (react_1.default.createElement(ActorContext.Provider, { value: hooks }, hooks === null
|
|
93
|
+
? (fetchError !== null && fetchError !== void 0 ? fetchError : authenticating)
|
|
94
|
+
? authenticatingComponent
|
|
95
|
+
: loadingComponent
|
|
96
|
+
: children));
|
|
93
97
|
};
|
|
94
98
|
ActorProvider.displayName = "ActorProvider";
|
|
95
99
|
return Object.assign({ ActorProvider }, (0, extractActorContext_1.extractActorContext)(ActorContext));
|
package/dist/context/agent.js
CHANGED
|
@@ -93,11 +93,15 @@ const extractAgentContext_1 = require("../helpers/extractAgentContext");
|
|
|
93
93
|
* with the Internet Computer blockchain.
|
|
94
94
|
*/
|
|
95
95
|
const createAgentContext = (config = {}) => {
|
|
96
|
+
const { disableAuthenticateOnMount: defaultDisable } = config, contextOptions = __rest(config, ["disableAuthenticateOnMount"]);
|
|
96
97
|
const AgentContext = react_1.default.createContext(null);
|
|
97
98
|
const AgentProvider = (_a) => {
|
|
98
|
-
var { children, agentManager: mybeAgentManager } = _a, options = __rest(_a, ["children", "agentManager"]);
|
|
99
|
+
var { children, agentManager: mybeAgentManager, disableAuthenticateOnMount = defaultDisable !== null && defaultDisable !== void 0 ? defaultDisable : false } = _a, options = __rest(_a, ["children", "agentManager", "disableAuthenticateOnMount"]);
|
|
99
100
|
const hooks = react_1.default.useMemo(() => {
|
|
100
|
-
const agentManager = mybeAgentManager !== null && mybeAgentManager !== void 0 ? mybeAgentManager : (0, core_1.createAgentManager)(Object.assign(Object.assign({}, options),
|
|
101
|
+
const agentManager = mybeAgentManager !== null && mybeAgentManager !== void 0 ? mybeAgentManager : (0, core_1.createAgentManager)(Object.assign(Object.assign({}, options), contextOptions));
|
|
102
|
+
if (!disableAuthenticateOnMount) {
|
|
103
|
+
agentManager.authenticate();
|
|
104
|
+
}
|
|
101
105
|
return Object.assign(Object.assign(Object.assign({}, (0, agentHooks_1.agentHooks)(agentManager)), (0, authHooks_1.authHooks)(agentManager)), { agentManager });
|
|
102
106
|
}, [options]);
|
|
103
107
|
return (react_1.default.createElement(AgentContext.Provider, { value: hooks }, children));
|
package/dist/context/types.d.ts
CHANGED
|
@@ -4,12 +4,13 @@ export interface AgentContext extends AgentHooksReturnType, AuthHooksReturnType
|
|
|
4
4
|
agentManager: AgentManager;
|
|
5
5
|
}
|
|
6
6
|
export interface CreateAgentCotextParameters extends AgentManagerParameters {
|
|
7
|
+
disableAuthenticateOnMount?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export interface CreateAgentContextReturnType extends AgentHooksReturnType, AuthHooksReturnType {
|
|
9
10
|
useAgentManager: (agentContext?: React.Context<AgentContext | null>) => AgentManager;
|
|
10
11
|
AgentProvider: React.FC<AgentProviderProps>;
|
|
11
12
|
}
|
|
12
|
-
export interface AgentProviderProps extends PropsWithChildren,
|
|
13
|
+
export interface AgentProviderProps extends PropsWithChildren, CreateAgentCotextParameters {
|
|
13
14
|
agentManager?: AgentManager;
|
|
14
15
|
}
|
|
15
16
|
export interface CreateActorContextReturnType<A = BaseActor> extends ActorHooksReturnType<A> {
|
|
@@ -18,6 +19,7 @@ export interface CreateActorContextReturnType<A = BaseActor> extends ActorHooksR
|
|
|
18
19
|
export interface ActorProviderProps extends CreateActorContextParameters {
|
|
19
20
|
children?: React.ReactNode | undefined;
|
|
20
21
|
loadingComponent?: React.ReactNode;
|
|
22
|
+
authenticatingComponent?: React.ReactNode;
|
|
21
23
|
}
|
|
22
24
|
export interface CreateActorContextParameters extends Omit<ActorManagerParameters, "idlFactory" | "agentManager" | "canisterId"> {
|
|
23
25
|
didjsId?: string;
|
|
@@ -49,6 +49,9 @@ const DEFAULT_STATE = {
|
|
|
49
49
|
const actorHooks = (actorManager) => {
|
|
50
50
|
const { actorStore, canisterId, visitFunction, callMethod, initialize } = actorManager;
|
|
51
51
|
const useActorState = () => (Object.assign(Object.assign({}, (0, zustand_1.useStore)(actorStore)), { canisterId }));
|
|
52
|
+
const useVisitService = () => {
|
|
53
|
+
return visitFunction;
|
|
54
|
+
};
|
|
52
55
|
const useVisitMethod = (functionName) => {
|
|
53
56
|
return react_1.default.useMemo(() => visitFunction[functionName], [functionName]);
|
|
54
57
|
};
|
|
@@ -102,6 +105,7 @@ const actorHooks = (actorManager) => {
|
|
|
102
105
|
useUpdateCall,
|
|
103
106
|
useActorState,
|
|
104
107
|
useVisitMethod,
|
|
108
|
+
useVisitService,
|
|
105
109
|
};
|
|
106
110
|
};
|
|
107
111
|
exports.actorHooks = actorHooks;
|
|
@@ -43,11 +43,13 @@ function extractActorContext(actorContext) {
|
|
|
43
43
|
const useQueryCall = (args) => useActorContext().useQueryCall(args);
|
|
44
44
|
const useUpdateCall = (args) => useActorContext().useUpdateCall(args);
|
|
45
45
|
const useVisitMethod = (functionName) => useActorContext().useVisitMethod(functionName);
|
|
46
|
+
const useVisitService = () => useActorContext().useVisitService();
|
|
46
47
|
return {
|
|
47
48
|
useActorState,
|
|
48
49
|
useQueryCall,
|
|
49
50
|
useUpdateCall,
|
|
50
51
|
useVisitMethod,
|
|
52
|
+
useVisitService,
|
|
51
53
|
initialize,
|
|
52
54
|
};
|
|
53
55
|
}
|
package/dist/helpers/types.d.ts
CHANGED
|
@@ -67,10 +67,12 @@ export type UseMethodCall<A> = <M extends FunctionName<A>>(args: UseMethodCallPa
|
|
|
67
67
|
export type UseQueryCall<A> = <M extends FunctionName<A>>(args: UseQueryCallParameters<A, M>) => UseMethodCallReturnType<A, M>;
|
|
68
68
|
export type UseUpdateCall<A> = <M extends FunctionName<A>>(args: UseUpdateCallParameters<A, M>) => UseMethodCallReturnType<A, M>;
|
|
69
69
|
export type UseVisitMethod<A> = <M extends FunctionName<A>>(functionName: M) => VisitService<A>[M];
|
|
70
|
+
export type UseVisitService<A> = () => VisitService<A>;
|
|
70
71
|
export interface ActorHooksReturnType<A = BaseActor> {
|
|
71
72
|
initialize: () => Promise<void>;
|
|
72
73
|
useActorState: () => UseActorState;
|
|
73
74
|
useQueryCall: UseQueryCall<A>;
|
|
74
75
|
useUpdateCall: UseUpdateCall<A>;
|
|
75
76
|
useVisitMethod: UseVisitMethod<A>;
|
|
77
|
+
useVisitService: UseVisitService<A>;
|
|
76
78
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseActor } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* Memoizes and returns a visit service function for a specific actor method.
|
|
4
|
+
*
|
|
5
|
+
* @param functionName The name of the actor method to visit.
|
|
6
|
+
* @returns The visit service function for the specified method.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useVisitService<A = BaseActor>(): import("@ic-reactor/core/dist/classes/actor/types").VisitService<A>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useVisitService = void 0;
|
|
4
|
+
const hooks_1 = require("./hooks");
|
|
5
|
+
/**
|
|
6
|
+
* Memoizes and returns a visit service function for a specific actor method.
|
|
7
|
+
*
|
|
8
|
+
* @param functionName The name of the actor method to visit.
|
|
9
|
+
* @returns The visit service function for the specified method.
|
|
10
|
+
*/
|
|
11
|
+
function useVisitService() {
|
|
12
|
+
return hooks_1.ActorHooks.useVisitService();
|
|
13
|
+
}
|
|
14
|
+
exports.useVisitService = useVisitService;
|
package/dist/hooks/types.d.ts
CHANGED
|
@@ -6,10 +6,12 @@ export interface UseActorParameters extends Omit<ActorManagerParameters, "idlFac
|
|
|
6
6
|
canisterId: string;
|
|
7
7
|
idlFactory?: IDL.InterfaceFactory;
|
|
8
8
|
agentContext?: React.Context<AgentContext | null>;
|
|
9
|
+
fetchOnMount?: boolean;
|
|
9
10
|
didjsCanisterId?: string;
|
|
10
11
|
}
|
|
11
12
|
export interface UseActorReturn<A = BaseActor> {
|
|
12
13
|
hooks: ActorHooksReturnType<A> | null;
|
|
13
14
|
fetching: boolean;
|
|
14
15
|
fetchError: string | null;
|
|
16
|
+
authenticating: boolean;
|
|
15
17
|
}
|
package/dist/hooks/useActor.js
CHANGED
|
@@ -25,6 +25,7 @@ const core_1 = require("@ic-reactor/core");
|
|
|
25
25
|
const react_1 = require("react");
|
|
26
26
|
const useAgentManager_1 = require("./agent/useAgentManager");
|
|
27
27
|
const helpers_1 = require("../helpers");
|
|
28
|
+
const agent_1 = require("./agent");
|
|
28
29
|
/**
|
|
29
30
|
* A comprehensive hook that manages both the fetching of Candid interfaces
|
|
30
31
|
* and the initialization of actor stores for Internet Computer (IC) canisters.
|
|
@@ -88,7 +89,7 @@ const helpers_1 = require("../helpers");
|
|
|
88
89
|
* ```
|
|
89
90
|
*/
|
|
90
91
|
const useActor = (config) => {
|
|
91
|
-
const { canisterId, idlFactory: maybeIdlFactory, agentContext, didjsCanisterId } = config, actorConfig = __rest(config, ["canisterId", "idlFactory", "agentContext", "didjsCanisterId"]);
|
|
92
|
+
const { canisterId, idlFactory: maybeIdlFactory, agentContext, fetchOnMount = true, didjsCanisterId } = config, actorConfig = __rest(config, ["canisterId", "idlFactory", "agentContext", "fetchOnMount", "didjsCanisterId"]);
|
|
92
93
|
const [{ idlFactory, fetching, fetchError }, setState] = (0, react_1.useState)({
|
|
93
94
|
idlFactory: maybeIdlFactory,
|
|
94
95
|
fetching: false,
|
|
@@ -126,16 +127,29 @@ const useActor = (config) => {
|
|
|
126
127
|
});
|
|
127
128
|
}
|
|
128
129
|
}), [canisterId, didjsCanisterId]);
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
(0, react_1.useEffect)(() => {
|
|
131
|
+
if (maybeIdlFactory) {
|
|
132
|
+
setState(() => ({
|
|
133
|
+
idlFactory: maybeIdlFactory,
|
|
134
|
+
fetching: false,
|
|
135
|
+
fetchError: null,
|
|
136
|
+
}));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const unsubscribe = agentManager.subscribeAgent(fetchCandid, fetchOnMount);
|
|
140
|
+
return unsubscribe;
|
|
141
|
+
}, [agentManager, fetchOnMount]);
|
|
142
|
+
const authenticating = (0, agent_1.useAuthState)().authenticating;
|
|
131
143
|
const hooks = (0, react_1.useMemo)(() => {
|
|
132
144
|
if (!idlFactory)
|
|
133
145
|
return null;
|
|
146
|
+
if (authenticating)
|
|
147
|
+
return null;
|
|
134
148
|
const actorManager = (0, core_1.createActorManager)(Object.assign({ agentManager,
|
|
135
149
|
idlFactory,
|
|
136
150
|
canisterId }, actorConfig));
|
|
137
151
|
return (0, helpers_1.actorHooks)(actorManager);
|
|
138
|
-
}, [canisterId, idlFactory]);
|
|
139
|
-
return { hooks, fetching, fetchError };
|
|
152
|
+
}, [canisterId, authenticating, idlFactory]);
|
|
153
|
+
return { hooks, authenticating, fetching, fetchError };
|
|
140
154
|
};
|
|
141
155
|
exports.useActor = useActor;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -36,4 +36,4 @@ __exportStar(require("./hooks"), exports);
|
|
|
36
36
|
exports.helpers = __importStar(require("./helpers"));
|
|
37
37
|
exports.types = __importStar(require("./types"));
|
|
38
38
|
exports.core = __importStar(require("./core"));
|
|
39
|
-
exports.utils = __importStar(require("
|
|
39
|
+
exports.utils = __importStar(require("./utils"));
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@ic-reactor/core/dist/utils";
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("@ic-reactor/core/dist/utils"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ic-reactor/react",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "A React library for interacting with Internet Computer canisters",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"homepage": "https://b3pay.github.io/ic-reactor/modules/react.html",
|
|
28
28
|
"scripts": {
|
|
29
|
-
"test": "npx jest",
|
|
29
|
+
"test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest",
|
|
30
30
|
"start": "tsc watch",
|
|
31
31
|
"build": "npx tsc",
|
|
32
32
|
"clean": "npx rimraf dist && npx rimraf umd"
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"react": ">=16.8",
|
|
48
48
|
"zustand": "4.5"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "0055703885730f86a837f2e2f3f6b6f49bb3cc68"
|
|
51
51
|
}
|