Skip to content

Commit 60dac8d

Browse files
author
昔梦
committed
fix:节点快捷键删除问题
1 parent e214999 commit 60dac8d

File tree

2 files changed

+37
-28
lines changed

2 files changed

+37
-28
lines changed

packages/x-flow/src/XFlow.tsx

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const XFlow: FC<FlowProps> = memo(props => {
9999
connectionLineComponent,
100100
} = props;
101101
const nodeEditorRef = useRef(null);
102-
const { copyNode, pasteNodeSimple } = useFlow();
102+
const { copyNode, pasteNodeSimple, deleteNode } = useFlow();
103103
const { undo, redo } = useTemporalStore();
104104
const isNodeCopyingRef = useRef(false); // 是否正在进行节点复制
105105
const lastClickedNodeRef = useRef(false); // 最后一次点击是否是节点
@@ -437,30 +437,35 @@ const XFlow: FC<FlowProps> = memo(props => {
437437
message.warning(`${blockedNodes.map(n => n.data?.title || n.id).join(', ')}节点不允许删除!`);
438438
return false;
439439
}
440-
return true
440+
if (nodesToDelete?.length) {
441+
setOpenPanel(false);
442+
}
443+
return true;
441444
}}
442445
onConnect={onConnect}
443446
onNodesChange={changes => {
444-
changes.forEach(change => {
445-
if (change.type === 'remove') {
446-
record(() => {
447-
onNodesChange([change]);
448-
});
449-
} else {
450-
onNodesChange([change]);
451-
}
452-
});
447+
const removeChanges = changes.filter(c => c.type === 'remove');
448+
const otherChanges = changes.filter(c => c.type !== 'remove');
449+
// 处理删除操作:使用与右键菜单相同的 deleteNode 方法
450+
if (removeChanges.length > 0) {
451+
removeChanges.forEach(change => {
452+
if ('id' in change) {
453+
deleteNode(change.id);
454+
// 如果删除的是当前激活的节点,关闭面板
455+
if (change.id === activeNode?.id) {
456+
setActiveNode(null);
457+
}
458+
}
459+
});
460+
}
461+
462+
// 其他操作使用 ReactFlow 的默认处理
463+
if (otherChanges.length > 0) {
464+
onNodesChange(otherChanges);
465+
}
453466
}}
454467
onEdgesChange={changes => {
455-
changes.forEach(change => {
456-
if (change.type === 'remove') {
457-
record(() => {
458-
onEdgesChange([change]);
459-
});
460-
} else {
461-
onEdgesChange([change]);
462-
}
463-
});
468+
onEdgesChange(changes);
464469
}}
465470
onEdgeMouseEnter={(_, edge: any) => {
466471
if(!edge.style.stroke || edge.style.stroke === '#c9c9c9'){
@@ -472,8 +477,8 @@ const XFlow: FC<FlowProps> = memo(props => {
472477
getUpdateEdgeConfig(edge, '#c9c9c9');
473478
}
474479
}}
475-
onNodesDelete={() => {
476-
setActiveNode(null);
480+
onNodesDelete={(nodes) => {
481+
// setActiveNode(null);
477482
}}
478483
onNodeClick={(event, node) => {
479484
onNodeClick && onNodeClick(event, node);

packages/x-flow/src/hooks/useFlow.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,20 @@ export const useFlow = () => {
129129
// 关闭mousemove监听
130130
storeApi.getState().setIsAddingNode(false);
131131

132+
// 清除 selected 状态,避免粘贴的节点被意外选中
133+
const copyNodesWithoutSelection = storeApi.getState().copyNodes.map(node => ({
134+
...node,
135+
selected: false,
136+
}));
137+
132138
const newEdges = {
133139
id: uuid(),
134140
source: nodeId,
135-
target: storeApi.getState().copyNodes[0].id,
141+
target: copyNodesWithoutSelection[0].id,
136142
...data
137143
};
138144
record(() => {
139-
storeApi.getState().addNodes(storeApi.getState().copyNodes, false);
145+
storeApi.getState().addNodes(copyNodesWithoutSelection, false);
140146
})
141147
storeApi.getState().addEdges(newEdges);
142148
storeApi.setState({
@@ -163,8 +169,10 @@ export const useFlow = () => {
163169
x: mousePosition.elementX,
164170
y: mousePosition.elementY,
165171
});
172+
// 清除 selected 状态,避免粘贴的节点被意外选中
166173
const copyNodes = storeApi.getState().copyNodes.map(node => ({
167174
...node,
175+
selected: false,
168176
position: {
169177
x: flowPos.x,
170178
y: flowPos.y,
@@ -191,10 +199,6 @@ export const useFlow = () => {
191199
.edges.filter(
192200
edge => edge.source !== nodeId && edge.target !== nodeId
193201
),
194-
});
195-
});
196-
record(() => {
197-
storeApi.setState({
198202
nodes: storeApi.getState().nodes.filter(node => node.id !== nodeId),
199203
});
200204
});

0 commit comments

Comments
 (0)