@@ -18,17 +18,16 @@ import { useEventEmitterContextContext } from './models/event-emitter';
18
18
19
19
import CustomNodeComponent from './components/CustomNode' ;
20
20
import { useStore , useStoreApi } from './hooks/useStore' ;
21
- import { useTemporalStore } from './hooks/useTemporalStore' ;
22
21
23
22
import Operator from './operator' ;
24
23
import FlowProps from './types' ;
25
- import { transformNodes , uuid } from './utils' ;
24
+ import { uuid } from './utils' ;
26
25
import autoLayoutNodes from './utils/autoLayoutNodes' ;
27
26
28
27
import { shallow } from 'zustand/shallow' ;
29
28
import NodeEditor from './components/NodeEditor' ;
30
- import { useFlow } from './hooks/useFlow' ;
31
29
import './index.less' ;
30
+ import { useTemporalStore } from './hooks/useTemporalStore' ;
32
31
33
32
const CustomNode = memo ( CustomNodeComponent ) ;
34
33
const edgeTypes = { buttonedge : memo ( CustomEdge ) } ;
@@ -38,40 +37,40 @@ const edgeTypes = { buttonedge: memo(CustomEdge) };
38
37
* XFlow 入口
39
38
*
40
39
*/
41
- const XFlow : FC < FlowProps > = memo ( props => {
42
- const { initialValues, settings } = props ;
40
+ const XFlow : FC < FlowProps > = memo ( ( ) => {
43
41
const workflowContainerRef = useRef < HTMLDivElement > ( null ) ;
44
42
const store = useStoreApi ( ) ;
45
43
const { zoomTo } = useReactFlow ( ) ;
46
44
const {
47
45
layout,
48
46
nodes,
49
47
edges,
48
+ setNodes,
49
+ setEdges,
50
50
panOnDrag,
51
51
onNodesChange,
52
52
onEdgesChange,
53
53
onConnect,
54
- setLayout,
55
54
setCandidateNode,
56
55
setMousePosition,
57
56
} = useStore (
58
- state => ( {
59
- nodes : state . nodes ,
60
- edges : state . edges ,
61
- layout : state . layout ,
62
- panOnDrag : state . panOnDrag ,
63
- setLayout : state . setLayout ,
64
- setMousePosition : state . setMousePosition ,
65
- setCandidateNode : state . setCandidateNode ,
66
- onNodesChange : state . onNodesChange ,
67
- onEdgesChange : state . onEdgesChange ,
68
- onConnect : state . onConnect ,
57
+ s => ( {
58
+ nodes : s . nodes ,
59
+ edges : s . edges ,
60
+ setNodes : s . setNodes ,
61
+ setEdges : s . setEdges ,
62
+ layout : s . layout ,
63
+ panOnDrag : s . panOnDrag ,
64
+ setMousePosition : s . setMousePosition ,
65
+ setCandidateNode : s . setCandidateNode ,
66
+ onNodesChange : s . onNodesChange ,
67
+ onEdgesChange : s . onEdgesChange ,
68
+ onConnect : s . onConnect ,
69
69
} ) ,
70
70
shallow
71
71
) ;
72
- const { setNodes , setEdges } = useFlow ( ) ;
72
+ const { record } = useTemporalStore ( ) ;
73
73
const [ activeNode , setActiveNode ] = useState < any > ( null ) ;
74
- const temporalStore = useTemporalStore ( ) ;
75
74
useEffect ( ( ) => {
76
75
zoomTo ( 0.8 ) ;
77
76
setAutoFreeze ( false ) ;
@@ -80,14 +79,6 @@ const XFlow: FC<FlowProps> = memo(props => {
80
79
} ;
81
80
} , [ ] ) ;
82
81
83
- useEffect ( ( ) => {
84
- setLayout ( props . layout ) ;
85
- // TODO: 默认关闭时间机器,可以向 zundo 贡献一个配置
86
- temporalStore . pause ( ) ;
87
- setNodes ( transformNodes ( initialValues ?. nodes ) ) ;
88
- setEdges ( initialValues ?. edges ) ;
89
- } , [ ] ) ;
90
-
91
82
useEventListener ( 'keydown' , e => {
92
83
if ( ( e . key === 'd' || e . key === 'D' ) && ( e . ctrlKey || e . metaKey ) )
93
84
e . preventDefault ( ) ;
@@ -149,7 +140,6 @@ const XFlow: FC<FlowProps> = memo(props => {
149
140
// y: 0,
150
141
// },
151
142
// };
152
- // // record(() => {
153
143
// addNodes(newNode);
154
144
// addEdges({
155
145
// id: uuid(),
@@ -160,7 +150,6 @@ const XFlow: FC<FlowProps> = memo(props => {
160
150
// updateEdge(targetEdge?.id as string, {
161
151
// source: newNode.id,
162
152
// });
163
- // // });
164
153
// };
165
154
166
155
// edge 移入/移出效果
@@ -213,12 +202,6 @@ const XFlow: FC<FlowProps> = memo(props => {
213
202
} ;
214
203
} , [ layout ] ) ;
215
204
216
- // const edgeTypes = { buttonedge: (edgeProps: any) => <CustomEdge layout={layout} {...edgeProps} /> };
217
- // const { icon, description } =
218
- // settings.find(
219
- // item => item.type?.toLowerCase() === activeNode?.node?.toLowerCase()
220
- // ) || {};
221
-
222
205
const NodeEditorWrap = useMemo ( ( ) => {
223
206
return (
224
207
< NodeEditor
@@ -250,7 +233,15 @@ const XFlow: FC<FlowProps> = memo(props => {
250
233
} }
251
234
onConnect = { onConnect }
252
235
onNodesChange = { changes => {
253
- onNodesChange ( changes ) ;
236
+ changes . forEach ( change => {
237
+ if ( change . type === 'remove' || change . type === 'add' ) {
238
+ record ( ( ) => {
239
+ onNodesChange ( changes ) ;
240
+ } )
241
+ } else {
242
+ onNodesChange ( changes ) ;
243
+ }
244
+ } )
254
245
} }
255
246
onEdgesChange = { changes => {
256
247
onEdgesChange ( changes ) ;
@@ -261,6 +252,9 @@ const XFlow: FC<FlowProps> = memo(props => {
261
252
onEdgeMouseLeave = { ( _ , edge ) => {
262
253
getUpdateEdgeConfig ( edge , '#c9c9c9' ) ;
263
254
} }
255
+ onNodesDelete = { ( ) => {
256
+ // setActiveNode(null);
257
+ } }
264
258
>
265
259
< CandidateNode />
266
260
< Operator addNode = { handleAddNode } />
0 commit comments