From fdb299dc888a7dcdb3f7674b6ed2a857864df457 Mon Sep 17 00:00:00 2001 From: Nico Rehwaldt Date: Tue, 25 Jun 2019 16:41:29 +0200 Subject: [PATCH] feat(modeling): allow to drag participant via nested lane Related to https://github.com/bpmn-io/bpmn-js/issues/957 --- .../modeling/behavior/FixHoverBehavior.js | 12 +++++ .../modeling/behavior/FixHoverBehaviorSpec.js | 52 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/lib/features/modeling/behavior/FixHoverBehavior.js b/lib/features/modeling/behavior/FixHoverBehavior.js index cd707623..1f36f18d 100644 --- a/lib/features/modeling/behavior/FixHoverBehavior.js +++ b/lib/features/modeling/behavior/FixHoverBehavior.js @@ -5,6 +5,8 @@ import { is } from '../../../util/ModelUtil'; import { isAny } from '../util/ModelingUtil'; var HIGH_PRIORITY = 1500; +var HIGHEST_PRIORITY = 2000; + /** * Correct hover targets in certain situations to improve diagram interaction. @@ -90,6 +92,16 @@ export default function FixHoverBehavior(elementRegistry, eventBus, canvas) { } }); + + // allow movement of participants from lanes + eventBus.on('shape.move.start', HIGHEST_PRIORITY, function(event) { + var shape = event.shape; + + if (is(shape, 'bpmn:Lane')) { + event.shape = getLanesRoot(shape) || shape; + } + }); + } FixHoverBehavior.$inject = [ diff --git a/test/spec/features/modeling/behavior/FixHoverBehaviorSpec.js b/test/spec/features/modeling/behavior/FixHoverBehaviorSpec.js index aa403f69..4bdc9f3d 100644 --- a/test/spec/features/modeling/behavior/FixHoverBehaviorSpec.js +++ b/test/spec/features/modeling/behavior/FixHoverBehaviorSpec.js @@ -382,4 +382,56 @@ describe('features/modeling/behavior - fix hover', function() { }); + + describe('participant with lane', function() { + + var diagramXML = require('./FixHoverBehavior.lane-connect.bpmn'); + + beforeEach(bootstrapModeler(diagramXML, { + modules: testModules.concat([ + globalConnectModule, + bendpointsModule + ]) + })); + + beforeEach(inject(function(dragging) { + dragging.setOptions({ manual: true }); + })); + + + it('should move the participant when lane is dragged', inject( + function(canvas, eventBus, elementRegistry, move, dragging) { + + // given + var lane = elementRegistry.get('Lane_1'), + participant = elementRegistry.get('Participant_Lanes'); + + var rootElement = canvas.getRootElement(), + rootElementGfx = canvas.getGraphics(rootElement); + + var moveEndSpy = spy(function(event) { + expect(event.context.shape).to.equal(participant); + }); + + eventBus.on('shape.move.end', moveEndSpy); + + // when + move.start(canvasEvent({ x: 100, y: 100 }), lane); + + dragging.move(canvasEvent({ x: 140, y: 120 })); + + dragging.hover({ + element: rootElement, + gfx: rootElementGfx + }); + + dragging.end(); + + // then + expect(moveEndSpy).to.have.been.calledOnce; + } + )); + + }); + }); \ No newline at end of file