@xyo-network/react-node 2.60.6 → 2.60.7

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 (72) hide show
  1. package/dist/cjs/components/Node.js +8 -13
  2. package/dist/cjs/components/Node.js.map +1 -1
  3. package/dist/cjs/components/NodeDescriptionBox.js +14 -0
  4. package/dist/cjs/components/NodeDescriptionBox.js.map +1 -0
  5. package/dist/cjs/components/NodeModulesBox.js +14 -0
  6. package/dist/cjs/components/NodeModulesBox.js.map +1 -0
  7. package/dist/cjs/hooks/index.js +4 -0
  8. package/dist/cjs/hooks/index.js.map +1 -1
  9. package/dist/cjs/hooks/useModuleFilterOptions.js +9 -0
  10. package/dist/cjs/hooks/useModuleFilterOptions.js.map +1 -0
  11. package/dist/cjs/hooks/useModuleFromNode.js +17 -11
  12. package/dist/cjs/hooks/useModuleFromNode.js.map +1 -1
  13. package/dist/cjs/hooks/useModulesFromNode.js +17 -16
  14. package/dist/cjs/hooks/useModulesFromNode.js.map +1 -1
  15. package/dist/cjs/hooks/useNode.js +21 -0
  16. package/dist/cjs/hooks/useNode.js.map +1 -0
  17. package/dist/cjs/hooks/useNodeConfigNodeField.js +11 -0
  18. package/dist/cjs/hooks/useNodeConfigNodeField.js.map +1 -0
  19. package/dist/cjs/hooks/useNodeDescription.js +15 -0
  20. package/dist/cjs/hooks/useNodeDescription.js.map +1 -0
  21. package/dist/docs.json +26150 -2154
  22. package/dist/esm/components/Node.js +7 -13
  23. package/dist/esm/components/Node.js.map +1 -1
  24. package/dist/esm/components/NodeDescriptionBox.js +8 -0
  25. package/dist/esm/components/NodeDescriptionBox.js.map +1 -0
  26. package/dist/esm/components/NodeModulesBox.js +8 -0
  27. package/dist/esm/components/NodeModulesBox.js.map +1 -0
  28. package/dist/esm/hooks/index.js +4 -0
  29. package/dist/esm/hooks/index.js.map +1 -1
  30. package/dist/esm/hooks/useModuleFilterOptions.js +5 -0
  31. package/dist/esm/hooks/useModuleFilterOptions.js.map +1 -0
  32. package/dist/esm/hooks/useModuleFromNode.js +15 -10
  33. package/dist/esm/hooks/useModuleFromNode.js.map +1 -1
  34. package/dist/esm/hooks/useModulesFromNode.js +13 -12
  35. package/dist/esm/hooks/useModulesFromNode.js.map +1 -1
  36. package/dist/esm/hooks/useNode.js +15 -0
  37. package/dist/esm/hooks/useNode.js.map +1 -0
  38. package/dist/esm/hooks/useNodeConfigNodeField.js +7 -0
  39. package/dist/esm/hooks/useNodeConfigNodeField.js.map +1 -0
  40. package/dist/esm/hooks/useNodeDescription.js +10 -0
  41. package/dist/esm/hooks/useNodeDescription.js.map +1 -0
  42. package/dist/types/components/Node.d.ts +6 -1
  43. package/dist/types/components/Node.d.ts.map +1 -1
  44. package/dist/types/components/NodeDescriptionBox.d.ts +8 -0
  45. package/dist/types/components/NodeDescriptionBox.d.ts.map +1 -0
  46. package/dist/types/components/NodeModulesBox.d.ts +8 -0
  47. package/dist/types/components/NodeModulesBox.d.ts.map +1 -0
  48. package/dist/types/hooks/index.d.ts +4 -0
  49. package/dist/types/hooks/index.d.ts.map +1 -1
  50. package/dist/types/hooks/useModuleFilterOptions.d.ts +49 -0
  51. package/dist/types/hooks/useModuleFilterOptions.d.ts.map +1 -0
  52. package/dist/types/hooks/useModuleFromNode.d.ts +2 -1
  53. package/dist/types/hooks/useModuleFromNode.d.ts.map +1 -1
  54. package/dist/types/hooks/useModulesFromNode.d.ts.map +1 -1
  55. package/dist/types/hooks/useNode.d.ts +4 -0
  56. package/dist/types/hooks/useNode.d.ts.map +1 -0
  57. package/dist/types/hooks/useNodeConfigNodeField.d.ts +4 -0
  58. package/dist/types/hooks/useNodeConfigNodeField.d.ts.map +1 -0
  59. package/dist/types/hooks/useNodeDescription.d.ts +4 -0
  60. package/dist/types/hooks/useNodeDescription.d.ts.map +1 -0
  61. package/package.json +20 -20
  62. package/src/components/Node.stories.tsx +5 -30
  63. package/src/components/Node.tsx +13 -20
  64. package/src/components/NodeDescriptionBox.tsx +18 -0
  65. package/src/components/NodeModulesBox.tsx +18 -0
  66. package/src/hooks/index.ts +4 -0
  67. package/src/hooks/useModuleFilterOptions.ts +6 -0
  68. package/src/hooks/useModuleFromNode.ts +17 -11
  69. package/src/hooks/useModulesFromNode.ts +13 -12
  70. package/src/hooks/useNode.ts +17 -0
  71. package/src/hooks/useNodeConfigNodeField.ts +10 -0
  72. package/src/hooks/useNodeDescription.ts +13 -0
