UNPKG

@amcharts/amcharts4

Version:
325 lines 11.5 kB
/** * Serial chart module. */ import { __extends } from "tslib"; /** * ============================================================================ * IMPORTS * ============================================================================ * @hidden */ import { Chart, ChartDataItem } from "../Chart"; import { ListTemplate, ListDisposer } from "../../core/utils/List"; import { Container } from "../../core/Container"; import { Series } from "../series/Series"; import { percent } from "../../core/utils/Percent"; import { ColorSet } from "../../core/utils/ColorSet"; import { registry } from "../../core/Registry"; import * as $iter from "../../core/utils/Iterator"; import * as $type from "../../core/utils/Type"; import * as $array from "../../core/utils/Array"; import { Disposer } from "../../core/utils/Disposer"; /** * ============================================================================ * DATA ITEM * ============================================================================ * @hidden */ /** * Defines a [[DataItem]] for [[SerialChart]]. * * @see {@link DataItem} */ var SerialChartDataItem = /** @class */ (function (_super) { __extends(SerialChartDataItem, _super); /** * Constructor */ function SerialChartDataItem() { var _this = _super.call(this) || this; _this.className = "SerialChartDataItem"; _this.applyTheme(); return _this; } return SerialChartDataItem; }(ChartDataItem)); export { SerialChartDataItem }; /** * ============================================================================ * MAIN CLASS * ============================================================================ * @hidden */ /** * A base class for all series-based charts, like XY, Pie, etc. * * Is not useful on its own. * * @see {@link ISerialChartEvents} for a list of available Events * @see {@link ISerialChartAdapters} for a list of available Adapters */ var SerialChart = /** @class */ (function (_super) { __extends(SerialChart, _super); /** * Constructor */ function SerialChart() { var _this = // Init _super.call(this) || this; _this._exitDP = {}; _this.className = "SerialChart"; _this.colors = new ColorSet(); _this._usesData = false; // Create a container for series var seriesContainer = _this.chartContainer.createChild(Container); seriesContainer.shouldClone = false; seriesContainer.width = percent(100); seriesContainer.height = percent(100); seriesContainer.isMeasured = false; seriesContainer.layout = "none"; seriesContainer.zIndex = 2; _this.seriesContainer = seriesContainer; // Create a container for bullets var bulletsContainer = _this.chartContainer.createChild(Container); bulletsContainer.shouldClone = false; bulletsContainer.width = percent(100); bulletsContainer.height = percent(100); bulletsContainer.isMeasured = false; bulletsContainer.zIndex = 3; bulletsContainer.layout = "none"; _this.bulletsContainer = bulletsContainer; // Apply theme _this.applyTheme(); return _this; } SerialChart.prototype.dispose = function () { _super.prototype.dispose.call(this); if (this.colors) { this.colors.dispose(); } if (this.patterns) { this.patterns.dispose(); } }; /** * Sets defaults that instantiate some objects that rely on parent, so they * cannot be set in constructor */ SerialChart.prototype.applyInternalDefaults = function () { _super.prototype.applyInternalDefaults.call(this); // Add a default screen reader title for accessibility // This will be overridden in screen reader if there are any `titles` set if (!$type.hasValue(this.readerTitle)) { this.readerTitle = this.language.translate("Serial chart"); } }; Object.defineProperty(SerialChart.prototype, "series", { /** * A list of chart's series. * * @return Chart's series */ get: function () { if (!this._series) { this._series = new ListTemplate(this.createSeries()); this._series.events.on("inserted", this.handleSeriesAdded, this, false); this._series.events.on("removed", this.handleSeriesRemoved, this, false); this._disposers.push(new ListDisposer(this._series, false)); this._disposers.push(this._series.template); } return this._series; }, enumerable: true, configurable: true }); SerialChart.prototype.handleSeriesRemoved = function (event) { var series = event.oldValue; this.dataUsers.removeValue(series); this.dataUsers.each(function (dataUser) { dataUser.invalidateDataItems(); }); if (this._exitDP[series.uid]) { this._exitDP[series.uid].dispose(); delete this._exitDP[series.uid]; } if (series.autoDispose) { series.dispose(); } else { series.parent = undefined; series.bulletsContainer.parent = undefined; } //this.feedLegend(); var legend = this.legend; if (legend) { var dataItems = this.legend.dataItems; for (var i = dataItems.length - 1; i >= 0; i--) { var dataItem = dataItems.getIndex(i); if (dataItem && dataItem.dataContext == series) { legend.dataItems.remove(dataItem); } } for (var i = legend.data.length - 1; i >= 0; i--) { var di = legend.data[i]; if (di && di == series) { $array.remove(legend.data, di); } } } }; /** * Decorates a new [[Series]] object with required parameters when it is * added to the chart. * * @ignore Exclude from docs * @param event Event */ SerialChart.prototype.handleSeriesAdded = function (event) { var _this = this; var series = event.newValue; if (series.isDisposed()) { return; } series.chart = this; series.parent = this.seriesContainer; series.bulletsContainer.parent = this.bulletsContainer; this._dataUsers.moveValue(series); series.addDisposer(new Disposer(function () { _this.dataUsers.removeValue(series); })); this.handleSeriesAdded2(series); this.handleLegendSeriesAdded(series); }; SerialChart.prototype.handleLegendSeriesAdded = function (series) { if (!series.hiddenInLegend) { if (this.legend) { this.legend.addData(series); } } }; SerialChart.prototype.handleSeriesAdded2 = function (series) { var _this = this; if (!this.dataInvalid) { this._exitDP[series.uid] = registry.events.once("exitframe", function () { if (!series.data || series.data.length == 0) { series.data = _this.data; if (series.showOnInit) { series.reinit(); series.setPropertyValue("showOnInit", false); series.showOnInit = true; } if (!series.isDisposed()) { series.events.once("datavalidated", function () { if (series.data == _this.data) { series._data = []; } }); } } }); this._disposers.push(this._exitDP[series.uid]); } }; /** * Setups the legend to use the chart's data. * @ignore */ SerialChart.prototype.feedLegend = function () { var legend = this.legend; if (legend) { var legendData_1 = []; $iter.each(this.series.iterator(), function (series) { if (!series.hiddenInLegend) { legendData_1.push(series); } }); legend.dataFields.name = "name"; legend.data = legendData_1; } }; /** * Creates and returns a new Series, suitable for this chart type. * * @return New series */ SerialChart.prototype.createSeries = function () { return new Series(); }; Object.defineProperty(SerialChart.prototype, "colors", { /** * @return Color list */ get: function () { return this.getPropertyValue("colors"); }, /** * Chart's color list. * * This list can be used by a number of serial items, like applying a new * color for each Series added. Or, applying a new color for each slice * of a Pie chart. * * Please see [[ColorSet]] for information on how you can set up to generate * unique colors. * * A theme you are using may override default pre-defined colors. * * @param value Color list */ set: function (value) { this.setPropertyValue("colors", value, true); }, enumerable: true, configurable: true }); Object.defineProperty(SerialChart.prototype, "patterns", { /** * @return Pattern set */ get: function () { return this.getPropertyValue("patterns"); }, /** * A [[PatternSet]] to use when creating patterned fills for slices. * * @since 4.7.5 * @param value Pattern set */ set: function (value) { this.setPropertyValue("patterns", value, true); }, enumerable: true, configurable: true }); /** * Copies all parameters from another [[SerialChart]]. * * @param source Source SerialChart */ SerialChart.prototype.copyFrom = function (source) { _super.prototype.copyFrom.call(this, source); this.series.copyFrom(source.series); }; /** * Hides the chart instantly and then shows it. If defaultState.transitionDuration > 0, this will result an animation in which properties of hidden state will animate to properties of visible state. */ SerialChart.prototype.appear = function () { _super.prototype.appear.call(this); this.series.each(function (series) { if (series.showOnInit && series.inited) { series.appear(); } }); }; return SerialChart; }(Chart)); export { SerialChart }; /** * Register class in system, so that it can be instantiated using its name from * anywhere. * * @ignore */ registry.registeredClasses["SerialChart"] = SerialChart; //# sourceMappingURL=SerialChart.js.map