// (C) 2007-2021 GoodData Corporation import { capitalize } from "lodash"; import { IDateDataSet } from "../../model/DateDataSet"; import { ISchemaDateDataSet } from "../model/SchemaDateDataSet"; import { IProject } from "../../model/Project"; import { webalize } from "../../utils/string"; import { objectUri } from "../../route/routes"; export function createDateDataSet(project: IProject, dateDataSet: ISchemaDateDataSet): IDateDataSet { const types = [ "date", "day_in_week", "day_in_month", "day_in_quarter", "day_in_year", "week_us", "week_in_quarter", "week_in_year", "month", "month_in_quarter", "month_in_year", "quarter", "quarter_in_year", "year", ]; const titles = [ "Date", "Day of Week", "Day of Month", "Day of Quarter", "Day of Year", "Week (Sun-Sat)/Year", "Week of Quarter", "Week of Year", "Month/Year", "Month of Quarter", "Month of Year", "Quarter/Year", "Quarter of Year", "Year", ]; const projectId = project.meta.identifier; const dateDataSetId = webalize(dateDataSet.title); function createDateAttributeFragment(type: string, index: number) { const identifier = `attr.${dateDataSetId}.${type}`; const attrUri = objectUri(projectId, identifier); const defaultDisplayFormUri = objectUri(projectId, `${identifier}.df`); const secondaryDisplayFormUri = objectUri(projectId, `${identifier}.df.shortened`); return { type: `GDC.time.${type}`, meta: { category: "attribute", title: `${titles[index]} (${capitalize(dateDataSetId)})`, identifier, isProduction: true, uri: attrUri, }, displayForms: [ { content: { expression: "", formOf: objectUri(projectId, identifier), }, links: { elements: `${defaultDisplayFormUri}/elements`, }, meta: { category: "attributeDisplayForm", title: `${type} df`, identifier: `${identifier}.df`, isProduction: true, uri: defaultDisplayFormUri, }, }, { content: { expression: "", formOf: objectUri(projectId, identifier), }, links: { elements: `${secondaryDisplayFormUri}/elements`, }, meta: { category: "attributeDisplayForm", title: `${type} df shortened`, identifier: `${identifier}.df.shortened`, isProduction: true, uri: secondaryDisplayFormUri, }, }, ], }; } return { availableDateAttributes: types.map(createDateAttributeFragment), meta: { category: "dateDataSet", title: dateDataSet.title, identifier: `${dateDataSetId}.dataset`, uri: objectUri(projectId, `${dateDataSetId}.dataset`), tags: dateDataSet.tags, }, relevance: 0, }; }