@@ -0,0 +1,18 @@
1
+ import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
2
+ import { NodeInstance } from '@xyo-network/node-model'
3
+
4
+ import { useNodeDescription } from '../hooks'
5
+
6
+ export interface NodeDescriptionBoxProps extends FlexBoxProps {
7
+ node?: string | NodeInstance
8
+ }
9
+
10
+ export const NodeDescriptionBox: React.FC<NodeDescriptionBoxProps> = ({ node, ...props }) => {
11
+ const [description, error] = useNodeDescription({ node })
12
+
13
+ return (
14
+ <FlexCol {...props}>
15
+ <code color={error ? 'red' : undefined}>{error ? error.message : JSON.stringify(description, null, 2)}</code>
16
+ </FlexCol>
17
+ )
18
+ }
@@ -0,0 +1,18 @@
1
+ import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
2
+ import { NodeInstance } from '@xyo-network/node-model'
3
+
4
+ import { useModulesFromNode } from '../hooks'
5
+
6
+ export interface NodeDescriptionBoxProps extends FlexBoxProps {
7
+ node?: string | NodeInstance
8
+ }
9
+
10
+ export const NodeDescriptionBox: React.FC<NodeDescriptionBoxProps> = ({ node, ...props }) => {
11
+ const [description, error] = useModulesFromNode(undefined, { node })
12
+
13
+ return (
14
+ <FlexCol {...props}>
15
+ <code color={error ? 'red' : undefined}>{error ? error.message : JSON.stringify(description, null, 2)}</code>
16
+ </FlexCol>
17
+ )
18
+ }
@@ -1,4 +1,8 @@
1
1
  export * from './provided'
2
+ export * from './useModuleFilterOptions'
2
3
  export * from './useModuleFromNode'
3
4
  export * from './useModulesFromNode'
5
+ export * from './useNode'
6
+ export * from './useNodeConfigNodeField'
7
+ export * from './useNodeDescription'
4
8
  export * from './useNodeFromNode'
@@ -0,0 +1,6 @@
1
+ import { ModuleFromNodeConfig } from './useModuleFromNode'
2
+
3
+ export const useModuleFilterOptions = (config?: ModuleFromNodeConfig) => {
4
+ const { direction, identity, maxDepth, visibility } = config ?? {}
5
+ return { direction, identity, maxDepth, visibility }
6
+ }
@@ -5,34 +5,40 @@ import { ModuleFilterOptions, ModuleInstance } from '@xyo-network/module-model'
5
5
  import { NodeInstance } from '@xyo-network/node-model'
6
6
  import { useState } from 'react'
7
7
 
