UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

127 lines 6.37 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var invariant = require("invariant"); var React = require("react"); var noop = require("lodash/noop"); var headerPredicate_1 = require("../../../helpers/headerPredicate"); var common_1 = require("../../../helpers/optionalStacking/common"); var chartOptionsBuilder_1 = require("./chartOptionsBuilder"); var highChartsCreators_1 = require("./highChartsCreators"); var HighChartsRenderer_1 = require("./HighChartsRenderer"); var legendBuilder_1 = require("./legend/legendBuilder"); function renderHighCharts(props) { return React.createElement(HighChartsRenderer_1.default, __assign({}, props)); } exports.renderHighCharts = renderHighCharts; var ChartTransformation = /** @class */ (function (_super) { __extends(ChartTransformation, _super); function ChartTransformation() { return _super !== null && _super.apply(this, arguments) || this; } ChartTransformation.prototype.componentWillMount = function () { this.assignChartOptions(this.props); }; ChartTransformation.prototype.componentWillReceiveProps = function (nextProps) { this.assignChartOptions(nextProps); }; ChartTransformation.prototype.getRendererProps = function () { var _a = this, chartOptions = _a.chartOptions, legendOptions = _a.legendOptions; var _b = this.props, afm = _b.executionRequest.afm, height = _b.height, width = _b.width, afterRender = _b.afterRender, onFiredDrillEvent = _b.onFiredDrillEvent, onDrill = _b.onDrill, onLegendReady = _b.onLegendReady, locale = _b.locale; var chartConfig = this.getChartConfig(this.props); var drillConfig = { afm: afm, onFiredDrillEvent: onFiredDrillEvent, onDrill: onDrill }; var hcOptions = highChartsCreators_1.getHighchartsOptions(chartOptions, drillConfig, chartConfig); return { chartOptions: chartOptions, hcOptions: hcOptions, height: height, width: width, afterRender: afterRender, onLegendReady: onLegendReady, locale: locale, legend: legendOptions, }; }; ChartTransformation.prototype.assignChartOptions = function (props) { var drillableItems = props.drillableItems, _a = props.executionRequest, afm = _a.afm, resultSpec = _a.resultSpec, executionResponse = props.executionResponse, _b = props.executionResult, data = _b.data, headerItems = _b.headerItems, onDataTooLarge = props.onDataTooLarge, onNegativeValues = props.onNegativeValues, pushData = props.pushData; var chartConfig = this.getChartConfig(props); var multiDimensionalData = data; if (data[0].constructor !== Array) { multiDimensionalData = [data]; } var drillablePredicates = headerPredicate_1.convertDrillableItemsToPredicates(drillableItems); this.chartOptions = chartOptionsBuilder_1.getChartOptions(afm, resultSpec, executionResponse, multiDimensionalData, headerItems, chartConfig, drillablePredicates); var validationResult = chartOptionsBuilder_1.validateData(chartConfig.limits, this.chartOptions); if (validationResult.dataTooLarge) { // always force onDataTooLarge error handling invariant(onDataTooLarge, "Visualization's onDataTooLarge callback is missing."); onDataTooLarge(this.chartOptions); } else if (validationResult.hasNegativeValue) { // ignore hasNegativeValue if validation already fails on dataTooLarge // force onNegativeValues error handling only for pie chart. // hasNegativeValue can be true only for pie chart. invariant(onNegativeValues, '"onNegativeValues" callback required for pie chart transformation is missing.'); onNegativeValues(this.chartOptions); } this.legendOptions = legendBuilder_1.default(chartConfig.legend, this.chartOptions); pushData({ propertiesMeta: { legend_enabled: this.legendOptions.toggleEnabled, }, colors: { colorAssignments: this.chartOptions.colorAssignments, colorPalette: this.chartOptions.colorPalette, }, }); this.setState(validationResult); return this.chartOptions; }; ChartTransformation.prototype.render = function () { if (this.state.dataTooLarge || this.state.hasNegativeValue) { return null; } return this.props.renderer(__assign({}, this.getRendererProps(), { chartRenderer: HighChartsRenderer_1.renderChart, legendRenderer: HighChartsRenderer_1.renderLegend })); }; ChartTransformation.prototype.getChartConfig = function (props) { var afm = props.executionRequest.afm, config = props.config; return common_1.getSanitizedStackingConfigFromAfm(afm, config); }; ChartTransformation.defaultProps = { drillableItems: [], renderer: renderHighCharts, afterRender: noop, onNegativeValues: null, onFiredDrillEvent: function () { return true; }, pushData: noop, onLegendReady: noop, height: undefined, width: undefined, }; return ChartTransformation; }(React.Component)); exports.default = ChartTransformation; //# sourceMappingURL=ChartTransformation.js.map