UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

266 lines (226 loc) • 10 kB
"use strict"; var seriesModule = require("../series/base_series"), seriesFamilyModule = require("../core/series_family"), typeUtils = require("../../core/utils/type"), extend = require("../../core/utils/extend").extend, inArray = require("../../core/utils/array").inArray, each = require("../../core/utils/iterator").each, vizUtils = require("../core/utils"), rangeModule = require("../translators/range"), dataValidatorModule = require("../components/data_validator"), ChartThemeManager = require("../components/chart_theme_manager").ThemeManager, SeriesDataSource; var createThemeManager = function createThemeManager(chartOptions) { return new ChartThemeManager(chartOptions, 'rangeSelector.chart'); }; var processSeriesFamilies = function processSeriesFamilies(series, equalBarWidth, minBubbleSize, maxBubbleSize, barOptions, negativesAsZeroes) { var families = [], types = []; each(series, function (i, item) { if (inArray(item.type, types) === -1) { types.push(item.type); } }); each(types, function (_, type) { var family = new seriesFamilyModule.SeriesFamily({ type: type, equalBarWidth: equalBarWidth, minBubbleSize: minBubbleSize, maxBubbleSize: maxBubbleSize, barWidth: barOptions.barWidth, barGroupPadding: barOptions.barGroupPadding, barGroupWidth: barOptions.barGroupWidth, negativesAsZeroes: negativesAsZeroes }); family.add(series); family.adjustSeriesValues(); families.push(family); }); return families; }; SeriesDataSource = function SeriesDataSource(options) { var that = this, themeManager = that._themeManager = createThemeManager(options.chart), topIndent, bottomIndent; themeManager._fontFields = ["commonSeriesSettings.label.font"]; themeManager.setTheme(options.chart.theme); topIndent = themeManager.getOptions('topIndent'); bottomIndent = themeManager.getOptions('bottomIndent'); that._indent = { top: topIndent >= 0 && topIndent < 1 ? topIndent : 0, bottom: bottomIndent >= 0 && bottomIndent < 1 ? bottomIndent : 0 }; that._valueAxis = themeManager.getOptions('valueAxisRangeSelector') || {}; that._hideChart = false; that._series = that._calculateSeries(options); that._seriesFamilies = []; }; SeriesDataSource.prototype = { constructor: SeriesDataSource, _calculateSeries: function _calculateSeries(options) { var that = this, series = [], particularSeriesOptions, seriesTheme, data = options.dataSource || [], parsedData, chartThemeManager = that._themeManager, seriesTemplate = chartThemeManager.getOptions('seriesTemplate'), allSeriesOptions = seriesTemplate ? vizUtils.processSeriesTemplate(seriesTemplate, data) : options.chart.series, dataSourceField, valueAxis = that._valueAxis, i, newSeries, groupsData; if (options.dataSource && !allSeriesOptions) { dataSourceField = options.dataSourceField || 'arg'; allSeriesOptions = { argumentField: dataSourceField, valueField: dataSourceField }; that._hideChart = true; } allSeriesOptions = Array.isArray(allSeriesOptions) ? allSeriesOptions : allSeriesOptions ? [allSeriesOptions] : []; for (i = 0; i < allSeriesOptions.length; i++) { particularSeriesOptions = extend(true, { incidentOccurred: options.incidentOccurred }, allSeriesOptions[i]); particularSeriesOptions.rotated = false; seriesTheme = chartThemeManager.getOptions("series", particularSeriesOptions, allSeriesOptions.length); seriesTheme.argumentField = seriesTheme.argumentField || options.dataSourceField; // B253068 if (data && data.length > 0) { // TODO newSeries = new seriesModule.Series({ renderer: options.renderer, argumentAxis: options.argumentAxis, valueAxis: options.valueAxis }, seriesTheme); series.push(newSeries); } } if (series.length) { groupsData = { groups: [{ series: series, valueOptions: { type: valueAxis.type, valueType: dataSourceField ? options.valueType : valueAxis.valueType } }], argumentOptions: { categories: options.categories, argumentType: options.valueType, type: options.axisType } }; parsedData = dataValidatorModule.validateData(data, groupsData, options.incidentOccurred, chartThemeManager.getOptions("dataPrepareSettings")); that.argCategories = groupsData.categories; for (i = 0; i < series.length; i++) { series[i].updateData(parsedData[series[i].getArgumentField()]); } } return series; }, createPoints: function createPoints() { if (this._series.length === 0) { return; } var series = this._series, viewport = new rangeModule.Range(), axis = series[0].getArgumentAxis(), themeManager = this._themeManager, negativesAsZeroes = themeManager.getOptions("negativesAsZeroes"), negativesAsZeros = themeManager.getOptions("negativesAsZeros"); // misspelling case series.forEach(function (s) { viewport.addRange(s.getArgumentRange()); }); axis.getTranslator().updateBusinessRange(viewport); series.forEach(function (s) { s.createPoints(); }); this._seriesFamilies = processSeriesFamilies(series, themeManager.getOptions('equalBarWidth'), themeManager.getOptions('minBubbleSize'), themeManager.getOptions('maxBubbleSize'), { barWidth: themeManager.getOptions('barWidth'), barGroupPadding: themeManager.getOptions('barGroupPadding'), barGroupWidth: themeManager.getOptions('barGroupWidth') }, typeUtils.isDefined(negativesAsZeroes) ? negativesAsZeroes : negativesAsZeros); }, adjustSeriesDimensions: function adjustSeriesDimensions() { each(this._seriesFamilies, function (_, family) { family.adjustSeriesDimensions(); }); }, getBoundRange: function getBoundRange() { var that = this, rangeData, valueAxis = that._valueAxis, valRange = new rangeModule.Range({ min: valueAxis.min, minVisible: valueAxis.min, max: valueAxis.max, maxVisible: valueAxis.max, axisType: valueAxis.type, base: valueAxis.logarithmBase }), argRange = new rangeModule.Range({}), rangeYSize, rangeVisibleSizeY, minIndent, maxIndent; each(that._series, function (_, series) { rangeData = series.getRangeData(); valRange.addRange(rangeData.val); argRange.addRange(rangeData.arg); }); if (valRange.isDefined() && argRange.isDefined()) { minIndent = valueAxis.inverted ? that._indent.top : that._indent.bottom; maxIndent = valueAxis.inverted ? that._indent.bottom : that._indent.top; rangeYSize = valRange.max - valRange.min; rangeVisibleSizeY = (typeUtils.isNumeric(valRange.maxVisible) ? valRange.maxVisible : valRange.max) - (typeUtils.isNumeric(valRange.minVisible) ? valRange.minVisible : valRange.min); // B253717 if (typeUtils.isDate(valRange.min)) { valRange.min = new Date(valRange.min.valueOf() - rangeYSize * minIndent); } else { valRange.min -= rangeYSize * minIndent; } if (typeUtils.isDate(valRange.max)) { valRange.max = new Date(valRange.max.valueOf() + rangeYSize * maxIndent); } else { valRange.max += rangeYSize * maxIndent; } if (typeUtils.isNumeric(rangeVisibleSizeY)) { valRange.maxVisible = valRange.maxVisible ? valRange.maxVisible + rangeVisibleSizeY * maxIndent : undefined; valRange.minVisible = valRange.minVisible ? valRange.minVisible - rangeVisibleSizeY * minIndent : undefined; } valRange.invert = valueAxis.inverted; } return { arg: argRange, val: valRange }; }, getMarginOptions: function getMarginOptions(canvas) { var bubbleSize = Math.min(canvas.width, canvas.height) * this._themeManager.getOptions("maxBubbleSize"); return this._series.reduce(function (marginOptions, series) { var seriesOptions = series.getMarginOptions(); if (seriesOptions.processBubbleSize === true) { seriesOptions.size = bubbleSize; } return vizUtils.mergeMarginOptions(marginOptions, seriesOptions); }, {}); }, getSeries: function getSeries() { return this._series; }, isEmpty: function isEmpty() { return this.getSeries().length === 0; }, isShowChart: function isShowChart() { return !this._hideChart; }, getCalculatedValueType: function getCalculatedValueType() { var series = this._series[0]; return series && series.argumentType; }, getThemeManager: function getThemeManager() { return this._themeManager; } }; exports.SeriesDataSource = SeriesDataSource;