package.es-modules.Core.Axis.WaterfallAxis.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of highcharts Show documentation
Show all versions of highcharts Show documentation
JavaScript charting framework
The newest version!
/* *
*
* (c) 2010-2024 Torstein Honsi
*
* License: www.highcharts.com/license
*
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
*
* */
'use strict';
import H from '../Globals.js';
const { composed } = H;
import StackItem from './Stacking/StackItem.js';
import U from '../Utilities.js';
const { addEvent, objectEach, pushUnique } = U;
/* *
*
* Namespace
*
* */
var WaterfallAxis;
(function (WaterfallAxis) {
/* *
*
* Interfaces
*
* */
/* *
*
* Functions
*
* */
/**
* @private
*/
function compose(AxisClass, ChartClass) {
if (pushUnique(composed, 'Axis.Waterfall')) {
addEvent(AxisClass, 'init', onAxisInit);
addEvent(AxisClass, 'afterBuildStacks', onAxisAfterBuildStacks);
addEvent(AxisClass, 'afterRender', onAxisAfterRender);
addEvent(ChartClass, 'beforeRedraw', onChartBeforeRedraw);
}
}
WaterfallAxis.compose = compose;
/**
* @private
*/
function onAxisAfterBuildStacks() {
const axis = this, stacks = axis.waterfall.stacks;
if (stacks) {
stacks.changed = false;
delete stacks.alreadyChanged;
}
}
/**
* @private
*/
function onAxisAfterRender() {
const axis = this, stackLabelOptions = axis.options.stackLabels;
if (stackLabelOptions && stackLabelOptions.enabled &&
axis.waterfall.stacks) {
axis.waterfall.renderStackTotals();
}
}
/**
* @private
*/
function onAxisInit() {
const axis = this;
if (!axis.waterfall) {
axis.waterfall = new Composition(axis);
}
}
/**
* @private
*/
function onChartBeforeRedraw() {
const axes = this.axes, series = this.series;
for (const serie of series) {
if (serie.options.stacking) {
for (const axis of axes) {
if (!axis.isXAxis) {
axis.waterfall.stacks.changed = true;
}
}
break;
}
}
}
/* *
*
* Classes
*
* */
class Composition {
/* *
*
* Constructors
*
* */
constructor(axis) {
this.axis = axis;
this.stacks = {
changed: false
};
}
/* *
*
* Functions
*
* */
/**
* Calls StackItem.prototype.render function that creates and renders
* stack total label for each waterfall stack item.
*
* @private
* @function Highcharts.Axis#renderWaterfallStackTotals
*/
renderStackTotals() {
const yAxis = this.axis, waterfallStacks = yAxis.waterfall.stacks, stackTotalGroup = (yAxis.stacking && yAxis.stacking.stackTotalGroup), dummyStackItem = new StackItem(yAxis, yAxis.options.stackLabels || {}, false, 0, void 0);
this.dummyStackItem = dummyStackItem;
// Render each waterfall stack total
if (stackTotalGroup) {
objectEach(waterfallStacks, (type) => {
objectEach(type, (stackItem, key) => {
dummyStackItem.total = stackItem.stackTotal;
dummyStackItem.x = +key;
if (stackItem.label) {
dummyStackItem.label = stackItem.label;
}
StackItem.prototype.render.call(dummyStackItem, stackTotalGroup);
stackItem.label = dummyStackItem.label;
delete dummyStackItem.label;
});
});
}
dummyStackItem.total = null;
}
}
WaterfallAxis.Composition = Composition;
})(WaterfallAxis || (WaterfallAxis = {}));
/* *
*
* Default Export
*
* */
export default WaterfallAxis;