70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
import inherits from 'inherits';
|
|
|
|
import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
|
|
|
|
import { is } from '../../../util/ModelUtil';
|
|
import { isExpanded } from '../../../util/DiUtil.js';
|
|
|
|
/**
|
|
* Add start event child by default when creating an expanded subprocess
|
|
* with create.start or replacing a task with an expanded subprocess.
|
|
*/
|
|
export default function SubProcessStartEventBehavior(eventBus, modeling) {
|
|
CommandInterceptor.call(this, eventBus);
|
|
|
|
eventBus.on('create.start', function(event) {
|
|
var shape = event.context.shape,
|
|
hints = event.context.hints;
|
|
|
|
hints.shouldAddStartEvent = is(shape, 'bpmn:SubProcess') && isExpanded(shape);
|
|
});
|
|
|
|
this.postExecuted('shape.create', function(event) {
|
|
var shape = event.context.shape,
|
|
hints = event.context.hints,
|
|
position;
|
|
|
|
if (!hints.shouldAddStartEvent) {
|
|
return;
|
|
}
|
|
|
|
position = calculatePositionRelativeToShape(shape);
|
|
|
|
modeling.createShape({ type: 'bpmn:StartEvent' }, position, shape);
|
|
});
|
|
|
|
this.postExecuted('shape.replace', function(event) {
|
|
var oldShape = event.context.oldShape,
|
|
newShape = event.context.newShape,
|
|
position;
|
|
|
|
if (
|
|
!is(newShape, 'bpmn:SubProcess') ||
|
|
!is(oldShape, 'bpmn:Task') ||
|
|
!isExpanded(newShape)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
position = calculatePositionRelativeToShape(newShape);
|
|
|
|
modeling.createShape({ type: 'bpmn:StartEvent' }, position, newShape);
|
|
});
|
|
}
|
|
|
|
SubProcessStartEventBehavior.$inject = [
|
|
'eventBus',
|
|
'modeling'
|
|
];
|
|
|
|
inherits(SubProcessStartEventBehavior, CommandInterceptor);
|
|
|
|
// helpers //////////
|
|
|
|
function calculatePositionRelativeToShape(shape) {
|
|
return {
|
|
x: shape.x + shape.width / 6,
|
|
y: shape.y + shape.height / 2
|
|
};
|
|
}
|