@xyo-network/react-node 2.58.0-rc.3 → 2.59.0-rc.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/dist/cjs/hooks/useModuleFromNode.js +12 -10
- package/dist/cjs/hooks/useModuleFromNode.js.map +1 -1
- package/dist/cjs/hooks/useModulesFromNode.js +22 -13
- package/dist/cjs/hooks/useModulesFromNode.js.map +1 -1
- package/dist/esm/hooks/useModuleFromNode.js +12 -10
- package/dist/esm/hooks/useModuleFromNode.js.map +1 -1
- package/dist/esm/hooks/useModulesFromNode.js +19 -13
- package/dist/esm/hooks/useModulesFromNode.js.map +1 -1
- package/dist/types/hooks/useModuleFromNode.d.ts +2 -0
- package/dist/types/hooks/useModuleFromNode.d.ts.map +1 -1
- package/dist/types/hooks/useModulesFromNode.d.ts.map +1 -1
- package/package.json +20 -19
- package/src/hooks/useModuleFromNode.tsx +15 -11
- package/src/hooks/useModulesFromNode.ts +20 -13
|
@@ -4,25 +4,28 @@ exports.useModuleFromNode = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_async_effect_1 = require("@xylabs/react-async-effect");
|
|
6
6
|
const module_model_1 = require("@xyo-network/module-model");
|
|
7
|
+
const react_shared_1 = require("@xyo-network/react-shared");
|
|
7
8
|
const react_1 = require("react");
|
|
8
9
|
const provided_1 = require("./provided");
|
|
9
10
|
const useModuleFromNode = (nameOrAddress, config) => {
|
|
10
|
-
const [
|
|
11
|
+
const [providedNode] = (0, provided_1.useProvidedNode)();
|
|
11
12
|
const [module, setModule] = (0, react_1.useState)();
|
|
12
13
|
const [error, setError] = (0, react_1.useState)();
|
|
14
|
+
const [configMemo, setConfigMemo] = (0, react_shared_1.useDataState)(config);
|
|
15
|
+
setConfigMemo(config);
|
|
13
16
|
const address = (0, react_1.useMemo)(() => module === null || module === void 0 ? void 0 : module.address, [module]);
|
|
14
17
|
(0, react_async_effect_1.useAsyncEffect)(
|
|
15
18
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
16
19
|
(mounted) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
17
20
|
var _a, _b;
|
|
18
|
-
const _c =
|
|
21
|
+
const _c = configMemo !== null && configMemo !== void 0 ? configMemo : {}, { logger, node } = _c, resolverConfig = tslib_1.__rest(_c, ["logger", "node"]);
|
|
19
22
|
const eventUnsubscribe = [];
|
|
20
23
|
try {
|
|
21
|
-
|
|
24
|
+
const activeNode = node !== null && node !== void 0 ? node : providedNode;
|
|
25
|
+
if (activeNode) {
|
|
22
26
|
const attachHandler = (args) => {
|
|
23
27
|
var _a, _b, _c;
|
|
24
28
|
const eventModule = args.module;
|
|
25
|
-
console.log('attachHandler: ', eventModule.address);
|
|
26
29
|
if (nameOrAddress && ((eventModule === null || eventModule === void 0 ? void 0 : eventModule.address) === nameOrAddress || ((_a = eventModule === null || eventModule === void 0 ? void 0 : eventModule.config) === null || _a === void 0 ? void 0 : _a.name) === nameOrAddress)) {
|
|
27
30
|
logger === null || logger === void 0 ? void 0 : logger.debug(`attachHandler-setting [${nameOrAddress}]`);
|
|
28
31
|
if (eventModule) {
|
|
@@ -45,14 +48,13 @@ const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
45
48
|
};
|
|
46
49
|
const detachHandler = (args) => {
|
|
47
50
|
const eventModule = args.module;
|
|
48
|
-
console.log('detachHandler: ', eventModule.address);
|
|
49
51
|
if (eventModule.address === address) {
|
|
50
52
|
logger === null || logger === void 0 ? void 0 : logger.debug(`detachHandler-clearing [${address}]`);
|
|
51
53
|
setModule(undefined);
|
|
52
54
|
setError(undefined);
|
|
53
55
|
}
|
|
54
56
|
};
|
|
55
|
-
const module = nameOrAddress ? yield
|
|
57
|
+
const module = nameOrAddress ? yield activeNode.resolve(nameOrAddress, resolverConfig) : undefined;
|
|
56
58
|
if (mounted()) {
|
|
57
59
|
const instance = (0, module_model_1.asModuleInstance)(module);
|
|
58
60
|
if (module) {
|
|
@@ -62,8 +64,8 @@ const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
62
64
|
setError(error);
|
|
63
65
|
}
|
|
64
66
|
else {
|
|
65
|
-
eventUnsubscribe.push(
|
|
66
|
-
eventUnsubscribe.push(
|
|
67
|
+
eventUnsubscribe.push(activeNode.on('moduleAttached', attachHandler));
|
|
68
|
+
eventUnsubscribe.push(activeNode.on('moduleDetached', detachHandler));
|
|
67
69
|
logger === null || logger === void 0 ? void 0 : logger.debug(`resolved [${nameOrAddress}]`);
|
|
68
70
|
setModule(instance !== null && instance !== void 0 ? instance : null);
|
|
69
71
|
setError(undefined);
|
|
@@ -77,7 +79,7 @@ const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
77
79
|
}
|
|
78
80
|
else {
|
|
79
81
|
if (mounted()) {
|
|
80
|
-
setModule(
|
|
82
|
+
setModule(activeNode ? activeNode : undefined);
|
|
81
83
|
setError(undefined);
|
|
82
84
|
}
|
|
83
85
|
}
|
|
@@ -94,7 +96,7 @@ const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
94
96
|
setModule(undefined);
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
|
-
}), [nameOrAddress,
|
|
99
|
+
}), [nameOrAddress, providedNode, address, configMemo]);
|
|
98
100
|
return [module, error];
|
|
99
101
|
};
|
|
100
102
|
exports.useModuleFromNode = useModuleFromNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModuleFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.tsx"],"names":[],"mappings":";;;;AAAA,mEAA2D;AAG3D,4DAAmH;AAEnH,iCAAyC;AAEzC,yCAA4C;
|
|
1
|
+
{"version":3,"file":"useModuleFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,22 +5,28 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const react_promise_1 = require("@xylabs/react-promise");
|
|
6
6
|
const module_model_1 = require("@xyo-network/module-model");
|
|
7
7
|
const react_module_1 = require("@xyo-network/react-module");
|
|
8
|
+
const react_shared_1 = require("@xyo-network/react-shared");
|
|
8
9
|
const compact_1 = tslib_1.__importDefault(require("lodash/compact"));
|
|
9
10
|
const react_1 = require("react");
|
|
10
11
|
const provided_1 = require("./provided");
|
|
11
12
|
const useModulesFromNode = (filter, config) => {
|
|
12
|
-
const [
|
|
13
|
+
const [providedNode] = (0, provided_1.useProvidedNode)();
|
|
14
|
+
const [configMemo, setConfigMemo] = (0, react_shared_1.useDataState)(config);
|
|
13
15
|
const [refreshed, refresh] = (0, react_module_1.useRefresh)();
|
|
16
|
+
setConfigMemo(config);
|
|
14
17
|
//we store this to prevent the need of a deep compare to prevent re-render
|
|
15
18
|
const modulesLength = (0, react_1.useRef)();
|
|
16
19
|
const eventUnsubscribe = [];
|
|
17
20
|
const [resolvedModules, resolvedModulesError] = (0, react_promise_1.usePromise)(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
18
21
|
const getModulesFromResolution = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
var _a;
|
|
23
|
+
const _b = configMemo !== null && configMemo !== void 0 ? configMemo : {}, { logger } = _b, resolverConfig = tslib_1.__rest(_b, ["logger"]);
|
|
24
|
+
const activeNode = (_a = configMemo === null || configMemo === void 0 ? void 0 : configMemo.node) !== null && _a !== void 0 ? _a : providedNode;
|
|
25
|
+
if (activeNode) {
|
|
26
|
+
const allResolvedModules = (0, compact_1.default)((yield activeNode.resolve(filter, resolverConfig)).map((module) => ((0, module_model_1.isModuleInstance)(module) ? module : undefined)));
|
|
27
|
+
logger === null || logger === void 0 ? void 0 : logger.log(`getModulesFromResolution:allResolvedModules [${allResolvedModules === null || allResolvedModules === void 0 ? void 0 : allResolvedModules.length}]`);
|
|
22
28
|
if ((allResolvedModules === null || allResolvedModules === void 0 ? void 0 : allResolvedModules.length) !== modulesLength.current) {
|
|
23
|
-
logger === null || logger === void 0 ? void 0 : logger.
|
|
29
|
+
logger === null || logger === void 0 ? void 0 : logger.log(`getModulesFromResolution-setting: [${allResolvedModules === null || allResolvedModules === void 0 ? void 0 : allResolvedModules.length}]`);
|
|
24
30
|
modulesLength.current = allResolvedModules === null || allResolvedModules === void 0 ? void 0 : allResolvedModules.length;
|
|
25
31
|
return allResolvedModules;
|
|
26
32
|
}
|
|
@@ -28,20 +34,23 @@ const useModulesFromNode = (filter, config) => {
|
|
|
28
34
|
return undefined;
|
|
29
35
|
});
|
|
30
36
|
return yield getModulesFromResolution();
|
|
31
|
-
}), [
|
|
37
|
+
}), [providedNode, filter, configMemo, refreshed]);
|
|
32
38
|
(0, react_1.useEffect)(() => {
|
|
33
39
|
var _a;
|
|
34
|
-
const { logger } =
|
|
35
|
-
|
|
40
|
+
const { logger, node } = configMemo !== null && configMemo !== void 0 ? configMemo : {};
|
|
41
|
+
const activeNode = node !== null && node !== void 0 ? node : providedNode;
|
|
42
|
+
if (activeNode) {
|
|
36
43
|
while (eventUnsubscribe.length) {
|
|
37
44
|
(_a = eventUnsubscribe.pop()) === null || _a === void 0 ? void 0 : _a();
|
|
38
45
|
}
|
|
39
|
-
eventUnsubscribe.push(
|
|
40
|
-
|
|
46
|
+
eventUnsubscribe.push(activeNode.on('moduleAttached', ({ module }) => {
|
|
47
|
+
var _a;
|
|
48
|
+
logger === null || logger === void 0 ? void 0 : logger.log(`moduleAttached: useModulesFromNode [${(_a = module.config.name) !== null && _a !== void 0 ? _a : module.address}]`);
|
|
41
49
|
refresh();
|
|
42
50
|
}));
|
|
43
|
-
eventUnsubscribe.push(
|
|
44
|
-
|
|
51
|
+
eventUnsubscribe.push(activeNode.on('moduleDetached', ({ module }) => {
|
|
52
|
+
var _a;
|
|
53
|
+
logger === null || logger === void 0 ? void 0 : logger.log(`moduleDetached: useModulesFromNode [${(_a = module.config.name) !== null && _a !== void 0 ? _a : module.address}]`);
|
|
45
54
|
refresh();
|
|
46
55
|
}));
|
|
47
56
|
}
|
|
@@ -52,7 +61,7 @@ const useModulesFromNode = (filter, config) => {
|
|
|
52
61
|
eventUnsubscribe.pop();
|
|
53
62
|
}
|
|
54
63
|
};
|
|
55
|
-
}, [
|
|
64
|
+
}, [providedNode, configMemo]);
|
|
56
65
|
return [resolvedModules, resolvedModulesError];
|
|
57
66
|
};
|
|
58
67
|
exports.useModulesFromNode = useModulesFromNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModulesFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModulesFromNode.ts"],"names":[],"mappings":";;;;AAAA,yDAAkD;AAElD,4DAA0F;AAC1F,4DAAsD;AACtD,qEAAoC;AACpC,iCAAyC;AAEzC,yCAA4C;AAGrC,MAAM,kBAAkB,GAAG,CAChC,MAAqB,EACrB,MAA6B,EAC6B,EAAE;IAC5D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"useModulesFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModulesFromNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import { useAsyncEffect } from '@xylabs/react-async-effect';
|
|
2
2
|
import { asModuleInstance, isModuleInstance } from '@xyo-network/module-model';
|
|
3
|
+
import { useDataState } from '@xyo-network/react-shared';
|
|
3
4
|
import { useMemo, useState } from 'react';
|
|
4
5
|
import { useProvidedNode } from './provided';
|
|
5
6
|
export const useModuleFromNode = (nameOrAddress, config) => {
|
|
6
|
-
const [
|
|
7
|
+
const [providedNode] = useProvidedNode();
|
|
7
8
|
const [module, setModule] = useState();
|
|
8
9
|
const [error, setError] = useState();
|
|
10
|
+
const [configMemo, setConfigMemo] = useDataState(config);
|
|
11
|
+
setConfigMemo(config);
|
|
9
12
|
const address = useMemo(() => module?.address, [module]);
|
|
10
13
|
useAsyncEffect(
|
|
11
14
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
12
15
|
async (mounted) => {
|
|
13
|
-
const { logger, ...resolverConfig } =
|
|
16
|
+
const { logger, node, ...resolverConfig } = configMemo ?? {};
|
|
14
17
|
const eventUnsubscribe = [];
|
|
15
18
|
try {
|
|
16
|
-
|
|
19
|
+
const activeNode = node ?? providedNode;
|
|
20
|
+
if (activeNode) {
|
|
17
21
|
const attachHandler = (args) => {
|
|
18
22
|
const eventModule = args.module;
|
|
19
|
-
console.log('attachHandler: ', eventModule.address);
|
|
20
23
|
if (nameOrAddress && (eventModule?.address === nameOrAddress || eventModule?.config?.name === nameOrAddress)) {
|
|
21
24
|
logger?.debug(`attachHandler-setting [${nameOrAddress}]`);
|
|
22
25
|
if (eventModule) {
|
|
@@ -39,14 +42,13 @@ export const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
39
42
|
};
|
|
40
43
|
const detachHandler = (args) => {
|
|
41
44
|
const eventModule = args.module;
|
|
42
|
-
console.log('detachHandler: ', eventModule.address);
|
|
43
45
|
if (eventModule.address === address) {
|
|
44
46
|
logger?.debug(`detachHandler-clearing [${address}]`);
|
|
45
47
|
setModule(undefined);
|
|
46
48
|
setError(undefined);
|
|
47
49
|
}
|
|
48
50
|
};
|
|
49
|
-
const module = nameOrAddress ? await
|
|
51
|
+
const module = nameOrAddress ? await activeNode.resolve(nameOrAddress, resolverConfig) : undefined;
|
|
50
52
|
if (mounted()) {
|
|
51
53
|
const instance = asModuleInstance(module);
|
|
52
54
|
if (module) {
|
|
@@ -56,8 +58,8 @@ export const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
56
58
|
setError(error);
|
|
57
59
|
}
|
|
58
60
|
else {
|
|
59
|
-
eventUnsubscribe.push(
|
|
60
|
-
eventUnsubscribe.push(
|
|
61
|
+
eventUnsubscribe.push(activeNode.on('moduleAttached', attachHandler));
|
|
62
|
+
eventUnsubscribe.push(activeNode.on('moduleDetached', detachHandler));
|
|
61
63
|
logger?.debug(`resolved [${nameOrAddress}]`);
|
|
62
64
|
setModule(instance ?? null);
|
|
63
65
|
setError(undefined);
|
|
@@ -71,7 +73,7 @@ export const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
71
73
|
}
|
|
72
74
|
else {
|
|
73
75
|
if (mounted()) {
|
|
74
|
-
setModule(
|
|
76
|
+
setModule(activeNode ? activeNode : undefined);
|
|
75
77
|
setError(undefined);
|
|
76
78
|
}
|
|
77
79
|
}
|
|
@@ -88,7 +90,7 @@ export const useModuleFromNode = (nameOrAddress, config) => {
|
|
|
88
90
|
setModule(undefined);
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
|
-
}, [nameOrAddress,
|
|
93
|
+
}, [nameOrAddress, providedNode, address, configMemo]);
|
|
92
94
|
return [module, error];
|
|
93
95
|
};
|
|
94
96
|
//# sourceMappingURL=useModuleFromNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModuleFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAG3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAuC,MAAM,2BAA2B,CAAA;AAEnH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"useModuleFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { usePromise } from '@xylabs/react-promise';
|
|
2
2
|
import { isModuleInstance } from '@xyo-network/module-model';
|
|
3
3
|
import { useRefresh } from '@xyo-network/react-module';
|
|
4
|
+
import { useDataState } from '@xyo-network/react-shared';
|
|
4
5
|
import compact from 'lodash/compact';
|
|
5
6
|
import { useEffect, useRef } from 'react';
|
|
6
7
|
import { useProvidedNode } from './provided';
|
|
7
8
|
export const useModulesFromNode = (filter, config) => {
|
|
8
|
-
const [
|
|
9
|
+
const [providedNode] = useProvidedNode();
|
|
10
|
+
const [configMemo, setConfigMemo] = useDataState(config);
|
|
9
11
|
const [refreshed, refresh] = useRefresh();
|
|
12
|
+
setConfigMemo(config);
|
|
10
13
|
//we store this to prevent the need of a deep compare to prevent re-render
|
|
11
14
|
const modulesLength = useRef();
|
|
12
15
|
const eventUnsubscribe = [];
|
|
13
16
|
const [resolvedModules, resolvedModulesError] = usePromise(async () => {
|
|
14
17
|
const getModulesFromResolution = async () => {
|
|
15
|
-
const { logger, ...resolverConfig } =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
const { logger, ...resolverConfig } = configMemo ?? {};
|
|
19
|
+
const activeNode = configMemo?.node ?? providedNode;
|
|
20
|
+
if (activeNode) {
|
|
21
|
+
const allResolvedModules = compact((await activeNode.resolve(filter, resolverConfig)).map((module) => (isModuleInstance(module) ? module : undefined)));
|
|
22
|
+
logger?.log(`getModulesFromResolution:allResolvedModules [${allResolvedModules?.length}]`);
|
|
18
23
|
if (allResolvedModules?.length !== modulesLength.current) {
|
|
19
|
-
logger?.
|
|
24
|
+
logger?.log(`getModulesFromResolution-setting: [${allResolvedModules?.length}]`);
|
|
20
25
|
modulesLength.current = allResolvedModules?.length;
|
|
21
26
|
return allResolvedModules;
|
|
22
27
|
}
|
|
@@ -24,19 +29,20 @@ export const useModulesFromNode = (filter, config) => {
|
|
|
24
29
|
return undefined;
|
|
25
30
|
};
|
|
26
31
|
return await getModulesFromResolution();
|
|
27
|
-
}, [
|
|
32
|
+
}, [providedNode, filter, configMemo, refreshed]);
|
|
28
33
|
useEffect(() => {
|
|
29
|
-
const { logger } =
|
|
30
|
-
|
|
34
|
+
const { logger, node } = configMemo ?? {};
|
|
35
|
+
const activeNode = node ?? providedNode;
|
|
36
|
+
if (activeNode) {
|
|
31
37
|
while (eventUnsubscribe.length) {
|
|
32
38
|
eventUnsubscribe.pop()?.();
|
|
33
39
|
}
|
|
34
|
-
eventUnsubscribe.push(
|
|
35
|
-
logger?.
|
|
40
|
+
eventUnsubscribe.push(activeNode.on('moduleAttached', ({ module }) => {
|
|
41
|
+
logger?.log(`moduleAttached: useModulesFromNode [${module.config.name ?? module.address}]`);
|
|
36
42
|
refresh();
|
|
37
43
|
}));
|
|
38
|
-
eventUnsubscribe.push(
|
|
39
|
-
logger?.
|
|
44
|
+
eventUnsubscribe.push(activeNode.on('moduleDetached', ({ module }) => {
|
|
45
|
+
logger?.log(`moduleDetached: useModulesFromNode [${module.config.name ?? module.address}]`);
|
|
40
46
|
refresh();
|
|
41
47
|
}));
|
|
42
48
|
}
|
|
@@ -47,7 +53,7 @@ export const useModulesFromNode = (filter, config) => {
|
|
|
47
53
|
eventUnsubscribe.pop();
|
|
48
54
|
}
|
|
49
55
|
};
|
|
50
|
-
}, [
|
|
56
|
+
}, [providedNode, configMemo]);
|
|
51
57
|
return [resolvedModules, resolvedModulesError];
|
|
52
58
|
};
|
|
53
59
|
//# sourceMappingURL=useModulesFromNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModulesFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModulesFromNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAgC,MAAM,2BAA2B,CAAA;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAqB,EACrB,MAA6B,EAC6B,EAAE;IAC5D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"useModulesFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModulesFromNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Logger } from '@xyo-network/logger';
|
|
2
2
|
import { ModuleFilterOptions, ModuleInstance } from '@xyo-network/module-model';
|
|
3
|
+
import { NodeInstance } from '@xyo-network/node';
|
|
3
4
|
export type ModuleFromNodeConfig = ModuleFilterOptions & {
|
|
4
5
|
logger?: Logger;
|
|
6
|
+
node?: NodeInstance;
|
|
5
7
|
};
|
|
6
8
|
export declare const useModuleFromNode: (nameOrAddress?: string, config?: ModuleFromNodeConfig) => [ModuleInstance | undefined, Error | undefined];
|
|
7
9
|
//# sourceMappingURL=useModuleFromNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModuleFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAsC,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"useModuleFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAsC,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACnH,OAAO,EAAoD,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMlG,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iBAAiB,mBAAoB,MAAM,WAAW,oBAAoB,KAAG,CAAC,cAAc,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CA2FvI,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModulesFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModulesFromNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"useModulesFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModulesFromNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAO1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,eAAO,MAAM,kBAAkB,YACpB,YAAY,WACZ,oBAAoB,KAC5B,CAAC,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAgEzD,CAAA"}
|
package/package.json
CHANGED
|
@@ -11,29 +11,30 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@mui/lab": "^5.0.0-alpha.137",
|
|
14
|
-
"@xylabs/react-async-effect": "~2.17.
|
|
15
|
-
"@xylabs/react-flexbox": "~2.17.
|
|
16
|
-
"@xylabs/react-promise": "~2.17.
|
|
17
|
-
"@xylabs/react-shared": "~2.17.
|
|
18
|
-
"@xyo-network/logger": "^2.67.0
|
|
19
|
-
"@xyo-network/module": "^2.67.0
|
|
20
|
-
"@xyo-network/module-events": "^2.67.0
|
|
21
|
-
"@xyo-network/module-model": "^2.67.0
|
|
22
|
-
"@xyo-network/node": "^2.67.0
|
|
23
|
-
"@xyo-network/node-model": "^2.67.0
|
|
24
|
-
"@xyo-network/react-module": "~2.
|
|
25
|
-
"@xyo-network/react-node-context": "~2.
|
|
26
|
-
"@xyo-network/react-node-provider": "~2.
|
|
14
|
+
"@xylabs/react-async-effect": "~2.17.7",
|
|
15
|
+
"@xylabs/react-flexbox": "~2.17.7",
|
|
16
|
+
"@xylabs/react-promise": "~2.17.7",
|
|
17
|
+
"@xylabs/react-shared": "~2.17.7",
|
|
18
|
+
"@xyo-network/logger": "^2.67.0",
|
|
19
|
+
"@xyo-network/module": "^2.67.0",
|
|
20
|
+
"@xyo-network/module-events": "^2.67.0",
|
|
21
|
+
"@xyo-network/module-model": "^2.67.0",
|
|
22
|
+
"@xyo-network/node": "^2.67.0",
|
|
23
|
+
"@xyo-network/node-model": "^2.67.0",
|
|
24
|
+
"@xyo-network/react-module": "~2.59.0-rc.1",
|
|
25
|
+
"@xyo-network/react-node-context": "~2.59.0-rc.1",
|
|
26
|
+
"@xyo-network/react-node-provider": "~2.59.0-rc.1",
|
|
27
|
+
"@xyo-network/react-shared": "~2.59.0-rc.1",
|
|
27
28
|
"lodash": "^4.17.21"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"@storybook/react": "^7.1.1",
|
|
31
|
-
"@types/lodash": "^4.14.
|
|
32
|
+
"@types/lodash": "^4.14.196",
|
|
32
33
|
"@xylabs/ts-scripts-yarn3": "^2.19.0",
|
|
33
34
|
"@xylabs/tsconfig-react": "^2.19.0",
|
|
34
|
-
"@xyo-network/payload-model": "^2.67.0
|
|
35
|
-
"@xyo-network/react-storybook": "~2.
|
|
36
|
-
"@xyo-network/react-wallet": "~2.
|
|
35
|
+
"@xyo-network/payload-model": "^2.67.0",
|
|
36
|
+
"@xyo-network/react-storybook": "~2.59.0-rc.1",
|
|
37
|
+
"@xyo-network/react-wallet": "~2.59.0-rc.1",
|
|
37
38
|
"typescript": "^5.1.6"
|
|
38
39
|
},
|
|
39
40
|
"peerDependencies": {
|
|
@@ -88,6 +89,6 @@
|
|
|
88
89
|
},
|
|
89
90
|
"sideEffects": false,
|
|
90
91
|
"types": "dist/types/index.d.ts",
|
|
91
|
-
"version": "2.
|
|
92
|
-
"stableVersion": "2.
|
|
92
|
+
"version": "2.59.0-rc.1",
|
|
93
|
+
"stableVersion": "2.58.0"
|
|
93
94
|
}
|
|
@@ -2,32 +2,37 @@ import { useAsyncEffect } from '@xylabs/react-async-effect'
|
|
|
2
2
|
import { Logger } from '@xyo-network/logger'
|
|
3
3
|
import { EventUnsubscribeFunction } from '@xyo-network/module-events'
|
|
4
4
|
import { asModuleInstance, isModuleInstance, ModuleFilterOptions, ModuleInstance } from '@xyo-network/module-model'
|
|
5
|
-
import { ModuleAttachedEventArgs, ModuleDetachedEventArgs } from '@xyo-network/node'
|
|
5
|
+
import { ModuleAttachedEventArgs, ModuleDetachedEventArgs, NodeInstance } from '@xyo-network/node'
|
|
6
|
+
import { useDataState } from '@xyo-network/react-shared'
|
|
6
7
|
import { useMemo, useState } from 'react'
|
|
7
8
|
|
|
8
9
|
import { useProvidedNode } from './provided'
|
|
9
10
|
|
|
10
11
|
export type ModuleFromNodeConfig = ModuleFilterOptions & {
|
|
11
12
|
logger?: Logger
|
|
13
|
+
node?: NodeInstance
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNodeConfig): [ModuleInstance | undefined, Error | undefined] => {
|
|
15
|
-
const [
|
|
17
|
+
const [providedNode] = useProvidedNode()
|
|
16
18
|
const [module, setModule] = useState<ModuleInstance>()
|
|
17
19
|
const [error, setError] = useState<Error>()
|
|
20
|
+
const [configMemo, setConfigMemo] = useDataState(config)
|
|
21
|
+
|
|
22
|
+
setConfigMemo(config)
|
|
18
23
|
|
|
19
24
|
const address = useMemo(() => module?.address, [module])
|
|
20
25
|
|
|
21
26
|
useAsyncEffect(
|
|
22
27
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
28
|
async (mounted) => {
|
|
24
|
-
const { logger, ...resolverConfig } =
|
|
29
|
+
const { logger, node, ...resolverConfig } = configMemo ?? {}
|
|
25
30
|
const eventUnsubscribe: EventUnsubscribeFunction[] = []
|
|
26
31
|
try {
|
|
27
|
-
|
|
32
|
+
const activeNode = node ?? providedNode
|
|
33
|
+
if (activeNode) {
|
|
28
34
|
const attachHandler = (args: ModuleAttachedEventArgs) => {
|
|
29
35
|
const eventModule = args.module
|
|
30
|
-
console.log('attachHandler: ', eventModule.address)
|
|
31
36
|
if (nameOrAddress && (eventModule?.address === nameOrAddress || eventModule?.config?.name === nameOrAddress)) {
|
|
32
37
|
logger?.debug(`attachHandler-setting [${nameOrAddress}]`)
|
|
33
38
|
if (eventModule) {
|
|
@@ -50,14 +55,13 @@ export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNod
|
|
|
50
55
|
}
|
|
51
56
|
const detachHandler = (args: ModuleDetachedEventArgs) => {
|
|
52
57
|
const eventModule = args.module
|
|
53
|
-
console.log('detachHandler: ', eventModule.address)
|
|
54
58
|
if (eventModule.address === address) {
|
|
55
59
|
logger?.debug(`detachHandler-clearing [${address}]`)
|
|
56
60
|
setModule(undefined)
|
|
57
61
|
setError(undefined)
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
|
-
const module = nameOrAddress ? await
|
|
64
|
+
const module = nameOrAddress ? await activeNode.resolve(nameOrAddress, resolverConfig) : undefined
|
|
61
65
|
if (mounted()) {
|
|
62
66
|
const instance = asModuleInstance(module)
|
|
63
67
|
if (module) {
|
|
@@ -66,8 +70,8 @@ export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNod
|
|
|
66
70
|
setModule(undefined)
|
|
67
71
|
setError(error)
|
|
68
72
|
} else {
|
|
69
|
-
eventUnsubscribe.push(
|
|
70
|
-
eventUnsubscribe.push(
|
|
73
|
+
eventUnsubscribe.push(activeNode.on('moduleAttached', attachHandler))
|
|
74
|
+
eventUnsubscribe.push(activeNode.on('moduleDetached', detachHandler))
|
|
71
75
|
logger?.debug(`resolved [${nameOrAddress}]`)
|
|
72
76
|
setModule(instance ?? null)
|
|
73
77
|
setError(undefined)
|
|
@@ -79,7 +83,7 @@ export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNod
|
|
|
79
83
|
}
|
|
80
84
|
} else {
|
|
81
85
|
if (mounted()) {
|
|
82
|
-
setModule(
|
|
86
|
+
setModule(activeNode ? activeNode : undefined)
|
|
83
87
|
setError(undefined)
|
|
84
88
|
}
|
|
85
89
|
}
|
|
@@ -96,7 +100,7 @@ export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNod
|
|
|
96
100
|
}
|
|
97
101
|
}
|
|
98
102
|
},
|
|
99
|
-
[nameOrAddress,
|
|
103
|
+
[nameOrAddress, providedNode, address, configMemo],
|
|
100
104
|
)
|
|
101
105
|
|
|
102
106
|
return [module, error]
|
|
@@ -2,6 +2,7 @@ import { usePromise } from '@xylabs/react-promise'
|
|
|
2
2
|
import { EventUnsubscribeFunction } from '@xyo-network/module-events'
|
|
3
3
|
import { isModuleInstance, ModuleFilter, ModuleInstance } from '@xyo-network/module-model'
|
|
4
4
|
import { useRefresh } from '@xyo-network/react-module'
|
|
5
|
+
import { useDataState } from '@xyo-network/react-shared'
|
|
5
6
|
import compact from 'lodash/compact'
|
|
6
7
|
import { useEffect, useRef } from 'react'
|
|
7
8
|
|
|
@@ -12,9 +13,12 @@ export const useModulesFromNode = (
|
|
|
12
13
|
filter?: ModuleFilter,
|
|
13
14
|
config?: ModuleFromNodeConfig,
|
|
14
15
|
): [ModuleInstance[] | null | undefined, Error | undefined] => {
|
|
15
|
-
const [
|
|
16
|
+
const [providedNode] = useProvidedNode()
|
|
17
|
+
const [configMemo, setConfigMemo] = useDataState(config)
|
|
16
18
|
const [refreshed, refresh] = useRefresh()
|
|
17
19
|
|
|
20
|
+
setConfigMemo(config)
|
|
21
|
+
|
|
18
22
|
//we store this to prevent the need of a deep compare to prevent re-render
|
|
19
23
|
const modulesLength = useRef<number>()
|
|
20
24
|
|
|
@@ -22,13 +26,15 @@ export const useModulesFromNode = (
|
|
|
22
26
|
|
|
23
27
|
const [resolvedModules, resolvedModulesError] = usePromise<ModuleInstance[] | null | undefined>(async () => {
|
|
24
28
|
const getModulesFromResolution = async (): Promise<ModuleInstance[] | null | undefined> => {
|
|
25
|
-
const { logger, ...resolverConfig } =
|
|
26
|
-
|
|
29
|
+
const { logger, ...resolverConfig } = configMemo ?? {}
|
|
30
|
+
const activeNode = configMemo?.node ?? providedNode
|
|
31
|
+
if (activeNode) {
|
|
27
32
|
const allResolvedModules = compact(
|
|
28
|
-
(await
|
|
33
|
+
(await activeNode.resolve(filter, resolverConfig)).map((module) => (isModuleInstance(module) ? module : undefined)),
|
|
29
34
|
)
|
|
35
|
+
logger?.log(`getModulesFromResolution:allResolvedModules [${allResolvedModules?.length}]`)
|
|
30
36
|
if (allResolvedModules?.length !== modulesLength.current) {
|
|
31
|
-
logger?.
|
|
37
|
+
logger?.log(`getModulesFromResolution-setting: [${allResolvedModules?.length}]`)
|
|
32
38
|
modulesLength.current = allResolvedModules?.length
|
|
33
39
|
return allResolvedModules
|
|
34
40
|
}
|
|
@@ -37,23 +43,24 @@ export const useModulesFromNode = (
|
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
return await getModulesFromResolution()
|
|
40
|
-
}, [
|
|
46
|
+
}, [providedNode, filter, configMemo, refreshed])
|
|
41
47
|
|
|
42
48
|
useEffect(() => {
|
|
43
|
-
const { logger } =
|
|
44
|
-
|
|
49
|
+
const { logger, node } = configMemo ?? {}
|
|
50
|
+
const activeNode = node ?? providedNode
|
|
51
|
+
if (activeNode) {
|
|
45
52
|
while (eventUnsubscribe.length) {
|
|
46
53
|
eventUnsubscribe.pop()?.()
|
|
47
54
|
}
|
|
48
55
|
eventUnsubscribe.push(
|
|
49
|
-
|
|
50
|
-
logger?.
|
|
56
|
+
activeNode.on('moduleAttached', ({ module }) => {
|
|
57
|
+
logger?.log(`moduleAttached: useModulesFromNode [${module.config.name ?? module.address}]`)
|
|
51
58
|
refresh()
|
|
52
59
|
}),
|
|
53
60
|
)
|
|
54
61
|
eventUnsubscribe.push(
|
|
55
|
-
|
|
56
|
-
logger?.
|
|
62
|
+
activeNode.on('moduleDetached', ({ module }) => {
|
|
63
|
+
logger?.log(`moduleDetached: useModulesFromNode [${module.config.name ?? module.address}]`)
|
|
57
64
|
refresh()
|
|
58
65
|
}),
|
|
59
66
|
)
|
|
@@ -66,7 +73,7 @@ export const useModulesFromNode = (
|
|
|
66
73
|
eventUnsubscribe.pop()
|
|
67
74
|
}
|
|
68
75
|
}
|
|
69
|
-
}, [
|
|
76
|
+
}, [providedNode, configMemo])
|
|
70
77
|
|
|
71
78
|
return [resolvedModules, resolvedModulesError]
|
|
72
79
|
}
|