@logicflow/extension
Version:
LogicFlow Extensions
86 lines (85 loc) • 3.19 kB
JavaScript
import PoolNode from './Pool';
import LaneNode from './Lane';
export function laneToJSON(data) {
return "<bpmn:participant id=\"".concat(data.id, "\" name=\"").concat(data.name, "\" processRef=\"").concat(data.properties.processRef, "\"/>");
}
export function poolToJSON(data) {
return "<bpmn:collaboration id=\"".concat(data.id, "\">\n ").concat(data.children.map(function (child) { return child.toJSON(child); }).join('\t\n'), "\n</bpmn:collaboration>");
}
function poolEvent(lf) {
var selectAll = function () {
var _a = lf.getGraphData(), _b = _a.nodes, nodes = _b === void 0 ? [] : _b, _c = _a.edges, edges = _c === void 0 ? [] : _c;
nodes.forEach(function (node) {
var id = node.id;
if (id) {
lf.selectElementById(id);
}
});
edges.forEach(function (edge) {
var id = edge.id;
if (id) {
lf.selectElementById(id);
}
});
return false;
};
lf.keyboard.on('cmd + a', selectAll);
lf.keyboard.on('ctrl + a', selectAll);
lf.on('node:dnd-add, edge:add', function (_a) {
var data = _a.data;
var x = data.x, y = data.y, type = data.type, id = data.id;
if (type === 'pool') {
lf.setProperties(data.id, {});
var poolModel = lf.getNodeModelById(id);
var width = poolModel.width, height = poolModel.height;
var laneId = lf.addNode({
type: 'lane',
properties: {
nodeSize: {
width: width - 30,
height: height,
},
},
x: x + 15,
y: y,
}).id;
poolModel.addChild(laneId);
}
});
lf.on('node:resize', function (_a) {
var preData = _a.preData, data = _a.data;
var id = preData.id, type = preData.type;
var deltaHeight = data.height - preData.height;
// const resizeDir = data.y - preData.y > 0 ? 'below': 'above'
// 节点高度变高,y下移, 方向为below
// 节点高度变高, y上移, 方向为above
// 节点高度变小, y下移, 方向为above
// 节点高度变小, y上移,方向为below
var resizeDir = 'below';
if (deltaHeight > 0 && data.y - preData.y < 0) {
resizeDir = 'above';
}
else if (deltaHeight < 0 && data.y - preData.y > 0) {
resizeDir = 'above';
}
if (type === 'pool') {
// 泳池缩放,泳道一起调整
lf.getNodeModelById(id).resizeChildren({
resizeDir: resizeDir,
deltaHeight: deltaHeight,
});
}
else if (type === 'lane') {
// 泳道缩放, 调整泳池
var groupId = lf.extension.group.nodeGroupMap.get(id);
if (groupId) {
lf.getNodeModelById(groupId).resize(id, data);
}
}
});
}
export var registerPoolNodes = function (lf) {
lf.register(PoolNode);
lf.register(LaneNode);
poolEvent(lf);
};