fix: allow adding text via enter only for text containers (#5891)
* fix: allow adding text via enter only for text containers * fix * fix * fix * move check isTextElement outside
This commit is contained in:
parent
4709b953e7
commit
96a5d6548b
@ -259,6 +259,7 @@ import {
|
|||||||
getApproxMinLineWidth,
|
getApproxMinLineWidth,
|
||||||
getBoundTextElement,
|
getBoundTextElement,
|
||||||
getContainerDims,
|
getContainerDims,
|
||||||
|
isValidTextContainer,
|
||||||
} from "../element/textElement";
|
} from "../element/textElement";
|
||||||
import { isHittingElementNotConsideringBoundingBox } from "../element/collision";
|
import { isHittingElementNotConsideringBoundingBox } from "../element/collision";
|
||||||
import {
|
import {
|
||||||
@ -1974,7 +1975,9 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (selectedElements.length === 1) {
|
if (selectedElements.length === 1) {
|
||||||
if (isLinearElement(selectedElements[0])) {
|
const selectedElement = selectedElements[0];
|
||||||
|
|
||||||
|
if (isLinearElement(selectedElement)) {
|
||||||
if (
|
if (
|
||||||
!this.state.editingLinearElement ||
|
!this.state.editingLinearElement ||
|
||||||
this.state.editingLinearElement.elementId !==
|
this.state.editingLinearElement.elementId !==
|
||||||
@ -1983,14 +1986,15 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
this.history.resumeRecording();
|
this.history.resumeRecording();
|
||||||
this.setState({
|
this.setState({
|
||||||
editingLinearElement: new LinearElementEditor(
|
editingLinearElement: new LinearElementEditor(
|
||||||
selectedElements[0],
|
selectedElement,
|
||||||
this.scene,
|
this.scene,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else if (
|
||||||
const selectedElement = selectedElements[0];
|
isTextElement(selectedElement) ||
|
||||||
|
isValidTextContainer(selectedElement)
|
||||||
|
) {
|
||||||
this.startTextEditing({
|
this.startTextEditing({
|
||||||
sceneX: selectedElement.x + selectedElement.width / 2,
|
sceneX: selectedElement.x + selectedElement.width / 2,
|
||||||
sceneY: selectedElement.y + selectedElement.height / 2,
|
sceneY: selectedElement.y + selectedElement.height / 2,
|
||||||
@ -2610,8 +2614,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
);
|
);
|
||||||
if (selectedElements.length === 1) {
|
if (selectedElements.length === 1) {
|
||||||
const selectedElement = selectedElements[0];
|
const selectedElement = selectedElements[0];
|
||||||
const canBindText = hasBoundTextElement(selectedElement);
|
if (hasBoundTextElement(selectedElement)) {
|
||||||
if (canBindText) {
|
|
||||||
sceneX = selectedElement.x + selectedElement.width / 2;
|
sceneX = selectedElement.x + selectedElement.width / 2;
|
||||||
sceneY = selectedElement.y + selectedElement.height / 2;
|
sceneY = selectedElement.y + selectedElement.height / 2;
|
||||||
}
|
}
|
||||||
@ -3913,8 +3916,7 @@ class App extends React.Component<AppProps, AppState> {
|
|||||||
includeBoundTextElement: true,
|
includeBoundTextElement: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const canBindText = hasBoundTextElement(element);
|
if (hasBoundTextElement(element)) {
|
||||||
if (canBindText) {
|
|
||||||
sceneX = element.x + element.width / 2;
|
sceneX = element.x + element.width / 2;
|
||||||
sceneY = element.y + element.height / 2;
|
sceneY = element.y + element.height / 2;
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import { MaybeTransformHandleType } from "./transformHandles";
|
|||||||
import Scene from "../scene/Scene";
|
import Scene from "../scene/Scene";
|
||||||
import { isTextElement } from ".";
|
import { isTextElement } from ".";
|
||||||
import { getMaxContainerHeight, getMaxContainerWidth } from "./newElement";
|
import { getMaxContainerHeight, getMaxContainerWidth } from "./newElement";
|
||||||
|
import { isImageElement } from "./typeChecks";
|
||||||
|
|
||||||
export const redrawTextBoundingBox = (
|
export const redrawTextBoundingBox = (
|
||||||
textElement: ExcalidrawTextElement,
|
textElement: ExcalidrawTextElement,
|
||||||
@ -490,3 +491,12 @@ export const getContainerElement = (
|
|||||||
export const getContainerDims = (element: ExcalidrawElement) => {
|
export const getContainerDims = (element: ExcalidrawElement) => {
|
||||||
return { width: element.width, height: element.height };
|
return { width: element.width, height: element.height };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const isValidTextContainer = (element: ExcalidrawElement) => {
|
||||||
|
return (
|
||||||
|
element.type === "rectangle" ||
|
||||||
|
element.type === "ellipse" ||
|
||||||
|
element.type === "diamond" ||
|
||||||
|
isImageElement(element)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
@ -584,6 +584,17 @@ describe("textWysiwyg", () => {
|
|||||||
expect((h.elements[1] as ExcalidrawTextElement).containerId).toBe(null);
|
expect((h.elements[1] as ExcalidrawTextElement).containerId).toBe(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("shouldn't create text element when pressing 'Enter' key on non text bindable container", async () => {
|
||||||
|
h.elements = [];
|
||||||
|
const freeDraw = UI.createElement("freedraw", {
|
||||||
|
width: 100,
|
||||||
|
height: 50,
|
||||||
|
});
|
||||||
|
API.setSelectedElements([freeDraw]);
|
||||||
|
Keyboard.keyPress(KEYS.ENTER);
|
||||||
|
expect(h.elements.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
it("should'nt bind text to container when not double clicked on center", async () => {
|
it("should'nt bind text to container when not double clicked on center", async () => {
|
||||||
expect(h.elements.length).toBe(1);
|
expect(h.elements.length).toBe(1);
|
||||||
expect(h.elements[0].id).toBe(rectangle.id);
|
expect(h.elements[0].id).toBe(rectangle.id);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user