fix: cleanup the condition for dragging elements (#5555)
This commit is contained in:
parent
2d800feeeb
commit
fe56975f19
@ -4172,21 +4172,15 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
(element) => this.isASelectedElement(element),
|
(element) => this.isASelectedElement(element),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const isSelectingPointsInLineEditor =
|
||||||
|
this.state.editingLinearElement &&
|
||||||
|
event.shiftKey &&
|
||||||
|
this.state.editingLinearElement.elementId ===
|
||||||
|
pointerDownState.hit.element?.id;
|
||||||
if (
|
if (
|
||||||
(hasHitASelectedElement ||
|
(hasHitASelectedElement ||
|
||||||
pointerDownState.hit.hasHitCommonBoundingBoxOfSelectedElements) &&
|
pointerDownState.hit.hasHitCommonBoundingBoxOfSelectedElements) &&
|
||||||
// this allows for box-selecting points when clicking inside the
|
!isSelectingPointsInLineEditor
|
||||||
// line's bounding box
|
|
||||||
(!this.state.editingLinearElement || !event.shiftKey) &&
|
|
||||||
// box-selecting without shift when editing line, not clicking on a line
|
|
||||||
(!this.state.editingLinearElement ||
|
|
||||||
this.state.editingLinearElement?.elementId !==
|
|
||||||
pointerDownState.hit.element?.id ||
|
|
||||||
pointerDownState.hit.hasHitElementInside) &&
|
|
||||||
(!this.state.selectedLinearElement ||
|
|
||||||
this.state.selectedLinearElement?.elementId !==
|
|
||||||
pointerDownState.hit.element?.id ||
|
|
||||||
pointerDownState.hit.hasHitElementInside)
|
|
||||||
) {
|
) {
|
||||||
const selectedElements = getSelectedElements(
|
const selectedElements = getSelectedElements(
|
||||||
this.scene.getNonDeletedElements(),
|
this.scene.getNonDeletedElements(),
|
||||||
|
@ -862,46 +862,42 @@ describe("regression tests", () => {
|
|||||||
expect(API.getSelectedElements().length).toBe(0);
|
expect(API.getSelectedElements().length).toBe(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it(
|
it("drags selected elements from point inside common bounding box that doesn't hit any element and keeps elements selected after dragging", () => {
|
||||||
"drags selected elements from point inside common bounding box that doesn't hit any element " +
|
UI.clickTool("rectangle");
|
||||||
"and keeps elements selected after dragging",
|
mouse.down();
|
||||||
() => {
|
mouse.up(10, 10);
|
||||||
UI.clickTool("rectangle");
|
|
||||||
mouse.down();
|
|
||||||
mouse.up(10, 10);
|
|
||||||
|
|
||||||
UI.clickTool("ellipse");
|
UI.clickTool("ellipse");
|
||||||
mouse.down(100, 100);
|
mouse.down(100, 100);
|
||||||
mouse.up(10, 10);
|
mouse.up(10, 10);
|
||||||
|
|
||||||
// Selects first element without deselecting the second element
|
// Selects first element without deselecting the second element
|
||||||
// Second element is already selected because creating it was our last action
|
// Second element is already selected because creating it was our last action
|
||||||
mouse.reset();
|
mouse.reset();
|
||||||
Keyboard.withModifierKeys({ shift: true }, () => {
|
Keyboard.withModifierKeys({ shift: true }, () => {
|
||||||
mouse.click(5, 5);
|
mouse.click(5, 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(API.getSelectedElements().length).toBe(2);
|
expect(API.getSelectedElements().length).toBe(2);
|
||||||
|
|
||||||
const { x: firstElementPrevX, y: firstElementPrevY } =
|
const { x: firstElementPrevX, y: firstElementPrevY } =
|
||||||
API.getSelectedElements()[0];
|
API.getSelectedElements()[0];
|
||||||
const { x: secondElementPrevX, y: secondElementPrevY } =
|
const { x: secondElementPrevX, y: secondElementPrevY } =
|
||||||
API.getSelectedElements()[1];
|
API.getSelectedElements()[1];
|
||||||
|
|
||||||
// drag elements from point on common bounding box that doesn't hit any of the elements
|
// drag elements from point on common bounding box that doesn't hit any of the elements
|
||||||
mouse.reset();
|
mouse.reset();
|
||||||
mouse.down(50, 50);
|
mouse.down(50, 50);
|
||||||
mouse.up(25, 25);
|
mouse.up(25, 25);
|
||||||
|
|
||||||
expect(API.getSelectedElements()[0].x).toEqual(firstElementPrevX + 25);
|
expect(API.getSelectedElements()[0].x).toEqual(firstElementPrevX + 25);
|
||||||
expect(API.getSelectedElements()[0].y).toEqual(firstElementPrevY + 25);
|
expect(API.getSelectedElements()[0].y).toEqual(firstElementPrevY + 25);
|
||||||
|
|
||||||
expect(API.getSelectedElements()[1].x).toEqual(secondElementPrevX + 25);
|
expect(API.getSelectedElements()[1].x).toEqual(secondElementPrevX + 25);
|
||||||
expect(API.getSelectedElements()[1].y).toEqual(secondElementPrevY + 25);
|
expect(API.getSelectedElements()[1].y).toEqual(secondElementPrevY + 25);
|
||||||
|
|
||||||
expect(API.getSelectedElements().length).toBe(2);
|
expect(API.getSelectedElements().length).toBe(2);
|
||||||
},
|
});
|
||||||
);
|
|
||||||
|
|
||||||
it(
|
it(
|
||||||
"given a group of selected elements with an element that is not selected inside the group common bounding box " +
|
"given a group of selected elements with an element that is not selected inside the group common bounding box " +
|
||||||
|
Loading…
x
Reference in New Issue
Block a user