8
- import { useProvidedNode } from './provided'
8
+ import { useModuleFilterOptions } from './useModuleFilterOptions'
9
+ import { useNode } from './useNode'
9
10
 
10
11
  export type ModuleFromNodeConfig = ModuleFilterOptions & {
11
12
  logger?: Logger
12
- node?: NodeInstance
13
+ node?: NodeInstance | string
14
+ }
15
+
16
+ export const useModuleFromNodeConfigLogger = (config?: ModuleFromNodeConfig) => {
17
+ return config?.logger
13
18
  }
14
19
 
15
20
  export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNodeConfig): [ModuleInstance | undefined, Error | undefined] => {
16
- const [providedNode] = useProvidedNode()
17
- const { logger, node: paramNode, ...resolveConfig } = config ?? {}
21
+ console.log('useModuleFromNode')
22
+ const [node, nodeError] = useNode(config)
23
+ const logger = useModuleFromNodeConfigLogger(config)
24
+ const filterOptions = useModuleFilterOptions(config)
18
25
  const [result, setResult] = useState<ModuleInstance | undefined>()
19
26
  const [, error] = usePromise(async () => {
20
27
  logger?.debug('useModuleFromNode: resolving')
21
- const activeNode = paramNode ?? providedNode
22
- if (activeNode && nameOrAddress) {
23
- activeNode.on('moduleAttached', ({ module }) => {
28
+ if (node && nameOrAddress) {
29
+ node.on('moduleAttached', ({ module }) => {
24
30
  logger?.debug(`useModuleFromNode: moduleAttached [${module.config.name ?? module.address}]`)
25
31
  if (module.address === nameOrAddress || module.config?.name === nameOrAddress) {
26
32
  setResult(asModuleInstance(module))
27
33
  }
28
34
  })
29
- activeNode.on('moduleDetached', ({ module }) => {
35
+ node.on('moduleDetached', ({ module }) => {
30
36
  logger?.debug(`useModuleFromNode: moduleDetached [${module.config.name ?? module.address}]`)
31
37
  if (module.address === nameOrAddress || module.config?.name === nameOrAddress) {
32
38
  setResult(undefined)
33
39
  }
34
40
  })
35
- const result = await activeNode.resolve(nameOrAddress, resolveConfig)
41
+ const result = await node.resolve(nameOrAddress, filterOptions)
36
42
  logger?.debug(`Result: ${result?.address}`)
37
43
  setResult(result)
38
44
  return result
@@ -40,6 +46,6 @@ export const useModuleFromNode = (nameOrAddress?: string, config?: ModuleFromNod
40
46
  logger?.debug('Result: No Node')
41
47
  return undefined
42
48
  // eslint-disable-next-line react-hooks/exhaustive-deps
43
- }, [paramNode, providedNode, nameOrAddress])
44
- return [result, error]
49
+ }, [node, nameOrAddress])
50
+ return [result, nodeError ?? error]
45
51
  }
@@ -3,34 +3,35 @@ import { ModuleFilter } from '@xyo-network/module'
3
3
  import { ModuleInstance } from '@xyo-network/module-model'
4
4
  import { useState } from 'react'
5
5
 
6
- import { useProvidedNode } from './provided'
6
+ import { useModuleFilterOptions } from './useModuleFilterOptions'
7
7
  import { ModuleFromNodeConfig } from './useModuleFromNode'
8
+ import { useNode } from './useNode'
8
9
 
9
10
  export const useModulesFromNode = (filter?: ModuleFilter, config?: ModuleFromNodeConfig): [ModuleInstance[] | undefined, Error | undefined] => {
10
- const [providedNode] = useProvidedNode()
11
- const { logger, node: paramNode, ...resolveConfig } = config ?? {}
11
+ const [node, nodeError] = useNode(config)
12
+ const logger = config?.logger
13
+ const filterOptions = useModuleFilterOptions()
12
14
  const [result, setResult] = useState<ModuleInstance[] | undefined>()
13
15
  const [, error] = usePromise(async () => {
14
16
  logger?.debug('useModuleFromNode: resolving')
15
- const activeNode = paramNode ?? providedNode
16
- if (activeNode) {
17
- activeNode.on('moduleAttached', async ({ module }) => {
17
+ if (node) {
18
+ node.on('moduleAttached', async ({ module }) => {
18
19
  logger?.debug(`useModuleFromNode: moduleAttached [${module.config.name ?? module.address}]`)
19
- const moduleInstances = await activeNode.resolve(filter, resolveConfig)
20
+ const moduleInstances = await node.resolve(filter, filterOptions)
20
21
  setResult(moduleInstances)
21
22
  })
22
- activeNode.on('moduleDetached', async ({ module }) => {
23
+ node.on('moduleDetached', async ({ module }) => {
23
24
  logger?.debug(`useModuleFromNode: moduleDetached [${module.config.name ?? module.address}]`)
24
- const moduleInstances = await activeNode.resolve(filter, resolveConfig)
25
+ const moduleInstances = await node.resolve(filter, filterOptions)
25
26
  setResult(moduleInstances)
26
27
  })
27
- const moduleInstances = await activeNode.resolve(filter, resolveConfig)
28
+ const moduleInstances = await node.resolve(filter, filterOptions)
28
29
  setResult(moduleInstances)
29
30
  setResult(moduleInstances)
30
31
  return moduleInstances
31
32
  }
32
33
  console.log('Result: No Node')
33
34
  return undefined
34
- }, [paramNode, providedNode, filter])
35
- return [result, error]
35
+ }, [node, filter])
36
+ return [result, nodeError ?? error]
36
37
  }
@@ -0,0 +1,17 @@
1
+ import { usePromise } from '@xylabs/react-promise'
2
+ import { asNodeInstance, NodeInstance } from '@xyo-network/node-model'
3
+
4
+ import { useProvidedNode } from './provided'
5
+ import { ModuleFromNodeConfig } from './useModuleFromNode'
6
+ import { useNodeConfigNodeField } from './useNodeConfigNodeField'
7
+
8
+ export const useNode = (config?: ModuleFromNodeConfig | undefined): [NodeInstance | undefined, Error | undefined] => {
9
+ const [nodeAddress, nodeInstance] = useNodeConfigNodeField(config)
10
+ const [providedNode] = useProvidedNode()
11
+ const [nodeAddressNode, error] = usePromise(async () => {
12
+ if (providedNode && nodeAddress) {
13
+ return asNodeInstance(await providedNode.resolve(nodeAddress), 'Module is not a node')
14
+ }
15
+ }, [providedNode, nodeAddress])
16
+ return [nodeAddressNode ?? nodeInstance ?? providedNode ?? undefined, error]
17
+ }
@@ -0,0 +1,10 @@
1
+ import { NodeInstance } from '@xyo-network/node-model'
2
+ import { useMemo } from 'react'
3
+
4
+ import { ModuleFromNodeConfig } from './useModuleFromNode'
5
+
6
+ export const useNodeConfigNodeField = (config?: ModuleFromNodeConfig | undefined): [string | undefined, NodeInstance | undefined] => {
7
+ const nodeAddress = useMemo(() => (typeof config?.node === 'string' ? config?.node : undefined), [config?.node])
8
+ const nodeInstance = useMemo(() => (typeof config?.node === 'object' ? config?.node : undefined), [config?.node])
9
+ return [nodeAddress, nodeInstance]
10
+ }
@@ -0,0 +1,13 @@
1
+ import { usePromise } from '@xylabs/react-promise'
2
+ import { ModuleDescription } from '@xyo-network/module-model'
3
+
4
+ import { ModuleFromNodeConfig } from './useModuleFromNode'
5
+ import { useNode } from './useNode'
6
+
7
+ export const useNodeDescription = (config?: ModuleFromNodeConfig | undefined): [ModuleDescription | undefined, Error | undefined] => {
8
+ const [activeNode, nodeError] = useNode(config)
9
+ const [description, error] = usePromise(async () => {
10
+ return await activeNode?.describe()
11
+ }, [activeNode])
12
+ return [description, nodeError ?? error]
13
+ }