This commit is contained in:
parent
b9d584714a
commit
242ccac290
@ -1530,6 +1530,8 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.maybeSuggestBindingForAll(selectedElements);
|
||||||
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
} else if (event.key === KEYS.ENTER) {
|
} else if (event.key === KEYS.ENTER) {
|
||||||
const selectedElements = getSelectedElements(
|
const selectedElements = getSelectedElements(
|
||||||
@ -1601,6 +1603,16 @@ class App extends React.Component<ExcalidrawProps, AppState> {
|
|||||||
if (!event[KEYS.CTRL_OR_CMD] && !this.state.isBindingEnabled) {
|
if (!event[KEYS.CTRL_OR_CMD] && !this.state.isBindingEnabled) {
|
||||||
this.setState({ isBindingEnabled: true });
|
this.setState({ isBindingEnabled: true });
|
||||||
}
|
}
|
||||||
|
if (isArrowKey(event.key)) {
|
||||||
|
const selectedElements = getSelectedElements(
|
||||||
|
this.scene.getElements(),
|
||||||
|
this.state,
|
||||||
|
);
|
||||||
|
isBindingEnabled(this.state)
|
||||||
|
? bindOrUnbindSelectedElements(selectedElements)
|
||||||
|
: unbindLinearElements(selectedElements);
|
||||||
|
this.setState({ suggestedBindings: [] });
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
private selectShapeTool(elementType: AppState["elementType"]) {
|
private selectShapeTool(elementType: AppState["elementType"]) {
|
||||||
|
@ -2676,7 +2676,7 @@ Object {
|
|||||||
|
|
||||||
exports[`regression tests arrow keys: [end of test] number of elements 1`] = `1`;
|
exports[`regression tests arrow keys: [end of test] number of elements 1`] = `1`;
|
||||||
|
|
||||||
exports[`regression tests arrow keys: [end of test] number of renders 1`] = `13`;
|
exports[`regression tests arrow keys: [end of test] number of renders 1`] = `19`;
|
||||||
|
|
||||||
exports[`regression tests can drag element that covers another element, while another elem is selected: [end of test] appState 1`] = `
|
exports[`regression tests can drag element that covers another element, while another elem is selected: [end of test] appState 1`] = `
|
||||||
Object {
|
Object {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { render } from "./test-utils";
|
import { render } from "./test-utils";
|
||||||
import App from "../components/App";
|
import App from "../components/App";
|
||||||
import { UI, Pointer } from "./helpers/ui";
|
import { UI, Pointer, Keyboard } from "./helpers/ui";
|
||||||
import { getTransformHandles } from "../element/transformHandles";
|
import { getTransformHandles } from "../element/transformHandles";
|
||||||
import { API } from "./helpers/api";
|
import { API } from "./helpers/api";
|
||||||
|
|
||||||
@ -79,4 +79,28 @@ describe("element binding", () => {
|
|||||||
expect(API.getSelectedElement().type).toBe("rectangle");
|
expect(API.getSelectedElement().type).toBe("rectangle");
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
it("should bind/unbind arrow when moving it with keyboard", () => {
|
||||||
|
const rectangle = UI.createElement("rectangle", {
|
||||||
|
x: 75,
|
||||||
|
y: 0,
|
||||||
|
size: 100,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Creates arrow 1px away from bidding with rectangle
|
||||||
|
const arrow = UI.createElement("arrow", {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
size: 50,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(arrow.endBinding).toBe(null);
|
||||||
|
|
||||||
|
expect(API.getSelectedElement().type).toBe("arrow");
|
||||||
|
Keyboard.hotkeyPress("ARROW_RIGHT");
|
||||||
|
expect(arrow.endBinding?.elementId).toBe(rectangle.id);
|
||||||
|
|
||||||
|
Keyboard.hotkeyPress("ARROW_LEFT");
|
||||||
|
expect(arrow.endBinding).toBe(null);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user