@gooddata/gooddata-js
Version:
GoodData JavaScript SDK
46 lines (38 loc) • 1.7 kB
text/typescript
// (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);
});
});
}
}