From bdd6bf11babb889bbc0dffe79035229ef24416f4 Mon Sep 17 00:00:00 2001 From: Beatriz Mendes Date: Mon, 16 Jan 2023 16:12:42 +0100 Subject: [PATCH] feat(create): allow create with keyboard --- lib/features/create/Create.js | 10 ++++++++-- lib/features/create/index.js | 4 +++- test/spec/features/create/CreateSpec.js | 26 +++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/features/create/Create.js b/lib/features/create/Create.js index 6993fe5b8..3d617af80 100644 --- a/lib/features/create/Create.js +++ b/lib/features/create/Create.js @@ -34,7 +34,8 @@ export default function Create( dragging, eventBus, modeling, - rules + rules, + mouse ) { // rules ////////// @@ -307,6 +308,10 @@ export default function Create( }); }); + if (event instanceof KeyboardEvent) { + event = mouse.getLastMoveEvent(); + } + dragging.init(event, PREFIX, { cursor: 'grabbing', autoActivate: true, @@ -324,7 +329,8 @@ Create.$inject = [ 'dragging', 'eventBus', 'modeling', - 'rules' + 'rules', + 'mouse' ]; // helpers ////////// diff --git a/lib/features/create/index.js b/lib/features/create/index.js index 7ac200195..7213496ac 100644 --- a/lib/features/create/index.js +++ b/lib/features/create/index.js @@ -2,6 +2,7 @@ import DraggingModule from '../dragging'; import PreviewSupportModule from '../preview-support'; import RulesModule from '../rules'; import SelectionModule from '../selection'; +import Mouse from '../mouse'; import Create from './Create'; import CreatePreview from './CreatePreview'; @@ -12,7 +13,8 @@ export default { DraggingModule, PreviewSupportModule, RulesModule, - SelectionModule + SelectionModule, + Mouse ], __init__: [ 'create', diff --git a/test/spec/features/create/CreateSpec.js b/test/spec/features/create/CreateSpec.js index c6643dfb2..fb77284d6 100644 --- a/test/spec/features/create/CreateSpec.js +++ b/test/spec/features/create/CreateSpec.js @@ -184,6 +184,32 @@ describe('features/create - Create', function() { })); + it('should create from keyboard', inject(function(create, dragging, elementRegistry) { + + // given + var parentGfx = elementRegistry.getGraphics('parentShape'); + var keyboardEvent = new KeyboardEvent('keydown', { keyCode: 'Enter' }); + document.dispatchEvent(keyboardEvent); + + // when + create.start(keyboardEvent, newShape); + + dragging.hover({ element: parentShape, gfx: parentGfx }); + + dragging.move(canvasEvent(getMid(parentShape))); + + dragging.end(); + + // then + var createdShape = elementRegistry.get('newShape'); + + expect(createdShape).to.exist; + expect(createdShape).to.equal(newShape); + + expect(createdShape.parent).to.equal(parentShape); + })); + + it('should update elements and shape after create', inject( function(create, dragging, elementFactory, elementRegistry, eventBus) {