// (C) 2007-2019 GoodData Corporation import { Layout, LayoutContent, IPersistedWidget, IFluidLayout, IFluidLayoutRow, IFluidLayoutColumn, } from "@gooddata/typings"; import { IProject, getProjectId } from "../../model/Project"; import { objectUri } from "../../route/routes"; import { LayoutSchema, LayoutContentSchema, IPersistedWidgetSchema } from "../model/layout/LayoutSchema"; import { isFluidLayout, isPersistedLayoutWidget } from "../../utils/layoutUtils"; import { IFluidLayoutSchema, IFluidLayoutRowSchema, IFluidLayoutColumnSchema, } from "../model/layout/FluidLayoutSchema"; export function createLayout(layoutSchema: LayoutSchema, project: IProject): Layout { let layout: Layout; if (isFluidLayout(layoutSchema)) { return (layout = createFluidLayout(layoutSchema, project)); } return layout; } export function createFluidLayout(fluidLayoutSchema: IFluidLayoutSchema, project: IProject): IFluidLayout { const rows = fluidLayoutSchema.fluidLayout.rows.map(row => createFluidRow(row, project)); return { fluidLayout: { rows, size: fluidLayoutSchema.fluidLayout.size, style: fluidLayoutSchema.fluidLayout.style, }, }; } export function createLayoutContent( layoutContentSchema: LayoutContentSchema, project: IProject, ): LayoutContent { if (isPersistedLayoutWidget(layoutContentSchema)) { return createPersistedLayoutWidget(layoutContentSchema, project); } return null; } function createFluidRow(fluidRowSchema: IFluidLayoutRowSchema, project: IProject): IFluidLayoutRow { const columns = fluidRowSchema.columns.map(column => createFluidColumn(column, project)); return { columns, style: fluidRowSchema.style, header: fluidRowSchema.header, }; } function createFluidColumn( fluidColumnSchema: IFluidLayoutColumnSchema, project: IProject, ): IFluidLayoutColumn { const content = fluidColumnSchema.content ? { content: createLayoutContent(fluidColumnSchema.content, project) } : {}; return { size: fluidColumnSchema.size, style: fluidColumnSchema.style, ...content, }; } function createPersistedLayoutWidget( widgetSchema: IPersistedWidgetSchema, project: IProject, ): IPersistedWidget { return { widget: { qualifier: { uri: objectUri(getProjectId(project), widgetSchema.widget.identifier), }, }, }; }