fix: incorrectly selecting linear elements on creation while tool-locked (#5785)

This commit is contained in:
David Luzar 2022-11-02 14:38:58 +01:00 committed by GitHub
parent 2e5c798c71
commit e8fba43cf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 22 additions and 7 deletions

View File

@ -237,7 +237,7 @@ export const ShapesSwitcher = ({
keyBindingLabel={`${numberKey}`}
aria-label={capitalizeString(label)}
aria-keyshortcuts={shortcut}
data-testid={value}
data-testid={`toolbar-${value}`}
onPointerDown={({ pointerType }) => {
if (!appState.penDetected && pointerType === "pen") {
setAppState({

View File

@ -4836,10 +4836,6 @@ class App extends React.Component<AppProps, AppState> {
} else {
this.setState((prevState) => ({
draggingElement: null,
selectedElementIds: {
...prevState.selectedElementIds,
[draggingElement.id]: true,
},
}));
}
}

View File

@ -39,6 +39,7 @@ export const LockButton = (props: LockIconProps) => {
onChange={props.onChange}
checked={props.checked}
aria-label={props.title}
data-testid="toolbar-lock"
/>
<div className="ToolIcon__icon">
{props.checked ? ICONS.CHECKED : ICONS.UNCHECKED}

View File

@ -1,6 +1,7 @@
import { queries, buildQueries } from "@testing-library/react";
const toolMap = {
lock: "lock",
selection: "selection",
rectangle: "rectangle",
diamond: "diamond",
@ -15,7 +16,7 @@ export type ToolName = keyof typeof toolMap;
const _getAllByToolName = (container: HTMLElement, tool: string) => {
const toolTitle = toolMap[tool as ToolName];
return queries.getAllByTestId(container, toolTitle);
return queries.getAllByTestId(container, `toolbar-${toolTitle}`);
};
const getMultipleError = (_container: any, tool: any) =>

View File

@ -11,7 +11,8 @@ import * as Renderer from "../renderer/renderScene";
import { KEYS } from "../keys";
import { reseed } from "../random";
import { API } from "./helpers/api";
import { Keyboard, Pointer } from "./helpers/ui";
import { Keyboard, Pointer, UI } from "./helpers/ui";
import { SHAPES } from "../shapes";
// Unmount ReactDOM from root
ReactDOM.unmountComponentAtNode(document.getElementById("root")!);
@ -380,3 +381,19 @@ describe("select single element on the scene", () => {
h.elements.forEach((element) => expect(element).toMatchSnapshot());
});
});
describe("tool locking & selection", () => {
it("should not select newly created element while tool is locked", async () => {
await render(<ExcalidrawApp />);
UI.clickTool("lock");
expect(h.state.activeTool.locked).toBe(true);
for (const { value } of Object.values(SHAPES)) {
if (value !== "image" && value !== "selection") {
const element = UI.createElement(value);
expect(h.state.selectedElementIds[element.id]).not.toBe(true);
}
}
});
});