@xyo-network/react-node 2.45.0-rc.3 → 2.45.0-rc.31

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.
Files changed (125) hide show
  1. package/dist/cjs/hooks/index.js +2 -10
  2. package/dist/cjs/hooks/index.js.map +1 -1
  3. package/dist/cjs/hooks/useMemoryNodeUpdates.js +1 -1
  4. package/dist/cjs/hooks/useMemoryNodeUpdates.js.map +1 -1
  5. package/dist/cjs/hooks/useModule.js +71 -4
  6. package/dist/cjs/hooks/useModule.js.map +1 -1
  7. package/dist/cjs/hooks/useModules.js +29 -6
  8. package/dist/cjs/hooks/useModules.js.map +1 -1
  9. package/dist/cjs/hooks/useNode.js +48 -5
  10. package/dist/cjs/hooks/useNode.js.map +1 -1
  11. package/dist/cjs/hooks/{useModuleAddresses.js → useNodeAttachedAddresses.js} +9 -9
  12. package/dist/cjs/hooks/useNodeAttachedAddresses.js.map +1 -0
  13. package/dist/cjs/hooks/useProvidedNode.js +32 -5
  14. package/dist/cjs/hooks/useProvidedNode.js.map +1 -1
  15. package/dist/cjs/hooks/useWrappedModule.js +49 -0
  16. package/dist/cjs/hooks/useWrappedModule.js.map +1 -0
  17. package/dist/docs.json +738 -2020
  18. package/dist/esm/hooks/index.js +2 -10
  19. package/dist/esm/hooks/index.js.map +1 -1
  20. package/dist/esm/hooks/useMemoryNodeUpdates.js +1 -1
  21. package/dist/esm/hooks/useMemoryNodeUpdates.js.map +1 -1
  22. package/dist/esm/hooks/useModule.js +69 -4
  23. package/dist/esm/hooks/useModule.js.map +1 -1
  24. package/dist/esm/hooks/useModules.js +30 -7
  25. package/dist/esm/hooks/useModules.js.map +1 -1
  26. package/dist/esm/hooks/useNode.js +47 -5
  27. package/dist/esm/hooks/useNode.js.map +1 -1
  28. package/dist/esm/hooks/useNodeAttachedAddresses.js +17 -0
  29. package/dist/esm/hooks/useNodeAttachedAddresses.js.map +1 -0
  30. package/dist/esm/hooks/useProvidedNode.js +30 -5
  31. package/dist/esm/hooks/useProvidedNode.js.map +1 -1
  32. package/dist/esm/hooks/useWrappedModule.js +45 -0
  33. package/dist/esm/hooks/useWrappedModule.js.map +1 -0
  34. package/dist/types/hooks/index.d.ts +2 -10
  35. package/dist/types/hooks/index.d.ts.map +1 -1
  36. package/dist/types/hooks/useModule.d.ts +23 -47
  37. package/dist/types/hooks/useModule.d.ts.map +1 -1
  38. package/dist/types/hooks/useModules.d.ts +5 -5
  39. package/dist/types/hooks/useModules.d.ts.map +1 -1
  40. package/dist/types/hooks/useNode.d.ts +3 -7
  41. package/dist/types/hooks/useNode.d.ts.map +1 -1
  42. package/dist/types/hooks/useNodeAttachedAddresses.d.ts +2 -0
  43. package/dist/types/hooks/useNodeAttachedAddresses.d.ts.map +1 -0
  44. package/dist/types/hooks/useProvidedNode.d.ts +3 -4
  45. package/dist/types/hooks/useProvidedNode.d.ts.map +1 -1
  46. package/dist/types/hooks/useWrappedModule.d.ts +39 -0
  47. package/dist/types/hooks/useWrappedModule.d.ts.map +1 -0
  48. package/package.json +16 -16
  49. package/src/components/Node.stories.tsx +35 -9
  50. package/src/hooks/index.ts +2 -10
  51. package/src/hooks/useMemoryNodeUpdates.tsx +1 -1
  52. package/src/hooks/useModule.tsx +77 -4
  53. package/src/hooks/useModules.ts +30 -10
  54. package/src/hooks/useNode.tsx +47 -5
  55. package/src/hooks/{useModuleAddresses.ts → useNodeAttachedAddresses.ts} +6 -6
  56. package/src/hooks/useProvidedNode.tsx +33 -6
  57. package/src/hooks/useWrappedModule.tsx +61 -0
  58. package/dist/cjs/hooks/createUseModuleHook.js +0 -41
  59. package/dist/cjs/hooks/createUseModuleHook.js.map +0 -1
  60. package/dist/cjs/hooks/useArchiveArchivists.js +0 -38
  61. package/dist/cjs/hooks/useArchiveArchivists.js.map +0 -1
  62. package/dist/cjs/hooks/useArchivistModule.js +0 -12
  63. package/dist/cjs/hooks/useArchivistModule.js.map +0 -1
  64. package/dist/cjs/hooks/useArchivistModules.js +0 -11
  65. package/dist/cjs/hooks/useArchivistModules.js.map +0 -1
  66. package/dist/cjs/hooks/useDivinerModule.js +0 -12
  67. package/dist/cjs/hooks/useDivinerModule.js.map +0 -1
  68. package/dist/cjs/hooks/useDivinerModules.js +0 -12
  69. package/dist/cjs/hooks/useDivinerModules.js.map +0 -1
  70. package/dist/cjs/hooks/useModuleAddresses.js.map +0 -1
  71. package/dist/cjs/hooks/useNodeQueryDiviner.js +0 -43
  72. package/dist/cjs/hooks/useNodeQueryDiviner.js.map +0 -1
  73. package/dist/cjs/hooks/useWitnessModule.js +0 -12
  74. package/dist/cjs/hooks/useWitnessModule.js.map +0 -1
  75. package/dist/cjs/hooks/useWitnessModules.js +0 -11
  76. package/dist/cjs/hooks/useWitnessModules.js.map +0 -1
  77. package/dist/esm/hooks/createUseModuleHook.js +0 -36
  78. package/dist/esm/hooks/createUseModuleHook.js.map +0 -1
  79. package/dist/esm/hooks/useArchiveArchivists.js +0 -33
  80. package/dist/esm/hooks/useArchiveArchivists.js.map +0 -1
  81. package/dist/esm/hooks/useArchivistModule.js +0 -8
  82. package/dist/esm/hooks/useArchivistModule.js.map +0 -1
  83. package/dist/esm/hooks/useArchivistModules.js +0 -7
  84. package/dist/esm/hooks/useArchivistModules.js.map +0 -1
  85. package/dist/esm/hooks/useDivinerModule.js +0 -8
  86. package/dist/esm/hooks/useDivinerModule.js.map +0 -1
  87. package/dist/esm/hooks/useDivinerModules.js +0 -8
  88. package/dist/esm/hooks/useDivinerModules.js.map +0 -1
  89. package/dist/esm/hooks/useModuleAddresses.js +0 -17
  90. package/dist/esm/hooks/useModuleAddresses.js.map +0 -1
  91. package/dist/esm/hooks/useNodeQueryDiviner.js +0 -37
  92. package/dist/esm/hooks/useNodeQueryDiviner.js.map +0 -1
  93. package/dist/esm/hooks/useWitnessModule.js +0 -8
  94. package/dist/esm/hooks/useWitnessModule.js.map +0 -1
  95. package/dist/esm/hooks/useWitnessModules.js +0 -7
  96. package/dist/esm/hooks/useWitnessModules.js.map +0 -1
  97. package/dist/types/hooks/createUseModuleHook.d.ts +0 -51
  98. package/dist/types/hooks/createUseModuleHook.d.ts.map +0 -1
  99. package/dist/types/hooks/useArchiveArchivists.d.ts +0 -9
  100. package/dist/types/hooks/useArchiveArchivists.d.ts.map +0 -1
  101. package/dist/types/hooks/useArchivistModule.d.ts +0 -4
  102. package/dist/types/hooks/useArchivistModule.d.ts.map +0 -1
  103. package/dist/types/hooks/useArchivistModules.d.ts +0 -3
  104. package/dist/types/hooks/useArchivistModules.d.ts.map +0 -1
  105. package/dist/types/hooks/useDivinerModule.d.ts +0 -4
  106. package/dist/types/hooks/useDivinerModule.d.ts.map +0 -1
  107. package/dist/types/hooks/useDivinerModules.d.ts +0 -3
  108. package/dist/types/hooks/useDivinerModules.d.ts.map +0 -1
  109. package/dist/types/hooks/useModuleAddresses.d.ts +0 -2
  110. package/dist/types/hooks/useModuleAddresses.d.ts.map +0 -1
  111. package/dist/types/hooks/useNodeQueryDiviner.d.ts +0 -6
  112. package/dist/types/hooks/useNodeQueryDiviner.d.ts.map +0 -1
  113. package/dist/types/hooks/useWitnessModule.d.ts +0 -4
  114. package/dist/types/hooks/useWitnessModule.d.ts.map +0 -1
  115. package/dist/types/hooks/useWitnessModules.d.ts +0 -3
  116. package/dist/types/hooks/useWitnessModules.d.ts.map +0 -1
  117. package/src/hooks/createUseModuleHook.tsx +0 -56
  118. package/src/hooks/useArchiveArchivists.tsx +0 -49
  119. package/src/hooks/useArchivistModule.ts +0 -10
  120. package/src/hooks/useArchivistModules.ts +0 -8
  121. package/src/hooks/useDivinerModule.ts +0 -10
  122. package/src/hooks/useDivinerModules.ts +0 -9
  123. package/src/hooks/useNodeQueryDiviner.tsx +0 -54
  124. package/src/hooks/useWitnessModule.ts +0 -10
  125. package/src/hooks/useWitnessModules.ts +0 -8
