diff --git a/lib/links/linkTypes/linkManyMeta.js b/lib/links/linkTypes/linkManyMeta.js index 34b6c4b..7f8e8cd 100644 --- a/lib/links/linkTypes/linkManyMeta.js +++ b/lib/links/linkTypes/linkManyMeta.js @@ -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; } diff --git a/lib/query/lib/prepareForDelivery.js b/lib/query/lib/prepareForDelivery.js index 0d8dfe2..e1a50a3 100755 --- a/lib/query/lib/prepareForDelivery.js +++ b/lib/query/lib/prepareForDelivery.js @@ -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); diff --git a/lib/query/reducers/lib/cleanReducerLeftovers.js b/lib/query/reducers/lib/cleanReducerLeftovers.js index de39687..b06f780 100755 --- a/lib/query/reducers/lib/cleanReducerLeftovers.js +++ b/lib/query/reducers/lib/cleanReducerLeftovers.js @@ -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. @@ -62,7 +70,7 @@ function cleanNestedFields(parts, results, root) { .map(result => result[fieldName]), root ); - + results.forEach(result => { if (_.isObject(result[fieldName]) && _.keys(result[fieldName]).length === 0) { if (fieldName !== '_id') { diff --git a/lib/query/testing/server.test.js b/lib/query/testing/server.test.js index f594f4d..4c53bd4 100755 --- a/lib/query/testing/server.test.js +++ b/lib/query/testing/server.test.js @@ -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');