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.
1,246 lines (1,194 loc) • 68.7 kB
JavaScript
import VisualTreeBuilder from "./VisualTreeBuilder";
import Tree from "../../../algorithms/Tree";
import OrgItemConfig from "../../../configs/OrgItemConfig";
import OrgItem from "../../../models/OrgItem";
import {
ItemType,
ChildrenPlacementType,
HorizontalAlignmentType,
AdviserPlacementType,
SideFlag,
Visibility,
Enabled
} from "../../../enums";
function getOrgTree(items) {
const tree = Tree();
for (var index = 0; index < items.length; index += 1) {
var item = new OrgItem(new OrgItemConfig(items[index]));
tree.add(item.parent, item.id, item);
}
return tree;
}
function getActiveItems(items) {
return items.reduce((acc, item) => {
if(item.isActive) {
acc[item.id] = item.id;
}
return acc;
}, {});
}
function getMaximumId(items) {
return items.reduce((maximum, item) => Math.max(maximum, item.id), 0) + 1;
}
function getLevels(tree) {
var levels = {};
tree.loopLevels(this, function (nodeId, node, levelId) {
levels[nodeId] = levelId;
});
return levels;
}
function getPositions(tree) {
var positions = {};
var currentLevelId = null;
var index = 0;
tree.loopLevels(this, function (nodeId, node, levelId) {
if(currentLevelId != levelId) {
currentLevelId = levelId;
index = 0;
}
positions[nodeId] = index;
index+=1;
});
return positions;
}
function eqL(levels, items) {
var result = true;
for(var index = 1; index < items.length; index+=1) {
result = result && levels[items[index-1]] == levels[items[index]];
}
return result;
}
function getLeftNode(visualTree, nodeId) {
return visualTree.getChild(visualTree.parentid(nodeId), visualTree.indexOf(nodeId) - 1);
}
function getRightNode(visualTree, nodeId) {
return visualTree.getChild(visualTree.parentid(nodeId), visualTree.indexOf(nodeId) + 1);
}
test("Horizontal children layout", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", itemType: ItemType.Regular },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 6,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[1] == l[2] && l[0] < l[1]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
});
test("leaves vertical layout on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", itemType: ItemType.Regular },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Vertical,
maximumColumnsInMatrix: 6,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[0] < l[1] && l[1] < l[2]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
});
test("leaves vertical layout on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", itemType: ItemType.Regular },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Right,
leavesPlacementType: ChildrenPlacementType.Vertical,
maximumColumnsInMatrix: 6,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[0] < l[1] && l[1] < l[2]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
});
test("Node's children vertical layout", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", itemType: ItemType.Regular, childrenPlacementType: ChildrenPlacementType.Vertical },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 6,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[0] < l[1] && l[1] < l[2]).toBe(true);
});
test("Children matrix 3x3 layout", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", itemType: ItemType.Regular, childrenPlacementType: ChildrenPlacementType.Matrix },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
{ id: 3, parent: 0, name: "3", itemType: ItemType.Regular },
{ id: 4, parent: 0, name: "4", itemType: ItemType.Regular },
{ id: 5, parent: 0, name: "5", itemType: ItemType.Regular },
{ id: 6, parent: 0, name: "6", itemType: ItemType.Regular },
{ id: 7, parent: 0, name: "7", itemType: ItemType.Regular },
{ id: 8, parent: 0, name: "8", itemType: ItemType.Regular },
{ id: 9, parent: 0, name: "9", itemType: ItemType.Regular }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[0] < l[1] && l[1] < l[4] && l[4] < l[7] && eqL(l, [1,2,3]) && eqL(l, [4,5,6]) && eqL(l, [7,8,9])).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
});
test("Children matrix 4x4 layout", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", itemType: ItemType.Regular, childrenPlacementType: ChildrenPlacementType.Matrix },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
{ id: 3, parent: 0, name: "3", itemType: ItemType.Regular },
{ id: 4, parent: 0, name: "4", itemType: ItemType.Regular },
{ id: 5, parent: 0, name: "5", itemType: ItemType.Regular },
{ id: 6, parent: 0, name: "6", itemType: ItemType.Regular },
{ id: 7, parent: 0, name: "7", itemType: ItemType.Regular },
{ id: 8, parent: 0, name: "8", itemType: ItemType.Regular },
{ id: 9, parent: 0, name: "9", itemType: ItemType.Regular },
{ id: 10, parent: 0, name: "10", itemType: ItemType.Regular },
{ id: 11, parent: 0, name: "11", itemType: ItemType.Regular },
{ id: 12, parent: 0, name: "12", itemType: ItemType.Regular },
{ id: 13, parent: 0, name: "13", itemType: ItemType.Regular },
{ id: 14, parent: 0, name: "14", itemType: ItemType.Regular },
{ id: 15, parent: 0, name: "15", itemType: ItemType.Regular },
{ id: 16, parent: 0, name: "16", itemType: ItemType.Regular }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 4,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[0] < l[1] && l[1] < l[5] && l[5] < l[9] && eqL(l, [1,2,3,4]) && eqL(l, [5,6,7,8]) && eqL(l, [9,10,11,12]) && eqL(l, [13,14,15,16])).toBe(true);
});
test("Adviser on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Adviser, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] == l[2] && p[1] < p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
});
test("Adviser on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Adviser, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] == l[2] && p[1] > p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
});
test("Assistant on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vaId = visualTree.node(1).visualAggregatorId;
expect(l[1] < l[2] && l[vaId] == l[2] && p[vaId] < p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
expect(visualTree.node(vaId).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
});
test("Assistant on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vaId = visualTree.node(1).visualAggregatorId;
expect(l[1] < l[2] && l[vaId] == l[2] && p[vaId] > p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
expect(visualTree.node(vaId).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
});
test("Assistant is below parent and above children", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[1] < l[2] && l[2] < l[3]).toBe(true);
});
test("Assistant's child is below assistant and above parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 2, name: "Assistant's child" },
{ id: 4, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[2] < l[3] && l[3] < l[4]).toBe(true);
});
test("Assistant's child is at the same level as parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 2, name: "Assistant's child" },
{ id: 4, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: false,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[2] < l[3] && l[3] == l[4] && p[3] > p[4]).toBe(true);
});
test("Second level Assistant's child is below assistant and above parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "Assistant at Level 1", levelOffset: 0, itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 2, name: "Assistant's child 1" },
{ id: 4, parent: 1, name: "Assistant at Level 2", levelOffset: 1, itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 5, parent: 4, name: "Assistant's child 2" },
{ id: 6, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[1] < l[2] && l[2] < l[3] && l[3] < l[4] && l[4] < l[5] && l[5] < l[6]).toBe(true);
});
test("Second level Assistant's child is at the same level as parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "Assistant at Level 1", levelOffset: 0, itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 2, name: "Assistant's child 1" },
{ id: 4, parent: 1, name: "Assistant at Level 2", levelOffset: 1, itemType: ItemType.Assistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 5, parent: 4, name: "Assistant's child 2" },
{ id: 6, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: false,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] < l[2] && l[2] < l[3] && l[2] < l[4] && l[3] == l[4] && l[4] < l[5] && l[4] < l[6] && l[5] == l[6]).toBe(true);
});
test("Adviser's child is below parent and above parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "Parent" },
{ id: 2, parent: 1, name: "Adviser", itemType: ItemType.Adviser, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 2, name: "Adviser's child" },
{ id: 4, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] < l[3] && l[3] < l[4]).toBe(true);
});
test("Adviser's child is at the same level as parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "Parent" },
{ id: 2, parent: 1, name: "Adviser", itemType: ItemType.Adviser, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 2, name: "Adviser's child" },
{ id: 4, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: false,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] < l[3] && l[3] == l[4] && p[3] > p[4]).toBe(true);
});
test("Sub Adviser on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAdviser, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vp = visualTree.parent(2);
expect(l[1] < l[2] && p[1] < p[vp.id]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(vp.id).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
});
test("Sub Adviser on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAdviser, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vp = visualTree.parent(2);
expect(l[1] < l[2] && p[1] > p[vp.id]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(vp.id).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
});
test("Sub Assistant on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAssistant, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vp = visualTree.parent(2);
var vaId = visualTree.node(1).visualAggregatorId;
expect(l[1] < l[vp.id] && l[vp.id] < l[2] && l[vaId] == l[vp.id] && p[vaId] < p[vp.id]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(vp.id).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
expect(visualTree.node(vaId).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
});
test("Sub Assistant on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAssistant, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vp = visualTree.parent(2);
var vaId = visualTree.node(1).visualAggregatorId;
expect(l[1] < l[vp.id] && l[vp.id] < l[2] && l[vaId] == l[vp.id] && p[vaId] > p[vp.id]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(vp.id).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
expect(visualTree.node(vaId).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
});
test("Sub Assistant is above parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAssistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "Parent's child" },
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var vp = visualTree.parent(2);
var vaId = visualTree.node(1).visualAggregatorId;
expect(l[1] < l[2] && l[2] < l[3]).toBe(true);
});
test("Sub Assistant is at the same level as parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAssistant, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "Parent's child" },
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: false,
}
);
var l = getLevels(visualTree);
expect(l[1] < l[2] && l[2] == l[3]).toBe(true);
});
test("Sub Adviser is above parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAdviser, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[1] < l[2] && l[2] < l[3] ).toBe(true);
});
test("Sub Adviser is at the same level as parent's child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.SubAdviser, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "Parent's child" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: false,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[1] < l[2] && l[2] == l[3] ).toBe(true);
});
test("General Partner on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.GeneralPartner, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ip = getRightNode(visualTree, 1);
expect(l[1] == l[2] && p[1] < p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(ip.partners).toEqual([1,2]);
});
test("General Partner on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.GeneralPartner, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ip = getLeftNode(visualTree, 1);
expect(l[1] == l[2] && p[1] > p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(ip.partners).toEqual([1,2]);
});
test("General Partner on right with shared child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.GeneralPartner, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ipId = visualTree.parentid(3);
expect(l[1] == l[2] && p[1] < p[2] && p[ipId] > p[1] && p[ipId] < p[2] && l[1] == l[ipId] && l[1] < l[3]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(ipId).connectorPlacement).toBe(0);
});
test("General Partner on left with shared child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.GeneralPartner, adviserPlacementType: AdviserPlacementType.Left },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ipId = visualTree.parentid(3);
expect(l[1] == l[2] && p[1] > p[2] && p[ipId] < p[1] && p[ipId] > p[2] && l[1] == l[ipId] && l[1] < l[3]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(ipId).connectorPlacement).toBe(0);
});
test("Limited Partner on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.LimitedPartner, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] == l[2] && p[1] < p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Bottom);
var ip = getRightNode(visualTree, 1);
expect(ip.partners).toEqual([1,2]);
});
test("Limited Partner on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.LimitedPartner, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] == l[2] && p[1] > p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Bottom);
var ip = getLeftNode(visualTree, 1);
expect(ip.partners).toEqual([1,2]);
});
test("Limited Partner on right with shared child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.LimitedPartner, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ipId = visualTree.parentid(3);
expect(l[1] == l[2] && p[1] < p[2] && p[ipId] > p[1] && p[ipId] < p[2] && l[1] == l[ipId] && l[1] < l[3]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(ipId).connectorPlacement).toBe(0);
});
test("Limited Partner on left with shared child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.LimitedPartner, adviserPlacementType: AdviserPlacementType.Left },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ipId = visualTree.parentid(3);
expect(l[1] == l[2] && p[1] > p[2] && p[ipId] < p[1] && p[ipId] > p[2] && l[1] == l[ipId] && l[1] < l[3]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(ipId).connectorPlacement).toBe(0);
});
test("Adviser Partner on right", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.AdviserPartner, adviserPlacementType: AdviserPlacementType.Right }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] == l[2] && p[1] < p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
var ip = getRightNode(visualTree, 1);
expect(ip.partners).toEqual([1,2]);
});
test("Adviser Partner on left", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.AdviserPartner, adviserPlacementType: AdviserPlacementType.Left }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
expect(l[1] == l[2] && p[1] > p[2]).toBe(true);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Right |SideFlag.Bottom);
var ip = getLeftNode(visualTree, 1);
expect(ip.partners).toEqual([1,2]);
});
test("Adviser Partner on right with shared child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.AdviserPartner, adviserPlacementType: AdviserPlacementType.Right },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ipId = visualTree.parentid(3);
expect(l[1] == l[2] && p[1] < p[2] && p[ipId] > p[1] && p[ipId] < p[2] && l[1] == l[ipId] && l[1] < l[3]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Left | SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(ipId).connectorPlacement).toBe(SideFlag.Left);
});
test("Adviser Partner on left with shared child", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1" },
{ id: 2, parent: 1, name: "2", itemType: ItemType.AdviserPartner, adviserPlacementType: AdviserPlacementType.Left },
{ id: 3, parent: 1, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 3,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
var p = getPositions(visualTree);
var ipId = visualTree.parentid(3);
expect(l[1] == l[2] && p[1] > p[2] && p[ipId] < p[1] && p[ipId] > p[2] && l[1] == l[ipId] && l[1] < l[3]).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Right | SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(ipId).connectorPlacement).toBe(SideFlag.Right);
});
test("Invisible parent connections", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Invisible parent", isVisible: false },
{ id: 1, parent: 0, name: "1" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 2,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
expect(visualTree.node(0).connectorPlacement).toBe(0);
expect(visualTree.node(0).visibility).toBe(Visibility.Invisible);
});
test("Children matrix 2x2 with invisible parent", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "0", isVisible: false, itemType: ItemType.Regular, childrenPlacementType: ChildrenPlacementType.Matrix },
{ id: 1, parent: 0, name: "1", itemType: ItemType.Regular },
{ id: 2, parent: 0, name: "2", itemType: ItemType.Regular },
{ id: 3, parent: 0, name: "3", itemType: ItemType.Regular },
{ id: 4, parent: 0, name: "4", itemType: ItemType.Regular }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 2,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
var l = getLevels(visualTree);
expect(l[0] < l[1] && l[1] < l[3] && eqL(l, [1,2]) && eqL(l, [3, 4])).toBe(true);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Bottom);
expect(visualTree.node(4).connectorPlacement).toBe(SideFlag.Bottom);
});
test("Hide connections of Invisible root nodes", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item", isVisible: false },
{ id: 1, parent: 0, name: "1"},
{ id: 2, parent: 1, name: "2", isVisible: false },
{ id: 3, parent: 2, name: "3" }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(items),
{
alignBranches: false,
childrenPlacementType: ChildrenPlacementType.Horizontal,
horizontalAlignment: HorizontalAlignmentType.Center,
leavesPlacementType: ChildrenPlacementType.Horizontal,
maximumColumnsInMatrix: 2,
placeAdvisersAboveChildren: true,
placeAssistantsAboveChildren: true,
}
);
expect(visualTree.node(1).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(3).connectorPlacement).toBe(SideFlag.Top | SideFlag.Bottom);
expect(visualTree.node(2).visibility).toBe(Visibility.Invisible);
});
test("Trim trailing invisible nodes", () => {
var builder = VisualTreeBuilder();
const items = [
{ id: 0, parent: null, name: "Auto created invisible root item" },
{ id: 1, parent: 0, name: "1"},
{ id: 2, parent: 1, name: "2", isVisible: false },
{ id: 3, parent: 2, name: "3", isVisible: false }
];
var { visualTree, navigationFamily } = builder.build(
getOrgTree(items),
getMaximumId(items),
getActiveItems(item