Fixed reducer issues and made clean-up better

This commit is contained in:
Theodor Diaconu 2018-10-23 16:56:39 +03:00
parent 7be6c2f1a6
commit 3c55d75f29
4 changed files with 16 additions and 15 deletions

View file

@ -110,14 +110,8 @@ export default class LinkManyMeta extends Link {
}
};
console.log(this.linker.mainCollection.findOne(this.object._id));
console.log(JSON.stringify(modifier));
this.linker.mainCollection.update(this.object._id, modifier);
console.log(this.linker.mainCollection.findOne(this.object._id));
return this;
}

View file

@ -12,7 +12,6 @@ export default (node, params) => {
storeOneResults(node, node.results);
applyReducers(node, params);
cleanReducerLeftovers(node);
_.each(node.collectionNodes, collectionNode => {
cloneMetaChildren(collectionNode, node.results)
@ -22,6 +21,8 @@ export default (node, params) => {
assembleMetadata(collectionNode, node.results)
});
cleanReducerLeftovers(node, node.results);
removeLinkStorages(node, node.results);
applyPostFilters(node);
applyPostOptions(node);

View file

@ -3,34 +3,42 @@ import dot from 'dot-object';
/**
* @param root
*/
export default function cleanReducerLeftovers(root) {
export default function cleanReducerLeftovers(root, results) {
_.each(root.collectionNodes, node => {
if (node.scheduledForDeletion) {
root.results.forEach(result => {
results.forEach(result => {
delete result[node.linkName];
})
}
});
_.each(root.collectionNodes, node => {
cleanReducerLeftovers(node);
let childResults;
if (node.isOneResult) {
childResults = results.map(result => result[node.linkName]).filter(element => !!element);
} else {
childResults = _.flatten(results.map(result => result[node.linkName]).filter(element => !!element));
}
cleanReducerLeftovers(node, childResults);
});
_.each(root.fieldNodes, node => {
if (node.scheduledForDeletion) {
cleanNestedFields(node.name.split('.'), root.results, root);
cleanNestedFields(node.name.split('.'), results, root);
}
});
_.each(root.reducerNodes, node => {
if (node.scheduledForDeletion) {
root.results.forEach(result => {
results.forEach(result => {
delete result[node.name];
})
}
});
}
// if we store a field like: 'profile.firstName'
// then we need to delete profile: { firstName }
// if profile will have empty keys, we need to delete profile.

View file

@ -204,8 +204,6 @@ describe('Hypernova', function() {
},
}).fetch();
console.log(JSON.stringify(data, null, 2));
const tag1Data = _.find(data, doc => doc.name === 'Tag1');
const tag2Data = _.find(data, doc => doc.name === 'Tag2');
const tag3Data = _.find(data, doc => doc.name === 'Tag3');