@gooddata/gooddata-js
Version:
GoodData JavaScript SDK
117 lines (116 loc) • 4.88 kB
JavaScript
;
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);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2020 GoodData Corporation
var compact_1 = __importDefault(require("lodash/compact"));
var typings_1 = require("@gooddata/typings");
var FilterConverter_1 = require("./FilterConverter");
var formats_1 = require("../constants/formats");
var MeasureConverter = {
convertMeasure: convertMeasure,
};
exports.default = MeasureConverter;
function convertMeasure(measure) {
var definition = measure.measure.definition;
var convertedDefinition = convertMeasureDefinition(definition);
var format = getFormat(measure);
var formatProp = format ? { format: format } : {};
var alias = measure.measure.alias ? measure.measure.alias : measure.measure.title;
var aliasProp = alias ? { alias: alias } : {};
return __assign({ localIdentifier: measure.measure.localIdentifier, definition: convertedDefinition }, aliasProp, formatProp);
}
function convertMeasureDefinition(definition) {
if (typings_1.VisualizationObject.isMeasureDefinition(definition)) {
return convertSimpleMeasureDefinition(definition);
}
else if (typings_1.VisualizationObject.isPopMeasureDefinition(definition)) {
return convertPopMeasureDefinition(definition);
}
else if (typings_1.VisualizationObject.isPreviousPeriodMeasureDefinition(definition)) {
return convertPreviousPeriodMeasureDefinition(definition);
}
else if (typings_1.VisualizationObject.isArithmeticMeasureDefinition(definition)) {
return convertArithmeticMeasureDefinition(definition);
}
else {
throw Error("The measure definition is not supported: " + JSON.stringify(definition));
}
}
function convertSimpleMeasureDefinition(definition) {
var measureDefinition = definition.measureDefinition;
var filters = measureDefinition.filters
? compact_1.default(measureDefinition.filters.map(FilterConverter_1.convertVisualizationObjectFilter))
: [];
var filtersProp = filters.length ? { filters: filters } : {};
var aggregation = measureDefinition.aggregation;
var aggregationProp = aggregation ? { aggregation: aggregation } : {};
var computeRatio = measureDefinition.computeRatio;
var computeRatioProp = computeRatio ? { computeRatio: computeRatio } : {};
return {
measure: __assign({ item: measureDefinition.item }, filtersProp, aggregationProp, computeRatioProp),
};
}
function convertPopMeasureDefinition(definition) {
var popMeasureDefinition = definition.popMeasureDefinition;
return {
popMeasure: {
measureIdentifier: popMeasureDefinition.measureIdentifier,
popAttribute: popMeasureDefinition.popAttribute,
},
};
}
function convertPreviousPeriodMeasureDefinition(definition) {
var previousPeriodMeasure = definition.previousPeriodMeasure;
return {
previousPeriodMeasure: {
measureIdentifier: previousPeriodMeasure.measureIdentifier,
dateDataSets: previousPeriodMeasure.dateDataSets.map(function (dateDataSet) { return ({
dataSet: dateDataSet.dataSet,
periodsAgo: dateDataSet.periodsAgo,
}); }),
},
};
}
function convertArithmeticMeasureDefinition(definition) {
var arithmeticMeasure = definition.arithmeticMeasure;
return {
arithmeticMeasure: {
measureIdentifiers: arithmeticMeasure.measureIdentifiers.slice(),
operator: arithmeticMeasure.operator,
},
};
}
function getFormat(measure) {
var _a = measure.measure, definition = _a.definition, format = _a.format;
if (format) {
return format;
}
var isArithmeticMeasureChange = typings_1.VisualizationObject.isArithmeticMeasureDefinition(definition) &&
definition.arithmeticMeasure.operator === "change";
if (isArithmeticMeasureChange) {
return formats_1.DEFAULT_PERCENTAGE_FORMAT;
}
if (typings_1.VisualizationObject.isMeasureDefinition(definition)) {
var measureDefinition = definition.measureDefinition;
if (measureDefinition.computeRatio) {
return formats_1.DEFAULT_PERCENTAGE_FORMAT;
}
if (measureDefinition.aggregation === "count") {
return formats_1.DEFAULT_INTEGER_FORMAT;
}
}
return undefined;
}