Skip to content

Commit

Permalink
fix: ensure that preventDefault is only called when necessary for key…
Browse files Browse the repository at this point in the history
…board inputs
  • Loading branch information
JamesLMilner committed Jun 20, 2023
1 parent 295f7e3 commit 108e20d
Show file tree
Hide file tree
Showing 10 changed files with 174 additions and 37 deletions.
8 changes: 4 additions & 4 deletions src/adapters/common/base.adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -214,12 +214,12 @@ export abstract class TerraDrawBaseAdapter {

if (!this._currentModeCallbacks) return;

event.preventDefault();

this._heldKeys.delete(event.key);

this._currentModeCallbacks.onKeyUp({
key: event.key,
heldKeys: Array.from(this._heldKeys),
preventDefault: () => event.preventDefault(),
});
},
register: (callback) => {
Expand All @@ -238,12 +238,12 @@ export abstract class TerraDrawBaseAdapter {
return;
}

event.preventDefault();

this._heldKeys.add(event.key);

this._currentModeCallbacks.onKeyDown({
key: event.key,
heldKeys: Array.from(this._heldKeys),
preventDefault: () => event.preventDefault(),
});
},
register: (callback) => {
Expand Down
2 changes: 2 additions & 0 deletions src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ export interface TerraDrawMouseEvent {

export interface TerraDrawKeyboardEvent {
key: string;
heldKeys: string[];
preventDefault: () => void;
}

export type SetCursor = (
Expand Down
20 changes: 17 additions & 3 deletions src/modes/circle/circle.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,8 @@ describe("TerraDrawCircleMode", () => {

circleMode.onKeyUp({
key: "Enter",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
Expand Down Expand Up @@ -356,7 +358,11 @@ describe("TerraDrawCircleMode", () => {

describe("cancel", () => {
it("does nothing when no circle is present", () => {
circleMode.onKeyUp({ key: "Escape" });
circleMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});
});

it("deletes the circle when currently editing", () => {
Expand All @@ -372,7 +378,11 @@ describe("TerraDrawCircleMode", () => {
let features = store.copyAll();
expect(features.length).toBe(1);

circleMode.onKeyUp({ key: "Escape" });
circleMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
expect(features.length).toBe(0);
Expand Down Expand Up @@ -401,7 +411,11 @@ describe("TerraDrawCircleMode", () => {
let features = store.copyAll();
expect(features.length).toBe(1);

circleMode.onKeyUp({ key: "Escape" });
circleMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
expect(features.length).toBe(1);
Expand Down
20 changes: 17 additions & 3 deletions src/modes/freehand/freehand.mode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,11 @@ describe("TerraDrawFreehandMode", () => {

describe("cancel", () => {
it("does nothing when no freehand is present", () => {
freehandMode.onKeyUp({ key: "Escape" });
freehandMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});
});

it("deletes the freehand when currently editing", () => {
Expand All @@ -352,7 +356,11 @@ describe("TerraDrawFreehandMode", () => {
let features = store.copyAll();
expect(features.length).toBe(2);

freehandMode.onKeyUp({ key: "Escape" });
freehandMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
expect(features.length).toBe(0);
Expand Down Expand Up @@ -380,7 +388,11 @@ describe("TerraDrawFreehandMode", () => {
let features = store.copyAll();
expect(features.length).toBe(2);

freehandMode.onKeyUp({ key: "Escape" });
freehandMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
expect(features.length).toBe(2);
Expand All @@ -403,6 +415,8 @@ describe("TerraDrawFreehandMode", () => {

freehandMode.onKeyUp({
key: "Enter",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
Expand Down
30 changes: 25 additions & 5 deletions src/modes/greatcircle/great-circle.mode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,11 @@ describe("TerraDrawGreatCircleMode", () => {

describe("cancel", () => {
it("does nothing when no line is present", () => {
greatCircleMode.onKeyUp({ key: "Escape" });
greatCircleMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});
expect(onChange).toBeCalledTimes(0);
});

Expand All @@ -315,7 +319,11 @@ describe("TerraDrawGreatCircleMode", () => {
let features = store.copyAll();
expect(features.length).toBe(2);

greatCircleMode.onKeyUp({ key: "Escape" });
greatCircleMode.onKeyUp({
key: "Escape",
heldKeys: [],
preventDefault: jest.fn(),
});

features = store.copyAll();
expect(features.length).toBe(0);
Expand All @@ -324,7 +332,11 @@ describe("TerraDrawGreatCircleMode", () => {

describe("finish", () => {
it("does nothing if no drawing is happening", () => {
greatCircleMode.onKeyUp({ key: "Enter" });
greatCircleMode.onKeyUp({
key: "Enter",
heldKeys: [],
preventDefault: jest.fn(),
});

expect(onChange).toBeCalledTimes(0);
});
Expand Down Expand Up @@ -361,7 +373,11 @@ describe("TerraDrawGreatCircleMode", () => {

expect(features[0].geometry.coordinates.length).toBe(100);

greatCircleMode.onKeyUp({ key: "Enter" });
greatCircleMode.onKeyUp({
key: "Enter",
heldKeys: [],
preventDefault: jest.fn(),
});

expect(onChange).toBeCalledTimes(5);
features = store.copyAll();
Expand Down Expand Up @@ -416,7 +432,11 @@ describe("TerraDrawGreatCircleMode", () => {

expect(features[0].geometry.coordinates.length).toBe(100);

greatCircleMode.onKeyUp({ key: "Enter" });
greatCircleMode.onKeyUp({
key: "Enter",
heldKeys: [],
preventDefault: jest.fn(),
});

expect(onChange).toBeCalledTimes(4);
});
Expand Down
16 changes: 14 additions & 2 deletions src/modes/linestring/linestring.mode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,11 @@ describe("TerraDrawLineStringMode", () => {

describe("cancel", () => {
it("does nothing when no line is present", () => {
lineStringMode.onKeyUp({ key: "Escape" });
lineStringMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});
});

it("deletes the line when currently editing", () => {
Expand All @@ -462,7 +466,11 @@ describe("TerraDrawLineStringMode", () => {
let features = store.copyAll();
expect(features.length).toBe(1);

lineStringMode.onKeyUp({ key: "Escape" });
lineStringMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});

features = store.copyAll();
expect(features.length).toBe(0);
Expand Down Expand Up @@ -538,6 +546,8 @@ describe("TerraDrawLineStringMode", () => {

lineStringMode.onKeyUp({
key: "Enter",
preventDefault: jest.fn(),
heldKeys: [],
});

expect(onChange).toBeCalledTimes(8);
Expand Down Expand Up @@ -636,6 +646,8 @@ describe("TerraDrawLineStringMode", () => {

lineStringMode.onKeyUp({
key: "Enter",
preventDefault: jest.fn(),
heldKeys: [],
});

expect(onChange).toBeCalledTimes(6);
Expand Down
22 changes: 19 additions & 3 deletions src/modes/polygon/polygon.mode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -981,7 +981,11 @@ describe("TerraDrawPolygonMode", () => {

describe("cancel", () => {
it("does nothing when no line is present", () => {
polygonMode.onKeyUp({ key: "Escape" });
polygonMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});
});

it("deletes the line when currently editing", () => {
Expand All @@ -997,7 +1001,11 @@ describe("TerraDrawPolygonMode", () => {
let features = store.copyAll();
expect(features.length).toBe(1);

polygonMode.onKeyUp({ key: "Escape" });
polygonMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});

features = store.copyAll();
expect(features.length).toBe(0);
Expand Down Expand Up @@ -1025,7 +1033,11 @@ describe("TerraDrawPolygonMode", () => {
let features = store.copyAll();
expect(features.length).toBe(1);

polygonMode.onKeyUp({ key: "Escape" });
polygonMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});

features = store.copyAll();
expect(features.length).toBe(1);
Expand Down Expand Up @@ -1126,6 +1138,8 @@ describe("TerraDrawPolygonMode", () => {
// Finish drawing the polygon
polygonMode.onKeyUp({
key: "Enter",
preventDefault: jest.fn(),
heldKeys: [],
});

// Creates a new polygon
Expand Down Expand Up @@ -1228,6 +1242,8 @@ describe("TerraDrawPolygonMode", () => {

polygonMode.onKeyUp({
key: "Enter",
preventDefault: jest.fn(),
heldKeys: [],
});

const features = store.copyAll();
Expand Down
16 changes: 14 additions & 2 deletions src/modes/rectangle/rectangle.mode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ describe("TerraDrawRectangleMode", () => {

rectangleMode.onKeyUp({
key: "Enter",
preventDefault: jest.fn(),
heldKeys: [],
});

rectangleMode.onClick({
Expand Down Expand Up @@ -262,6 +264,8 @@ describe("TerraDrawRectangleMode", () => {

rectangleMode.onKeyUp({
key: "Enter",
preventDefault: jest.fn(),
heldKeys: [],
});

features = store.copyAll();
Expand Down Expand Up @@ -398,7 +402,11 @@ describe("TerraDrawRectangleMode", () => {

describe("cancel", () => {
it("does nothing when no rectangle is present", () => {
rectangleMode.onKeyUp({ key: "Escape" });
rectangleMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});
});

it("deletes the rectangle when currently editing", () => {
Expand All @@ -414,7 +422,11 @@ describe("TerraDrawRectangleMode", () => {
let features = store.copyAll();
expect(features.length).toBe(1);

rectangleMode.onKeyUp({ key: "Escape" });
rectangleMode.onKeyUp({
key: "Escape",
preventDefault: jest.fn(),
heldKeys: [],
});

features = store.copyAll();
expect(features.length).toBe(0);
Expand Down
Loading

0 comments on commit 108e20d

Please sign in to comment.