140 lines
4.2 KiB
JavaScript
140 lines
4.2 KiB
JavaScript
/* *
|
|
*
|
|
* Organization chart module
|
|
*
|
|
* (c) 2018-2021 Torstein Honsi
|
|
*
|
|
* License: www.highcharts.com/license
|
|
*
|
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
*
|
|
* */
|
|
'use strict';
|
|
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = function (d, b) {
|
|
extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
return extendStatics(d, b);
|
|
};
|
|
return function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
import SeriesRegistry from '../../Core/Series/SeriesRegistry.js';
|
|
var SankeyPointClass = SeriesRegistry.seriesTypes.sankey.prototype.pointClass;
|
|
import U from '../../Core/Utilities.js';
|
|
var defined = U.defined, find = U.find, pick = U.pick;
|
|
/**
|
|
* Get columns offset including all sibiling and cousins etc.
|
|
*
|
|
* @private
|
|
* @param node Point
|
|
*/
|
|
function getOffset(node) {
|
|
var offset = node.linksFrom.length;
|
|
node.linksFrom.forEach(function (link) {
|
|
if (link.id === link.toNode.linksTo[0].id) {
|
|
// Node has children, that hangs directly from it:
|
|
offset += getOffset(link.toNode);
|
|
}
|
|
else {
|
|
// If the node hangs from multiple parents, and this is not
|
|
// the last one, ignore it:
|
|
offset--;
|
|
}
|
|
});
|
|
return offset;
|
|
}
|
|
/* *
|
|
*
|
|
* Class
|
|
*
|
|
* */
|
|
var OrganizationPoint = /** @class */ (function (_super) {
|
|
__extends(OrganizationPoint, _super);
|
|
function OrganizationPoint() {
|
|
/* *
|
|
*
|
|
* Properties
|
|
*
|
|
* */
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.fromNode = void 0;
|
|
_this.linksFrom = void 0;
|
|
_this.linksTo = void 0;
|
|
_this.options = void 0;
|
|
_this.series = void 0;
|
|
_this.toNode = void 0;
|
|
return _this;
|
|
/* eslint-enable valid-jsdoc */
|
|
}
|
|
/* *
|
|
*
|
|
* Functions
|
|
*
|
|
* */
|
|
/* eslint-disable valid-jsdoc */
|
|
/**
|
|
* All nodes in an org chart are equal width.
|
|
* @private
|
|
*/
|
|
OrganizationPoint.prototype.getSum = function () {
|
|
return 1;
|
|
};
|
|
/**
|
|
* Set node.column for hanging layout
|
|
* @private
|
|
*/
|
|
OrganizationPoint.prototype.setNodeColumn = function () {
|
|
_super.prototype.setNodeColumn.call(this);
|
|
var node = this, fromNode = node.getFromNode().fromNode;
|
|
// Hanging layout
|
|
if (
|
|
// Not defined by user
|
|
!defined(node.options.column) &&
|
|
// Has links to
|
|
node.linksTo.length !== 0 &&
|
|
// And parent uses hanging layout
|
|
fromNode &&
|
|
fromNode.options.layout === 'hanging') {
|
|
// Default all children of the hanging node
|
|
// to have hanging layout
|
|
node.options.layout = pick(node.options.layout, 'hanging');
|
|
node.hangsFrom = fromNode;
|
|
var i_1 = -1;
|
|
find(fromNode.linksFrom, function (link, index) {
|
|
var found = link.toNode === node;
|
|
if (found) {
|
|
i_1 = index;
|
|
}
|
|
return found;
|
|
});
|
|
// For all siblings' children (recursively)
|
|
// increase the column offset to prevent overlapping
|
|
for (var j = 0; j < fromNode.linksFrom.length; j++) {
|
|
var link = fromNode.linksFrom[j];
|
|
if (link.toNode.id === node.id) {
|
|
// Break
|
|
j = fromNode.linksFrom.length;
|
|
}
|
|
else {
|
|
i_1 += getOffset(link.toNode);
|
|
}
|
|
}
|
|
node.column = (node.column || 0) + i_1;
|
|
}
|
|
};
|
|
return OrganizationPoint;
|
|
}(SankeyPointClass));
|
|
/* *
|
|
*
|
|
* Default Export
|
|
*
|
|
* */
|
|
export default OrganizationPoint;
|