package/package.json CHANGED
@@ -10,24 +10,24 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@mui/lab": "^5.0.0-alpha.121",
14
- "@xylabs/react-flexbox": "^2.16.8",
15
- "@xylabs/react-shared": "^2.16.8",
16
- "@xyo-network/account": "^2.51.1",
17
- "@xyo-network/archivist": "^2.51.1",
18
- "@xyo-network/diviner-model": "^2.51.1",
19
- "@xyo-network/diviner-wrapper": "^2.51.1",
20
- "@xyo-network/module": "^2.51.1",
21
- "@xyo-network/module-model": "^2.51.1",
22
- "@xyo-network/node": "^2.51.1",
23
- "@xyo-network/payload-model": "^2.51.1",
24
- "@xyo-network/react-shared": "^2.45.0-rc.3",
25
- "@xyo-network/witness": "^2.51.1"
13
+ "@mui/lab": "^5.0.0-alpha.122",
14
+ "@xylabs/react-flexbox": "^2.16.11",
15
+ "@xylabs/react-render-spin-check": "^2.16.11",
16
+ "@xylabs/react-shared": "^2.16.11",
17
+ "@xyo-network/account-model": "^2.51.7",
18
+ "@xyo-network/module": "^2.51.7",
19
+ "@xyo-network/module-model": "^2.51.7",
20
+ "@xyo-network/node": "^2.51.7",
21
+ "@xyo-network/react-shared": "^2.45.0-rc.31",
22
+ "@xyo-network/react-wallet": "^2.45.0-rc.31"
26
23
  },
