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.
82 lines (68 loc) • 2.25 kB
JavaScript
import BindFamilyConnectorsTask from './BindFamilyConnectorsTask';
import Family from '../../algorithms/Family';
function getLevels(family) {
var levels = [];
family.loopLevels(this, true, function (itemid, item, level) {
var newItem = { id: itemid };
var children = [];
family.loopChildren(this, itemid, function (itemid, item, levelIndex) {
if (levelIndex > 0) {
return family.BREAK;
}
children.push(itemid);
});
if (children.length > 0) {
newItem.children = children;
}
levels.push(newItem);
});
return levels;
}
function normalizeLogicalFamilyTask(items) {
var family = Family();
for (var index = 0; index < items.length; index += 1) {
var item = items[index];
family.add(item.parents, item.id, item);
}
var maximumFamItemId = 100;
var task = new BindFamilyConnectorsTask({ getLogicalFamily: () => family, getMaximumId: () => maximumFamItemId });
task.process();
return getLevels(task.getLogicalFamily());
}
test("Function should bundle cross relations into single node", () => {
var items = [
{ id: 1, name: "1" },
{ id: 2, name: "2" },
{ id: 3, parents: [1, 2], name: "3" },
{ id: 4, parents: [1, 2], name: "4" },
{ id: 5, parents: [1, 2], name: "5" },
{ id: 6, parents: [1, 2], name: "6" }
];
var levels = normalizeLogicalFamilyTask(items);
var expectedLevels = [{ "id": "1", "children": ["101"] },
{ "id": "2", "children": ["101"] },
{ "id": "101", "children": ["3", "4", "5", "6"] },
{ "id": "3" },
{ "id": "4" },
{ "id": "5" },
{ "id": "6" }
];
expect(levels).toEqual(expectedLevels);
});
test("Function eliminates many to many relations between nodes", () => {
var items = [
{ id: 1, name: "1" },
{ id: 2, parents: [1], name: "2" },
{ id: 3, parents: [1, 4], name: "3" },
{ id: 4, name: "4" }
];
var levels = normalizeLogicalFamilyTask(items);
var expectedLevels = [
{ "id": "1", "children": ["2", "101"] },
{ "id": "2" },
{ "id": "101", "children": ["3"] },
{ "id": "4", "children": ["3"] },
{ "id": "3" }
];
expect(levels).toEqual(expectedLevels);
});