sample-ui-component-library 0.0.44-dev → 0.0.46-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/BehavioralGraphBuilder/BehavioralGraphBuilder.jsx +47 -40
- package/src/stories/BehavioralGraphBuilder.stories.js +9 -0
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState, useRef, useImperativeHandle, forwardRef, useMemo, useCallback } from "react";
|
|
2
|
-
import { Canvas, Node, Edge
|
|
2
|
+
import { Canvas, Node, Edge } from 'reaflow';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
|
|
5
5
|
import { designToNodes } from "./helper";
|
|
@@ -11,7 +11,7 @@ import "./BehavioralGraphBuilder.scss";
|
|
|
11
11
|
*
|
|
12
12
|
* @return {JSX}
|
|
13
13
|
*/
|
|
14
|
-
export const BehavioralGraphBuilder = forwardRef(({connectBehaviors, deleteTransition, deleteBehavior}, ref) => {
|
|
14
|
+
export const BehavioralGraphBuilder = forwardRef(({connectBehaviors, deleteTransition, deleteBehavior, selectBehavior}, ref) => {
|
|
15
15
|
const canvasRef = useRef();
|
|
16
16
|
|
|
17
17
|
// Resizer to set canvas size to match container
|
|
@@ -28,15 +28,12 @@ export const BehavioralGraphBuilder = forwardRef(({connectBehaviors, deleteTrans
|
|
|
28
28
|
return () => observer.disconnect();
|
|
29
29
|
}, []);
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
// States
|
|
32
32
|
const [edges, setEdges] = useState([]);
|
|
33
33
|
const [nodes, setNodes] = useState([]);
|
|
34
34
|
const [selections, setSelections] = useState([]);
|
|
35
|
-
'1'
|
|
36
|
-
const onNodeLink =(_event, from, to) => {
|
|
37
|
-
connectBehaviors(from, to);
|
|
38
|
-
}
|
|
39
35
|
|
|
36
|
+
// API Methods and Imperative Handle
|
|
40
37
|
const updateEngine = useCallback((engine) => {
|
|
41
38
|
if (engine) {
|
|
42
39
|
const { nodes, edges } = designToNodes(engine);
|
|
@@ -53,49 +50,57 @@ export const BehavioralGraphBuilder = forwardRef(({connectBehaviors, deleteTrans
|
|
|
53
50
|
|
|
54
51
|
useImperativeHandle(ref, () => api, [api]);
|
|
55
52
|
|
|
53
|
+
|
|
54
|
+
// Callbacks
|
|
56
55
|
const handleWheel = useCallback((e) => {
|
|
57
|
-
|
|
58
|
-
canvasRef.current.zoomIn()
|
|
59
|
-
} else {
|
|
60
|
-
canvasRef.current.zoomOut();
|
|
61
|
-
}
|
|
56
|
+
(e.deltaY < 0)?canvasRef.current.zoomIn():canvasRef.current.zoomOut();
|
|
62
57
|
}, [canvasRef]);
|
|
63
58
|
|
|
59
|
+
const nodeClick = useCallback((e, node) => {
|
|
60
|
+
setSelections([node.id]);
|
|
61
|
+
selectBehavior(node.id);
|
|
62
|
+
}, [selectBehavior]);
|
|
63
|
+
|
|
64
|
+
const nodeRemove = useCallback((e, node) => {
|
|
65
|
+
deleteBehavior(node);
|
|
66
|
+
setSelections([]);
|
|
67
|
+
}, [deleteBehavior]);
|
|
68
|
+
|
|
69
|
+
const edgeClick = useCallback((e, edge) => {
|
|
70
|
+
setSelections([edge.id]);
|
|
71
|
+
}, []);
|
|
72
|
+
|
|
73
|
+
const edgeRemove = useCallback((e, edge) => {
|
|
74
|
+
deleteTransition(edge);
|
|
75
|
+
setSelections([]);
|
|
76
|
+
}, [deleteTransition]);
|
|
77
|
+
|
|
78
|
+
const canvasClick = useCallback((e) => {
|
|
79
|
+
selectBehavior(null);
|
|
80
|
+
setSelections([]);
|
|
81
|
+
}, [selectBehavior]);
|
|
82
|
+
|
|
83
|
+
const nodeLink = useCallback((e, from, to) => {
|
|
84
|
+
if (!to) return;
|
|
85
|
+
connectBehaviors(from, to);
|
|
86
|
+
}, [connectBehaviors]);
|
|
87
|
+
|
|
64
88
|
return (
|
|
65
89
|
<div onWheel={handleWheel} ref={containerRef} className="canvas-wrapper">
|
|
66
90
|
<Canvas
|
|
91
|
+
panType="drag"
|
|
92
|
+
fit
|
|
93
|
+
center
|
|
67
94
|
ref={canvasRef}
|
|
68
95
|
nodes={nodes}
|
|
69
96
|
edges={edges}
|
|
70
97
|
width={size.width}
|
|
71
98
|
height={size.height}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
setSelections([node.id]);
|
|
78
|
-
}}
|
|
79
|
-
onRemove={(event, node) => {
|
|
80
|
-
deleteBehavior(node);
|
|
81
|
-
setSelections([]);
|
|
82
|
-
}}
|
|
83
|
-
/>
|
|
84
|
-
}
|
|
85
|
-
edge={
|
|
86
|
-
<Edge
|
|
87
|
-
onClick={(event, edge) => {
|
|
88
|
-
setSelections([edge.id]);
|
|
89
|
-
}}
|
|
90
|
-
onRemove={(event, edge) => {
|
|
91
|
-
deleteTransition(edge);
|
|
92
|
-
setSelections([]);
|
|
93
|
-
}}
|
|
94
|
-
/>
|
|
95
|
-
}
|
|
96
|
-
onCanvasClick={(event) => {setSelections([]);}}
|
|
97
|
-
fit
|
|
98
|
-
center
|
|
99
|
+
selections={selections}
|
|
100
|
+
onNodeLink={nodeLink}
|
|
101
|
+
node={ <Node onClick={nodeClick} onRemove={nodeRemove} /> }
|
|
102
|
+
edge={ <Edge onClick={edgeClick} onRemove={edgeRemove}/> }
|
|
103
|
+
onCanvasClick={canvasClick}
|
|
99
104
|
/>
|
|
100
105
|
</div>
|
|
101
106
|
)
|
|
@@ -103,5 +108,7 @@ export const BehavioralGraphBuilder = forwardRef(({connectBehaviors, deleteTrans
|
|
|
103
108
|
|
|
104
109
|
BehavioralGraphBuilder.propTypes = {
|
|
105
110
|
connectBehaviors: PropTypes.func.isRequired,
|
|
106
|
-
|
|
111
|
+
deleteTransition: PropTypes.func.isRequired,
|
|
112
|
+
deleteBehavior: PropTypes.func.isRequired,
|
|
113
|
+
selectBehavior: PropTypes.func.isRequired,
|
|
107
114
|
}
|
|
@@ -90,6 +90,14 @@ const Template = (args) => {
|
|
|
90
90
|
},
|
|
91
91
|
[engine, editorRef],
|
|
92
92
|
);
|
|
93
|
+
|
|
94
|
+
const selectBehavior = useCallback(
|
|
95
|
+
(nodeId) => {
|
|
96
|
+
action("Select Behavior")(nodeId);
|
|
97
|
+
},
|
|
98
|
+
[],
|
|
99
|
+
);
|
|
100
|
+
|
|
93
101
|
return (
|
|
94
102
|
<div className="graphBuilderRootContainer">
|
|
95
103
|
<div className="toolbar">
|
|
@@ -102,6 +110,7 @@ const Template = (args) => {
|
|
|
102
110
|
connectBehaviors={connectBehaviors}
|
|
103
111
|
deleteTransition={deleteTransition}
|
|
104
112
|
deleteBehavior={deleteBehavior}
|
|
113
|
+
selectBehavior={selectBehavior}
|
|
105
114
|
/>
|
|
106
115
|
</div>
|
|
107
116
|
</div>
|