patternplate-client
Version:
Universal javascript client application for patternplate
63 lines (52 loc) • 1.43 kB
JavaScript
import {assign} from 'lodash';
function hierarchyCompare(a, b) {
return (a.order === b.order) ?
a.displayName.localeCompare(b.displayName) :
a.order > b.order;
}
function augmentFolderData(hierarchy) {
// extract displayName and order from hierarchy config for the folder
return folder => {
const splits = folder.id.split('/');
const key = splits[splits.length - 1];
const defaultHierarchyEntry = {
order: -1,
displayName: key,
icon: 'folder',
iconActive: 'folder-open'
};
const hierarchyEntry = hierarchy[folder.id];
return assign(
{},
folder,
defaultHierarchyEntry,
hierarchyEntry
);
};
}
function augmentPatternData() {
return pattern => ({
...pattern,
displayName: pattern.manifest.displayName || pattern.manifest.name
});
}
export function getPatterns(data, hierarchy) {
return Object.values(data).reduce((pool, item) => {
const amend = item.type === 'pattern' ? [item] : [];
return [...pool, ...amend, ...getPatterns(item.children || {}, hierarchy)];
}, []);
}
export default function getAugmentedChildren(data, hierarchy) {
const folders = Object.values(data)
.filter(item => item.type === 'folder')
.map(augmentFolderData(hierarchy))
.sort(hierarchyCompare);
const patterns = Object.values(data)
.filter(item => item.type === 'pattern')
.map(augmentPatternData(hierarchy))
.sort(hierarchyCompare);
return {
folders,
patterns
};
}