// (C) 2007-2019 GoodData Corporation import { has, flatMap } from "lodash"; import { ISchemaAttributeFilter } from "../model/SchemaAttributeFilter"; import { ISchemaDateFilter } from "../model/SchemaDateFilter"; import { getProjectId } from "../../model/Project"; import { IAttributeFilter, IDateFilter, IFilterContext } from "../../model/FilterContext"; import { webalize } from "../../utils/string"; import { objectUri } from "../../route/routes"; import { ISchema } from "../model/Schema"; import { createProject } from "./ProjectBuilder"; function getAttributeFilter(filter: ISchemaAttributeFilter): IAttributeFilter { return { ...filter }; } function getDateFilter(filter: ISchemaDateFilter): IDateFilter { return { ...filter }; } export type Filter = ISchemaAttributeFilter | ISchemaDateFilter; function getFilters(filters: Filter[]): Filter[] { return filters.map(filter => { if (has(filter, "attributeFilter")) { return getAttributeFilter(filter as ISchemaAttributeFilter); } return getDateFilter(filter as ISchemaDateFilter); }); } export function createFilterContexts(schema: ISchema): IFilterContext[] { const project = createProject(schema); const filterContexts = flatMap( schema.analyticalDashboards || [], analyticalDashboard => analyticalDashboard.filterContext || [], ); return filterContexts.map(filterContext => { const identifier = webalize(filterContext.title); return { meta: { identifier, title: filterContext.title, uri: objectUri(getProjectId(project), identifier), category: "filterContext", }, content: { filters: getFilters(filterContext.filters), }, }; }); }