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:
Aakansha Doshi 2022-11-17 15:26:18 +05:30 committed by GitHub
parent 4709b953e7
commit 96a5d6548b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 9 deletions

View File

@ -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;
} }

View File

@ -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)
);
};

View File

@ -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);