patternplate-client
Version:
Universal javascript client application for patternplate
49 lines (42 loc) • 1.42 kB
JavaScript
import path from 'path';
import {merge, zipObjectDeep} from 'lodash';
import {loadPatternData} from '../actions';
import {handlePromiseThunkAction} from '../actions/promise-thunk-action';
import navigate from '../utils/navigate';
const handlePatternLoad = handlePromiseThunkAction(loadPatternData, {
success(state, {payload}) {
const match = navigate(payload.id, state);
if (match) {
const fragments = payload.id.split('/');
const entities = fragments.map((fragment, index) => {
return navigate(fragments.slice(0, index + 1).join('/'), state);
});
const entityPath = entities.reduce((registry, entity) => {
const id = path.basename(entity.id);
const amend = entity.type === 'folder' ?
[id, 'children'] :
[id];
return [...registry, ...amend];
}, []).join('.');
const data = merge({}, match, {
dependencies: payload.dependencies,
dependents: payload.dependents,
display: payload.display,
environments: payload.environments,
files: payload.files,
id: payload.id,
manifest: {
displayName: payload.manifest.displayName,
flag: payload.manifest.flag,
tags: payload.manifest.tags,
name: payload.manifest.name,
version: payload.manifest.version
}
});
const envelope = zipObjectDeep([entityPath], [data]);
return merge({}, state, envelope);
}
return state;
}
}, {});
export default handlePatternLoad;