fix(drilldown): don't reset vieport on `makeCollaboration`

closes #1565
This commit is contained in:
Martin Stamm 2022-01-13 15:59:07 +01:00
parent 08c5e88046
commit cf6cbfca4a
2 changed files with 104 additions and 1 deletions

View File

@ -1,3 +1,5 @@
import { is } from '../../util/ModelUtil';
/** /**
* Move collapsed subprocesses into view when drilling down. * Move collapsed subprocesses into view when drilling down.
* *
@ -21,7 +23,14 @@ export default function DrilldownCentering(eventBus, canvas) {
}); });
var newRoot = event.element; var newRoot = event.element;
var storedViewbox = positionMap.get(newRoot) || { x: 0, y: 0, zoom: 1 }; var storedViewbox = positionMap.get(newRoot);
// current root was replaced with a collaboration, we don't update the viewbox
if (is(newRoot, 'bpmn:Collaboration') && !storedViewbox) {
return;
}
storedViewbox = storedViewbox || { x: 0, y: 0, zoom: 1 };
var dx = (currentViewbox.x - storedViewbox.x) * currentViewbox.scale, var dx = (currentViewbox.x - storedViewbox.x) * currentViewbox.scale,
dy = (currentViewbox.y - storedViewbox.y) * currentViewbox.scale; dy = (currentViewbox.y - storedViewbox.y) * currentViewbox.scale;

View File

@ -0,0 +1,94 @@
import {
inject
} from 'test/TestHelper';
import coreModule from 'lib/core';
import modelingModule from 'lib/features/modeling';
import DrilldownModule from 'lib/features/drilldown';
import { bootstrapModeler, getBpmnJS } from '../../../helper';
describe('features - drilldown', function() {
var testModules = [
coreModule,
modelingModule,
DrilldownModule
];
var multiLayerXML = require('./nested-subprocesses.bpmn');
beforeEach(bootstrapModeler(multiLayerXML, { modules: testModules }));
describe('Navigation', function() {
it('should not reset scroll on create collaboration',
inject(function(canvas, modeling) {
// given
canvas.scroll({ dx: 500, dy: 500 });
canvas.zoom(0.5);
var zoomedAndScrolledViewbox = canvas.viewbox();
// when
modeling.makeCollaboration();
// then
expectViewbox(zoomedAndScrolledViewbox);
})
);
it('should not reset scroll on create collaboration - undo',
inject(function(canvas, modeling, commandStack) {
// given
canvas.scroll({ dx: 500, dy: 500 });
canvas.zoom(0.5);
var zoomedAndScrolledViewbox = canvas.viewbox();
// when
modeling.makeCollaboration();
commandStack.undo();
// then
expectViewbox(zoomedAndScrolledViewbox);
})
);
it('should not reset scroll on create collaboration - redo',
inject(function(canvas, modeling, commandStack) {
// given
canvas.scroll({ dx: 500, dy: 500 });
canvas.zoom(0.5);
var zoomedAndScrolledViewbox = canvas.viewbox();
// when
modeling.makeCollaboration();
commandStack.undo();
commandStack.redo();
// then
expectViewbox(zoomedAndScrolledViewbox);
})
);
});
});
// helpers //////////
function expectViewbox(expectedViewbox) {
return getBpmnJS().invoke(function(canvas) {
var viewbox = canvas.viewbox();
expect(viewbox.x).to.eql(expectedViewbox.x);
expect(viewbox.y).to.eql(expectedViewbox.y);
expect(viewbox.scale).to.eql(expectedViewbox.scale);
});
}