27
24
  "devDependencies": {
28
25
  "@storybook/react": "^6.5.16",
29
- "@xylabs/ts-scripts-yarn3": "^2.16.0",
30
- "@xylabs/tsconfig-react": "^2.16.0",
26
+ "@xylabs/ts-scripts-yarn3": "^2.16.1",
27
+ "@xylabs/tsconfig-react": "^2.16.1",
28
+ "@xyo-network/account": "^2.51.7",
29
+ "@xyo-network/react-storybook": "^2.45.0-rc.31",
30
+ "@xyo-network/react-wallet": "^2.45.0-rc.31",
31
31
  "require-from-string": "^2.0.2",
32
32
  "typescript": "^4.9.5"
33
33
  },
@@ -83,6 +83,6 @@
83
83
  },
84
84
  "sideEffects": false,
85
85
  "types": "dist/types/index.d.ts",
86
- "version": "2.45.0-rc.3",
86
+ "version": "2.45.0-rc.31",
87
87
  "stableVersion": "2.44.1"
88
88
  }
@@ -1,22 +1,46 @@
1
1
  import { ComponentStory, DecoratorFn, Meta } from '@storybook/react'
2
- import { useAsyncEffect } from '@xylabs/react-shared'
2
+ import { useAsyncEffect, WithChildren } from '@xylabs/react-shared'
3
+ import { HDWallet } from '@xyo-network/account'
3
4
  import { AbstractModule } from '@xyo-network/module'
4
5
  import { MemoryNode, NodeConfigSchema, NodeWrapper } from '@xyo-network/node'
5
- import { useState } from 'react'
6
+ import { DefaultSeedPhrase } from '@xyo-network/react-storybook'
7
+ import { WalletProvider } from '@xyo-network/react-wallet'
8
+ import { useEffect, useState } from 'react'
6
9
 
7
10
  import { MemoryNodeProvider } from '../contexts'
8
- import { useProvidedNode } from '../hooks'
11
+ import { useModule, useProvidedNode } from '../hooks'
12
+
13
+ const randomWallet = HDWallet.fromMnemonic(DefaultSeedPhrase)
9
14
 
10
15
  class TestModule extends AbstractModule {}
16
+ const TestModuleName = 'TestModule'
17
+ const TestModuleAccount = randomWallet.deriveAccount('0')
18
+
19
+ const account = randomWallet.deriveAccount('0')
11
20
 
12
21
  const MemoryNodeDecorator: DecoratorFn = (Story, args) => {
13
22
  return (
14
- <MemoryNodeProvider config={{ schema: NodeConfigSchema }}>
15
- <Story {...args} />
16
- </MemoryNodeProvider>
23
+ <WalletProvider defaultWallet={randomWallet}>
24
+ <MemoryNodeProvider config={{ schema: NodeConfigSchema }}>
25
+ <Story {...args} />
26
+ </MemoryNodeProvider>
27
+ </WalletProvider>
17
28
  )
18
29
  }
19
30
 
31
+ const UseModuleTest: React.FC<WithChildren> = ({ children }) => {
32
+ const [testModule] = useModule(TestModuleName, account)
33
+
34
+ useEffect(() => {
35
+ if (testModule) {
36
+ // Should be called but isn't
37
+ console.log('*****test module*****', testModule)
38
+ }
39
+ }, [testModule])
40
+
41
+ return <>{children}</>
42
+ }
43
+
20
44
  // eslint-disable-next-line import/no-default-export
21
45
  export default {
22
46
  title: 'modules/node/NodeBox',
@@ -31,9 +55,9 @@ const Template: ComponentStory<React.FC> = (props) => {
31
55
  async (mounted) => {
32
56
  if (node) {
33
57
  try {
34
- const mod = await TestModule.create({ config: { schema: 'network.xyo.test.module' } })
58
+ const mod = await TestModule.create({ account: TestModuleAccount, config: { name: TestModuleName, schema: 'network.xyo.test.module' } })
35
59
  node?.register(mod)
36
- await node?.attach(mod.address)
60
+ await node?.attach(mod.address, true)
37
61
  const wrapper = NodeWrapper.wrap(node)
38
62
  const description = await wrapper?.describe()
39
63
  if (mounted()) {
@@ -49,7 +73,9 @@ const Template: ComponentStory<React.FC> = (props) => {
49
73
 
50
74
  return (
51
75
  <div {...props}>
52
- <pre>{description}</pre>
76
+ <UseModuleTest>
77
+ <pre>{description}</pre>
78
+ </UseModuleTest>
53
79
  </div>
54
80
  )
55
81
  }
@@ -1,15 +1,7 @@
1
- export * from './createUseModuleHook'
2
- export * from './useArchiveArchivists'
3
- export * from './useArchivistModule'
4
- export * from './useArchivistModules'
5
- export * from './useDivinerModule'
6
- export * from './useDivinerModules'
7
1
  export * from './useMemoryNodeUpdates'
8
2
  export * from './useModule'
9
- export * from './useModuleAddresses'
10
3
  export * from './useModules'
11
4
  export * from './useNode'
12
- export * from './useNodeQueryDiviner'
5
+ export * from './useNodeAttachedAddresses'
13
6
  export * from './useProvidedNode'
14
- export * from './useWitnessModule'
15
- export * from './useWitnessModules'
7
+ export * from './useWrappedModule'
@@ -16,7 +16,7 @@ export const useMemoryNodeUpdates = (refreshAddresses?: string[]): UseMemoryNode
16
16
 
17
17
  useEffect(() => {
18
18
  if (node) {
19
- const onFunc = node.on as ModuleAttachedEventEmitter['on']
19
+ const onFunc = node.module.on as ModuleAttachedEventEmitter['on']
20
20
  onFunc('moduleAttached', (args) => {
21
21
  if (refreshAddresses) {
22
22
  if (refreshAddresses.some((address) => address === args?.module.address)) setModule(args)
@@ -1,6 +1,79 @@
1
- import { Module, ModuleWrapper } from '@xyo-network/module'
1
+ import { useAsyncEffect } from '@xylabs/react-shared'
2
+ import { AccountInstance } from '@xyo-network/account-model'
3
+ import { Module, ModuleFilter } from '@xyo-network/module-model'
4
+ import { ModuleAttachedEventArgs, ModuleAttachedEventEmitter, ModuleDetachedEventArgs, ModuleDetachedEventEmitter } from '@xyo-network/node'
5
+ import { useMemo, useState } from 'react'
2
6
 
3
- import { createUseModuleHook } from './createUseModuleHook'
4
- import { useNode } from './useNode'
7
+ import { useProvidedWrappedNode } from './useProvidedNode'
5
8
 
6
- export const useModule = createUseModuleHook<Module, ModuleWrapper>(ModuleWrapper.wrap, useNode)
9
+ export const useModule = <TModule extends Module = Module>(
10
+ nameOrAddressOrFilter?: string | ModuleFilter,
11
+ account?: AccountInstance,
12
+ ): [TModule | undefined, Error | undefined] => {
13
+ const nameOrAddress = useMemo(() => (typeof nameOrAddressOrFilter === 'string' ? nameOrAddressOrFilter : undefined), [nameOrAddressOrFilter])
14
+ const filter = useMemo(() => (typeof nameOrAddressOrFilter === 'object' ? nameOrAddressOrFilter : undefined), [nameOrAddressOrFilter])
15
+ const [node, nodeError] = useProvidedWrappedNode(account)
16
+ const [module, setModule] = useState<TModule>()
17
+ const [error, setError] = useState<Error>()
18
+
19
+ const address = module?.address
20
+
21
+ useAsyncEffect(
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
23
+ async (mounted) => {
24
+ try {
25
+ if (nodeError) {
26
+ setError(nodeError)
27
+ setModule(undefined)
28
+ } else {
29
+ if (node) {
30
+ const attachEmitter = node.module as ModuleAttachedEventEmitter
31
+ const detachEmitter = node.module as ModuleDetachedEventEmitter
32
+ const attachHandler = (args: ModuleAttachedEventArgs) => {
33
+ const eventModule = args.module
34
+ if (nameOrAddress && (eventModule.address === nameOrAddress || eventModule?.config.name === nameOrAddress) && mounted()) {
35
+ setModule(eventModule as TModule)
36
+ setError(undefined)
37
+ }
38
+ }
39
+ const detachHandler = (args: ModuleDetachedEventArgs) => {
40
+ const eventModule = args.module
41
+ if (eventModule.address === address && mounted()) {
42
+ setModule(undefined)
43
+ setError(undefined)
44
+ }
45
+ }
46
+ const module: TModule | undefined = nameOrAddress
47
+ ? await node.resolve<TModule>(nameOrAddress)
48
+ : (await node.resolve<TModule>(filter)).pop()
49
+ if (mounted()) {
50
+ attachEmitter.on('moduleAttached', attachHandler, true)
51
+ detachEmitter.on('moduleDetached', detachHandler, true)
52
+ detachEmitter.on('moduleDetached', detachHandler)
53
+ attachEmitter.on('moduleAttached', attachHandler)
54
+ setModule(module)
55
+ setError(undefined)
56
+ }
57
+ return () => {
58
+ //remove the event handler on unmount
59
+ attachEmitter.on('moduleAttached', attachHandler, true)
60
+ detachEmitter.on('moduleDetached', detachHandler, true)
61
+ }
62
+ } else {
63
+ setError(undefined)
64
+ setModule(undefined)
65
+ }
66
+ }
67
+ } catch (ex) {
68
+ if (mounted()) {
69
+ const error = ex as Error
70
+ setError(error)
71
+ setModule(undefined)
72
+ }
73
+ }
74
+ },
75
+ [nameOrAddress, node, nodeError, address, filter],
76
+ )
77
+
78
+ return [module, error]
79
+ }
@@ -1,23 +1,43 @@
1
1
  import { useAsyncEffect } from '@xylabs/react-shared'
2
- import { Module, ModuleFilter } from '@xyo-network/module'
2
+ import { Module, ModuleFilter } from '@xyo-network/module-model'
3
3
  import { useState } from 'react'
4
4
 
5
- import { useProvidedNode } from './useProvidedNode'
5
+ import { useProvidedWrappedNode } from './useProvidedNode'
6
6
 
7
- export const useModules = <T extends Module = Module>(filter?: ModuleFilter) => {
8
- const [node] = useProvidedNode(true)
9
- const [modules, setModules] = useState<T[]>()
7
+ export const useModules = <TModule extends Module = Module>(filter?: ModuleFilter): [TModule[] | undefined, Error | undefined] => {
8
+ const [node, nodeError] = useProvidedWrappedNode()
9
+ const [modules, setModules] = useState<TModule[]>()
10
+ const [error, setError] = useState<Error>()
10
11
 
11
12
  useAsyncEffect(
12
13
  // eslint-disable-next-line react-hooks/exhaustive-deps
13
14
  async (mounted) => {
14
- const modules = await node?.resolve<T>(filter)
15
- if (mounted()) {
16
- setModules(modules)
15
+ try {
16
+ if (nodeError) {
17
+ setError(nodeError)
18
+ setModules(undefined)
19
+ } else {
20
+ if (node) {
21
+ const modules: TModule[] | undefined = await node.resolve<TModule>(filter)
22
+ if (mounted()) {
23
+ setModules(modules)
24
+ setError(undefined)
25
+ }
26
+ } else {
27
+ setError(undefined)
28
+ setModules(undefined)
29
+ }
30
+ }
31
+ } catch (ex) {
32
+ if (mounted()) {
33
+ const error = ex as Error
34
+ setError(error)
35
+ setModules(undefined)
36
+ }
17
37
  }
18
38
  },
19
- [filter, node],
39
+ [filter, node, nodeError],
20
40
  )
21
41
 
22
- return modules
42
+ return [modules, error]
23
43
  }
@@ -1,9 +1,51 @@
1
+ import { AccountInstance } from '@xyo-network/account-model'
1
2
  import { NodeModule, NodeWrapper } from '@xyo-network/node'
3
+ import { useEffect, useState } from 'react'
2
4
 
3
- import { createUseModuleHook } from './createUseModuleHook'
5
+ import { useModule } from './useModule'
4
6
  import { useProvidedNode } from './useProvidedNode'
5
7
 
6
- export const useNode = createUseModuleHook<NodeModule, NodeWrapper>(NodeWrapper.wrap, (_nameOrAddress?: string, _wrap?: true) => [
7
- useProvidedNode(true).pop(),
8
- undefined,
9
- ])
8
+ //AT: intentionally not exported
9
+ const useNodeModule = (nameOrAddress?: string): [NodeModule | undefined, Error | undefined] => {
10
+ const [providedNode] = useProvidedNode()
11
+ const [node, nodeError] = useModule(nameOrAddress)
12
+
13
+ if (nameOrAddress) {
14
+ if (providedNode) {
15
+ return [node as NodeModule, nodeError]
16
+ } else {
17
+ return [providedNode, undefined]
18
+ }
19
+ } else {
20
+ return [providedNode, undefined]
21
+ }
22
+ }
23
+
24
+ export const useNode = (nameOrAddress?: string, account?: AccountInstance): [NodeWrapper | undefined, Error | undefined] => {
25
+ const [node, nodeError] = useNodeModule(nameOrAddress)
26
+ const [wrapper, setWrapper] = useState<NodeWrapper>()
27
+ const [error, setError] = useState<Error>()
28
+
29
+ useEffect(() => {
30
+ if (node) {
31
+ if (nodeError) {
32
+ setError(nodeError)
33
+ setWrapper(undefined)
34
+ } else {
35
+ try {
36
+ const wrapper = NodeWrapper.wrap(node, account)
37
+ setWrapper(wrapper)
38
+ setError(undefined)
39
+ } catch (ex) {
40
+ setWrapper(undefined)
41
+ setError(ex as Error)
42
+ }
43
+ }
44
+ } else {
45
+ setWrapper(undefined)
46
+ setError(undefined)
47
+ }
48
+ }, [node, account, nodeError])
49
+
50
+ return [wrapper, error]
51
+ }
@@ -1,22 +1,22 @@
1
1
  import { useAsyncEffect } from '@xylabs/react-shared'
2
2
  import { useState } from 'react'
3
3
 
4
- import { useProvidedNode } from './useProvidedNode'
4
+ import { useNode } from './useNode'
5
5
 
6
- export const useModuleAddresses = () => {
7
- const [node] = useProvidedNode()
8
- const [attachedAddresses, setAttachedAddresses] = useState<string[]>()
6
+ export const useNodeAttachedAddresses = () => {
7
+ const [node] = useNode()
8
+ const [addresses, setAddresses] = useState<string[]>()
9
9
 
10
10
  useAsyncEffect(
11
11
  // eslint-disable-next-line react-hooks/exhaustive-deps
12
12
  async (mounted) => {
13
13
  const attached = await node?.attached()
14
14
  if (mounted()) {
15
- setAttachedAddresses(attached)
15
+ setAddresses(attached)
16
16
  }
17
17
  },
18
18
  [node],
19
19
  )
20
20
 
21
- return [attachedAddresses, node?.registered()]
21
+ return [addresses, node?.registered()]
22
22
  }
@@ -1,14 +1,41 @@
1
+ import { AccountInstance } from '@xyo-network/account-model'
1
2
  import { NodeModule, NodeWrapper } from '@xyo-network/node'
2
- import { useContext } from 'react'
3
+ import { useAccount } from '@xyo-network/react-wallet'
4
+ import { useContext, useEffect, useMemo, useState } from 'react'
3
5
 
4
6
  import { NodeContext } from '../contexts'
5
7
 
6
- function useProvidedNodeFunc(wrap?: false): [NodeModule | undefined]
7
- function useProvidedNodeFunc(wrap: true): [NodeWrapper | undefined]
8
- function useProvidedNodeFunc(wrap?: boolean): [NodeModule | undefined] {
8
+ export const useProvidedNode = (): [NodeModule | undefined] => {
9
9
  const { node } = useContext(NodeContext)
10
10
 
11
- return [wrap ? NodeWrapper.wrap(node) : node]
11
+ return [node]
12
12
  }
13
13
 
14
- export const useProvidedNode = useProvidedNodeFunc
14
+ export const useProvidedWrappedNode = (account?: AccountInstance): [NodeWrapper | undefined, Error | undefined] => {
15
+ const [providedAccount] = useAccount()
16
+ const [node] = useProvidedNode()
17
+ const [wrappedNode, setWrappedNode] = useState<NodeWrapper>()
18
+ const [error, setError] = useState<Error>()
19
+
20
+ const accountToUse = useMemo(() => account ?? providedAccount, [account, providedAccount])
21
+
22
+ if (!accountToUse) {
23
+ const error = Error('useProvidedWrappedNode requires either an Account context or account parameter')
24
+ console.error(error.message)
25
+ setError(error)
26
+ }
27
+
28
+ useEffect(() => {
29
+ try {
30
+ if (node && accountToUse) {
31
+ setWrappedNode(NodeWrapper.wrap(node, account))
32
+ setError(undefined)
33
+ }
34
+ } catch (ex) {
35
+ setWrappedNode(undefined)
36
+ setError(ex as Error)
37
+ }
38
+ }, [node, account, accountToUse])
39
+
40
+ return [wrappedNode, error]
41
+ }
@@ -0,0 +1,61 @@
1
+ import { useRenderSpinCheck } from '@xylabs/react-render-spin-check'
2
+ import { AccountInstance } from '@xyo-network/account-model'
3
+ import { ModuleWrapper } from '@xyo-network/module'
4
+ import { useAccount } from '@xyo-network/react-wallet'
5
+ import { useEffect, useMemo, useState } from 'react'
6
+
7
+ import { useModule } from './useModule'
8
+
9
+ export interface WrapperStatic<TModuleWrapper extends ModuleWrapper = ModuleWrapper> {
10
+ requiredQueries: string[]
11
+ wrap: (module?: TModuleWrapper['module'], account?: AccountInstance) => TModuleWrapper
12
+ }
13
+
14
+ export const WrappedModuleHookFactory = <TModuleWrapper extends ModuleWrapper = ModuleWrapper>(
15
+ wrapperObject: WrapperStatic<TModuleWrapper>,
16
+ name?: string,
17
+ ) => {
18
+ const useHook = (nameOrAddress?: string, account?: AccountInstance, spinCheck?: boolean): [TModuleWrapper | undefined, Error | undefined] => {
19
+ const spinCheckBounceNoCheck = useMemo(() => {
20
+ return { name: name ?? 'WrappedModuleHookFactory-NoCheck' }
21
+ }, [])
22
+ useRenderSpinCheck(spinCheck ? { name: name ?? 'WrappedModuleHookFactory' } : spinCheckBounceNoCheck)
23
+ const [providedAccount] = useAccount()
24
+ const [module, moduleError] = useModule<TModuleWrapper['module']>(
25
+ nameOrAddress ?? {
26
+ query: [wrapperObject.requiredQueries],
27
+ },
28
+ )
29
+
30
+ const [wrapper, setWrapper] = useState<TModuleWrapper>()
31
+ const [error, setError] = useState<Error>()
32
+
33
+ const accountToUse = useMemo(() => account ?? providedAccount, [account, providedAccount])
34
+
35
+ if (!accountToUse) {
36
+ const error = Error('Module hooks require either an Account context or account parameter')
37
+ console.error(error.message)
38
+ setError(error)
39
+ }
40
+
41
+ useEffect(() => {
42
+ if (module && accountToUse) {
43
+ try {
44
+ const wrapper = wrapperObject.wrap(module, accountToUse) as TModuleWrapper
45
+ setWrapper(wrapper)
46
+ } catch (ex) {
47
+ setWrapper(undefined)
48
+ setError(ex as Error)
49
+ }
50
+ } else {
51
+ setWrapper(undefined)
52
+ setError(moduleError)
53
+ }
54
+ }, [module, account, moduleError, accountToUse])
55
+
56
+ return [wrapper, error]
57
+ }
58
+ return useHook
59
+ }
60
+
61
+ export const useWrappedModule = WrappedModuleHookFactory(ModuleWrapper)
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUseModuleHook = void 0;
4
- const tslib_1 = require("tslib");
5
- /* eslint-disable react-hooks/rules-of-hooks */
6
- const react_shared_1 = require("@xylabs/react-shared");
7
- const react_1 = require("react");
8
- const createUseModuleHook = (wrapFunc, useNodeHook) => {
9
- function use(nameOrAddress, wrap = false) {
10
- const [node, nodeError] = useNodeHook(nameOrAddress, true);
11
- const [module, setModule] = (0, react_1.useState)();
12
- const [error, setError] = (0, react_1.useState)();
13
- (0, react_shared_1.useAsyncEffect)(
14
- // eslint-disable-next-line react-hooks/exhaustive-deps
15
- (mounted) => tslib_1.__awaiter(this, void 0, void 0, function* () {
16
- try {
17
- if (nodeError) {
18
- setError(nodeError);
19
- setModule(undefined);
20
- }
21
- else {
22
- const module = yield (node === null || node === void 0 ? void 0 : node.resolve(nameOrAddress));
23
- const finalModule = wrap ? wrapFunc(module, typeof wrap === 'boolean' ? undefined : wrap) : module;
24
- if (mounted()) {
25
- setModule(finalModule);
26
- }
27
- }
28
- }
29
- catch (ex) {
30
- if (mounted()) {
31
- setError(ex);
32
- setModule(undefined);
33
- }
34
- }
35
- }), [wrap, node, nameOrAddress, nodeError]);
36
- return [module, error];
37
- }
38
- return use;
39
- };
40
- exports.createUseModuleHook = createUseModuleHook;
41
- //# sourceMappingURL=createUseModuleHook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createUseModuleHook.js","sourceRoot":"","sources":["../../../src/hooks/createUseModuleHook.tsx"],"names":[],"mappings":";;;;AAAA,+CAA+C;AAC/C,uDAAqD;AAIrD,iCAAgC;AAOzB,MAAM,mBAAmB,GAAG,CAKjC,QAAmB,EACnB,WAA4G,EAC5G,EAAE;IAKF,SAAS,GAAG,CAAC,aAAsB,EAAE,OAA0B,KAAK;QAClE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,GAAsB,CAAA;QAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,GAAS,CAAA;QAC3C,IAAA,6BAAc;QACZ,uDAAuD;QACvD,CAAO,OAAO,EAAE,EAAE;YAChB,IAAI;gBACF,IAAI,SAAS,EAAE;oBACb,QAAQ,CAAC,SAAS,CAAC,CAAA;oBACnB,SAAS,CAAC,SAAS,CAAC,CAAA;iBACrB;qBAAM;oBACL,MAAM,MAAM,GAAG,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAU,aAAa,CAAC,CAAA,CAAA;oBAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;oBAClG,IAAI,OAAO,EAAE,EAAE;wBACb,SAAS,CAAC,WAAW,CAAC,CAAA;qBACvB;iBACF;aACF;YAAC,OAAO,EAAE,EAAE;gBACX,IAAI,OAAO,EAAE,EAAE;oBACb,QAAQ,CAAC,EAAW,CAAC,CAAA;oBACrB,SAAS,CAAC,SAAS,CAAC,CAAA;iBACrB;aACF;QACH,CAAC,CAAA,EACD,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CACvC,CAAA;QAED,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AA3CY,QAAA,mBAAmB,uBA2C/B"}
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useArchiveArchivists = exports.useArchiveArchivistsRaw = void 0;
4
- const archivist_1 = require("@xyo-network/archivist");
5
- const react_shared_1 = require("@xyo-network/react-shared");
6
- const react_1 = require("react");
7
- const useMemoryNodeUpdates_1 = require("./useMemoryNodeUpdates");
8
- const useProvidedNode_1 = require("./useProvidedNode");
9
- const useArchiveArchivistsRaw = (archiveName, refresher) => {
10
- const [node] = (0, useProvidedNode_1.useProvidedNode)(true);
11
- const buildReq = (0, react_1.useCallback)((type) => (archiveName && node) || refresher
12
- ? node === null || node === void 0 ? void 0 : node.resolveWrapped(archivist_1.ArchivistWrapper, { name: [encodeURIComponent(`${archiveName}[${type}]`)] })
13
- : undefined, [archiveName, node, refresher]);
14
- const payloadArchivistReq = (0, react_1.useMemo)(() => buildReq('payload'), [buildReq]);
15
- const boundWitnessArchivistReq = (0, react_1.useMemo)(() => buildReq('boundwitness'), [buildReq]);
16
- const [archivePayloadWrapper] = (0, react_shared_1.usePromise)(payloadArchivistReq, [payloadArchivistReq]);
17
- const [archiveBoundWitnessWrapper] = (0, react_shared_1.usePromise)(boundWitnessArchivistReq, [boundWitnessArchivistReq]);
18
- const archivists = (0, react_1.useMemo)(() => {
19
- if ((archiveBoundWitnessWrapper === null || archiveBoundWitnessWrapper === void 0 ? void 0 : archiveBoundWitnessWrapper[0]) && (archivePayloadWrapper === null || archivePayloadWrapper === void 0 ? void 0 : archivePayloadWrapper[0])) {
20
- return {
21
- archiveBoundWitnessWrapper: archiveBoundWitnessWrapper[0],
22
- archivePayloadWrapper: archivePayloadWrapper[0],
23
- };
24
- }
25
- else {
26
- return;
27
- }
28
- }, [archiveBoundWitnessWrapper, archivePayloadWrapper]);
29
- return archivists;
30
- };
31
- exports.useArchiveArchivistsRaw = useArchiveArchivistsRaw;
32
- const useArchiveArchivists = (archiveName, refresher, refreshAddresses) => {
33
- const { module } = (0, useMemoryNodeUpdates_1.useMemoryNodeUpdates)(refreshAddresses);
34
- const archivists = (0, exports.useArchiveArchivistsRaw)(archiveName, refresher !== null && refresher !== void 0 ? refresher : module);
35
- return archivists;
36
- };
37
- exports.useArchiveArchivists = useArchiveArchivists;
38
- //# sourceMappingURL=useArchiveArchivists.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useArchiveArchivists.js","sourceRoot":"","sources":["../../../src/hooks/useArchiveArchivists.tsx"],"names":[],"mappings":";;;AAAA,sDAAyD;AACzD,4DAAsD;AACtD,iCAA4C;AAE5C,iEAA6D;AAC7D,uDAAmD;AAO5C,MAAM,uBAAuB,GAAG,CAAC,WAAoB,EAAE,SAAmB,EAAoC,EAAE;IACrH,MAAM,CAAC,IAAI,CAAC,GAAG,IAAA,iCAAe,EAAC,IAAI,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAC1B,CAAC,IAAgC,EAAE,EAAE,CACnC,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,SAAS;QAChC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,CAAC,4BAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,GAAG,WAAW,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QACnG,CAAC,CAAC,SAAS,EACf,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAC/B,CAAA;IAED,MAAM,mBAAmB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC1E,MAAM,wBAAwB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEpF,MAAM,CAAC,qBAAqB,CAAC,GAAG,IAAA,yBAAU,EAAC,mBAAmB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACtF,MAAM,CAAC,0BAA0B,CAAC,GAAG,IAAA,yBAAU,EAAC,wBAAwB,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAErG,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC9B,IAAI,CAAA,0BAA0B,aAA1B,0BAA0B,uBAA1B,0BAA0B,CAAG,CAAC,CAAC,MAAI,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,CAAC,CAAC,CAAA,EAAE;YACjE,OAAO;gBACL,0BAA0B,EAAE,0BAA0B,CAAC,CAAC,CAAqB;gBAC7E,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAqB;aACpE,CAAA;SACF;aAAM;YACL,OAAM;SACP;IACH,CAAC,EAAE,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAEvD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AA7BY,QAAA,uBAAuB,2BA6BnC;AAEM,MAAM,oBAAoB,GAAG,CAAC,WAAoB,EAAE,SAAmB,EAAE,gBAA2B,EAAE,EAAE;IAC7G,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,2CAAoB,EAAC,gBAAgB,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,IAAA,+BAAuB,EAAC,WAAW,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,MAAM,CAAC,CAAA;IAE5E,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AALY,QAAA,oBAAoB,wBAKhC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useArchivistModule = void 0;
4
- const archivist_1 = require("@xyo-network/archivist");
5
- const useModules_1 = require("./useModules");
6
- const useArchivistModule = (filter) => {
7
- const modules = (0, useModules_1.useModules)(filter);
8
- const foundModule = modules === null || modules === void 0 ? void 0 : modules.shift();
9
- return foundModule ? new archivist_1.ArchivistWrapper(foundModule) : undefined;
10
- };
11
- exports.useArchivistModule = useArchivistModule;
12
- //# sourceMappingURL=useArchivistModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useArchivistModule.js","sourceRoot":"","sources":["../../../src/hooks/useArchivistModule.ts"],"names":[],"mappings":";;;AAAA,sDAAyD;AAGzD,6CAAyC;AAElC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAE,EAAE;IAC1D,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,MAAM,CAAC,CAAA;IAClC,MAAM,WAAW,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAA;IACpC,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,4BAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACpE,CAAC,CAAA;AAJY,QAAA,kBAAkB,sBAI9B"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useArchivistModules = void 0;
4
- const archivist_1 = require("@xyo-network/archivist");
5
- const useModules_1 = require("./useModules");
6
- const useArchivistModules = () => {
7
- const modules = (0, useModules_1.useModules)({ query: [[archivist_1.ArchivistGetQuerySchema]] });
8
- return modules === null || modules === void 0 ? void 0 : modules.map((module) => new archivist_1.ArchivistWrapper(module));
9
- };
10
- exports.useArchivistModules = useArchivistModules;
11
- //# sourceMappingURL=useArchivistModules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useArchivistModules.js","sourceRoot":"","sources":["../../../src/hooks/useArchivistModules.ts"],"names":[],"mappings":";;;AAAA,sDAAkF;AAElF,6CAAyC;AAElC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC,mCAAuB,CAAC,CAAC,EAAE,CAAC,CAAA;IAClE,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,4BAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAA;AAHY,QAAA,mBAAmB,uBAG/B"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useDivinerModule = void 0;
4
- const diviner_wrapper_1 = require("@xyo-network/diviner-wrapper");
5
- const useModules_1 = require("./useModules");
6
- const useDivinerModule = (filter) => {
7
- const modules = (0, useModules_1.useModules)(filter);
8
- const foundModule = modules === null || modules === void 0 ? void 0 : modules.shift();
9
- return foundModule ? new diviner_wrapper_1.DivinerWrapper(foundModule) : undefined;
10
- };
11
- exports.useDivinerModule = useDivinerModule;
12
- //# sourceMappingURL=useDivinerModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDivinerModule.js","sourceRoot":"","sources":["../../../src/hooks/useDivinerModule.ts"],"names":[],"mappings":";;;AAAA,kEAA6D;AAG7D,6CAAyC;AAElC,MAAM,gBAAgB,GAAG,CAAC,MAAqB,EAAE,EAAE;IACxD,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,MAAM,CAAC,CAAA;IAClC,MAAM,WAAW,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAA;IACpC,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,gCAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAClE,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useDivinerModules = void 0;
4
- const diviner_model_1 = require("@xyo-network/diviner-model");
5
- const diviner_wrapper_1 = require("@xyo-network/diviner-wrapper");
6
- const useModules_1 = require("./useModules");
7
- const useDivinerModules = () => {
8
- const modules = (0, useModules_1.useModules)({ query: [[diviner_model_1.XyoDivinerDivineQuerySchema]] });
9
- return modules === null || modules === void 0 ? void 0 : modules.map((module) => new diviner_wrapper_1.DivinerWrapper(module));
10
- };
11
- exports.useDivinerModules = useDivinerModules;
12
- //# sourceMappingURL=useDivinerModules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDivinerModules.js","sourceRoot":"","sources":["../../../src/hooks/useDivinerModules.ts"],"names":[],"mappings":";;;AAAA,8DAAwE;AACxE,kEAA6D;AAE7D,6CAAyC;AAElC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC,2CAA2B,CAAC,CAAC,EAAE,CAAC,CAAA;IACtE,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,gCAAc,CAAC,MAAM,CAAC,CAAC,CAAA;AAC7D,CAAC,CAAA;AAHY,QAAA,iBAAiB,qBAG7B"}