// (C) 2019-2020 GoodData Corporation import { DrillDefinition } from "../../model/DrillDefinition"; import { SchemaDrillDefinition, ISchemaDrillToVisualization, isSchemaDrillToVisualization, isSchemaDrillToDashboard, ISchemaDrillToDashboard, isSchemaDrillToCustomUrl, isSchemaDrillToAttributeUrl, ISchemaDrillToCustomUrl, ISchemaDrillToAttributeUrl, } from "../model/SchemaDrillDefinition"; import { IProject, getProjectId } from "../../model/Project"; import { objectUri } from "../../route/routes"; import invariant = require("invariant"); export function createDrillDefinitions( drillDefinitions: SchemaDrillDefinition[], project: IProject, ): DrillDefinition[] { if (drillDefinitions) { return drillDefinitions.map(drillDefinition => createDrillDefinition(drillDefinition, project)); } } function createDrillToVisualizationDefinition( drillDefinition: ISchemaDrillToVisualization, project: IProject, ): DrillDefinition { const { drillToVisualization } = drillDefinition; return { drillToVisualization: { target: drillToVisualization.target, from: { drillFromMeasure: { localIdentifier: drillToVisualization.from, }, }, toVisualization: { uri: objectUri(getProjectId(project), drillToVisualization.toVisualization), }, }, }; } function createDrillToDashboardDefinition(drillDefinition: ISchemaDrillToDashboard): DrillDefinition { const { drillToDashboard } = drillDefinition; return { drillToDashboard: { target: drillToDashboard.target, from: { drillFromMeasure: { localIdentifier: drillToDashboard.from, }, }, toDashboard: drillToDashboard.toDashboard, }, }; } function createDrillToCustomUrlDefinition(drillDefinition: ISchemaDrillToCustomUrl): DrillDefinition { const { drillToCustomUrl: { target, from, customUrl }, } = drillDefinition; return { drillToCustomUrl: { target, from: { drillFromMeasure: { localIdentifier: from, }, }, customUrl, }, }; } function createDrillToAttributeUrlDefinition(drillDefinition: ISchemaDrillToAttributeUrl): DrillDefinition { const { drillToAttributeUrl: { target, from, insightAttributeDisplayForm, drillToAttributeDisplayForm }, } = drillDefinition; return { drillToAttributeUrl: { target, from: { drillFromMeasure: { localIdentifier: from, }, }, insightAttributeDisplayForm: { uri: insightAttributeDisplayForm, }, drillToAttributeDisplayForm: { uri: drillToAttributeDisplayForm, }, }, }; } function createDrillDefinition(drillDefinition: SchemaDrillDefinition, project: IProject): DrillDefinition { if (isSchemaDrillToVisualization(drillDefinition)) { return createDrillToVisualizationDefinition(drillDefinition, project); } else if (isSchemaDrillToDashboard(drillDefinition)) { return createDrillToDashboardDefinition(drillDefinition); } else if (isSchemaDrillToCustomUrl(drillDefinition)) { return createDrillToCustomUrlDefinition(drillDefinition); } else if (isSchemaDrillToAttributeUrl(drillDefinition)) { return createDrillToAttributeUrlDefinition(drillDefinition); } invariant(drillDefinition, "Unsupported drillDefinition schema."); }