Skip to content

Commit 5a97bcc

Browse files
committed
feat: support move selected nodes when disabled multipleSelect.(#894)
1 parent 98e749c commit 5a97bcc

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

packages/core/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -466,8 +466,8 @@
466466
// hoverOutline: false,
467467
// nodeSelectedOutline: false,
468468
multipleSelectKey: 'shift',
469-
// disabledTools: ['multipleSelect'],
470-
// autoExpand: true,
469+
disabledTools: ['multipleSelect'],
470+
autoExpand: true,
471471
// metaKeyMultipleSelected: false,
472472
// adjustEdgeMiddle: true,
473473
// stopMoveGraph: true,

packages/core/src/model/GraphModel.ts

+9
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,15 @@ class GraphModel {
240240
});
241241
return elements;
242242
}
243+
@computed get selectNodes() {
244+
const nodes = [];
245+
this.nodes.forEach(node => {
246+
if (node.isSelected) {
247+
nodes.push(node);
248+
}
249+
});
250+
return nodes;
251+
}
243252
/**
244253
* 获取指定区域内的所有元素
245254
* @param leftTopPoint 表示区域左上角的点

packages/core/src/view/node/BaseNode.tsx

+10-8
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ export default abstract class BaseNode extends Component<IProps, IState> {
147147
autoExpand,
148148
},
149149
transformModel,
150+
selectNodes,
150151
width,
151152
height,
152153
gridSize,
@@ -200,20 +201,21 @@ export default abstract class BaseNode extends Component<IProps, IState> {
200201
if (this.t) {
201202
cancelRaf(this.t);
202203
}
204+
let moveNodes = selectNodes.map(node => node.id);
205+
// 未被选中的节点也可以拖动
206+
if (moveNodes.indexOf(model.id) === -1) {
207+
moveNodes = [model.id];
208+
}
203209
if (nearBoundary.length > 0 && !stopMoveGraph && autoExpand) {
204210
this.t = createRaf(() => {
205211
const [translateX, translateY] = nearBoundary;
206212
transformModel.translate(translateX, translateY);
207-
graphModel.moveNode(
208-
model.id, -translateX / transformModel.SCALE_X, -translateY / transformModel.SCALE_X,
209-
);
213+
const deltaX = -translateX / transformModel.SCALE_X;
214+
const deltaY = -translateY / transformModel.SCALE_X;
215+
graphModel.moveNodes(moveNodes, deltaX, deltaY);
210216
});
211217
} else {
212-
graphModel.moveNode2Coordinate(
213-
model.id,
214-
x,
215-
y,
216-
);
218+
graphModel.moveNodes(moveNodes, x - model.x, y - model.y);
217219
}
218220
};
219221
onDragEnd = () => {

0 commit comments

Comments
 (0)