mirror of
https://github.com/google/blockly.git
synced 2026-01-08 09:30:06 +01:00
fix: shouldPreventMove not being respected (#7894)
* fix: shouldPreventMove not being respected * fix: PR comments
This commit is contained in:
@@ -71,8 +71,18 @@ export class BlockDragger implements IBlockDragger {
|
|||||||
|
|
||||||
/** Whether the block would be deleted if dropped immediately. */
|
/** Whether the block would be deleted if dropped immediately. */
|
||||||
protected wouldDeleteBlock_ = false;
|
protected wouldDeleteBlock_ = false;
|
||||||
|
|
||||||
protected startXY_: Coordinate;
|
protected startXY_: Coordinate;
|
||||||
|
|
||||||
|
/** The parent block at the start of the drag. */
|
||||||
|
private startParentConn: RenderedConnection | null = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The child block at the start of the drag. Only gets set if
|
||||||
|
* `healStack` is true.
|
||||||
|
*/
|
||||||
|
private startChildConn: RenderedConnection | null = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated To be removed in v11. Updating icons is now handled by the
|
* @deprecated To be removed in v11. Updating icons is now handled by the
|
||||||
* block's `moveDuringDrag` method.
|
* block's `moveDuringDrag` method.
|
||||||
@@ -137,6 +147,13 @@ export class BlockDragger implements IBlockDragger {
|
|||||||
blockAnimation.disconnectUiStop();
|
blockAnimation.disconnectUiStop();
|
||||||
|
|
||||||
if (this.shouldDisconnect_(healStack)) {
|
if (this.shouldDisconnect_(healStack)) {
|
||||||
|
this.startParentConn =
|
||||||
|
this.draggingBlock_.outputConnection?.targetConnection ??
|
||||||
|
this.draggingBlock_.previousConnection?.targetConnection;
|
||||||
|
if (healStack) {
|
||||||
|
this.startChildConn =
|
||||||
|
this.draggingBlock_.nextConnection?.targetConnection;
|
||||||
|
}
|
||||||
this.disconnectBlock_(healStack, currentDragDeltaXY);
|
this.disconnectBlock_(healStack, currentDragDeltaXY);
|
||||||
}
|
}
|
||||||
this.draggingBlock_.setDragging(true);
|
this.draggingBlock_.setDragging(true);
|
||||||
@@ -424,17 +441,10 @@ export class BlockDragger implements IBlockDragger {
|
|||||||
.getLayerManager()
|
.getLayerManager()
|
||||||
?.moveOffDragLayer(this.draggingBlock_, layers.BLOCK);
|
?.moveOffDragLayer(this.draggingBlock_, layers.BLOCK);
|
||||||
this.draggingBlock_.setDragging(false);
|
this.draggingBlock_.setDragging(false);
|
||||||
if (delta) {
|
if (preventMove) {
|
||||||
// !preventMove
|
this.moveToOriginalPosition();
|
||||||
|
} else if (delta) {
|
||||||
this.updateBlockAfterMove_();
|
this.updateBlockAfterMove_();
|
||||||
} else {
|
|
||||||
// Blocks dragged directly from a flyout may need to be bumped into
|
|
||||||
// bounds.
|
|
||||||
bumpObjects.bumpIntoBounds(
|
|
||||||
this.draggingBlock_.workspace,
|
|
||||||
this.workspace_.getMetricsManager().getScrollMetrics(true),
|
|
||||||
this.draggingBlock_,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Must dispose after `updateBlockAfterMove_` is called to not break the
|
// Must dispose after `updateBlockAfterMove_` is called to not break the
|
||||||
@@ -445,6 +455,32 @@ export class BlockDragger implements IBlockDragger {
|
|||||||
eventUtils.setGroup(false);
|
eventUtils.setGroup(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the dragged block back to its original position before the start of
|
||||||
|
* the drag. Reconnects any parent and child blocks.
|
||||||
|
*/
|
||||||
|
private moveToOriginalPosition() {
|
||||||
|
this.startChildConn?.connect(this.draggingBlock_.nextConnection);
|
||||||
|
if (this.startParentConn) {
|
||||||
|
switch (this.startParentConn.type) {
|
||||||
|
case ConnectionType.INPUT_VALUE:
|
||||||
|
this.startParentConn.connect(this.draggingBlock_.outputConnection);
|
||||||
|
break;
|
||||||
|
case ConnectionType.NEXT_STATEMENT:
|
||||||
|
this.startParentConn.connect(this.draggingBlock_.previousConnection);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.draggingBlock_.moveTo(this.startXY_, ['drag']);
|
||||||
|
// Blocks dragged directly from a flyout may need to be bumped into
|
||||||
|
// bounds.
|
||||||
|
bumpObjects.bumpIntoBounds(
|
||||||
|
this.draggingBlock_.workspace,
|
||||||
|
this.workspace_.getMetricsManager().getScrollMetrics(true),
|
||||||
|
this.draggingBlock_,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the drag delta and new location values after a block is dragged.
|
* Calculates the drag delta and new location values after a block is dragged.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user