// (C) 2007-2020 GoodData Corporation import { flatMap, has, get } from "lodash"; import { getProjectId, IProject } from "../../model/Project"; import { IVisualizationWidget } from "../../model/VisualizationWidget"; import { webalize } from "../../utils/string"; import { objectUri, profileUri } from "../../route/routes"; import { ensureIdentifier } from "../helpers/objects"; import { ISchema } from "../model/Schema"; import { createProject } from "./ProjectBuilder"; import { ISchemaVisualizationWidget } from "../model/SchemaVisualizationWidget"; import { createUsers } from "./UserBuilder"; import { ISchemaAnalyticalDashboard } from "../model/SchemaAnalyticalDashboard"; import { SchemaWidget } from "../model/SchemaWidget"; import { createDrillDefinitions } from "./DrillDefinitionBuilder"; function getDashboardVisualizationWidgets( analyticalDashboard: ISchemaAnalyticalDashboard, ): ISchemaVisualizationWidget[] { const widgets: SchemaWidget[] = analyticalDashboard.widgets ? analyticalDashboard.widgets.filter((widget: ISchemaVisualizationWidget) => has(widget, "visualizationUri"), ) : []; return widgets as ISchemaVisualizationWidget[]; } export function createVisualizationWidget( project: IProject, userId: string, visualizationWidget: ISchemaVisualizationWidget, ): IVisualizationWidget { const identifier = ensureIdentifier(visualizationWidget, webalize(visualizationWidget.title)); const properties = get(visualizationWidget, "properties", ""); const propertiesProp = properties.length > 0 ? { properties } : {}; return { content: { visualization: visualizationWidget.visualizationUri, dateDataSet: visualizationWidget.dateDataSetUri, ignoreDashboardFilters: visualizationWidget.ignoreDashboardFilters || [], ...(visualizationWidget.drills && { drills: createDrillDefinitions(visualizationWidget.drills, project), }), ...propertiesProp, }, meta: { author: profileUri(userId), category: "visualizationWidget", identifier, title: visualizationWidget.title, uri: objectUri(getProjectId(project), identifier), }, }; } export function createVisualizationWidgets(schema: ISchema): IVisualizationWidget[] { const project = createProject(schema); const users = createUsers(schema); const visualizationWidgets = flatMap( schema.analyticalDashboards || [], analyticalDashboard => getDashboardVisualizationWidgets(analyticalDashboard) || [], ); return visualizationWidgets.map(visualizationWidget => createVisualizationWidget(project, users[0].identifier, visualizationWidget), ); }