// (C) 2007-2019 GoodData Corporation import * as invariant from "invariant"; import { isEmpty } from "lodash"; import { ExecuteAFM as AFM } from "@gooddata/typings"; import { IMockProject } from "../../../../model/MockProject"; import { getMetric, isDerivedFromArithmeticMeasure } from "../afm"; import { merge } from "../../../../utils/map"; export function isAttributeBasedMeasure(measure: AFM.IMeasure): boolean { if (AFM.isSimpleMeasureDefinition(measure.definition)) { return measure.definition.measure.aggregation === "count"; } return false; } export function isArithmeticMeasure(measure: AFM.IMeasure): boolean { return AFM.isArithmeticMeasureDefinition(measure.definition); } export function isAdHocMeasure(measure: AFM.IMeasure): boolean { const measureDefinition = measure.definition; return ( AFM.isPopMeasureDefinition(measureDefinition) || AFM.isPreviousPeriodMeasureDefinition(measureDefinition) || AFM.isArithmeticMeasureDefinition(measureDefinition) || !isEmpty(measureDefinition.measure.filters) || !!measureDefinition.measure.aggregation || !!measureDefinition.measure.computeRatio ); } function buildTitlesMap(project: IMockProject, afm: AFM.IAfm): Map { const titles = new Map(); for (const measure of afm.measures) { // Attribute based measures, arithmetic measures and derived measures from arithmetic measure // have title defined in AFM `measure.alias` if ( isAttributeBasedMeasure(measure) || isArithmeticMeasure(measure) || isDerivedFromArithmeticMeasure(measure, afm) ) { continue; } const metric = getMetric(project, measure, afm); invariant(metric, `Metric '${measure.localIdentifier}' not found`); titles.set(measure.localIdentifier, metric.meta.title); } return titles; } function buildAliasesMap(afm: AFM.IAfm): Map { const aliases = new Map(); for (const measure of afm.measures) { if (measure.alias) { aliases.set(measure.localIdentifier, measure.alias); } } return aliases; } export function getMeasureTitles(project: IMockProject, afm: AFM.IAfm): Map { return merge(buildTitlesMap(project, afm), buildAliasesMap(afm)); }