@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
244 lines • 11.8 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2020 GoodData Corporation
var get = require("lodash/get");
var flatMap = require("lodash/flatMap");
var typings_1 = require("@gooddata/typings");
var js_utils_1 = require("@gooddata/js-utils");
var DerivedMeasureTitleSuffixFactory_1 = require("../factory/DerivedMeasureTitleSuffixFactory");
var ArithmeticMeasureTitleFactory_1 = require("../factory/ArithmeticMeasureTitleFactory");
var OverTimeComparison_1 = require("../interfaces/OverTimeComparison");
var isMeasure = typings_1.VisualizationObject.isMeasure;
var DEFAULT_MAX_ARITHMETIC_MEASURE_TITLE_LENGTH = 50;
function getAllMeasures(mdObject) {
var buckets = get(mdObject, "buckets", []);
var allBucketItems = flatMap(buckets, function (bucket) { return bucket.items; });
return allBucketItems.reduce(function (measureItems, bucketItem) {
if (typings_1.VisualizationObject.isMeasure(bucketItem)) {
measureItems.push(bucketItem);
}
return measureItems;
}, []);
}
function getMasterMeasureIdentifier(definition) {
if (typings_1.VisualizationObject.isPopMeasureDefinition(definition)) {
return definition.popMeasureDefinition.measureIdentifier;
}
else if (typings_1.VisualizationObject.isPreviousPeriodMeasureDefinition(definition)) {
return definition.previousPeriodMeasure.measureIdentifier;
}
return null;
}
function findOverTimeComparisonType(measureDefinitionType) {
if (typings_1.VisualizationObject.isPopMeasureDefinition(measureDefinitionType)) {
return OverTimeComparison_1.OverTimeComparisonTypes.SAME_PERIOD_PREVIOUS_YEAR;
}
else if (typings_1.VisualizationObject.isPreviousPeriodMeasureDefinition(measureDefinitionType)) {
return OverTimeComparison_1.OverTimeComparisonTypes.PREVIOUS_PERIOD;
}
return OverTimeComparison_1.OverTimeComparisonTypes.NOTHING;
}
function containsMeasureTitleItem(measureTitleProps, localIdentifier) {
return measureTitleProps.some(function (prop) { return prop.localIdentifier === localIdentifier; });
}
function containsMeasureTitleItems(measureTitleProps, localIdentifiers) {
return localIdentifiers.every(function (identifier) { return containsMeasureTitleItem(measureTitleProps, identifier); });
}
function findMeasureTitleItem(measureTitles, localIdentifier) {
return measureTitles.find(function (prop) { return prop.localIdentifier === localIdentifier; }) || null;
}
function findTitleForDerivedMeasure(measureDefinitionType, measureTitleProps, suffixFactory) {
var masterMeasureIdentifier = getMasterMeasureIdentifier(measureDefinitionType);
if (masterMeasureIdentifier === null) {
return undefined;
}
var measureProps = findMeasureTitleItem(measureTitleProps, masterMeasureIdentifier);
if (measureProps === null) {
return undefined;
}
var derivedMeasureTitleBase = measureProps.alias || measureProps.title || "";
var overTimeComparisonType = findOverTimeComparisonType(measureDefinitionType);
return derivedMeasureTitleBase + suffixFactory.getSuffix(overTimeComparisonType);
}
function buildMeasureTitle(bucketItem) {
if (typings_1.VisualizationObject.isMeasureDefinition(bucketItem.measure.definition)) {
var _a = bucketItem.measure, localIdentifier = _a.localIdentifier, title = _a.title, alias = _a.alias;
return {
localIdentifier: localIdentifier,
title: title,
alias: alias,
};
}
return null;
}
function buildArithmeticMeasureTitle(bucketItem, measureTitleProps, titleFactory, maxArithmeticMeasureTitleLength) {
if (typings_1.VisualizationObject.isArithmeticMeasureDefinition(bucketItem.measure.definition)) {
var _a = bucketItem.measure, alias = _a.alias, localIdentifier = _a.localIdentifier;
var arithmeticMeasure = bucketItem.measure.definition.arithmeticMeasure;
if (containsMeasureTitleItems(measureTitleProps, arithmeticMeasure.measureIdentifiers)) {
var fullLengthTitle = titleFactory.getTitle({
operator: arithmeticMeasure.operator,
masterMeasureLocalIdentifiers: arithmeticMeasure.measureIdentifiers,
}, measureTitleProps);
var title = js_utils_1.string.shortenText(fullLengthTitle, {
maxLength: maxArithmeticMeasureTitleLength,
});
return {
localIdentifier: localIdentifier,
title: title,
alias: alias,
};
}
}
return null;
}
function buildDerivedMeasureTitle(bucketItem, measureTitleProps, suffixFactory) {
if (typings_1.VisualizationObject.isPopMeasureDefinition(bucketItem.measure.definition) ||
typings_1.VisualizationObject.isPreviousPeriodMeasureDefinition(bucketItem.measure.definition)) {
var _a = bucketItem.measure, alias = _a.alias, localIdentifier = _a.localIdentifier;
var definition = bucketItem.measure.definition;
var masterMeasureIdentifier = getMasterMeasureIdentifier(definition);
if (containsMeasureTitleItem(measureTitleProps, masterMeasureIdentifier)) {
return {
localIdentifier: localIdentifier,
title: findTitleForDerivedMeasure(definition, measureTitleProps, suffixFactory),
alias: alias,
};
}
}
return null;
}
function buildMeasureTitles(measureBucketItems, locale, maxArithmeticMeasureTitleLength) {
var titleFactory = new ArithmeticMeasureTitleFactory_1.default(locale);
var suffixFactory = new DerivedMeasureTitleSuffixFactory_1.default(locale);
var measureTitleProps = [];
var isMeasureTitlePropsChanged = true;
while (isMeasureTitlePropsChanged) {
isMeasureTitlePropsChanged = false;
measureBucketItems.forEach(function (bucketItem) {
if (!containsMeasureTitleItem(measureTitleProps, bucketItem.measure.localIdentifier)) {
var newMeasureTitleProp = buildMeasureTitle(bucketItem) ||
buildArithmeticMeasureTitle(bucketItem, measureTitleProps, titleFactory, maxArithmeticMeasureTitleLength) ||
buildDerivedMeasureTitle(bucketItem, measureTitleProps, suffixFactory);
if (newMeasureTitleProp !== null) {
measureTitleProps.push(newMeasureTitleProp);
isMeasureTitlePropsChanged = true;
}
}
});
}
return measureTitleProps;
}
function updateBucketItemTitle(bucketItem, measureTitleProps) {
if (isMeasure(bucketItem)) {
var measureTitleProp = findMeasureTitleItem(measureTitleProps, bucketItem.measure.localIdentifier);
if (measureTitleProp !== null) {
var title = measureTitleProp.title, alias = measureTitleProp.alias;
return __assign({}, bucketItem, { measure: __assign({}, bucketItem.measure, { title: title,
alias: alias }) });
}
}
return bucketItem;
}
function updateBucketTitles(bucket, measureTitleProps) {
return __assign({}, bucket, { items: bucket.items.map(function (bucketItem) { return updateBucketItemTitle(bucketItem, measureTitleProps); }) });
}
function updateVisualizationObjectTitles(mdObject, measureTitleProps) {
return __assign({}, mdObject, { buckets: mdObject.buckets.map(function (bucket) { return updateBucketTitles(bucket, measureTitleProps); }) });
}
/**
* The function fills the titles of the measures that does not have it set.
*
* The derived measures
* have the title built from the current name of the master measure and suffix based on the derived measure type.
*
* The arithmetic measures
* have the title built from the current names of the referenced master measures and type of the arithmetic
* operation.
*
* @param {VisualizationObject.IVisualizationObjectContent} mdObject - metadata object that must be processed.
* @param {Localization.ILocale} locale - locale used for localization of the measure titles.
* @param {number} maxArithmeticMeasureTitleLength - maximum length of generated arithmetic measures titles.
* Longer names will be shortened. Default value is 50 characters.
*
* @returns {VisualizationObject.IVisualizationObjectContent}
*
* @internal
*/
function fillMissingTitles(mdObject, locale, maxArithmeticMeasureTitleLength) {
if (maxArithmeticMeasureTitleLength === void 0) { maxArithmeticMeasureTitleLength = DEFAULT_MAX_ARITHMETIC_MEASURE_TITLE_LENGTH; }
var measureBucketItems = getAllMeasures(mdObject);
var measureTitleProps = buildMeasureTitles(measureBucketItems, locale, maxArithmeticMeasureTitleLength);
return updateVisualizationObjectTitles(mdObject, measureTitleProps);
}
exports.fillMissingTitles = fillMissingTitles;
function isAdhocMeasure(definition) {
return (typings_1.VisualizationObject.isMeasureDefinition(definition) &&
(!!definition.measureDefinition.aggregation ||
!!definition.measureDefinition.computeRatio ||
!!definition.measureDefinition.filters));
}
function isNonSimpleMeasure(definition) {
return (typings_1.VisualizationObject.isArithmeticMeasureDefinition(definition) ||
typings_1.VisualizationObject.isPopMeasureDefinition(definition) ||
typings_1.VisualizationObject.isPreviousPeriodMeasureDefinition(definition));
}
function removeTitleForSimpleMeasure(bucket) {
return __assign({}, bucket, { items: bucket.items.map(function (bucketItem) {
if (typings_1.VisualizationObject.isMeasure(bucketItem) &&
!isAdhocMeasure(bucketItem.measure.definition) &&
!isNonSimpleMeasure(bucketItem.measure.definition)) {
delete bucketItem.measure.title;
}
return bucketItem;
}) });
}
function isBucketContainingMeasureDateFilter(bucket) {
return !!bucket.items.find(function (bucketItem) {
if (!typings_1.VisualizationObject.isMeasure(bucketItem)) {
return false;
}
var definition = bucketItem.measure.definition;
if (!typings_1.VisualizationObject.isMeasureDefinition(definition)) {
return false;
}
var filters = definition.measureDefinition.filters;
return filters && !!filters.find(typings_1.VisualizationObject.isDateFilter);
});
}
function isBucketsContainingMeasureDateFilter(buckets) {
return !!buckets.find(isBucketContainingMeasureDateFilter);
}
/**
* This function ignores the titles of simple measures.
*
* For simple measures, their titles are removed.
* For adhoc or non-simple measures, their titles are left intact.
*
* @param {VisualizationObject.IVisualizationObjectContent} mdObject - metadata object that must be processed.
*
* @returns {VisualizationObject.IVisualizationObjectContent}
*
* @internal
*/
function ignoreTitlesForSimpleMeasures(mdObject) {
if (isBucketsContainingMeasureDateFilter(mdObject.buckets)) {
// If there is one bucket containing a measure with date filter, all other measures are considered adhoc measures
// and all the titles should be left intact
return mdObject;
}
return __assign({}, mdObject, { buckets: mdObject.buckets.map(removeTitleForSimpleMeasure) });
}
exports.ignoreTitlesForSimpleMeasures = ignoreTitlesForSimpleMeasures;
//# sourceMappingURL=measureTitleHelper.js.map