Skip to content

Commit ba56453

Browse files
author
昔梦
committed
fix:增加是否禁用该节点的快捷键复制功能 参数
1 parent eac40c3 commit ba56453

File tree

4 files changed

+26
-11
lines changed

4 files changed

+26
-11
lines changed

docs/xflow/api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ Handle 配置继承自 React Flow 的 Handle 配置,用于控制节点连接
171171
| getSettingSchema | 动态获取节点的业务配置信息,返回值同settingSchema。同时设置`settingSchema``getSettingSchema`只生效`getSettingSchema` | `(nodeId: string, nodeType: string, nodeItem: TNodeItem, nodeData: any, form: ReturnType<typeof useForm>) => Promise<Schema>` | |
172172
| renderHandle | 自定义渲染节点的handle,以实现某个节点自定义的出口数量.`sourceHandle`是原handle组件 | `(sourceHandle: SourceHandleType,sourceHandleProps:ComponentProps<SourceHandleType>,nodeProps: {id: string;type: string;data: any;layout: 'LR';isConnectable: boolean;readOnly: boolean;}) => React.JSX.Element`| |
173173
| disabledShortcutDelete | 是否禁用该节点的快捷键删除功能 | `boolean` | false |
174+
| disabledShortcutCopy | 是否禁用该节点的快捷键复制功能 | `boolean` | false |
174175

175176

176177
## TNodeSelector

docs/xflow/demo/quickStart/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export default () => {
88
type: 'Start',
99
hidden: true,
1010
disabledShortcutDelete: true,
11+
disabledShortcutCopy: true,
1112
targetHandleHidden: true,
1213
icon: {
1314
type: 'icon-start',

packages/x-flow/src/XFlow.tsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,20 @@ const XFlow: FC<FlowProps> = memo(props => {
153153
const targetClassList = targetElement?.classList;
154154

155155
if (isNodeCopyEvent && selectedNode?.id) {
156+
const nodeType = selectedNode?.data?._nodeType;
157+
if (isString(nodeType) && nodeType) {
158+
const nodeConfig = settingMap[nodeType];
159+
if (nodeConfig?.disabledShortcutCopy) {
160+
message.warning(
161+
`${selectedNode.data?.title || selectedNode.id}节点不允许复制`
162+
);
163+
return;
164+
}
165+
}
156166
// 复制节点
157167
e.preventDefault();
158168
copyNode(selectedNode.id);
159169
}
160-
161-
162170
} else if ((e.key === 'v' || e.key === 'V') && (e.ctrlKey || e.metaKey)) {
163171
const { copyNodes } = storeApi.getState();
164172
if (copyNodes?.length > 0) {
@@ -282,7 +290,7 @@ const XFlow: FC<FlowProps> = memo(props => {
282290
}
283291
setOpenLogPanel(true);
284292
}}
285-
onDelete={()=>{
293+
onDelete={() => {
286294
// 删除节点并关闭弹窗
287295
setActiveNode(null);
288296
}}
@@ -357,7 +365,7 @@ const XFlow: FC<FlowProps> = memo(props => {
357365
},
358366
deletable: deletable, //默认连线属性受此项控制
359367
}}
360-
onBeforeDelete={async (elements) => {
368+
onBeforeDelete={async elements => {
361369
if (readOnly) {
362370
return false;
363371
}
@@ -369,10 +377,14 @@ const XFlow: FC<FlowProps> = memo(props => {
369377
: false;
370378
});
371379
if (blockedNodes?.length > 0) {
372-
message.warning(`${blockedNodes.map(n => n.data?.title || n.id).join(', ')}节点不允许删除!`);
380+
message.warning(
381+
`${blockedNodes
382+
.map(n => n.data?.title || n.id)
383+
.join(', ')}节点不允许删除!`
384+
);
373385
return false;
374386
}
375-
return true
387+
return true;
376388
}}
377389
onConnect={onConnect}
378390
onNodesChange={changes => {
@@ -398,24 +410,24 @@ const XFlow: FC<FlowProps> = memo(props => {
398410
});
399411
}}
400412
onEdgeMouseEnter={(_, edge: any) => {
401-
if(!edge.style.stroke || edge.style.stroke === '#c9c9c9'){
413+
if (!edge.style.stroke || edge.style.stroke === '#c9c9c9') {
402414
getUpdateEdgeConfig(edge, '#2970ff');
403415
}
404416
}}
405417
onEdgeMouseLeave={(_, edge) => {
406-
if(['#2970ff',"#c9c9c9"].includes(edge.style.stroke)){
418+
if (['#2970ff', '#c9c9c9'].includes(edge.style.stroke)) {
407419
getUpdateEdgeConfig(edge, '#c9c9c9');
408420
}
409421
}}
410422
onNodesDelete={() => {
411-
setActiveNode(null);
423+
setActiveNode(null);
412424
}}
413425
onNodeClick={(event, node) => {
414426
onNodeClick && onNodeClick(event, node);
415427
}}
416428
deleteKeyCode={globalConfig?.deleteKeyCode}
417-
onEdgeClick={(event,edge)=>{
418-
onEdgeClick && onEdgeClick(event,edge)
429+
onEdgeClick={(event, edge) => {
430+
onEdgeClick && onEdgeClick(event, edge);
419431
}}
420432
>
421433
<CandidateNode />

packages/x-flow/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export interface TNodeItem {
5858
showTestingBtn?: boolean; // 是否显示单点调试按钮
5959
className?: string;// 自定义节点class
6060
disabledShortcutDelete?: boolean; // 是否禁用快捷键删除
61+
disabledShortcutCopy?: boolean; // 是否禁用快捷键复制
6162
}
6263

6364
export interface TNodeGroup {

0 commit comments

Comments
 (0)