UNPKG

@gooddata/gooddata-js

Version:
46 lines (38 loc) 1.7 kB
// (C) 2007-2018 GoodData Corporation import get from "lodash/get"; import set from "lodash/set"; import { MetadataModule } from "../metadata"; function getAttributeUris(displayForms: any[]) { return displayForms.map((displayForm: any) => get(displayForm, ["attributeDisplayForm", "content", "formOf"]), ); } function createAttributesMap(displayForms: any[], attributes: any) { return displayForms.reduce((attributesMap: any, displayForm: any) => { const dfUri = get(displayForm, ["attributeDisplayForm", "meta", "uri"]); const attribute = attributes.find( (attr: any) => get(attr, ["attribute", "meta", "uri"]) === get(displayForm, ["attributeDisplayForm", "content", "formOf"]), ); return set(attributesMap, [dfUri], attribute); }, {}); } export function getMissingUrisInAttributesMap(displayFormsUris: string[], attributesMap: any) { const uris = displayFormsUris || []; return uris.filter((uri: string) => !attributesMap[uri]); } export class AttributesMapLoaderModule { constructor(private md: MetadataModule) {} public loadAttributesMap(projectId: string, attributeDisplayFormUris: string[]) { if (attributeDisplayFormUris.length === 0) { return Promise.resolve({}); } return this.md.getObjects(projectId, attributeDisplayFormUris).then((displayForms: any[]) => { const attributeUris = getAttributeUris(displayForms); return this.md.getObjects(projectId, attributeUris).then((attributes: any[]) => { return createAttributesMap(displayForms, attributes); }); }); } }