UNPKG

highcharts

Version:
148 lines (147 loc) 4.05 kB
/* * * * (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;