fix(connections): fix update logic on reconnecting elements
Closes #534
This commit is contained in:
parent
28cc4e8e10
commit
5a02923a61
|
@ -194,19 +194,25 @@ function BpmnUpdater(eventBus, bpmnFactory, connectionDocking, translate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// on reconnectEnd -> default flow
|
// on reconnectEnd -> default flow
|
||||||
if ((businessObject.sourceRef && businessObject.sourceRef.default) && !is(newTarget, 'bpmn:Activity')) {
|
if ((businessObject.sourceRef && businessObject.sourceRef.default) &&
|
||||||
|
!(is(newTarget, 'bpmn:Activity') ||
|
||||||
|
is(newTarget, 'bpmn:EndEvent') ||
|
||||||
|
is(newTarget, 'bpmn:IntermediateThrowEvent')) ) {
|
||||||
context.default = businessObject.sourceRef.default;
|
context.default = businessObject.sourceRef.default;
|
||||||
businessObject.sourceRef.default = undefined;
|
businessObject.sourceRef.default = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// on reconnectStart -> condtional flow
|
// on reconnectStart -> conditional flow
|
||||||
if ((businessObject.conditionExpression) && is(oldSource, 'bpmn:Activity')) {
|
if ((businessObject.conditionExpression) && !is(newSource, 'bpmn:Activity')) {
|
||||||
context.conditionExpression = businessObject.conditionExpression;
|
context.conditionExpression = businessObject.conditionExpression;
|
||||||
businessObject.conditionExpression = undefined;
|
businessObject.conditionExpression = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// on reconnectEnd -> condtional flow
|
// on reconnectEnd -> conditional flow
|
||||||
if ((businessObject.conditionExpression) && !is(newTarget, 'bpmn:Activity')) {
|
if ((businessObject.conditionExpression) &&
|
||||||
|
!(is(newTarget, 'bpmn:Activity') ||
|
||||||
|
is(newTarget, 'bpmn:EndEvent') ||
|
||||||
|
is(newTarget, 'bpmn:IntermediateThrowEvent')) ) {
|
||||||
context.conditionExpression = businessObject.conditionExpression;
|
context.conditionExpression = businessObject.conditionExpression;
|
||||||
businessObject.conditionExpression = undefined;
|
businessObject.conditionExpression = undefined;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1266,33 +1266,72 @@ describe('features/popup-menu - replace menu provider', function() {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
||||||
it('should replace DefaultFlow with SequenceFlow when changing target',
|
[
|
||||||
inject(function(elementRegistry, elementFactory, canvas, popupMenu, modeling) {
|
'bpmn:StartEvent'
|
||||||
// given
|
].forEach(function(type) {
|
||||||
var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
|
it('should replace DefaultFlow with SequenceFlow when changing target to ' + type,
|
||||||
root = canvas.getRootElement();
|
inject(function(elementRegistry, elementFactory, canvas, popupMenu, modeling) {
|
||||||
|
// given
|
||||||
|
var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
|
||||||
|
root = canvas.getRootElement();
|
||||||
|
|
||||||
var intermediateEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent'});
|
var intermediateEvent = elementFactory.createShape({ type: type});
|
||||||
|
|
||||||
modeling.createShape(intermediateEvent, { x: 686, y: 50 }, root);
|
modeling.createShape(intermediateEvent, { x: 686, y: 50 }, root);
|
||||||
|
|
||||||
openPopup(sequenceFlow);
|
openPopup(sequenceFlow);
|
||||||
|
|
||||||
var entries = getEntries(popupMenu);
|
var entries = getEntries(popupMenu);
|
||||||
|
|
||||||
triggerAction(entries, 'replace-with-default-flow');
|
triggerAction(entries, 'replace-with-default-flow');
|
||||||
|
|
||||||
// when
|
// when
|
||||||
modeling.reconnectEnd(sequenceFlow, intermediateEvent, [
|
modeling.reconnectEnd(sequenceFlow, intermediateEvent, [
|
||||||
{ x: 686, y: 267, original: { x: 686, y: 307 } },
|
{ x: 686, y: 267, original: { x: 686, y: 307 } },
|
||||||
{ x: 686, y: 50, original: { x: 686, y: 75 } }
|
{ x: 686, y: 50, original: { x: 686, y: 75 } }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
var gateway = elementRegistry.get('ExclusiveGateway_1');
|
var gateway = elementRegistry.get('ExclusiveGateway_1');
|
||||||
|
|
||||||
// then
|
// then
|
||||||
expect(gateway.businessObject.default).to.not.exist;
|
expect(gateway.businessObject.default).to.not.exist;
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
'bpmn:Activity',
|
||||||
|
'bpmn:EndEvent',
|
||||||
|
'bpmn:IntermediateThrowEvent'
|
||||||
|
].forEach(function(type) {
|
||||||
|
it('should keep DefaultFlow when changing target to ' + type,
|
||||||
|
inject(function(elementRegistry, elementFactory, canvas, popupMenu, modeling) {
|
||||||
|
// given
|
||||||
|
var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
|
||||||
|
root = canvas.getRootElement();
|
||||||
|
|
||||||
|
var intermediateEvent = elementFactory.createShape({ type: type});
|
||||||
|
|
||||||
|
modeling.createShape(intermediateEvent, { x: 686, y: 50 }, root);
|
||||||
|
|
||||||
|
openPopup(sequenceFlow);
|
||||||
|
|
||||||
|
var entries = getEntries(popupMenu);
|
||||||
|
|
||||||
|
triggerAction(entries, 'replace-with-default-flow');
|
||||||
|
|
||||||
|
// when
|
||||||
|
modeling.reconnectEnd(sequenceFlow, intermediateEvent, [
|
||||||
|
{ x: 686, y: 267, original: { x: 686, y: 307 } },
|
||||||
|
{ x: 686, y: 50, original: { x: 686, y: 75 } }
|
||||||
|
]);
|
||||||
|
|
||||||
|
var gateway = elementRegistry.get('ExclusiveGateway_1');
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(gateway.businessObject.default).to.exist;
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should replace DefaultFlow with SequenceFlow when changing target -> undo',
|
it('should replace DefaultFlow with SequenceFlow when changing target -> undo',
|
||||||
|
@ -1301,7 +1340,7 @@ describe('features/popup-menu - replace menu provider', function() {
|
||||||
var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
|
var sequenceFlow = elementRegistry.get('SequenceFlow_1'),
|
||||||
root = canvas.getRootElement();
|
root = canvas.getRootElement();
|
||||||
|
|
||||||
var intermediateEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent'});
|
var intermediateEvent = elementFactory.createShape({ type: 'bpmn:StartEvent'});
|
||||||
|
|
||||||
modeling.createShape(intermediateEvent, { x: 686, y: 50 }, root);
|
modeling.createShape(intermediateEvent, { x: 686, y: 50 }, root);
|
||||||
|
|
||||||
|
@ -1556,30 +1595,66 @@ describe('features/popup-menu - replace menu provider', function() {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
||||||
it('should replace ConditionalFlow with SequenceFlow when changing target',
|
[
|
||||||
inject(function(elementRegistry, elementFactory, canvas, popupMenu, modeling) {
|
'bpmn:StartEvent'
|
||||||
// given
|
].forEach(function(type) {
|
||||||
var sequenceFlow = elementRegistry.get('SequenceFlow_3'),
|
it('should replace ConditionalFlow with SequenceFlow when changing target to ' + type,
|
||||||
root = canvas.getRootElement(),
|
inject(function(elementRegistry, elementFactory, canvas, popupMenu, modeling) {
|
||||||
intermediateEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent'});
|
// given
|
||||||
|
var sequenceFlow = elementRegistry.get('SequenceFlow_3'),
|
||||||
|
root = canvas.getRootElement(),
|
||||||
|
intermediateEvent = elementFactory.createShape({ type: type });
|
||||||
|
|
||||||
modeling.createShape(intermediateEvent, { x: 497, y: 197 }, root);
|
modeling.createShape(intermediateEvent, { x: 497, y: 197 }, root);
|
||||||
|
|
||||||
openPopup(sequenceFlow);
|
openPopup(sequenceFlow);
|
||||||
|
|
||||||
var entries = getEntries(popupMenu);
|
var entries = getEntries(popupMenu);
|
||||||
|
|
||||||
triggerAction(entries, 'replace-with-conditional-flow');
|
triggerAction(entries, 'replace-with-conditional-flow');
|
||||||
|
|
||||||
// when
|
// when
|
||||||
modeling.reconnectEnd(sequenceFlow, intermediateEvent, [
|
modeling.reconnectEnd(sequenceFlow, intermediateEvent, [
|
||||||
{ x: 389, y: 197, original: { x: 389, y: 197 } },
|
{ x: 389, y: 197, original: { x: 389, y: 197 } },
|
||||||
{ x: 497, y: 197, original: { x: 497, y: 197 } }
|
{ x: 497, y: 197, original: { x: 497, y: 197 } }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
expect(sequenceFlow.businessObject.conditionExpression).to.not.exist;
|
expect(sequenceFlow.businessObject.conditionExpression).to.not.exist;
|
||||||
}));
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
[
|
||||||
|
'bpmn:Activity',
|
||||||
|
'bpmn:EndEvent',
|
||||||
|
'bpmn:IntermediateThrowEvent'
|
||||||
|
].forEach(function(type) {
|
||||||
|
it('should keep ConditionalFlow when changing target to ' + type,
|
||||||
|
inject(function(elementRegistry, elementFactory, canvas, popupMenu, modeling) {
|
||||||
|
// given
|
||||||
|
var sequenceFlow = elementRegistry.get('SequenceFlow_3'),
|
||||||
|
root = canvas.getRootElement(),
|
||||||
|
intermediateEvent = elementFactory.createShape({ type: type });
|
||||||
|
|
||||||
|
modeling.createShape(intermediateEvent, { x: 497, y: 197 }, root);
|
||||||
|
|
||||||
|
openPopup(sequenceFlow);
|
||||||
|
|
||||||
|
var entries = getEntries(popupMenu);
|
||||||
|
|
||||||
|
triggerAction(entries, 'replace-with-conditional-flow');
|
||||||
|
|
||||||
|
// when
|
||||||
|
modeling.reconnectEnd(sequenceFlow, intermediateEvent, [
|
||||||
|
{ x: 389, y: 197, original: { x: 389, y: 197 } },
|
||||||
|
{ x: 497, y: 197, original: { x: 497, y: 197 } }
|
||||||
|
]);
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(sequenceFlow.businessObject.conditionExpression).to.exist;
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should replace ConditionalFlow with SequenceFlow when changing target -> undo',
|
it('should replace ConditionalFlow with SequenceFlow when changing target -> undo',
|
||||||
|
@ -1587,7 +1662,7 @@ describe('features/popup-menu - replace menu provider', function() {
|
||||||
// given
|
// given
|
||||||
var sequenceFlow = elementRegistry.get('SequenceFlow_3'),
|
var sequenceFlow = elementRegistry.get('SequenceFlow_3'),
|
||||||
root = canvas.getRootElement(),
|
root = canvas.getRootElement(),
|
||||||
intermediateEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent'});
|
intermediateEvent = elementFactory.createShape({ type: 'bpmn:StartEvent'});
|
||||||
|
|
||||||
modeling.createShape(intermediateEvent, { x: 497, y: 197 }, root);
|
modeling.createShape(intermediateEvent, { x: 497, y: 197 }, root);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue