@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
127 lines • 6.37 kB
JavaScript
"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