feat(modeling): allow to drag participant via nested lane

Related to https://github.com/bpmn-io/bpmn-js/issues/957
This commit is contained in:
Nico Rehwaldt 2019-06-25 16:41:29 +02:00
parent 7b0e304062
commit fdb299dc88
2 changed files with 64 additions and 0 deletions

View File

@ -5,6 +5,8 @@ import { is } from '../../../util/ModelUtil';
import { isAny } from '../util/ModelingUtil'; import { isAny } from '../util/ModelingUtil';
var HIGH_PRIORITY = 1500; var HIGH_PRIORITY = 1500;
var HIGHEST_PRIORITY = 2000;
/** /**
* Correct hover targets in certain situations to improve diagram interaction. * 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 = [ FixHoverBehavior.$inject = [

View File

@ -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;
}
));
});
}); });