@xyo-network/react-node-renderer 2.72.1 → 2.72.3
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/browser/components/cytoscape-extensions/WithExtensions.d.cts.map +1 -1
- package/dist/browser/components/cytoscape-extensions/WithExtensions.d.mts.map +1 -1
- package/dist/browser/components/cytoscape-extensions/WithExtensions.d.ts.map +1 -1
- package/dist/browser/components/lib/RelationalGraphProps.d.cts +1 -1
- package/dist/browser/components/lib/RelationalGraphProps.d.cts.map +1 -1
- package/dist/browser/components/lib/RelationalGraphProps.d.mts +1 -1
- package/dist/browser/components/lib/RelationalGraphProps.d.mts.map +1 -1
- package/dist/browser/components/lib/RelationalGraphProps.d.ts +1 -1
- package/dist/browser/components/lib/RelationalGraphProps.d.ts.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.cts +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.cts.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.mts +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.mts.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.ts +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.ts.map +1 -1
- package/dist/browser/components/relational/graph/Graph.d.cts.map +1 -1
- package/dist/browser/components/relational/graph/Graph.d.mts.map +1 -1
- package/dist/browser/components/relational/graph/Graph.d.ts.map +1 -1
- package/dist/browser/components/relational/graph/ProvidedNodeRenderer.d.cts +1 -1
- package/dist/browser/components/relational/graph/ProvidedNodeRenderer.d.cts.map +1 -1
- package/dist/browser/components/relational/graph/ProvidedNodeRenderer.d.mts +1 -1
- package/dist/browser/components/relational/graph/ProvidedNodeRenderer.d.mts.map +1 -1
- package/dist/browser/components/relational/graph/ProvidedNodeRenderer.d.ts +1 -1
- package/dist/browser/components/relational/graph/ProvidedNodeRenderer.d.ts.map +1 -1
- package/dist/browser/contexts/CytoscapeInstance/Provider.d.cts +1 -1
- package/dist/browser/contexts/CytoscapeInstance/Provider.d.cts.map +1 -1
- package/dist/browser/contexts/CytoscapeInstance/Provider.d.mts +1 -1
- package/dist/browser/contexts/CytoscapeInstance/Provider.d.mts.map +1 -1
- package/dist/browser/contexts/CytoscapeInstance/Provider.d.ts +1 -1
- package/dist/browser/contexts/CytoscapeInstance/Provider.d.ts.map +1 -1
- package/dist/browser/contexts/CytoscapeInstance/State.d.cts +2 -2
- package/dist/browser/contexts/CytoscapeInstance/State.d.cts.map +1 -1
- package/dist/browser/contexts/CytoscapeInstance/State.d.mts +2 -2
- package/dist/browser/contexts/CytoscapeInstance/State.d.mts.map +1 -1
- package/dist/browser/contexts/CytoscapeInstance/State.d.ts +2 -2
- package/dist/browser/contexts/CytoscapeInstance/State.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useHoveredNode.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useHoveredNode.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useHoveredNode.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useRenderNewElements.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useRenderNewElements.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useRenderNewElements.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useSelectedElement.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useSelectedElement.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/elements/useSelectedElement.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/useModuleDetails.d.cts +1 -0
- package/dist/browser/hooks/cytoscape/useModuleDetails.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/useModuleDetails.d.mts +1 -0
- package/dist/browser/hooks/cytoscape/useModuleDetails.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/useModuleDetails.d.ts +1 -0
- package/dist/browser/hooks/cytoscape/useModuleDetails.d.ts.map +1 -1
- package/dist/browser/index.cjs +29 -29
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +34 -34
- package/dist/browser/index.js.map +1 -1
- package/dist/node/components/cytoscape-extensions/WithExtensions.d.cts.map +1 -1
- package/dist/node/components/cytoscape-extensions/WithExtensions.d.mts.map +1 -1
- package/dist/node/components/cytoscape-extensions/WithExtensions.d.ts.map +1 -1
- package/dist/node/components/lib/RelationalGraphProps.d.cts +1 -1
- package/dist/node/components/lib/RelationalGraphProps.d.cts.map +1 -1
- package/dist/node/components/lib/RelationalGraphProps.d.mts +1 -1
- package/dist/node/components/lib/RelationalGraphProps.d.mts.map +1 -1
- package/dist/node/components/lib/RelationalGraphProps.d.ts +1 -1
- package/dist/node/components/lib/RelationalGraphProps.d.ts.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.cts +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.cts.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.mts +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.mts.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.ts +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.ts.map +1 -1
- package/dist/node/components/relational/graph/Graph.d.cts.map +1 -1
- package/dist/node/components/relational/graph/Graph.d.mts.map +1 -1
- package/dist/node/components/relational/graph/Graph.d.ts.map +1 -1
- package/dist/node/components/relational/graph/ProvidedNodeRenderer.d.cts +1 -1
- package/dist/node/components/relational/graph/ProvidedNodeRenderer.d.cts.map +1 -1
- package/dist/node/components/relational/graph/ProvidedNodeRenderer.d.mts +1 -1
- package/dist/node/components/relational/graph/ProvidedNodeRenderer.d.mts.map +1 -1
- package/dist/node/components/relational/graph/ProvidedNodeRenderer.d.ts +1 -1
- package/dist/node/components/relational/graph/ProvidedNodeRenderer.d.ts.map +1 -1
- package/dist/node/contexts/CytoscapeInstance/Provider.d.cts +1 -1
- package/dist/node/contexts/CytoscapeInstance/Provider.d.cts.map +1 -1
- package/dist/node/contexts/CytoscapeInstance/Provider.d.mts +1 -1
- package/dist/node/contexts/CytoscapeInstance/Provider.d.mts.map +1 -1
- package/dist/node/contexts/CytoscapeInstance/Provider.d.ts +1 -1
- package/dist/node/contexts/CytoscapeInstance/Provider.d.ts.map +1 -1
- package/dist/node/contexts/CytoscapeInstance/State.d.cts +2 -2
- package/dist/node/contexts/CytoscapeInstance/State.d.cts.map +1 -1
- package/dist/node/contexts/CytoscapeInstance/State.d.mts +2 -2
- package/dist/node/contexts/CytoscapeInstance/State.d.mts.map +1 -1
- package/dist/node/contexts/CytoscapeInstance/State.d.ts +2 -2
- package/dist/node/contexts/CytoscapeInstance/State.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useHoveredNode.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useHoveredNode.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useHoveredNode.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useRenderNewElements.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useRenderNewElements.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useRenderNewElements.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useSelectedElement.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useSelectedElement.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/elements/useSelectedElement.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/useModuleDetails.d.cts +1 -0
- package/dist/node/hooks/cytoscape/useModuleDetails.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/useModuleDetails.d.mts +1 -0
- package/dist/node/hooks/cytoscape/useModuleDetails.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/useModuleDetails.d.ts +1 -0
- package/dist/node/hooks/cytoscape/useModuleDetails.d.ts.map +1 -1
- package/dist/node/index.cjs +29 -29
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +34 -34
- package/dist/node/index.js.map +1 -1
- package/package.json +26 -28
- package/src/Cytoscape/CytoscapeElements.ts +1 -1
- package/src/components/cytoscape-extensions/WithExtensions.tsx +0 -2
- package/src/components/lib/RelationalGraphProps.ts +1 -1
- package/src/components/module/graph/GraphFlexBox.tsx +1 -1
- package/src/components/relational/graph/Graph.tsx +9 -14
- package/src/components/relational/graph/GraphEvents.stories.tsx +4 -3
- package/src/components/relational/graph/ProvidedNodeRenderer.tsx +1 -1
- package/src/contexts/CytoscapeInstance/Provider.tsx +2 -2
- package/src/contexts/CytoscapeInstance/State.ts +2 -2
- package/src/hooks/cytoscape/elements/useHoveredNode.tsx +3 -2
- package/src/hooks/cytoscape/elements/useRenderNewElements.tsx +3 -2
- package/src/hooks/cytoscape/elements/useSelectedElement.tsx +4 -2
- package/src/hooks/cytoscape/useModuleDetails.tsx +11 -8
- package/src/components/relational/graph/GraphFCose.stories.tsx +0 -173
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Button, ButtonGroup, useTheme } from '@mui/material'
|
|
2
2
|
import { FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'
|
|
3
|
-
import { useShareForwardedRef } from '@xyo-network/react-shared'
|
|
4
3
|
import cytoscape, { Core } from 'cytoscape'
|
|
5
4
|
import cola from 'cytoscape-cola'
|
|
6
5
|
import coseBilkentLayout from 'cytoscape-cose-bilkent'
|
|
7
6
|
import dagre from 'cytoscape-dagre'
|
|
8
7
|
import eulerLayout from 'cytoscape-euler'
|
|
9
|
-
import
|
|
10
|
-
import { forwardRef, useEffect, useState } from 'react'
|
|
8
|
+
import { forwardRef, useEffect, useRef, useState } from 'react'
|
|
11
9
|
|
|
12
10
|
import { useCytoscapeInstance } from '../../../contexts'
|
|
13
11
|
import { NodeRelationalGraphProps } from '../../lib'
|
|
@@ -30,10 +28,6 @@ const loadLayout = (layout = 'cola') => {
|
|
|
30
28
|
cytoscape.use(coseBilkentLayout)
|
|
31
29
|
break
|
|
32
30
|
}
|
|
33
|
-
case 'fcose': {
|
|
34
|
-
cytoscape.use(fcose)
|
|
35
|
-
break
|
|
36
|
-
}
|
|
37
31
|
case 'cola': {
|
|
38
32
|
cytoscape.use(cola)
|
|
39
33
|
break
|
|
@@ -46,7 +40,7 @@ export const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelatio
|
|
|
46
40
|
const theme = useTheme()
|
|
47
41
|
const [cy, setCy] = useState<Core>()
|
|
48
42
|
const { setCy: setCyContext } = useCytoscapeInstance()
|
|
49
|
-
const
|
|
43
|
+
const cytoscapeRef = useRef<HTMLDivElement>()
|
|
50
44
|
|
|
51
45
|
const handleReset = () => {
|
|
52
46
|
cy?.reset()
|
|
@@ -55,10 +49,11 @@ export const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelatio
|
|
|
55
49
|
|
|
56
50
|
useEffect(() => {
|
|
57
51
|
let newCy: Core | undefined
|
|
58
|
-
|
|
52
|
+
const container = cytoscapeRef.current
|
|
53
|
+
if (container) {
|
|
59
54
|
loadLayout(layout)
|
|
60
55
|
newCy = cytoscape({
|
|
61
|
-
container
|
|
56
|
+
container,
|
|
62
57
|
...options,
|
|
63
58
|
})
|
|
64
59
|
applyLayout(newCy, layout ?? 'euler', layoutOptions)
|
|
@@ -68,14 +63,14 @@ export const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelatio
|
|
|
68
63
|
newCy?.destroy()
|
|
69
64
|
setCy(undefined)
|
|
70
65
|
}
|
|
71
|
-
}, [options,
|
|
66
|
+
}, [options, cytoscapeRef, layoutOptions, layout])
|
|
72
67
|
|
|
73
68
|
useEffect(() => {
|
|
74
|
-
setCyContext?.(cy)
|
|
69
|
+
setCyContext?.(cy ? new WeakRef(cy) : undefined)
|
|
75
70
|
}, [cy, setCyContext])
|
|
76
71
|
|
|
77
72
|
return (
|
|
78
|
-
<FlexCol id="relational-graph-wrapper" {...props}>
|
|
73
|
+
<FlexCol id="relational-graph-wrapper" ref={ref} {...props}>
|
|
79
74
|
<FlexRow justifyContent="start" width="100%">
|
|
80
75
|
{actions === null ?
|
|
81
76
|
null
|
|
@@ -105,7 +100,7 @@ export const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelatio
|
|
|
105
100
|
border={showDetails ? `1px solid ${theme.palette.divider}` : undefined}
|
|
106
101
|
>
|
|
107
102
|
{/* Cytoscape Element */}
|
|
108
|
-
<FlexCol alignItems="stretch" position="absolute" width="100%" height="100%" ref={
|
|
103
|
+
<FlexCol alignItems="stretch" position="absolute" width="100%" height="100%" ref={cytoscapeRef} />
|
|
109
104
|
{children}
|
|
110
105
|
</FlexCol>
|
|
111
106
|
</FlexGrowRow>
|
|
@@ -61,12 +61,13 @@ const Template: StoryFn<typeof NodeRelationalGraphFlexBox> = (props) => {
|
|
|
61
61
|
const element = event.target[0]
|
|
62
62
|
console.log(element.data().address)
|
|
63
63
|
}
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
const cyInstance = cy?.deref()
|
|
65
|
+
if (cyInstance) {
|
|
66
|
+
cyInstance.on('select', listener)
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
return () => {
|
|
69
|
-
|
|
70
|
+
cyInstance?.off('select', listener)
|
|
70
71
|
}
|
|
71
72
|
}, [cy])
|
|
72
73
|
return <NodeRelationalGraphFlexBox options={options} {...props} />
|
|
@@ -8,7 +8,7 @@ import { NodeRelationalGraphFlexBox } from './Graph'
|
|
|
8
8
|
|
|
9
9
|
export interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {
|
|
10
10
|
account?: AccountInstance
|
|
11
|
-
layout?: 'dagre' | 'euler' | '
|
|
11
|
+
layout?: 'dagre' | 'euler' | 'cose-bilkent' | 'cola'
|
|
12
12
|
layoutOptions?: object
|
|
13
13
|
node?: NodeInstance
|
|
14
14
|
}
|
|
@@ -5,11 +5,11 @@ import { useEffect, useState } from 'react'
|
|
|
5
5
|
import { CytoscapeInstanceContext } from './Context'
|
|
6
6
|
|
|
7
7
|
export interface CytoscapeInstanceProviderProps extends WithChildren {
|
|
8
|
-
defaultInstance?: Core
|
|
8
|
+
defaultInstance?: WeakRef<Core>
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {
|
|
12
|
-
const [cy, setCy] = useState<Core | undefined>(defaultInstance)
|
|
12
|
+
const [cy, setCy] = useState<WeakRef<Core> | undefined>(defaultInstance)
|
|
13
13
|
useEffect(() => {
|
|
14
14
|
setCy(defaultInstance)
|
|
15
15
|
}, [defaultInstance])
|
|
@@ -3,6 +3,6 @@ import { Core } from 'cytoscape'
|
|
|
3
3
|
import { Dispatch, SetStateAction } from 'react'
|
|
4
4
|
|
|
5
5
|
export interface CytoscapeInstanceState extends ContextExState {
|
|
6
|
-
cy?: Core
|
|
7
|
-
setCy?: Dispatch<SetStateAction<Core | undefined>>
|
|
6
|
+
cy?: WeakRef<Core>
|
|
7
|
+
setCy?: Dispatch<SetStateAction<WeakRef<Core> | undefined>>
|
|
8
8
|
}
|
|
@@ -21,9 +21,10 @@ export const useHoveredNode = (renderedElements?: NodeCollection): [NodeSingular
|
|
|
21
21
|
}, [nodeListener, renderedElements])
|
|
22
22
|
|
|
23
23
|
useEffect(() => {
|
|
24
|
-
cy?.
|
|
24
|
+
const cyInstance = cy?.deref()
|
|
25
|
+
cyInstance?.ready(() => {
|
|
25
26
|
// eslint-disable-next-line unicorn/no-array-for-each
|
|
26
|
-
|
|
27
|
+
cyInstance.nodes().forEach(nodeListener)
|
|
27
28
|
})
|
|
28
29
|
}, [cy, nodeListener])
|
|
29
30
|
|
|
@@ -9,10 +9,11 @@ export const useRenderNewElements = (newElements: ElementDefinition[] = [], hide
|
|
|
9
9
|
const [renderedElements, setRenderedElements] = useState<CollectionReturnValue>()
|
|
10
10
|
|
|
11
11
|
useEffect(() => {
|
|
12
|
+
const cyInstance = cy?.deref()
|
|
12
13
|
if (newElements.length > 1) {
|
|
13
|
-
const renderedElements =
|
|
14
|
+
const renderedElements = cyInstance?.add(newElements)
|
|
14
15
|
setRenderedElements(renderedElements)
|
|
15
|
-
|
|
16
|
+
cyInstance?.layout(ColaLayout).run()
|
|
16
17
|
}
|
|
17
18
|
}, [cy, hideLabels, newElements])
|
|
18
19
|
|
|
@@ -8,13 +8,15 @@ export const useSelectedElement = () => {
|
|
|
8
8
|
const { cy } = useCytoscapeInstance(true)
|
|
9
9
|
|
|
10
10
|
const updateStyles = (element: NodeSingular) => {
|
|
11
|
-
const
|
|
11
|
+
const cyInstance = cy?.deref()
|
|
12
|
+
const nodes = cyInstance?.nodes()
|
|
12
13
|
nodes?.toggleClass('activeNode', false)
|
|
13
14
|
element.toggleClass('activeNode', true)
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
const toggleSelectedElement = (address?: string) => {
|
|
17
|
-
const
|
|
18
|
+
const cyInstance = cy?.deref()
|
|
19
|
+
const selectedNode = cyInstance?.nodes(`[id="${address}"]`)?.[0]
|
|
18
20
|
if (selectedNode) {
|
|
19
21
|
setSelectedElement(selectedNode)
|
|
20
22
|
updateStyles(selectedNode)
|
|
@@ -18,18 +18,20 @@ export const useModuleDetails = (rootModule?: ModuleInstance | null, onFoundModu
|
|
|
18
18
|
|
|
19
19
|
useEffect(() => {
|
|
20
20
|
const resizeObserver = new ResizeObserver(() => {
|
|
21
|
+
const cyInstance = cy?.deref()
|
|
21
22
|
if (moduleAddress === null) {
|
|
22
23
|
// cytoscape tries to center prematurely without it :(
|
|
23
|
-
setTimeout(() =>
|
|
24
|
+
setTimeout(() => cyInstance?.center(), 100)
|
|
24
25
|
} else if (foundModule && cy) {
|
|
25
|
-
const node =
|
|
26
|
+
const node = cyInstance?.nodes(`[id="${moduleAddress}"]`)?.[0]
|
|
26
27
|
// cy.pan(newPan)
|
|
27
28
|
// cytoscape tries to center prematurely without it :(
|
|
28
|
-
setTimeout(() =>
|
|
29
|
+
setTimeout(() => cyInstance?.center(node), 100)
|
|
29
30
|
}
|
|
30
31
|
})
|
|
31
32
|
|
|
32
|
-
const
|
|
33
|
+
const cyInstance = cy?.deref()
|
|
34
|
+
const container = cyInstance?.container()
|
|
33
35
|
if (container) {
|
|
34
36
|
resizeObserver.observe(container)
|
|
35
37
|
}
|
|
@@ -46,10 +48,11 @@ export const useModuleDetails = (rootModule?: ModuleInstance | null, onFoundModu
|
|
|
46
48
|
}, [cy, moduleAddress, foundModule, onFoundModule])
|
|
47
49
|
|
|
48
50
|
const onModuleDetails = (address?: string | null) => {
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
51
|
+
const cyInstance = cy?.deref()
|
|
52
|
+
const moduleNode = cyInstance?.nodes(`[id="${address}"]`)
|
|
53
|
+
const rootModuleNode = cyInstance?.nodes(`[id="${rootModule?.address}"]`)
|
|
54
|
+
const foundModuleNode = cyInstance?.nodes(`[id="${foundModule?.address}"]`)
|
|
55
|
+
const notModuleNode = cyInstance?.nodes(`[id != "${address}"]`)
|
|
53
56
|
|
|
54
57
|
if (address) {
|
|
55
58
|
// address was passed so we set the node to active styles
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { Button, ButtonGroup } from '@mui/material'
|
|
2
|
-
import { Decorator, Meta, StoryFn } from '@storybook/react'
|
|
3
|
-
import { useAsyncEffect } from '@xylabs/react-async-effect'
|
|
4
|
-
import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist'
|
|
5
|
-
import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/http-bridge'
|
|
6
|
-
import { IdWitness, IdWitnessConfigSchema } from '@xyo-network/id-plugin'
|
|
7
|
-
import { MemoryNode } from '@xyo-network/node-memory'
|
|
8
|
-
import { NodeConfigSchema } from '@xyo-network/node-model'
|
|
9
|
-
import { NodeProvider, useNodeFromNode, useProvidedNode } from '@xyo-network/react-node'
|
|
10
|
-
import { DefaultSeedPhrase } from '@xyo-network/react-storybook'
|
|
11
|
-
import { useWallet, WalletProvider } from '@xyo-network/react-wallet'
|
|
12
|
-
import { MemorySentinel, SentinelConfigSchema } from '@xyo-network/sentinel'
|
|
13
|
-
import { useState } from 'react'
|
|
14
|
-
|
|
15
|
-
import { CytoscapeInstanceProvider } from '../../../contexts'
|
|
16
|
-
import { useCytoscapeElements, useCytoscapeOptions } from '../../../hooks'
|
|
17
|
-
import { NodeRelationalGraphFlexBox } from './Graph'
|
|
18
|
-
import { ProvidedNodeRenderer } from './ProvidedNodeRenderer'
|
|
19
|
-
import { options } from './story'
|
|
20
|
-
import { WithExtensions } from '../../cytoscape-extensions'
|
|
21
|
-
|
|
22
|
-
const nodeUrl = 'http://localhost:8080/node'
|
|
23
|
-
|
|
24
|
-
const MemoryNodeDecorator: Decorator = (Story, args) => {
|
|
25
|
-
const [node, setNode] = useState<MemoryNode>()
|
|
26
|
-
|
|
27
|
-
useAsyncEffect(
|
|
28
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
-
async () => {
|
|
30
|
-
try {
|
|
31
|
-
const node = await MemoryNode.create({ config: { name: 'GlobalNode', schema: NodeConfigSchema } })
|
|
32
|
-
const node1 = await MemoryNode.create({ config: { name: 'ChildNode', schema: NodeConfigSchema } })
|
|
33
|
-
const bridge = await HttpBridge.create({
|
|
34
|
-
config: { name: 'Bridge', nodeUrl, schema: HttpBridgeConfigSchema, security: { allowAnonymous: true } },
|
|
35
|
-
})
|
|
36
|
-
await node.register(bridge)
|
|
37
|
-
await node.attach(bridge.address, true)
|
|
38
|
-
|
|
39
|
-
const archivist = await MemoryArchivist.create({ config: { name: 'RootStorageArchivist', schema: MemoryArchivistConfigSchema } })
|
|
40
|
-
await node.register(archivist)
|
|
41
|
-
await node.attach(archivist.address, true)
|
|
42
|
-
|
|
43
|
-
const sentinel = await MemorySentinel.create({
|
|
44
|
-
config: { name: 'MemorySentinel', schema: SentinelConfigSchema, synchronous: true, tasks: [] },
|
|
45
|
-
})
|
|
46
|
-
await node.register(sentinel)
|
|
47
|
-
await node.attach(sentinel.address, true)
|
|
48
|
-
|
|
49
|
-
const archivist1 = await MemoryArchivist.create({ config: { name: 'RootStorageArchivist1', schema: MemoryArchivistConfigSchema } })
|
|
50
|
-
await node1.register(archivist1)
|
|
51
|
-
await node1.attach(archivist1.address, true)
|
|
52
|
-
|
|
53
|
-
await node.register(node1)
|
|
54
|
-
await node.attach(node1.address, true)
|
|
55
|
-
|
|
56
|
-
setNode(node)
|
|
57
|
-
} catch (e) {
|
|
58
|
-
console.error('Error Creating MemoryNode', e)
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
[],
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
const [wallet] = useWallet({ mnemonic: DefaultSeedPhrase })
|
|
65
|
-
|
|
66
|
-
return (
|
|
67
|
-
<WalletProvider rootWallet={wallet}>
|
|
68
|
-
<NodeProvider node={node}>
|
|
69
|
-
<CytoscapeInstanceProvider>
|
|
70
|
-
<Story {...args} />
|
|
71
|
-
</CytoscapeInstanceProvider>
|
|
72
|
-
</NodeProvider>
|
|
73
|
-
</WalletProvider>
|
|
74
|
-
)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// eslint-disable-next-line import/no-default-export
|
|
78
|
-
export default {
|
|
79
|
-
component: NodeRelationalGraphFlexBox,
|
|
80
|
-
title: 'node/renderer/fcose/NodeRelationalGraph',
|
|
81
|
-
} as Meta
|
|
82
|
-
|
|
83
|
-
const Template: StoryFn<typeof NodeRelationalGraphFlexBox> = (props) => <NodeRelationalGraphFlexBox layout="fcose" {...props} />
|
|
84
|
-
|
|
85
|
-
const TemplateDescribe: StoryFn<typeof NodeRelationalGraphFlexBox> = (props) => {
|
|
86
|
-
const [node] = useProvidedNode()
|
|
87
|
-
const elements = useCytoscapeElements(node)
|
|
88
|
-
const options = useCytoscapeOptions(elements)
|
|
89
|
-
return <NodeRelationalGraphFlexBox layout="fcose" options={options} {...props} />
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const TemplateCustomAddress: StoryFn<typeof NodeRelationalGraphFlexBox> = (props) => {
|
|
93
|
-
const [node] = useNodeFromNode('ChildNode')
|
|
94
|
-
const elements = useCytoscapeElements(node)
|
|
95
|
-
const options = useCytoscapeOptions(elements)
|
|
96
|
-
return <NodeRelationalGraphFlexBox layout="fcose" options={options} {...props} />
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const TemplateProvidedNodeRenderer: StoryFn<typeof ProvidedNodeRenderer> = (props) => <ProvidedNodeRenderer layout="fcose" {...props} />
|
|
100
|
-
|
|
101
|
-
const TemplateAttachDetach: StoryFn<typeof NodeRelationalGraphFlexBox> = (props) => {
|
|
102
|
-
const [node] = useNodeFromNode('ChildNode')
|
|
103
|
-
const elements = useCytoscapeElements(node)
|
|
104
|
-
const options = useCytoscapeOptions(elements)
|
|
105
|
-
const [idWitness, setIdWitness] = useState<IdWitness>()
|
|
106
|
-
|
|
107
|
-
useAsyncEffect(
|
|
108
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
109
|
-
async () => {
|
|
110
|
-
const witnessModule = await IdWitness.create({ config: { name: 'IdWitness', salt: 'test', schema: IdWitnessConfigSchema } })
|
|
111
|
-
setIdWitness(witnessModule)
|
|
112
|
-
},
|
|
113
|
-
[],
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
const handleAddWitness = async () => {
|
|
117
|
-
if (node && idWitness) {
|
|
118
|
-
const memoryNode = node as MemoryNode
|
|
119
|
-
await memoryNode.register(idWitness)
|
|
120
|
-
await memoryNode.attach(idWitness.address, true)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const handleRemoveWitness = async () => {
|
|
125
|
-
if (node && idWitness) {
|
|
126
|
-
const memoryNode = node as MemoryNode
|
|
127
|
-
if (memoryNode.registered().includes(idWitness.address)) {
|
|
128
|
-
await memoryNode.unregister(idWitness)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return (
|
|
134
|
-
<>
|
|
135
|
-
<ButtonGroup>
|
|
136
|
-
<Button onClick={handleAddWitness}>Add Witness</Button>
|
|
137
|
-
<Button onClick={handleRemoveWitness}>Remove Witness</Button>
|
|
138
|
-
</ButtonGroup>
|
|
139
|
-
<WithExtensions>
|
|
140
|
-
<NodeRelationalGraphFlexBox layout="fcose" options={options} {...props} />
|
|
141
|
-
</WithExtensions>
|
|
142
|
-
</>
|
|
143
|
-
)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const defaultProps = {
|
|
147
|
-
height: 'calc(100vh - 20px)',
|
|
148
|
-
width: '100%',
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const Default = Template.bind({})
|
|
152
|
-
Default.args = {}
|
|
153
|
-
|
|
154
|
-
const WithData = Template.bind({})
|
|
155
|
-
WithData.args = { options, ...defaultProps }
|
|
156
|
-
|
|
157
|
-
const WithDescribe = TemplateDescribe.bind({})
|
|
158
|
-
WithDescribe.args = { ...defaultProps }
|
|
159
|
-
WithDescribe.decorators = [MemoryNodeDecorator]
|
|
160
|
-
|
|
161
|
-
const WithCustomAddress = TemplateCustomAddress.bind({})
|
|
162
|
-
WithCustomAddress.args = { ...defaultProps }
|
|
163
|
-
WithCustomAddress.decorators = [MemoryNodeDecorator]
|
|
164
|
-
|
|
165
|
-
const WithAttachDetach = TemplateAttachDetach.bind({})
|
|
166
|
-
WithAttachDetach.args = { ...defaultProps }
|
|
167
|
-
WithAttachDetach.decorators = [MemoryNodeDecorator]
|
|
168
|
-
|
|
169
|
-
const WithProvidedNodeRenderer = TemplateProvidedNodeRenderer.bind({})
|
|
170
|
-
WithProvidedNodeRenderer.args = { ...defaultProps }
|
|
171
|
-
WithProvidedNodeRenderer.decorators = [MemoryNodeDecorator]
|
|
172
|
-
|
|
173
|
-
export { Default, WithAttachDetach, WithCustomAddress, WithData, WithDescribe, WithProvidedNodeRenderer }
|