UNPKG

@gooddata/react-components

Version:

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

244 lines • 11.8 kB
"use strict"; 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