Allow to drag THEN press alt to duplicate (#1373)

* fix typo

* duplicate elements when alt is pressed on pointer move

* document use case

Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
Tom Dohnal 2020-04-11 13:37:43 +02:00 committed by GitHub
parent 5ca763cdbb
commit f3ef93e9ce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 68 additions and 50 deletions

View file

@ -6,16 +6,16 @@ Object {
"backgroundColor": "transparent",
"fillStyle": "hachure",
"height": 50,
"id": "id1",
"id": "id2",
"isDeleted": false,
"opacity": 100,
"roughness": 1,
"seed": 453191,
"seed": 2019559783,
"strokeColor": "#000000",
"strokeWidth": 1,
"type": "rectangle",
"version": 2,
"versionNonce": 1278240551,
"version": 4,
"versionNonce": 1150084233,
"width": 30,
"x": 30,
"y": 20,
@ -36,11 +36,11 @@ Object {
"strokeColor": "#000000",
"strokeWidth": 1,
"type": "rectangle",
"version": 3,
"versionNonce": 2019559783,
"version": 5,
"versionNonce": 1014066025,
"width": 30,
"x": 0,
"y": 40,
"x": -10,
"y": 60,
}
`;

View file

@ -34,7 +34,7 @@ Object {
"scrolledOutside": false,
"selectedElementIds": Object {
"id0": true,
"id2": true,
"id1": true,
},
"selectionElement": null,
"shouldCacheIgnoreZoom": false,
@ -51,16 +51,16 @@ Object {
"backgroundColor": "transparent",
"fillStyle": "hachure",
"height": 10,
"id": "id1",
"id": "id2",
"isDeleted": false,
"opacity": 100,
"roughness": 1,
"seed": 453191,
"seed": 2019559783,
"strokeColor": "#000000",
"strokeWidth": 1,
"type": "rectangle",
"version": 2,
"versionNonce": 1278240551,
"version": 4,
"versionNonce": 1150084233,
"width": 10,
"x": 10,
"y": 10,
@ -82,7 +82,7 @@ Object {
"strokeWidth": 1,
"type": "rectangle",
"version": 3,
"versionNonce": 2019559783,
"versionNonce": 401146281,
"width": 10,
"x": 20,
"y": 20,
@ -147,7 +147,7 @@ Object {
"name": "Untitled-201933152653",
"selectedElementIds": Object {
"id0": true,
"id2": true,
"id1": true,
},
"viewBackgroundColor": "#ffffff",
},
@ -157,16 +157,16 @@ Object {
"backgroundColor": "transparent",
"fillStyle": "hachure",
"height": 10,
"id": "id1",
"id": "id2",
"isDeleted": false,
"opacity": 100,
"roughness": 1,
"seed": 453191,
"seed": 2019559783,
"strokeColor": "#000000",
"strokeWidth": 1,
"type": "rectangle",
"version": 3,
"versionNonce": 1278240551,
"version": 5,
"versionNonce": 1150084233,
"width": 10,
"x": 10,
"y": 10,
@ -185,7 +185,7 @@ Object {
"strokeWidth": 1,
"type": "rectangle",
"version": 4,
"versionNonce": 2019559783,
"versionNonce": 401146281,
"width": 10,
"x": 20,
"y": 20,

View file

@ -74,17 +74,22 @@ describe("duplicate element on move when ALT is clicked", () => {
renderScene.mockClear();
}
fireEvent.pointerDown(canvas, { clientX: 50, clientY: 20, altKey: true });
fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40 });
fireEvent.pointerDown(canvas, { clientX: 50, clientY: 20 });
fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40, altKey: true });
// firing another pointerMove event with alt key pressed should NOT trigger
// another duplication
fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40, altKey: true });
fireEvent.pointerMove(canvas, { clientX: 10, clientY: 60 });
fireEvent.pointerUp(canvas);
expect(renderScene).toHaveBeenCalledTimes(3);
expect(renderScene).toHaveBeenCalledTimes(5);
expect(h.state.selectionElement).toBeNull();
expect(h.elements.length).toEqual(2);
// previous element should stay intact
expect([h.elements[0].x, h.elements[0].y]).toEqual([30, 20]);
expect([h.elements[1].x, h.elements[1].y]).toEqual([0, 40]);
expect([h.elements[1].x, h.elements[1].y]).toEqual([-10, 60]);
h.elements.forEach((element) => expect(element).toMatchSnapshot());
});