76 lines
1.6 KiB
JavaScript
76 lines
1.6 KiB
JavaScript
import inherits from 'inherits';
|
|
|
|
import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
|
|
|
|
import {
|
|
getBusinessObject,
|
|
is
|
|
} from '../../../util/ModelUtil';
|
|
|
|
import { isLabel } from '../../../util/LabelUtil';
|
|
|
|
|
|
/**
|
|
* BPMN specific detach event behavior
|
|
*/
|
|
export default function DetachEventBehavior(eventBus, bpmnReplace) {
|
|
|
|
CommandInterceptor.call(this, eventBus);
|
|
|
|
/**
|
|
* replace boundary event with intermediate event when
|
|
* detaching from a shape
|
|
*/
|
|
|
|
this.preExecute('elements.move', function(context) {
|
|
var shapes = context.shapes,
|
|
host = context.newHost,
|
|
shape,
|
|
eventDefinition,
|
|
intermediateEvent,
|
|
newShape;
|
|
|
|
if (shapes.length !== 1) {
|
|
return;
|
|
}
|
|
|
|
shape = shapes[0];
|
|
|
|
if (!isLabel(shape) && !host && is(shape, 'bpmn:BoundaryEvent')) {
|
|
|
|
eventDefinition = getEventDefinition(shape);
|
|
|
|
if (eventDefinition) {
|
|
intermediateEvent = {
|
|
type: 'bpmn:IntermediateCatchEvent',
|
|
eventDefinitionType: eventDefinition.$type
|
|
};
|
|
} else {
|
|
intermediateEvent = {
|
|
type: 'bpmn:IntermediateThrowEvent'
|
|
};
|
|
}
|
|
|
|
newShape = bpmnReplace.replaceElement(shape, intermediateEvent, { layoutConnection: false });
|
|
|
|
context.shapes = [ newShape ];
|
|
}
|
|
}, true);
|
|
}
|
|
|
|
DetachEventBehavior.$inject = [
|
|
'eventBus',
|
|
'bpmnReplace'
|
|
];
|
|
|
|
inherits(DetachEventBehavior, CommandInterceptor);
|
|
|
|
|
|
|
|
// helper /////
|
|
function getEventDefinition(element) {
|
|
var bo = getBusinessObject(element);
|
|
|
|
return bo && bo.eventDefinitions && bo.eventDefinitions[0];
|
|
}
|