/* Copyright IBM Corp. 2017 */ import { flattenDeep, forIn, isArray, isString } from 'lodash'; import { WchTools } from './wchtools'; export function isValidLayout(aLayout: any): boolean { return aLayout && isString(aLayout.id) && isString(aLayout.name) && (aLayout.classification === 'layout') && (aLayout.templateType === 'angular'); } export function getLayoutsForTypes(aTypes: any[], aTools: WchTools): any[] { // organize layout mappings per type const mappingPerType = new Map(); forIn(aTools.layoutMappings, (mapping: any) => mappingPerType.set(mapping.type.id, mapping)); // generate the set const layouts = new Set(); const result = flattenDeep(aTypes.map(type => mappingPerType.get(type.id)) .filter(Boolean) .map(mapping => mapping.mappings) .filter(isArray) .map(mappings => mappings.map(mapping => mapping.layouts).filter(isArray).map(layouts => layouts.map(layout => layout.id).map(id => aTools.layouts[id]).filter(Boolean)))); // make this a set result.forEach(res => layouts.add(res)); return Array.from(layouts); }