From 7be6c2f1a6ef29e474b52bc25ce45867edeb59db Mon Sep 17 00:00:00 2001 From: Theodor Diaconu Date: Tue, 23 Oct 2018 16:18:39 +0300 Subject: [PATCH] Hotfixes 1.3.8 --- .gitignore | 1 + lib/query/lib/prepareForDelivery.js | 6 +++--- lib/query/reducers/lib/applyReducers.js | 1 + lib/query/reducers/lib/cleanReducerLeftovers.js | 16 ++++++++-------- lib/query/reducers/lib/createReducers.js | 6 +++--- lib/query/reducers/lib/embedReducerWithLink.js | 6 +++--- 6 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/lib/query/lib/prepareForDelivery.js b/lib/query/lib/prepareForDelivery.js index b61223c..0d8dfe2 100755 --- a/lib/query/lib/prepareForDelivery.js +++ b/lib/query/lib/prepareForDelivery.js @@ -11,6 +11,9 @@ export default (node, params) => { snapBackCaches(node); storeOneResults(node, node.results); + applyReducers(node, params); + cleanReducerLeftovers(node); + _.each(node.collectionNodes, collectionNode => { cloneMetaChildren(collectionNode, node.results) }); @@ -19,9 +22,6 @@ export default (node, params) => { assembleMetadata(collectionNode, node.results) }); - applyReducers(node, params); - cleanReducerLeftovers(node); - removeLinkStorages(node, node.results); applyPostFilters(node); applyPostOptions(node); diff --git a/lib/query/reducers/lib/applyReducers.js b/lib/query/reducers/lib/applyReducers.js index 9398b85..f7e019b 100644 --- a/lib/query/reducers/lib/applyReducers.js +++ b/lib/query/reducers/lib/applyReducers.js @@ -28,6 +28,7 @@ export default function applyReducers(root, params) { root.results.forEach(result => { reducerNode.compute(result, params); }); + processedReducers.push(reducerNode.name); } } diff --git a/lib/query/reducers/lib/cleanReducerLeftovers.js b/lib/query/reducers/lib/cleanReducerLeftovers.js index eb89e25..de39687 100755 --- a/lib/query/reducers/lib/cleanReducerLeftovers.js +++ b/lib/query/reducers/lib/cleanReducerLeftovers.js @@ -36,7 +36,7 @@ export default function cleanReducerLeftovers(root) { // if profile will have empty keys, we need to delete profile. /** - * + * Cleans what reducers needed to be computed and not used. * @param parts * @param results */ @@ -44,12 +44,6 @@ function cleanNestedFields(parts, results, root) { const snapCacheField = root.snapCaches[parts[0]]; const fieldName = snapCacheField ? snapCacheField : parts[0]; - // We add this rule because if by any chance you use your reducer in conjunction with $options, $filters - // They are removed from the body and will no longer be present. - if (!root[fieldName]) { - return; - } - if (parts.length === 1) { results.forEach(result => { if (_.isObject(result) && fieldName !== '_id') { @@ -61,7 +55,13 @@ function cleanNestedFields(parts, results, root) { } parts.shift(); - cleanNestedFields(parts, results.map(result => result[fieldName]), root); + cleanNestedFields( + parts, + results + .filter(result => !!result[fieldName]) + .map(result => result[fieldName]), + root + ); results.forEach(result => { if (_.isObject(result[fieldName]) && _.keys(result[fieldName]).length === 0) { diff --git a/lib/query/reducers/lib/createReducers.js b/lib/query/reducers/lib/createReducers.js index 0522451..6ffbe3f 100644 --- a/lib/query/reducers/lib/createReducers.js +++ b/lib/query/reducers/lib/createReducers.js @@ -24,7 +24,7 @@ export function handleAddElement(reducerNode, root, fieldName, body) { const collection = root.collection; const linker = collection.getLinker(fieldName); if (linker) { - return handleAddLink(fieldName, body, root, linker); + return handleAddLink(reducerNode, fieldName, body, root, linker); } const reducer = collection.getReducer(fieldName); @@ -60,11 +60,11 @@ export function handleAddReducer(fieldName, {body, reduce}, root) { * @param root * @param linker */ -export function handleAddLink(fieldName, body, root, linker) { +export function handleAddLink(reducerNode, fieldName, body, root, linker) { if (root.hasCollectionNode(fieldName)) { const collectionNode = root.getCollectionNode(fieldName); - embedReducerWithLink(body, collectionNode); + embedReducerWithLink(reducerNode, body, collectionNode); } else { // add let collectionNode = new CollectionNode(linker.getLinkedCollection(), body, fieldName); diff --git a/lib/query/reducers/lib/embedReducerWithLink.js b/lib/query/reducers/lib/embedReducerWithLink.js index a92809e..a2dd233 100755 --- a/lib/query/reducers/lib/embedReducerWithLink.js +++ b/lib/query/reducers/lib/embedReducerWithLink.js @@ -5,7 +5,7 @@ import {handleAddField, handleAddElement, handleAddReducer} from './createReduce * @param reducerBody * @param collectionNode */ -export default function embedReducerWithLink(reducerBody, collectionNode) { +export default function embedReducerWithLink(reducerNode, reducerBody, collectionNode) { _.each(reducerBody, (value, key) => { const collection = collectionNode.collection; @@ -25,14 +25,14 @@ export default function embedReducerWithLink(reducerBody, collectionNode) { } } - embedReducerWithLink(value, collectionNode.getCollectionNode(key)); + embedReducerWithLink(reducerNode, value, collectionNode.getCollectionNode(key)); return; } handleAddField(key, value, collectionNode); } else { // does not exist, so it may be a link/reducer/field - handleAddElement(collectionNode, key, value); + handleAddElement(reducerNode, collectionNode, key, value); } } else { // if this field or other reducer exists within the collection