@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
165 lines • 8.89 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 });
// (C) 2019-2020 GoodData Corporation
var React = require("react");
var cloneDeep = require("lodash/cloneDeep");
var get = require("lodash/get");
var set = require("lodash/set");
var negate = require("lodash/negate");
var react_dom_1 = require("react-dom");
var BucketNames = require("../../../../constants/bucketNames");
var visualizationTypes_1 = require("../../../../constants/visualizationTypes");
var bucketConfig_1 = require("../../../utils/bucketConfig");
var PluggableBaseChart_1 = require("../baseChart/PluggableBaseChart");
var uiConfig_1 = require("../../../constants/uiConfig");
var bucket_1 = require("../../../constants/bucket");
var bucketHelper_1 = require("../../../utils/bucketHelper");
var areaChartUiConfigHelper_1 = require("../../../utils/uiConfigHelpers/areaChartUiConfigHelper");
var sort_1 = require("../../../utils/sort");
var LineChartBasedConfigurationPanel_1 = require("../../configurationPanels/LineChartBasedConfigurationPanel");
var propertiesHelper_1 = require("../../../utils/propertiesHelper");
var supportedProperties_1 = require("../../../constants/supportedProperties");
var mdObjectHelper_1 = require("../../../utils/mdObjectHelper");
var PluggableAreaChart = /** @class */ (function (_super) {
__extends(PluggableAreaChart, _super);
function PluggableAreaChart(props) {
var _this = _super.call(this, props) || this;
_this.type = visualizationTypes_1.VisualizationTypes.AREA;
_this.defaultControlsProperties = {
stackMeasures: true,
};
_this.initializeProperties(props.visualizationProperties);
return _this;
}
PluggableAreaChart.prototype.getUiConfig = function () {
return cloneDeep(uiConfig_1.DEFAULT_AREA_UICONFIG);
};
PluggableAreaChart.prototype.update = function (options, visualizationProperties, mdObject, references) {
this.updateCustomSupportedProperties(mdObject);
_super.prototype.update.call(this, options, visualizationProperties, mdObject, references);
};
PluggableAreaChart.prototype.getExtendedReferencePoint = function (referencePoint) {
var clonedReferencePoint = cloneDeep(referencePoint);
var newReferencePoint = __assign({}, clonedReferencePoint, { uiConfig: this.getUiConfig() });
newReferencePoint = bucketHelper_1.removeAllArithmeticMeasuresFromDerived(newReferencePoint);
newReferencePoint = bucketHelper_1.removeAllDerivedMeasures(newReferencePoint);
this.configureBuckets(newReferencePoint);
newReferencePoint = areaChartUiConfigHelper_1.setAreaChartUiConfig(newReferencePoint, this.intl, this.type);
newReferencePoint = bucketConfig_1.configurePercent(newReferencePoint, false);
newReferencePoint = bucketConfig_1.configureOverTimeComparison(newReferencePoint, !!this.featureFlags.enableWeekFilters);
this.supportedPropertiesList = propertiesHelper_1.removeImmutableOptionalStackingProperties(newReferencePoint, this.getSupportedPropertiesList());
newReferencePoint = propertiesHelper_1.getReferencePointWithSupportedProperties(newReferencePoint, this.supportedPropertiesList);
newReferencePoint = sort_1.removeSort(newReferencePoint);
return Promise.resolve(bucketHelper_1.sanitizeFilters(newReferencePoint));
};
PluggableAreaChart.prototype.configureBuckets = function (extendedReferencePoint) {
var _a = this.getBucketItems(extendedReferencePoint), measures = _a.measures, views = _a.views, stacks = _a.stacks;
set(extendedReferencePoint, bucket_1.BUCKETS, [
{
localIdentifier: BucketNames.MEASURES,
items: measures,
},
{
localIdentifier: BucketNames.VIEW,
items: views,
},
{
localIdentifier: BucketNames.STACK,
items: stacks,
},
]);
};
PluggableAreaChart.prototype.getSupportedPropertiesList = function () {
return supportedProperties_1.AREA_CHART_SUPPORTED_PROPERTIES;
};
PluggableAreaChart.prototype.renderConfigurationPanel = function () {
if (document.querySelector(this.configPanelElement)) {
react_dom_1.render(React.createElement(LineChartBasedConfigurationPanel_1.default, { locale: this.locale, colors: this.colors, properties: this.visualizationProperties, propertiesMeta: this.propertiesMeta, mdObject: this.mdObject, references: this.references, pushData: this.handlePushData, type: this.type, isError: this.isError, isLoading: this.isLoading, featureFlags: this.featureFlags }), document.querySelector(this.configPanelElement));
}
};
PluggableAreaChart.prototype.updateCustomSupportedProperties = function (mdObject) {
if (mdObjectHelper_1.haveManyViewItems(mdObject)) {
this.addSupportedProperties(supportedProperties_1.OPTIONAL_STACKING_PROPERTIES);
this.setCustomControlsProperties({
stackMeasures: false,
stackMeasuresToPercent: false,
});
}
else {
this.setCustomControlsProperties({});
}
};
PluggableAreaChart.prototype.addSupportedProperties = function (properties) {
var supportedPropertiesList = this.supportedPropertiesList;
(properties || []).forEach(function (property) {
if (!supportedPropertiesList.some(function (supportedProperty) { return supportedProperty === property; })) {
supportedPropertiesList.push(property);
}
});
};
PluggableAreaChart.prototype.getAllAttributes = function (buckets) {
return bucketHelper_1.getAllAttributeItemsWithPreference(buckets, [
BucketNames.TREND,
BucketNames.VIEW,
BucketNames.SEGMENT,
BucketNames.STACK,
]);
};
PluggableAreaChart.prototype.getAllAttributesWithoutDate = function (buckets) {
return this.getAllAttributes(buckets).filter(negate(bucketHelper_1.isDateBucketItem));
};
PluggableAreaChart.prototype.filterStackItems = function (bucketItems) {
return bucketItems.filter(negate(bucketHelper_1.isDateBucketItem)).slice(0, uiConfig_1.MAX_STACKS_COUNT);
};
PluggableAreaChart.prototype.getBucketItems = function (referencePoint) {
var buckets = get(referencePoint, bucket_1.BUCKETS, []);
var measures = bucketHelper_1.getFilteredMeasuresForStackedCharts(buckets);
var dateItems = bucketHelper_1.getDateItems(buckets);
var stacks = this.filterStackItems(bucketHelper_1.getStackItems(buckets));
var isAllowMoreThanOneViewByAttribute = !stacks.length && measures.length <= 1;
var numOfAttributes = isAllowMoreThanOneViewByAttribute ? uiConfig_1.MAX_VIEW_COUNT : 1;
var views = bucketHelper_1.getAllCategoriesAttributeItems(buckets).slice(0, numOfAttributes);
var hasDateItemInViewByBucket = views.some(bucketHelper_1.isDateBucketItem);
if (dateItems.length && !hasDateItemInViewByBucket) {
var firstDateItem = dateItems[0];
var allAttributes = this.getAllAttributesWithoutDate(buckets);
var extraViewItems = allAttributes.slice(0, numOfAttributes - 1);
views = numOfAttributes > 1 ? [firstDateItem].concat(extraViewItems) : [firstDateItem];
if (!isAllowMoreThanOneViewByAttribute && measures.length <= 1) {
stacks = allAttributes.slice(0, uiConfig_1.MAX_STACKS_COUNT);
}
}
return {
measures: measures,
views: views,
stacks: stacks,
};
};
return PluggableAreaChart;
}(PluggableBaseChart_1.PluggableBaseChart));
exports.PluggableAreaChart = PluggableAreaChart;
//# sourceMappingURL=PluggableAreaChart.js.map