Skip to content

Commit

Permalink
fix: incorrectly selecting linear elements on creation while tool-loc…
Browse files Browse the repository at this point in the history
  • Loading branch information
dwelle authored Nov 2, 2022
1 parent 2e5c798 commit e8fba43
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/components/Actions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down
4 changes: 0 additions & 4 deletions src/components/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4836,10 +4836,6 @@ class App extends React.Component<AppProps, AppState> {
} else {
this.setState((prevState) => ({
draggingElement: null,
selectedElementIds: {
...prevState.selectedElementIds,
[draggingElement.id]: true,
},
}));
}
}
Expand Down
1 change: 1 addition & 0 deletions src/components/LockButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
3 changes: 2 additions & 1 deletion src/tests/queries/toolQueries.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { queries, buildQueries } from "@testing-library/react";

const toolMap = {
lock: "lock",
selection: "selection",
rectangle: "rectangle",
diamond: "diamond",
Expand All @@ -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) =>
Expand Down
19 changes: 18 additions & 1 deletion src/tests/selection.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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")!);
Expand Down Expand Up @@ -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);
}
}
});
});

0 comments on commit e8fba43

Please sign in to comment.