basicprimitives
Version:
Basic Primitives Diagrams for JavaScript - data visualization components library that implements organizational chart and multi-parent dependency diagrams, contains implementations of JavaScript Controls and PDF rendering plugins.
78 lines (63 loc) • 2.29 kB
JavaScript
import FamilyItem from '../../models/FamilyItem';
import { GroupByType } from '../../enums';
export default function BindFamilyConnectorsTask(hideGrandParentsConnectorsTask) {
var _data = {
maximumId: null, /* maximum of OrgItem.id */
logicalFamily: null
};
function process(debug) {
var logicalFamily = hideGrandParentsConnectorsTask.getLogicalFamily(),
maximumId = hideGrandParentsConnectorsTask.getMaximumId();
logicalFamily = logicalFamily.clone();
/* Optimize family references. Bundle connectors where it is possible */
logicalFamily.optimizeReferences(function () {
maximumId += 1;
return new FamilyItem({
id: maximumId,
isVisible: false,
isActive: false,
itemConfig: { title: "bundle #" + maximumId, description: " This item was created by references optimizer." },
levelGravity: GroupByType.Children,
isLevelNeutral: true
});
}); //ignore jslint
if (debug && !logicalFamily.validate()) {
throw "References are broken in family structure!";
}
if (debug && logicalFamily.hasLoops()) {
throw "Structure has loops!";
}
/* eliminate many to many connections in chart, every connection should be ether child or parent relation. */
logicalFamily.eliminateManyToMany(function () {
maximumId += 1;
return new FamilyItem({
id: maximumId,
isVisible: false,
isActive: false,
itemConfig: { title: "dummy #" + maximumId, description: "This is item used to eliminate M:M relations." },
levelGravity: GroupByType.Children,
hideParentConnection: false,
hideChildrenConnection: false,
isLevelNeutral: true
});
} //ignore jslint
);
if (debug && !logicalFamily.validate()) {
throw "References are broken in family structure!";
}
_data.logicalFamily = logicalFamily;
_data.maximumId = maximumId;
return true;
}
function getLogicalFamily() {
return _data.logicalFamily;
}
function getMaximumId() {
return _data.maximumId;
}
return {
process: process,
getLogicalFamily: getLogicalFamily,
getMaximumId: getMaximumId
};
};