Skip to content

Commit 5039f7c

Browse files
authored
chore(drag): remove alt key copy node (bytedance#149)
* chore(drag): remove alt key copy node * fix: tsc error
1 parent 7275dcb commit 5039f7c

File tree

5 files changed

+9
-92
lines changed

5 files changed

+9
-92
lines changed

apps/demo-free-layout/src/shortcuts/shortcuts.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,27 +80,11 @@ export function shortcuts(shortcutsRegistry: ShortcutsRegistry, ctx: FreeLayoutP
8080
shortcutsRegistry.addHandlers({
8181
commandId: FlowCommandId.PASTE,
8282
shortcuts: ['meta v', 'ctrl v'],
83-
execute: async (selectedNodes?: WorkflowNodeEntity[]) => {
83+
execute: async (e: KeyboardEvent) => {
8484
const document = ctx.get<WorkflowDocument>(WorkflowDocument);
8585
const selectService = ctx.get<WorkflowSelectService>(WorkflowSelectService);
8686
const dragService = ctx.get<WorkflowDragService>(WorkflowDragService);
8787

88-
if (selectedNodes && Array.isArray(selectedNodes)) {
89-
const newNodes = await Promise.all(
90-
selectedNodes.map(async (node) => {
91-
const nodeJSON = await document.toNodeJSON(node);
92-
return document.copyNodeFromJSON(
93-
nodeJSON.type as string,
94-
nodeJSON,
95-
'',
96-
getAntiOverlapPosition(document, nodeJSON.meta!.position!),
97-
node.parent?.id
98-
);
99-
})
100-
);
101-
return newNodes;
102-
}
103-
10488
const text: string = (await navigator.clipboard.readText()) || '';
10589
let clipboardData: {
10690
nodes: {

packages/canvas-engine/free-layout-core/__tests__/service/workflow-drag-service.test.ts

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { interfaces } from 'inversify';
22
import { fireEvent, waitFor } from '@testing-library/react';
3-
import { IPoint, logger } from '@flowgram.ai/utils';
3+
import { IPoint } from '@flowgram.ai/utils';
44
import { FlowNodeBaseType } from '@flowgram.ai/document';
5-
import { CommandRegistry, PlaygroundConfigEntity, PositionData } from '@flowgram.ai/core';
5+
import { PlaygroundConfigEntity, PositionData } from '@flowgram.ai/core';
66
import { TransformData } from '@flowgram.ai/core';
77

88
import { createWorkflowContainer, baseJSON, nestJSON } from '../mocks';
@@ -13,7 +13,6 @@ import {
1313
WorkflowLineEntity,
1414
WorkflowSelectService,
1515
WorkflowNodeEntity,
16-
WorkflowCommands,
1716
WorkflowLinesManager,
1817
WorkflowPortEntity,
1918
} from '../../src';
@@ -323,39 +322,6 @@ describe('workflow-drag-service', () => {
323322
});
324323
expect(endNode.getData(PositionData).toJSON()).toEqual({ x: 900, y: 100 });
325324
});
326-
it('startDragSelectedNodes with altKey', async () => {
327-
container.get(CommandRegistry).registerCommand(
328-
{
329-
id: WorkflowCommands.PASTE_NODES,
330-
},
331-
{
332-
execute: (nodes: WorkflowNodeEntity[]) =>
333-
Promise.all(nodes.map((n) => document.copyNode(n, n.id + '_copy'))),
334-
}
335-
);
336-
container.get(WorkflowSelectService).selection = [startNode, endNode];
337-
const promise = dragService.startDragSelectedNodes({
338-
clientX: 0,
339-
clientY: 0,
340-
altKey: true,
341-
} as any);
342-
await fireMouseEvent('mousemove', { x: 10, y: 10 });
343-
await fireMouseEvent('mousemove', { x: 100, y: 100 });
344-
await fireMouseEvent('mouseup', { x: 100, y: 100 });
345-
const dragResult = await promise;
346-
expect(dragResult).toEqual(true);
347-
expect(startNode.getData(PositionData).toJSON()).toEqual({ x: 10, y: 10 });
348-
expect(endNode.getData(PositionData).toJSON()).toEqual({ x: 810, y: 10 });
349-
logger.warn('nodeInfo', document.getNode('start_0_copy')!.getData(PositionData).toJSON());
350-
expect(document.getNode('start_0_copy')!.getData(PositionData).toJSON()).toEqual({
351-
x: 110,
352-
y: 110,
353-
});
354-
expect(document.getNode('end_0_copy')!.getData(PositionData).toJSON()).toEqual({
355-
x: 910,
356-
y: 110,
357-
});
358-
});
359325
it('startDragSelectedNodes with same parent', async () => {
360326
await document.fromJSON({
361327
nodes: nestJSON.nodes,

packages/canvas-engine/free-layout-core/src/service/workflow-drag-service.ts

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {
3131
import { WorkflowLinesManager } from '../workflow-lines-manager';
3232
import { WorkflowDocumentOptions } from '../workflow-document-option';
3333
import { WorkflowDocument } from '../workflow-document';
34-
import { WorkflowCommands } from '../workflow-commands';
3534
import { LineEventProps, NodesDragEvent, OnDragLineEnd } from '../typings/workflow-drag';
3635
import { type WorkflowNodeJSON, type WorkflowNodeMeta } from '../typings';
3736
import { WorkflowNodePortsData } from '../entity-datas';
@@ -136,7 +135,6 @@ export class WorkflowDragService {
136135
if (sameParent && sameParent.flowNodeType !== FlowNodeBaseType.ROOT) {
137136
selectedNodes = [sameParent];
138137
}
139-
const { altKey } = triggerEvent;
140138
// 节点整体开始位置
141139
let startPosition = this.getNodesPosition(selectedNodes);
142140
// 单个节点开始位置
@@ -152,7 +150,6 @@ export class WorkflowDragService {
152150
type: 'onDragStart',
153151
nodes: selectedNodes,
154152
startPositions,
155-
altKey,
156153
dragEvent,
157154
triggerEvent,
158155
dragger,
@@ -161,30 +158,6 @@ export class WorkflowDragService {
161158
onDrag: (dragEvent) => {
162159
if (!dragSuccess && checkDragSuccess(Date.now() - startTime, dragEvent)) {
163160
dragSuccess = true;
164-
if (altKey) {
165-
// 按住 alt 为复制
166-
const tryCopyNodes = selectedNodes;
167-
if (tryCopyNodes.length > 0) {
168-
this.selectService.clear();
169-
this.commandService
170-
.executeCommand(WorkflowCommands.PASTE_NODES, tryCopyNodes, true)
171-
.then((newNodes) => {
172-
if (newNodes && Array.isArray(newNodes) && newNodes.length > 0) {
173-
selectedNodes = newNodes as WorkflowNodeEntity[];
174-
startPosition = this.getNodesPosition(tryCopyNodes);
175-
startPositions = tryCopyNodes
176-
.filter((n) => !n.getNodeMeta<WorkflowNodeMeta>().copyDisable)
177-
.map((node) => {
178-
const transform = node.getData(TransformData);
179-
return {
180-
x: transform.position.x,
181-
y: transform.position.y,
182-
};
183-
});
184-
}
185-
});
186-
}
187-
}
188161
}
189162

190163
// 计算拖拽偏移量
@@ -222,7 +195,6 @@ export class WorkflowDragService {
222195
nodes: selectedNodes,
223196
startPositions,
224197
positions,
225-
altKey,
226198
dragEvent,
227199
triggerEvent,
228200
dragger,
@@ -234,7 +206,6 @@ export class WorkflowDragService {
234206
type: 'onDragEnd',
235207
nodes: selectedNodes,
236208
startPositions,
237-
altKey,
238209
dragEvent,
239210
triggerEvent,
240211
dragger,

packages/canvas-engine/free-layout-core/src/typings/workflow-drag.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ interface INodesDragEvent {
1616
type: string;
1717
nodes: FlowNodeEntity[];
1818
startPositions: PositionSchema[];
19-
altKey: boolean;
2019
dragEvent: PlaygroundDragEvent;
2120
triggerEvent: MouseEvent | React.MouseEvent;
2221
dragger: PlaygroundDrag;
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* eslint-disable @typescript-eslint/naming-convention */
22
import { injectable, inject } from 'inversify';
3-
import { TransformData } from '@flowgram.ai/core';
4-
import { type NodesDragEndEvent } from '@flowgram.ai/free-layout-core';
53
import { HistoryService } from '@flowgram.ai/history';
4+
import { type NodesDragEndEvent } from '@flowgram.ai/free-layout-core';
5+
import { TransformData } from '@flowgram.ai/core';
66

77
import { FreeOperationType, type IHandler } from '../types';
88

@@ -12,10 +12,7 @@ export class DragNodesHandler implements IHandler<NodesDragEndEvent> {
1212
private _historyService: HistoryService;
1313

1414
handle(event: NodesDragEndEvent) {
15-
if (
16-
event.type === 'onDragEnd' &&
17-
!event.altKey // altKey代表创建,这个通过add-node监听处理
18-
) {
15+
if (event.type === 'onDragEnd') {
1916
this._dragNode(event);
2017
}
2118
}
@@ -25,8 +22,8 @@ export class DragNodesHandler implements IHandler<NodesDragEndEvent> {
2522
{
2623
type: FreeOperationType.dragNodes,
2724
value: {
28-
ids: event.nodes.map(node => node.id),
29-
value: event.nodes.map(node => {
25+
ids: event.nodes.map((node) => node.id),
26+
value: event.nodes.map((node) => {
3027
const { x, y } = node.getData(TransformData).position;
3128
return {
3229
x,
@@ -36,7 +33,7 @@ export class DragNodesHandler implements IHandler<NodesDragEndEvent> {
3633
oldValue: event.startPositions,
3734
},
3835
},
39-
{ noApply: true },
36+
{ noApply: true }
4037
);
4138
}
4239
}

0 commit comments

Comments
 (0)