chore(space-tool): refactor participant minimum height function
This commit is contained in:
parent
dafa6f138c
commit
6388312fb5
|
@ -1,7 +1,4 @@
|
||||||
import {
|
import { forEach } from 'min-dash';
|
||||||
forEach,
|
|
||||||
reduce
|
|
||||||
} from 'min-dash';
|
|
||||||
|
|
||||||
import { is } from '../../../util/ModelUtil';
|
import { is } from '../../../util/ModelUtil';
|
||||||
|
|
||||||
|
@ -59,6 +56,9 @@ SpaceToolBehavior.$inject = [ 'eventBus' ];
|
||||||
|
|
||||||
|
|
||||||
// helpers //////////
|
// helpers //////////
|
||||||
|
function isHorizontal(axis) {
|
||||||
|
return axis === 'x';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get minimum height for participant taking lanes into account.
|
* Get minimum height for participant taking lanes into account.
|
||||||
|
@ -69,39 +69,56 @@ SpaceToolBehavior.$inject = [ 'eventBus' ];
|
||||||
* @returns {Object}
|
* @returns {Object}
|
||||||
*/
|
*/
|
||||||
function getParticipantMinHeight(participant, start) {
|
function getParticipantMinHeight(participant, start) {
|
||||||
var lanes = getChildLanes(participant);
|
var lanesMinHeight;
|
||||||
|
|
||||||
if (!lanes.length) {
|
if (!hasChildLanes(participant)) {
|
||||||
return PARTICIPANT_MIN_DIMENSIONS.height;
|
return PARTICIPANT_MIN_DIMENSIONS.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLanesMinHeight(element) {
|
lanesMinHeight = getLanesMinHeight(participant, start);
|
||||||
return reduce(getChildLanes(element), function(minHeight, lane) {
|
|
||||||
if (start >= lane.y && start <= lane.y + lane.height) {
|
|
||||||
|
|
||||||
// resizing lane
|
return max(PARTICIPANT_MIN_DIMENSIONS.height, lanesMinHeight);
|
||||||
if (hasChildLanes(lane)) {
|
|
||||||
minHeight += getLanesMinHeight(lane);
|
|
||||||
} else {
|
|
||||||
minHeight += lane.y + LANE_MIN_DIMENSIONS.height - participant.y;
|
|
||||||
}
|
|
||||||
} else if (start <= lane.y) {
|
|
||||||
|
|
||||||
// lane after resizing lane
|
|
||||||
minHeight += lane.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
return minHeight;
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return max(PARTICIPANT_MIN_DIMENSIONS.height, getLanesMinHeight(participant));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasChildLanes(element) {
|
function hasChildLanes(element) {
|
||||||
return !!getChildLanes(element).length;
|
return !!getChildLanes(element).length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function isHorizontal(axis) {
|
function getLanesMinHeight(participant, resizeStart) {
|
||||||
return axis === 'x';
|
var lanes = getChildLanes(participant),
|
||||||
}
|
resizedLane;
|
||||||
|
|
||||||
|
// find the nested lane which is currently resized
|
||||||
|
resizedLane = findResizedLane(lanes, resizeStart);
|
||||||
|
|
||||||
|
// resized lane cannot shrink below the minimum height
|
||||||
|
// but remaining lanes' dimensions are kept intact
|
||||||
|
return participant.height - resizedLane.height + LANE_MIN_DIMENSIONS.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find nested lane which is currently resized.
|
||||||
|
*
|
||||||
|
* @param {Array<djs.model.Shape>} lanes
|
||||||
|
* @param {number} resizeStart
|
||||||
|
*/
|
||||||
|
function findResizedLane(lanes, resizeStart) {
|
||||||
|
var i, lane, childLanes;
|
||||||
|
|
||||||
|
for (i = 0; i < lanes.length; i++) {
|
||||||
|
lane = lanes[i];
|
||||||
|
|
||||||
|
// resizing current lane or a lane nested
|
||||||
|
if (resizeStart >= lane.y && resizeStart <= lane.y + lane.height) {
|
||||||
|
childLanes = getChildLanes(lane);
|
||||||
|
|
||||||
|
// a nested lane is resized
|
||||||
|
if (childLanes.length) {
|
||||||
|
return findResizedLane(childLanes, resizeStart);
|
||||||
|
}
|
||||||
|
|
||||||
|
// current lane is the resized one
|
||||||
|
return lane;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue