@xyo-network/react-node 2.60.8 → 2.60.10

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.
@@ -1,40 +1,46 @@
1
1
  import { usePromise } from '@xylabs/react-promise';
2
2
  import { asModuleInstance } from '@xyo-network/module';
3
+ import { isModuleInstance } from '@xyo-network/module-model';
3
4
  import { useState } from 'react';
4
5
  import { useModuleFilterOptions } from './useModuleFilterOptions';
5
6
  import { useNode } from './useNode';
6
7
  export const useModuleFromNodeConfigLogger = (config) => {
7
8
  return config?.logger;
8
9
  };
9
- export const useModuleFromNode = (nameOrAddress, config) => {
10
+ export const useModuleFromNode = (nameOrAddressOrInstance, config) => {
10
11
  const [node, nodeError] = useNode(config);
11
12
  const logger = useModuleFromNodeConfigLogger(config);
12
13
  const filterOptions = useModuleFilterOptions(config);
13
14
  const [result, setResult] = useState();
14
15
  const [, error] = usePromise(async () => {
15
16
  logger?.debug('useModuleFromNode: resolving');
16
- if (node && nameOrAddress) {
17
+ if (node && nameOrAddressOrInstance) {
17
18
  node.on('moduleAttached', ({ module }) => {
18
19
  logger?.debug(`useModuleFromNode: moduleAttached [${module.config.name ?? module.address}]`);
19
- if (module.address === nameOrAddress || module.config?.name === nameOrAddress) {
20
+ if (module.address === nameOrAddressOrInstance || module.config?.name === nameOrAddressOrInstance) {
20
21
  setResult(asModuleInstance(module));
21
22
  }
22
23
  });
23
24
  node.on('moduleDetached', ({ module }) => {
24
25
  logger?.debug(`useModuleFromNode: moduleDetached [${module.config.name ?? module.address}]`);
25
- if (module.address === nameOrAddress || module.config?.name === nameOrAddress) {
26
+ if (module.address === nameOrAddressOrInstance || module.config?.name === nameOrAddressOrInstance) {
26
27
  setResult(undefined);
27
28
  }
28
29
  });
29
- const result = await node.resolve(nameOrAddress, filterOptions);
30
- logger?.debug(`Result: ${result?.address}`);
31
- setResult(result);
30
+ if (isModuleInstance(nameOrAddressOrInstance)) {
31
+ setResult(nameOrAddressOrInstance);
32
+ }
33
+ else {
34
+ const result = await node.resolve(nameOrAddressOrInstance, filterOptions);
35
+ logger?.debug(`Result: ${result?.address}`);
36
+ setResult(result);
37
+ }
32
38
  return result;
33
39
  }
34
40
  logger?.debug('Result: No Node');
35
41
  return undefined;
36
42
  // eslint-disable-next-line react-hooks/exhaustive-deps
37
- }, [node, nameOrAddress]);
43
+ }, [node, nameOrAddressOrInstance]);
38
44
  return [result, nodeError ?? error];
39
45
  };
40
46
  //# sourceMappingURL=useModuleFromNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModuleFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAA6B,EAAE,EAAE;IAC7E,OAAO,MAAM,EAAE,MAAM,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,aAAsB,EAAE,MAA6B,EAAmD,EAAE;IAC1I,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAA8B,CAAA;IAClE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;QACtC,MAAM,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,IAAI,IAAI,IAAI,aAAa,EAAE;YACzB,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvC,MAAM,EAAE,KAAK,CAAC,sCAAsC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;gBAC5F,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,aAAa,EAAE;oBAC7E,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;iBACpC;YACH,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvC,MAAM,EAAE,KAAK,CAAC,sCAAsC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;gBAC5F,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,aAAa,EAAE;oBAC7E,SAAS,CAAC,SAAS,CAAC,CAAA;iBACrB;YACH,CAAC,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;YAC/D,MAAM,EAAE,KAAK,CAAC,WAAW,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YAC3C,SAAS,CAAC,MAAM,CAAC,CAAA;YACjB,OAAO,MAAM,CAAA;SACd;QACD,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAChC,OAAO,SAAS,CAAA;QAChB,uDAAuD;IACzD,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;IACzB,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC,CAAA;AACrC,CAAC,CAAA"}
1
+ {"version":3,"file":"useModuleFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAuC,MAAM,2BAA2B,CAAA;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,MAA6B,EAAE,EAAE;IAC7E,OAAO,MAAM,EAAE,MAAM,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,uBAAiD,EACjD,MAA6B,EACoB,EAAE;IACnD,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAA8B,CAAA;IAClE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;QACtC,MAAM,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,IAAI,IAAI,IAAI,uBAAuB,EAAE;YACnC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvC,MAAM,EAAE,KAAK,CAAC,sCAAsC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;gBAC5F,IAAI,MAAM,CAAC,OAAO,KAAK,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,uBAAuB,EAAE;oBACjG,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;iBACpC;YACH,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvC,MAAM,EAAE,KAAK,CAAC,sCAAsC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;gBAC5F,IAAI,MAAM,CAAC,OAAO,KAAK,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,uBAAuB,EAAE;oBACjG,SAAS,CAAC,SAAS,CAAC,CAAA;iBACrB;YACH,CAAC,CAAC,CAAA;YACF,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,EAAE;gBAC7C,SAAS,CAAC,uBAAuB,CAAC,CAAA;aACnC;iBAAM;gBACL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAA;gBACzE,MAAM,EAAE,KAAK,CAAC,WAAW,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC3C,SAAS,CAAC,MAAM,CAAC,CAAA;aAClB;YACD,OAAO,MAAM,CAAA;SACd;QACD,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAChC,OAAO,SAAS,CAAA;QAChB,uDAAuD;IACzD,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAA;IACnC,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC,CAAA;AACrC,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { asNodeInstance } from '@xyo-network/node-model';
2
2
  import { useModuleFromNode } from './useModuleFromNode';
3
- export const useNodeFromNode = (nameOrAddress, config) => {
4
- const [module, error] = useModuleFromNode(nameOrAddress, config);
3
+ export const useNodeFromNode = (nameOrAddressOrInstance, config) => {
4
+ const [module, error] = useModuleFromNode(nameOrAddressOrInstance, config);
5
5
  const instance = asNodeInstance(module);
6
6
  if (module && !instance) {
7
7
  const error = Error(`Resolved module is not a NodeInstance [${module.config?.schema}:${module.config?.name}:${module.address}]`);
@@ -1 +1 @@
1
- {"version":3,"file":"useNodeFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useNodeFromNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAwB,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE7E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,aAAsB,EAAE,MAA6B,EAAiD,EAAE;IACtI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,MAAM,IAAI,CAAC,QAAQ,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,0CAA0C,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;QAChI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5B,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;KAC1B;IACD,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC,CAAA"}
1
+ {"version":3,"file":"useNodeFromNode.js","sourceRoot":"","sources":["../../../src/hooks/useNodeFromNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAwB,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE7E,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,uBAA+C,EAC/C,MAA6B,EACkB,EAAE;IACjD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,iBAAiB,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;IAC1E,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,MAAM,IAAI,CAAC,QAAQ,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,0CAA0C,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;QAChI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5B,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;KAC1B;IACD,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC1B,CAAC,CAAA"}
@@ -6,5 +6,5 @@ export type ModuleFromNodeConfig = ModuleFilterOptions & {
6
6
  node?: NodeInstance | string;
7
7
  };
8
8
  export declare const useModuleFromNodeConfigLogger: (config?: ModuleFromNodeConfig) => Logger | undefined;
9
- export declare const useModuleFromNode: (nameOrAddress?: string, config?: ModuleFromNodeConfig) => [ModuleInstance | undefined, Error | undefined];
9
+ export declare const useModuleFromNode: (nameOrAddressOrInstance?: string | ModuleInstance, config?: ModuleFromNodeConfig) => [ModuleInstance | undefined, Error | undefined];
10
10
  //# sourceMappingURL=useModuleFromNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModuleFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAMtD,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,6BAA6B,YAAa,oBAAoB,uBAE1E,CAAA;AAED,eAAO,MAAM,iBAAiB,mBAAoB,MAAM,WAAW,oBAAoB,KAAG,CAAC,cAAc,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CA8BvI,CAAA"}
1
+ {"version":3,"file":"useModuleFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModuleFromNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAoB,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAMtD,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,6BAA6B,YAAa,oBAAoB,uBAE1E,CAAA;AAED,eAAO,MAAM,iBAAiB,6BACF,MAAM,GAAG,cAAc,WACxC,oBAAoB,KAC5B,CAAC,cAAc,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAkChD,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { NodeInstance } from '@xyo-network/node-model';
2
2
  import { ModuleFromNodeConfig } from './useModuleFromNode';
3
- export declare const useNodeFromNode: (nameOrAddress?: string, config?: ModuleFromNodeConfig) => [NodeInstance | undefined, Error | undefined];
3
+ export declare const useNodeFromNode: (nameOrAddressOrInstance?: string | NodeInstance, config?: ModuleFromNodeConfig) => [NodeInstance | undefined, Error | undefined];
4
4
  //# sourceMappingURL=useNodeFromNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNodeFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useNodeFromNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,oBAAoB,EAAqB,MAAM,qBAAqB,CAAA;AAE7E,eAAO,MAAM,eAAe,mBAAoB,MAAM,WAAW,oBAAoB,KAAG,CAAC,YAAY,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CASnI,CAAA"}
1
+ {"version":3,"file":"useNodeFromNode.d.ts","sourceRoot":"","sources":["../../../src/hooks/useNodeFromNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,oBAAoB,EAAqB,MAAM,qBAAqB,CAAA;AAE7E,eAAO,MAAM,eAAe,6BACA,MAAM,GAAG,YAAY,WACtC,oBAAoB,KAC5B,CAAC,YAAY,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CAS9C,CAAA"}
package/package.json CHANGED
@@ -15,21 +15,21 @@
15
15
  "@xylabs/react-flexbox": "~2.17.15",
16
16
  "@xylabs/react-promise": "~2.17.15",
17
17
  "@xylabs/react-shared": "~2.17.15",
18
- "@xyo-network/logger": "^2.72.5",
19
- "@xyo-network/module": "^2.72.5",
20
- "@xyo-network/module-model": "^2.72.5",
21
- "@xyo-network/node-model": "^2.72.5",
22
- "@xyo-network/react-node-context": "~2.60.8",
23
- "@xyo-network/react-node-provider": "~2.60.8"
18
+ "@xyo-network/logger": "^2.72.7",
19
+ "@xyo-network/module": "^2.72.7",
20
+ "@xyo-network/module-model": "^2.72.7",
21
+ "@xyo-network/node-model": "^2.72.7",
22
+ "@xyo-network/react-node-context": "~2.60.10",
23
+ "@xyo-network/react-node-provider": "~2.60.10"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@storybook/react": "^7.4.0",
27
27
  "@xylabs/ts-scripts-yarn3": "^2.19.3",
28
28
  "@xylabs/tsconfig-react": "^2.19.3",
29
- "@xyo-network/node-memory": "^2.72.5",
30
- "@xyo-network/payload-model": "^2.72.5",
31
- "@xyo-network/react-storybook": "~2.60.8",
32
- "@xyo-network/react-wallet": "~2.60.8",
29
+ "@xyo-network/node-memory": "^2.72.7",
30
+ "@xyo-network/payload-model": "^2.72.7",
31
+ "@xyo-network/react-storybook": "~2.60.10",
32
+ "@xyo-network/react-wallet": "~2.60.10",
33
33
  "typescript": "^5.2.2"
34
34
  },
35
35
  "peerDependencies": {
@@ -84,5 +84,5 @@
84
84
  },
85
85
  "sideEffects": false,
86
86
  "types": "dist/types/index.d.ts",
87
- "version": "2.60.8"
87
+ "version": "2.60.10"
88
88
  }
@@ -1,7 +1,7 @@
1
1
  import { usePromise } from '@xylabs/react-promise'
2
2
  import { Logger } from '@xyo-network/logger'
3
3
  import { asModuleInstance } from '@xyo-network/module'
4
- import { ModuleFilterOptions, ModuleInstance } from '@xyo-network/module-model'
4
+ import { isModuleInstance, ModuleFilterOptions, ModuleInstance } from '@xyo-network/module-model'
5
5
  import { NodeInstance } from '@xyo-network/node-model'
6
6
  import { useState } from 'react'
7
7
 
@@ -17,34 +17,41 @@ export const useModuleFromNodeConfigLogger = (config?: ModuleFromNodeConfig) =>
17
17
  return config?.logger
18
18
  }
19
19
 
20
- export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNodeConfig): [ModuleInstance | undefined, Error | undefined] => {
20
+ export const useModuleFromNode = (
21
+ nameOrAddressOrInstance?: string | ModuleInstance,
22
+ config?: ModuleFromNodeConfig,
23
+ ): [ModuleInstance | undefined, Error | undefined] => {
21
24
  const [node, nodeError] = useNode(config)
22
25
  const logger = useModuleFromNodeConfigLogger(config)
23
26
  const filterOptions = useModuleFilterOptions(config)
24
27
  const [result, setResult] = useState<ModuleInstance | undefined>()
25
28
  const [, error] = usePromise(async () => {
26
29
  logger?.debug('useModuleFromNode: resolving')
27
- if (node && nameOrAddress) {
30
+ if (node && nameOrAddressOrInstance) {
28
31
  node.on('moduleAttached', ({ module }) => {
29
32
  logger?.debug(`useModuleFromNode: moduleAttached [${module.config.name ?? module.address}]`)
30
- if (module.address === nameOrAddress || module.config?.name === nameOrAddress) {
33
+ if (module.address === nameOrAddressOrInstance || module.config?.name === nameOrAddressOrInstance) {
31
34
  setResult(asModuleInstance(module))
32
35
  }
33
36
  })
34
37
  node.on('moduleDetached', ({ module }) => {
35
38
  logger?.debug(`useModuleFromNode: moduleDetached [${module.config.name ?? module.address}]`)
36
- if (module.address === nameOrAddress || module.config?.name === nameOrAddress) {
39
+ if (module.address === nameOrAddressOrInstance || module.config?.name === nameOrAddressOrInstance) {
37
40
  setResult(undefined)
38
41
  }
39
42
  })
40
- const result = await node.resolve(nameOrAddress, filterOptions)
41
- logger?.debug(`Result: ${result?.address}`)
42
- setResult(result)
43
+ if (isModuleInstance(nameOrAddressOrInstance)) {
44
+ setResult(nameOrAddressOrInstance)
45
+ } else {
46
+ const result = await node.resolve(nameOrAddressOrInstance, filterOptions)
47
+ logger?.debug(`Result: ${result?.address}`)
48
+ setResult(result)
49
+ }
43
50
  return result
44
51
  }
45
52
  logger?.debug('Result: No Node')
46
53
  return undefined
47
54
  // eslint-disable-next-line react-hooks/exhaustive-deps
48
- }, [node, nameOrAddress])
55
+ }, [node, nameOrAddressOrInstance])
49
56
  return [result, nodeError ?? error]
50
57
  }
@@ -2,8 +2,11 @@ import { asNodeInstance, NodeInstance } from '@xyo-network/node-model'
2
2
 
3
3
  import { ModuleFromNodeConfig, useModuleFromNode } from './useModuleFromNode'
4
4
 
5
- export const useNodeFromNode = (nameOrAddress?: string, config?: ModuleFromNodeConfig): [NodeInstance | undefined, Error | undefined] => {
6
- const [module, error] = useModuleFromNode(nameOrAddress, config)
5
+ export const useNodeFromNode = (
6
+ nameOrAddressOrInstance?: string | NodeInstance,
7
+ config?: ModuleFromNodeConfig,
8
+ ): [NodeInstance | undefined, Error | undefined] => {
9
+ const [module, error] = useModuleFromNode(nameOrAddressOrInstance, config)
7
10
  const instance = asNodeInstance(module)
8
11
  if (module && !instance) {
9
12
  const error = Error(`Resolved module is not a NodeInstance [${module.config?.schema}:${module.config?.name}:${module.address}]`)