UNPKG

@nativescript-community/ui-chart

Version:

A powerful chart / graph plugin, supporting line, bar, pie, radar, bubble, and candlestick charts as well as scaling, panning and animations.

133 lines 4.91 kB
import { DrawOrder } from '../charts/CombinedChart'; import { DataRenderer } from './DataRenderer'; import { LineChartRenderer } from './LineChartRenderer'; import { BarChartRenderer } from './BarChartRenderer'; import { BubbleChartRenderer } from './BubbleChartRenderer'; import { CandleStickChartRenderer } from './CandleStickChartRenderer'; import { ScatterChartRenderer } from './ScatterChartRenderer'; /** * Renderer class that is responsible for rendering multiple different data-types. */ export class CombinedChartRenderer extends DataRenderer { constructor(chart, animator, viewPortHandler) { super(animator, viewPortHandler); /** * all rederers for the different kinds of data this combined-renderer can draw */ this.renderers = new Array(5); this.mHighlightBuffer = []; this.mChart = new WeakRef(chart); this.createRenderers(); } /** * Creates the renderers needed for this combined-renderer in the required order. Also takes the DrawOrder into * consideration. */ createRenderers() { this.renderers = []; const chart = this.mChart.get(); if (!chart?.data) return; const orders = chart.drawOrder; if (orders) { for (const order of orders) { switch (order) { case DrawOrder.BAR: if (chart.barData) { this.renderers.push(new BarChartRenderer(chart, this.animator, this.mViewPortHandler)); } break; case DrawOrder.BUBBLE: if (chart.bubbleData) { this.renderers.push(new BubbleChartRenderer(chart, this.animator, this.mViewPortHandler)); } break; case DrawOrder.LINE: if (chart.lineData) { this.renderers.push(new LineChartRenderer(chart, this.animator, this.mViewPortHandler)); } break; case DrawOrder.CANDLE: if (chart.candleData) { this.renderers.push(new CandleStickChartRenderer(chart, this.animator, this.mViewPortHandler)); } break; case DrawOrder.SCATTER: if (chart.scatterData) { this.renderers.push(new ScatterChartRenderer(chart, this.animator, this.mViewPortHandler)); } break; } } } } initBuffers() { for (const renderer of this.renderers) renderer.initBuffers(); } drawData(c) { for (const renderer of this.renderers) renderer.drawData(c); } drawValues(c) { for (const renderer of this.renderers) renderer.drawValues(c); } drawExtras(c) { for (const renderer of this.renderers) renderer.drawExtras(c); } drawHighlighted(c, indices) { const chart = this.mChart.get(); if (!chart) return; const datas = chart.data.datasArray; for (const renderer of this.renderers) { let data = null; if (renderer instanceof BarChartRenderer) data = renderer.mChart.barData; else if (renderer instanceof LineChartRenderer) data = renderer.mChart.lineData; else if (renderer instanceof CandleStickChartRenderer) data = renderer.mChart.candleData; else if (renderer instanceof ScatterChartRenderer) data = renderer.mChart.scatterData; else if (renderer instanceof BubbleChartRenderer) data = renderer.mChart.bubbleData; if (!data) { continue; } const dataIndex = datas.indexOf(data); this.mHighlightBuffer = []; for (const h of indices) { if (h.dataIndex === dataIndex || h.dataIndex === -1) this.mHighlightBuffer.push(h); } renderer.drawHighlighted(c, this.mHighlightBuffer); } } /** * Returns the sub-renderer object at the specified index. * * @param index * @return */ getSubRenderer(index) { if (index >= this.renderers.length || index < 0) { return null; } else { return this.renderers[index]; } } /** * Returns all sub-renderers. */ getSubRenderers() { return this.renderers; } setSubRenderers(renderers) { this.renderers = renderers; } } //# sourceMappingURL=CombinedChartRenderer.js.map